Bazaar developer reference

EconomicAIHelpers::IsTestStrategy_TechLeader(CvPlayer *)

Defined in
CvEconomicAI.cpp, line 3253
Hook name
CivHooks::EconomicAIHelpers_IsTestStrategy_TechLeader

Hooks

static bool BeforeEconomicAIHelpers_IsTestStrategy_TechLeader(CvPlayer* pPlayer, bool& result);static void AfterEconomicAIHelpers_IsTestStrategy_TechLeader(CvPlayer* pPlayer, bool& result);static bool ReplaceEconomicAIHelpers_IsTestStrategy_TechLeader(bool (*original)(CvPlayer*), CvPlayer* pPlayer);CivRegisterBefore<CivHooks::EconomicAIHelpers_IsTestStrategy_TechLeader>(host, &BeforeEconomicAIHelpers_IsTestStrategy_TechLeader);CivRegisterAfter<CivHooks::EconomicAIHelpers_IsTestStrategy_TechLeader>(host, &AfterEconomicAIHelpers_IsTestStrategy_TechLeader);CivRegisterReplace<CivHooks::EconomicAIHelpers_IsTestStrategy_TechLeader>(host, &ReplaceEconomicAIHelpers_IsTestStrategy_TechLeader);

Code

3252/// "Tech Leader" player strategy: if the player is a leader technologically, they should build espionage buildings to slow stealing3253bool EconomicAIHelpers::IsTestStrategy_TechLeader(CvPlayer* pPlayer)3254{3255	if (pPlayer->isHuman())3256	{3257		return false;3258	}32593260	// don't evaluate if espionage hasn't started yet3261	if (pPlayer->GetEspionageAI()->m_iTurnEspionageStarted == -1)3262	{3263		return false;3264	}32653266	int iMyTechNum = GET_TEAM(pPlayer->getTeam()).GetTeamTechs()->GetNumTechsKnown();32673268	int iNumOtherPlayers = 0;3269	int iNumPlayersAheadInTech = 0;3270	for(uint ui = 0; ui < MAX_MAJOR_CIVS; ui++)3271	{3272		PlayerTypes ePlayer = (PlayerTypes)ui;3273		if(!GET_PLAYER(ePlayer).isAlive())3274		{3275			continue;3276		}32773278		if (ePlayer == pPlayer->GetID())3279		{3280			continue;3281		}32823283		iNumOtherPlayers++;3284		int iNumTechs = GET_TEAM(GET_PLAYER(ePlayer).getTeam()).GetTeamTechs()->GetNumTechsKnown();3285		if (iNumTechs > iMyTechNum)3286		{3287			iNumPlayersAheadInTech++;3288		}3289	}32903291	if (iNumOtherPlayers > 0)3292	{3293		FlavorTypes eFlavorEspionage = NO_FLAVOR;3294		for (int iFlavor = 0; iFlavor < GC.getNumFlavorTypes(); iFlavor++)3295		{3296			FlavorTypes eFlavor = (FlavorTypes)iFlavor;3297			if (GC.getFlavorTypes(eFlavor) == "FLAVOR_ESPIONAGE")3298			{3299				eFlavorEspionage = eFlavor;3300			}3301		}3302		CvAssertMsg(eFlavorEspionage != NO_FLAVOR, "Could not find espionage flavor!");33033304		float fRatio = iNumPlayersAheadInTech / (float)iNumOtherPlayers;3305		float fCutOff = (0.05f * pPlayer->GetFlavorManager()->GetPersonalityIndividualFlavor(eFlavorEspionage));33063307		if (fRatio < fCutOff)3308		{3309			return true;3310		}3311		else3312		{3313			return false;3314		}3315	}3316	else3317	{3318		return false;3319	}3320}

Calls

Called by