CityStrategyAIHelpers::IsTestCityStrategy_EnoughTileImprovers(AICityStrategyTypes, CvCity *)
- Defined in
- CvCityStrategyAI.cpp, line 2595
- Hook name
CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers
Hooks
static bool BeforeCityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers(AICityStrategyTypes eStrategy, CvCity* pCity, bool& result);static void AfterCityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers(AICityStrategyTypes eStrategy, CvCity* pCity, bool& result);static bool ReplaceCityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers(bool (*original)(AICityStrategyTypes, CvCity*), AICityStrategyTypes eStrategy, CvCity* pCity);CivRegisterBefore<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers>(host, &BeforeCityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers);CivRegisterAfter<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers>(host, &AfterCityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers);CivRegisterReplace<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers>(host, &ReplaceCityStrategyAIHelpers_IsTestCityStrategy_EnoughTileImprovers);
Code
2594/// "Enough Tile Improvers" City Strategy: This is not a Player Strategy because we only want to prevent the training of new Builders, not nullify new Techs or Policies, which could still be very useful2595bool CityStrategyAIHelpers::IsTestCityStrategy_EnoughTileImprovers(AICityStrategyTypes eStrategy, CvCity* pCity)2596{2597 CvPlayer& kPlayer = GET_PLAYER(pCity->getOwner());2598 int iLastTurnWorkerDisbanded = kPlayer.GetEconomicAI()->GetLastTurnWorkerDisbanded();2599 if(iLastTurnWorkerDisbanded >= 0 && GC.getGame().getGameTurn() - iLastTurnWorkerDisbanded <= 10)2600 {2601 return true;2602 }26032604 AICityStrategyTypes eNeedImproversStrategy = (AICityStrategyTypes) GC.getInfoTypeForString("AICITYSTRATEGY_NEED_TILE_IMPROVERS");26052606 if(eNeedImproversStrategy != NO_ECONOMICAISTRATEGY)2607 {2608 if(pCity->GetCityStrategyAI()->IsUsingCityStrategy(eNeedImproversStrategy))2609 return false;2610 }26112612 int iNumBuilders = kPlayer.GetNumUnitsWithUnitAI(UNITAI_WORKER, true, false);26132614 // If it's a minor with at least 1 worker per city, always return true2615 if(GET_PLAYER(pCity->getOwner()).isMinorCiv())2616 {2617 if(iNumBuilders >= kPlayer.getNumCities())2618 return true;2619 }26202621 CvAICityStrategyEntry* pCityStrategy = pCity->GetCityStrategyAI()->GetAICityStrategies()->GetEntry(eStrategy);26222623 int iWeightThresholdModifier = GetWeightThresholdModifier(eStrategy, pCity); // 10 Extra Weight per TILE_IMPROVEMENT Flavor2624 int iPerCityThreshold = pCityStrategy->GetWeightThreshold() + iWeightThresholdModifier; // 10026252626 int iModdedNumCities = kPlayer.getNumCities() + kPlayer.countCitiesFeatureSurrounded();2627 int iWeightThreshold = (iPerCityThreshold * iModdedNumCities);26282629 // Average Player wants no more than 1.50 Builders per City [150 Weight is Average; range is 100 to 200]2630 if((iNumBuilders * 100) >= iWeightThreshold)2631 {2632 return true;2633 }26342635 return false;2636}
Calls
- CityStrategyAIHelpers::GetWeightThresholdModifier(AICityStrategyTypes, CvCity *)
- CvAICityStrategies::GetEntry(int)
- CvAICityStrategyEntry::GetWeightThreshold() const
- CvCity::GetCityStrategyAI() const
- CvCity::getOwner() const
- CvCityStrategyAI::GetAICityStrategies()
- CvCityStrategyAI::IsUsingCityStrategy(AICityStrategyTypes)
- CvEconomicAI::GetLastTurnWorkerDisbanded() const
- CvGame::getGameTurn()
- CvGlobals::getGame()
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvPlayer::countCitiesFeatureSurrounded() const
- CvPlayer::GetEconomicAI() const
- CvPlayer::getNumCities() const
- CvPlayer::GetNumUnitsWithUnitAI(UnitAITypes, bool, bool)
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)