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}