Bazaar developer reference

CvMinorCivAI::DoMajorBullyUnit(PlayerTypes, UnitTypes)

Defined in
CvMinorCivAI.cpp, line 9508
Class
CvMinorCivAI
Hook name
CivHooks::CvMinorCivAI_DoMajorBullyUnit
Lua events
GameEvents.PlayerBullied

Hooks

static bool BeforeCvMinorCivAI_DoMajorBullyUnit(CvMinorCivAI* self, PlayerTypes eBully, UnitTypes eUnitType);static void AfterCvMinorCivAI_DoMajorBullyUnit(CvMinorCivAI* self, PlayerTypes eBully, UnitTypes eUnitType);static void ReplaceCvMinorCivAI_DoMajorBullyUnit(void (*original)(CvMinorCivAI*, PlayerTypes, UnitTypes), CvMinorCivAI* self, PlayerTypes eBully, UnitTypes eUnitType);CivRegisterBefore<CivHooks::CvMinorCivAI_DoMajorBullyUnit>(host, &BeforeCvMinorCivAI_DoMajorBullyUnit);CivRegisterAfter<CivHooks::CvMinorCivAI_DoMajorBullyUnit>(host, &AfterCvMinorCivAI_DoMajorBullyUnit);CivRegisterReplace<CivHooks::CvMinorCivAI_DoMajorBullyUnit>(host, &ReplaceCvMinorCivAI_DoMajorBullyUnit);

Code

9508void CvMinorCivAI::DoMajorBullyUnit(PlayerTypes eBully, UnitTypes eUnitType)9509{9510	CvAssertMsg(eBully >= 0, "eBully is expected to be non-negative (invalid Index)");9511	CvAssertMsg(eBully < MAX_MAJOR_CIVS, "eBully is expected to be within maximum bounds (invalid Index)");9512	if(eBully < 0 || eBully >= MAX_MAJOR_CIVS) return;95139514	int iBullyMetric = CalculateBullyMetric(eBully, /*bForUnit*/true);9515	bool bSuccess = CanMajorBullyUnit(eBully, iBullyMetric);9516	int iOldFriendshipTimes100 = GetEffectiveFriendshipWithMajorTimes100(eBully);95179518	if(bSuccess)9519	{9520		if(eUnitType == NO_UNIT)9521		{9522			CvAssertMsg(false, "eUnitType is not expected to be NO_UNIT. Please send Anton your save file and version.");9523			return;9524		}95259526		// Minor must have Capital9527		CvCity* pCapital = GetPlayer()->getCapitalCity();9528		if(pCapital == NULL)9529		{9530			CvAssertMsg(false, "Trying to spawn a Unit for a major civ but the minor has no capital. Please send Anton your save file and version.");9531			return;9532		}95339534		int iX = pCapital->getX();9535		int iY = pCapital->getY();95369537		CvUnit* pNewUnit = GET_PLAYER(eBully).initUnit(eUnitType, iX, iY);9538		if (pNewUnit->jumpToNearestValidPlot())9539		{9540			pNewUnit->finishMoves(); // The given unit cannot move this turn95419542			if(GetPlayer()->getCapitalCity())9543				GetPlayer()->getCapitalCity()->addProductionExperience(pNewUnit);95449545			DoBulliedByMajorReaction(eBully, GC.getMINOR_FRIENDSHIP_DROP_BULLY_WORKER_SUCCESS());9546			9547#if defined(MOD_EVENTS_MINORS_INTERACTION)9548			if (MOD_EVENTS_MINORS_INTERACTION) {9549				GAMEEVENTINVOKE_HOOK(GAMEEVENT_PlayerBullied, eBully, GetPlayer()->GetID(), -1, eUnitType, pNewUnit->getX(), pNewUnit->getY());9550			}9551#endif9552		}9553		else9554			pNewUnit->kill(false);	// Could not find a spot for the unit!9555	}95569557	// Logging9558	GET_PLAYER(eBully).GetDiplomacyAI()->LogMinorCivBullyUnit(GetPlayer()->GetID(), iOldFriendshipTimes100, GetEffectiveFriendshipWithMajorTimes100(eBully), eUnitType, bSuccess, iBullyMetric);95599560	GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);9561}

Calls

Called by