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
- CvCity::getOwner() const
- CvGame::getGameTurn()
- CvGlobals::getGame()
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvGlobals::getUnitInfo(UnitTypes)
- CvMilitaryAI::GetMandatoryReserveSize() const
- CvMilitaryAI::IsUsingStrategy(MilitaryAIStrategyTypes)
- CvPlayer::GetMilitaryAI() const
- CvPlayer::getNumCities() const
- CvPlayer::GetNumUnitsWithDomain(DomainTypes, bool)
- CvPlayer::GetNumUnitsWithUnitAI(UnitAITypes, bool, bool)
- CvPlayerAI::getPlayer(PlayerTypes)
- CvUnitEntry::GetCombat() const
- CvUnitEntry::GetDefaultUnitAIType() const
- CvUnitEntry::GetDomainType() const
std::max