Bazaar developer reference

EconomicAIHelpers::IsTestStrategy_EarlyExpansion(CvPlayer *)

Defined in
CvEconomicAI.cpp, line 3323
Hook name
CivHooks::EconomicAIHelpers_IsTestStrategy_EarlyExpansion

Hooks

static bool BeforeEconomicAIHelpers_IsTestStrategy_EarlyExpansion(CvPlayer* pPlayer, bool& result);static void AfterEconomicAIHelpers_IsTestStrategy_EarlyExpansion(CvPlayer* pPlayer, bool& result);static bool ReplaceEconomicAIHelpers_IsTestStrategy_EarlyExpansion(bool (*original)(CvPlayer*), CvPlayer* pPlayer);CivRegisterBefore<CivHooks::EconomicAIHelpers_IsTestStrategy_EarlyExpansion>(host, &BeforeEconomicAIHelpers_IsTestStrategy_EarlyExpansion);CivRegisterAfter<CivHooks::EconomicAIHelpers_IsTestStrategy_EarlyExpansion>(host, &AfterEconomicAIHelpers_IsTestStrategy_EarlyExpansion);CivRegisterReplace<CivHooks::EconomicAIHelpers_IsTestStrategy_EarlyExpansion>(host, &ReplaceEconomicAIHelpers_IsTestStrategy_EarlyExpansion);

Code

3322/// "Early Expansion" Player Strategy: An early Strategy simply designed to get player up to 3 Cities quickly.3323bool EconomicAIHelpers::IsTestStrategy_EarlyExpansion(CvPlayer* pPlayer)3324{3325	int iDesiredCities;3326	int iFlavorExpansion = 0;3327	int iFlavorGrowth = 0;33283329	if(GC.getGame().isOption(GAMEOPTION_ONE_CITY_CHALLENGE) && pPlayer->isHuman())3330	{3331		return false;3332	}33333334	iDesiredCities = pPlayer->GetEconomicAI()->GetEarlyCityNumberTarget();3335	for(int iFlavorLoop = 0; iFlavorLoop < GC.getNumFlavorTypes() && (iFlavorExpansion == 0 || iFlavorGrowth == 0); iFlavorLoop++)3336	{3337		if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_EXPANSION")3338		{3339			iFlavorExpansion = pPlayer->GetGrandStrategyAI()->GetPersonalityAndGrandStrategy((FlavorTypes)iFlavorLoop);3340		}3341		else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_GROWTH")3342		{3343			iFlavorGrowth = pPlayer->GetGrandStrategyAI()->GetPersonalityAndGrandStrategy((FlavorTypes)iFlavorLoop);3344		}3345	}33463347	iDesiredCities = (iDesiredCities * iFlavorExpansion) / max(iFlavorGrowth, 1);3348	int iDifficulty = max(0,GC.getGame().getHandicapInfo().GetID() - 3);3349	iDesiredCities += iDifficulty;33503351	// scale this based on world size3352	const int iDefaultNumTiles = 80*52;3353	iDesiredCities = (iDesiredCities * GC.getMap().numPlots()) / iDefaultNumTiles;33543355	// See how many unowned Tiles there are on this player's landmass3356	if(pPlayer->getCapitalCity() != NULL)3357	{3358		// Make sure city specialization has gotten one chance to specialize the capital before we adopt this3359		//if(GC.getGame().getGameTurn() > GC.getAI_CITY_SPECIALIZATION_EARLIEST_TURN())3360		{3361			CvArea* pArea = GC.getMap().getArea(pPlayer->getCapitalCity()->getArea());33623363			// Is this area still one of the best to settle?3364			int iBestArea, iSecondBestArea;3365			pPlayer->GetBestSettleAreas(pPlayer->GetEconomicAI()->GetMinimumSettleFertility(), iBestArea, iSecondBestArea);3366			if(iBestArea == pArea->GetID() || iSecondBestArea == pArea->GetID())3367			{3368				int iNumOwnedTiles = pArea->getNumOwnedTiles();3369				int iNumUnownedTiles = pArea->getNumUnownedTiles();3370				int iNumTiles = max(1,pArea->getNumTiles());33713372				int iOwnageRatio = iNumOwnedTiles * 100 / iNumTiles;3373				int iNumCities = pPlayer->getNumCities() - pPlayer->GetNumPuppetCities();3374				int iSettlersOnMap = pPlayer->GetNumUnitsWithUnitAI(UNITAI_SETTLE, true);33753376				if(iOwnageRatio < GC.getAI_STRATEGY_AREA_IS_FULL_PERCENT()3377				        && (iNumCities + iSettlersOnMap) < iDesiredCities3378				        && iNumUnownedTiles >= GC.getAI_STRATEGY_EARLY_EXPANSION_NUM_UNOWNED_TILES_REQUIRED())3379				{3380					return true;3381				}3382			}3383		}3384	}33853386	return false;3387}

Calls

Called by