Bazaar developer reference

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

Called by