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
- CvFlavorManager::GetPersonalityIndividualFlavor(FlavorTypes)
- CvGlobals::getFlavorTypes(FlavorTypes)
- CvGlobals::getNumFlavorTypes()
- CvPlayer::GetEspionageAI() const
- CvPlayer::GetFlavorManager() const
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayer::isAlive() const
- CvPlayer::isHuman() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::GetNumTechsKnown() const
std::operator==