Hooks
static bool BeforeCvMinorCivAI_DoBuyout(CvMinorCivAI* self, PlayerTypes eMajor, bool bKeepResources);static void AfterCvMinorCivAI_DoBuyout(CvMinorCivAI* self, PlayerTypes eMajor, bool bKeepResources);static void ReplaceCvMinorCivAI_DoBuyout(void (*original)(CvMinorCivAI*, PlayerTypes, bool), CvMinorCivAI* self, PlayerTypes eMajor, bool bKeepResources);CivRegisterBefore<CivHooks::CvMinorCivAI_DoBuyout>(host, &BeforeCvMinorCivAI_DoBuyout);CivRegisterAfter<CivHooks::CvMinorCivAI_DoBuyout>(host, &AfterCvMinorCivAI_DoBuyout);CivRegisterReplace<CivHooks::CvMinorCivAI_DoBuyout>(host, &ReplaceCvMinorCivAI_DoBuyout);
Code
8819#if defined(MOD_GLOBAL_CS_MARRIAGE_KEEPS_RESOURCES)8820void CvMinorCivAI::DoBuyout(PlayerTypes eMajor, bool bKeepResources)8821#else8822void CvMinorCivAI::DoBuyout(PlayerTypes eMajor)8823#endif8824{8825 CvAssertMsg(eMajor >= 0, "eMajor is expected to be non-negative (invalid Index)");8826 CvAssertMsg(eMajor < MAX_MAJOR_CIVS, "eMajor is expected to be within maximum bounds (invalid Index)");8827 if(eMajor < 0 || eMajor >= MAX_MAJOR_CIVS) return;88288829 if(!CanMajorBuyout(eMajor))8830 return;8831 88328833#if !defined(NO_ACHIEVEMENTS)8834 //Nigerian Prince Achievement8835 MinorCivTypes eBornu =(MinorCivTypes) GC.getInfoTypeForString("MINOR_CIV_BORNU", true /*bHideAssert*/);8836 MinorCivTypes eSokoto =(MinorCivTypes) GC.getInfoTypeForString("MINOR_CIV_SOKOTO", true /*bHideAssert*/);8837 bool bUsingXP2Scenario2 = gDLL->IsModActivated(CIV5_XP2_SCENARIO2_MODID);88388839 if (GET_PLAYER(eMajor).isHuman() && bUsingXP2Scenario2 && (GetPlayer()->GetMinorCivAI()->GetMinorCivType() == eBornu || GetPlayer()->GetMinorCivAI()->GetMinorCivType() == eSokoto ))8840 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_54);8841#endif884288438844 // Pay the cost8845 const int iBuyoutCost = GetBuyoutCost(eMajor);8846 GET_PLAYER(eMajor).GetTreasury()->LogExpenditure(GetPlayer()->GetMinorCivAI()->GetNamesListAsString(0), iBuyoutCost,6);8847 GET_PLAYER(eMajor).GetTreasury()->ChangeGold(-iBuyoutCost);88488849 int iNumUnits = 0;8850 int iCapitalX = 0;8851 int iCapitalY = 0;8852#if defined(MOD_GLOBAL_CS_MARRIAGE_KEEPS_RESOURCES)8853 DoAcquire(eMajor, iNumUnits, iCapitalX, iCapitalY, bKeepResources);8854#else8855 DoAcquire(eMajor, iNumUnits, iCapitalX, iCapitalY);8856#endif88578858 GET_PLAYER(eMajor).GetDiplomacyAI()->LogMinorCivBuyout(GetPlayer()->GetID(), iBuyoutCost, /*bSaving*/ false);88598860 // Show special notifications8861 int iCoinToss = GC.getGame().getJonRandNum(2, "Coin toss roll to determine flavor message for minor civ buyout notification.");8862 Localization::String strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_BUYOUT_TT_1");8863 if (iCoinToss == 0) // Is it a boy or a girl?8864 strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_BUYOUT_TT_2");8865 strMessage << GET_PLAYER(eMajor).getCivilizationShortDescriptionKey();8866 strMessage << GetPlayer()->getCivilizationShortDescriptionKey();88678868 Localization::String strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_BUYOUT");8869 strSummary << GET_PLAYER(eMajor).getCivilizationShortDescriptionKey();8870 strSummary << GetPlayer()->getCivilizationShortDescriptionKey();88718872 for (int iMajorLoop = 0; iMajorLoop < MAX_MAJOR_CIVS; iMajorLoop++)8873 {8874 PlayerTypes eMajorLoop = (PlayerTypes) iMajorLoop;8875 if (IsHasMetPlayer(eMajorLoop))8876 {8877 AddBuyoutNotification(strMessage.toUTF8(), strSummary.toUTF8(), eMajorLoop, iCapitalX, iCapitalY);8878 }8879 }88808881#if defined(MOD_EVENTS_MINORS_INTERACTION)8882 if (MOD_EVENTS_MINORS_INTERACTION) {8883 GAMEEVENTINVOKE_HOOK(GAMEEVENT_PlayerBoughtOut, eMajor, GetPlayer()->GetID());8884 }8885#endif8886 8887#if !defined(NO_ACHIEVEMENTS)8888 CvPlayerAI& kMajorPlayer = GET_PLAYER(eMajor);8889 kMajorPlayer.GetPlayerAchievements().BoughtCityState(iNumUnits);8890#endif8891}