CityStrategyAIHelpers::IsTestCityStrategy_CapitalNeedSettler(AICityStrategyTypes, CvCity *)
- Defined in
- CvCityStrategyAI.cpp, line 2775
- Hook name
CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler
Hooks
static bool BeforeCityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler(AICityStrategyTypes eStrategy, CvCity* pCity, bool& result);static void AfterCityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler(AICityStrategyTypes eStrategy, CvCity* pCity, bool& result);static bool ReplaceCityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler(bool (*original)(AICityStrategyTypes, CvCity*), AICityStrategyTypes eStrategy, CvCity* pCity);CivRegisterBefore<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler>(host, &BeforeCityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler);CivRegisterAfter<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler>(host, &AfterCityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler);CivRegisterReplace<CivHooks::CityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler>(host, &ReplaceCityStrategyAIHelpers_IsTestCityStrategy_CapitalNeedSettler);
Code
2774/// "Capital Need Settler" City Strategy: have capital build a settler ASAP2775bool CityStrategyAIHelpers::IsTestCityStrategy_CapitalNeedSettler(AICityStrategyTypes eStrategy, CvCity* pCity)2776{2777 if(pCity->isCapital())2778 {2779 CvPlayer& kPlayer = GET_PLAYER(pCity->getOwner());27802781 if(!kPlayer.isMinorCiv())2782 {2783 int iNumCities = kPlayer.getNumCities();2784 int iSettlersOnMapOrBuild = kPlayer.GetNumUnitsWithUnitAI(UNITAI_SETTLE, true);2785 int iCitiesPlusSettlers = iNumCities + iSettlersOnMapOrBuild;27862787 if((iCitiesPlusSettlers) < 3)2788 {27892790 AICityStrategyTypes eUnderThreat = (AICityStrategyTypes) GC.getInfoTypeForString("AICITYSTRATEGY_CAPITAL_UNDER_THREAT");2791 if(eUnderThreat != NO_AICITYSTRATEGY)2792 {2793 if(GC.getGame().getGameTurn() > 50 && pCity->GetCityStrategyAI()->IsUsingCityStrategy(eUnderThreat))2794 {2795 return false;2796 }2797 }27982799 MilitaryAIStrategyTypes eMilStrategy = (MilitaryAIStrategyTypes) GC.getInfoTypeForString("MILITARYAISTRATEGY_WAR_MOBILIZATION");2800 if(eMilStrategy != NO_MILITARYAISTRATEGY && kPlayer.GetMilitaryAI()->IsUsingStrategy(eMilStrategy))2801 {2802 // this is very risky, if this war fails, the civ lost the entire game as they have no backup plan2803 return false;2804 }28052806 CvAICityStrategyEntry* pCityStrategy = pCity->GetCityStrategyAI()->GetAICityStrategies()->GetEntry(eStrategy);2807 int iWeightThresholdModifier = GetWeightThresholdModifier(eStrategy, pCity); // -10 per EXPANSION, +2 per DEFENSE2808 int iWeightThreshold = pCityStrategy->GetWeightThreshold() + iWeightThresholdModifier; // 13028092810 int iGameTurn = GC.getGame().getGameTurn();2811#if defined(MOD_AI_SMART_V3)2812 bool bReturn;2813 2814 if(MOD_AI_SMART_V3)2815 {2816 int iDifficultyBonus = 4 * (200 - ((GC.getGame().getHandicapInfo().getAIGrowthPercent() + GC.getGame().getHandicapInfo().getAITrainPercent()) / 2));2817 iDifficultyBonus = (iDifficultyBonus * 100) / ((GC.getGame().getGameSpeedInfo().getGrowthPercent() + GC.getGame().getGameSpeedInfo().getTrainPercent()) / 2);2818 bReturn = ((iCitiesPlusSettlers == 1 && ((iGameTurn * iDifficultyBonus) / 100) > iWeightThreshold) ||2819 (iCitiesPlusSettlers == 2 && ((iGameTurn * iDifficultyBonus) / 200) > iWeightThreshold) ||2820 (iCitiesPlusSettlers == 3 && ((iGameTurn * iDifficultyBonus) / 400) > iWeightThreshold));2821 }2822 else2823 {2824 bReturn = ((iCitiesPlusSettlers == 1 && (iGameTurn * 4) > iWeightThreshold) ||2825 (iCitiesPlusSettlers == 2 && (iGameTurn * 2) > iWeightThreshold) ||2826 (iCitiesPlusSettlers == 3 && iGameTurn > iWeightThreshold));2827 }2828 2829 if (bReturn)2830#else2831 if((iCitiesPlusSettlers == 1 && (iGameTurn * 4) > iWeightThreshold) ||2832 (iCitiesPlusSettlers == 2 && (iGameTurn * 2) > iWeightThreshold) || 2833 (iCitiesPlusSettlers == 3 && iGameTurn > iWeightThreshold) )2834#endif2835 {2836 return true;2837 }2838 }2839 }2840 }28412842 return false;2843}
Calls
- CityStrategyAIHelpers::GetWeightThresholdModifier(AICityStrategyTypes, CvCity *)
- CustomMods::isAI_SMART_V3()
- CvAICityStrategies::GetEntry(int)
- CvAICityStrategyEntry::GetWeightThreshold() const
- CvCity::GetCityStrategyAI() const
- CvCity::getOwner() const
- CvCity::isCapital() const
- CvCityStrategyAI::GetAICityStrategies()
- CvCityStrategyAI::IsUsingCityStrategy(AICityStrategyTypes)
- CvGame::getGameSpeedInfo() const
- CvGame::getGameTurn()
- CvGame::getHandicapInfo() const
- CvGameSpeedInfo::getGrowthPercent() const
- CvGameSpeedInfo::getTrainPercent() const
- CvGlobals::getGame()
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvHandicapInfo::getAIGrowthPercent() const
- CvHandicapInfo::getAITrainPercent() const
- CvMilitaryAI::IsUsingStrategy(MilitaryAIStrategyTypes)
- CvPlayer::GetMilitaryAI() const
- CvPlayer::getNumCities() const
- CvPlayer::GetNumUnitsWithUnitAI(UnitAITypes, bool, bool)
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)