Bazaar developer reference

CvMinorCivAI::DoBuyout(PlayerTypes, bool)

Defined in
CvMinorCivAI.cpp, line 8820
Class
CvMinorCivAI
Hook name
CivHooks::CvMinorCivAI_DoBuyout
Lua events
GameEvents.PlayerBoughtOut

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}

Calls

Called by