Hooks
static bool BeforeCvLeague_NotifyProposalResult(CvLeague* self, CvEnactProposal* pProposal);static void AfterCvLeague_NotifyProposalResult(CvLeague* self, CvEnactProposal* pProposal);static void ReplaceCvLeague_NotifyProposalResult(void (*original)(CvLeague*, CvEnactProposal*), CvLeague* self, CvEnactProposal* pProposal);CivRegisterBefore<CivHooks::CvLeague_NotifyProposalResult>(host, &BeforeCvLeague_NotifyProposalResult);CivRegisterAfter<CivHooks::CvLeague_NotifyProposalResult>(host, &AfterCvLeague_NotifyProposalResult);CivRegisterReplace<CivHooks::CvLeague_NotifyProposalResult>(host, &ReplaceCvLeague_NotifyProposalResult);
Code
5846void CvLeague::NotifyProposalResult(CvEnactProposal* pProposal)5847{5848 CvAssert(pProposal != NULL);5849 if (pProposal == NULL) return;58505851#if defined(MOD_EVENTS_RESOLUTIONS)5852 int iDecision = -1;5853#endif58545855 CvString sSummary = "";5856 CvString sMessage = "";5857 if (pProposal->GetEffects()->bDiplomaticVictory)5858 {5859 // World Leader results are handled a little differently5860 if (pProposal->IsPassed(GetVotesSpentThisSession()))5861 {5862 PlayerTypes eWinner = (PlayerTypes) pProposal->GetVoterDecision()->GetDecision();5863 CvAssert(eWinner != NO_PLAYER);5864 if (eWinner != NO_PLAYER)5865 {5866 Localization::String sTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_WORLD_LEADER_PASS");5867 sTemp << GET_PLAYER(eWinner).getCivilizationShortDescriptionKey();5868 sSummary += sTemp.toUTF8();58695870 sTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_WORLD_LEADER_PASS_DETAILS");5871 sTemp << GC.getGame().GetVotesNeededForDiploVictory() << GET_PLAYER(eWinner).getCivilizationShortDescriptionKey();5872 sMessage += sTemp.toUTF8();5873 }5874 }5875 else5876 {5877 Localization::String sTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_WORLD_LEADER_FAIL");5878 sSummary += sTemp.toUTF8();5879 5880 sTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_WORLD_LEADER_FAIL_DETAILS");5881 sTemp << GC.getGame().GetVotesNeededForDiploVictory() << LeagueHelpers::NUM_LEADERS_FOR_EXTRA_VOTES;5882 sMessage += sTemp.toUTF8();5883 }5884 sMessage += "[NEWLINE]" + pProposal->GetVoterDecision()->GetVotesAsText(this);5885 5886#if defined(MOD_EVENTS_RESOLUTIONS)5887 iDecision = pProposal->GetVoterDecision()->GetDecision();5888#endif5889 }5890 else if (pProposal->GetEffects()->bChangeLeagueHost)5891 {5892 // Change Host results are handled a little differently5893 PlayerTypes eOldHost = GetHostMember();5894 PlayerTypes eNewHost = eOldHost;5895 CvAssert(pProposal->IsPassed(GetVotesSpentThisSession()));5896 if (pProposal->IsPassed(GetVotesSpentThisSession()))5897 {5898 eNewHost = (PlayerTypes) pProposal->GetVoterDecision()->GetDecision();5899 }59005901 CvString sHostKey = "Nobody";5902 CvAssertMsg(eNewHost != NO_PLAYER, "Could not determine the new host. Please send Anton your save file and version.");5903 if (eNewHost != NO_PLAYER)5904 {5905 sHostKey = GET_PLAYER(eNewHost).getCivilizationShortDescriptionKey();5906 }5907 5908 if (eNewHost != eOldHost)5909 {5910 Localization::String sSummaryTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_HOST_CHANGED_SUMMARY");5911 sSummaryTemp << sHostKey;5912 sSummary += sSummaryTemp.toUTF8();5913 }5914 else5915 {5916 Localization::String sSummaryTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_HOST_SAME_SUMMARY");5917 sSummaryTemp << sHostKey;5918 sSummary += sSummaryTemp.toUTF8();5919 }59205921 Localization::String sMessageTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_HOST_DETAILS");5922 sMessageTemp << GetName() << sHostKey;5923 sMessage += sMessageTemp.toUTF8();5924 sMessage += "[NEWLINE]" + pProposal->GetVoterDecision()->GetVotesAsText(this);5925 5926#if defined(MOD_EVENTS_RESOLUTIONS)5927 iDecision = pProposal->GetVoterDecision()->GetDecision();5928#endif5929 }5930 else5931 {5932 Localization::String sSummaryTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_FAIL_SUMMARY");5933 Localization::String sMessageTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_ENACT_FAIL");5934 CvString sName = GetResolutionName(pProposal->GetType(), pProposal->GetID(), pProposal->GetProposerDecision()->GetDecision(), /*bIncludePrefix*/ true);5935 if (pProposal->IsPassed(GetVotesSpentThisSession()))5936 {5937 sSummaryTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_PASS_SUMMARY");5938 sMessageTemp = Localization::Lookup("TXT_KEY_NOTIFICATION_LEAGUE_VOTING_RESULT_ENACT_PASS");5939 }5940 sSummaryTemp << sName;5941 sMessageTemp << sName;5942 sSummary = sSummaryTemp.toUTF8();5943 sMessage = sMessageTemp.toUTF8();5944 sMessage += "[NEWLINE]" + pProposal->GetVoterDecision()->GetVotesAsText(this);5945 5946#if defined(MOD_EVENTS_RESOLUTIONS)5947 iDecision = pProposal->GetProposerDecision()->GetDecision();5948#endif5949 }59505951#if defined(MOD_EVENTS_RESOLUTIONS)5952 if (MOD_EVENTS_RESOLUTIONS) {5953 GAMEEVENTINVOKE_HOOK(GAMEEVENT_ResolutionResult, pProposal->GetType(), iDecision, true, pProposal->IsPassed(GetVotesSpentThisSession()));5954 }5955#endif59565957 for (MemberList::iterator it = m_vMembers.begin(); it != m_vMembers.end(); it++)5958 {5959 PlayerTypes eMember = it->ePlayer;5960 if (GET_PLAYER(eMember).isHuman())5961 {5962 CvNotifications* pNotifications = GET_PLAYER(eMember).GetNotifications();5963 if (pNotifications)5964 {5965 pNotifications->Add(NOTIFICATION_LEAGUE_VOTING_DONE, sMessage, sSummary, -1, -1, GetID());5966 } 5967 }5968 }5969}