Bazaar developer reference

CvUnitProductionAI::GetTempWeightRevised(UnitTypes, int)

Defined in
CvUnitProductionAI.cpp, line 161
Class
CvUnitProductionAI
Hook name
CivHooks::CvUnitProductionAI_GetTempWeightRevised

Hooks

static bool BeforeCvUnitProductionAI_GetTempWeightRevised(CvUnitProductionAI* self, UnitTypes eUnit, int iTempWeight, int& result);static void AfterCvUnitProductionAI_GetTempWeightRevised(CvUnitProductionAI* self, UnitTypes eUnit, int iTempWeight, int& result);static int ReplaceCvUnitProductionAI_GetTempWeightRevised(int (*original)(CvUnitProductionAI*, UnitTypes, int), CvUnitProductionAI* self, UnitTypes eUnit, int iTempWeight);CivRegisterBefore<CivHooks::CvUnitProductionAI_GetTempWeightRevised>(host, &BeforeCvUnitProductionAI_GetTempWeightRevised);CivRegisterAfter<CivHooks::CvUnitProductionAI_GetTempWeightRevised>(host, &AfterCvUnitProductionAI_GetTempWeightRevised);CivRegisterReplace<CivHooks::CvUnitProductionAI_GetTempWeightRevised>(host, &ReplaceCvUnitProductionAI_GetTempWeightRevised);

Code

160#if defined(MOD_AI_SMART_V3)161int CvUnitProductionAI::GetTempWeightRevised(UnitTypes eUnit, int iTempWeight)162{163	if(iTempWeight == 0)164		return 0;165166	CvUnitEntry* pkUnitEntry = GC.getUnitInfo(eUnit);167	if (!pkUnitEntry)168		return 0;169170	int tempWeightRevised = iTempWeight;171172	CvPlayerAI& kPlayer = GET_PLAYER(m_pCity->getOwner());173	DomainTypes eDomain = (DomainTypes) pkUnitEntry->GetDomainType();174175	bool isDefenseCriticalStatus = false;176	MilitaryAIStrategyTypes eNeedLandCritical = (MilitaryAIStrategyTypes) GC.getInfoTypeForString("MILITARYAISTRATEGY_EMPIRE_DEFENSE_CRITICAL");177	if(eNeedLandCritical != NO_MILITARYAISTRATEGY && kPlayer.GetMilitaryAI()->IsUsingStrategy(eNeedLandCritical))178	{179		isDefenseCriticalStatus = true;180	}181182	int iGameTurn = GC.getGame().getGameTurn();183184	if ((pkUnitEntry->GetCombat() > 0) && (eDomain == DOMAIN_LAND) && (pkUnitEntry->GetDefaultUnitAIType() != UNITAI_EXPLORE))185	{186		int combatUnits = kPlayer.GetNumUnitsWithDomain(DOMAIN_LAND, true) - kPlayer.GetNumUnitsWithUnitAI(UNITAI_EXPLORE, true, false);187188		// From turn 11, we want at least one wandering combat unit per cities + workers + settlers.189		// This will prevent very early attacks and the need of operation units vs barbs when is too late.190		if((iGameTurn > 10) && (iGameTurn < 40) && !isDefenseCriticalStatus)191		{192			int coreUnitsNeed = kPlayer.getNumCities() + kPlayer.GetNumUnitsWithUnitAI(UNITAI_SETTLE) + kPlayer.GetNumUnitsWithUnitAI(UNITAI_WORKER);193			if (combatUnits < coreUnitsNeed)194			{195				tempWeightRevised *= 40;196			}197		}198		else if (isDefenseCriticalStatus)199		{200			// Just to prevent some civs totally neglecting military units.201			int multiplier = kPlayer.GetMilitaryAI()->GetMandatoryReserveSize() / max(1, combatUnits);202			if (multiplier > 1)203			{204				tempWeightRevised *= multiplier;205			}			206		}207	}208	return tempWeightRevised;	209}

Calls

Called by