CvPlayerAI::AI_chooseFreeTech()
- Defined in
- CvPlayerAI.cpp, line 607
- Class
- CvPlayerAI
- Hook name
CivHooks::CvPlayerAI_AI_chooseFreeTech- Overrides
- CvPlayer::AI_chooseFreeTech()
- Lua events
GameEvents.AiOverrideChooseNextTech
Hooks
static bool BeforeCvPlayerAI_AI_chooseFreeTech(CvPlayerAI* self);static void AfterCvPlayerAI_AI_chooseFreeTech(CvPlayerAI* self);static void ReplaceCvPlayerAI_AI_chooseFreeTech(void (*original)(CvPlayerAI*), CvPlayerAI* self);CivRegisterBefore<CivHooks::CvPlayerAI_AI_chooseFreeTech>(host, &BeforeCvPlayerAI_AI_chooseFreeTech);CivRegisterAfter<CivHooks::CvPlayerAI_AI_chooseFreeTech>(host, &AfterCvPlayerAI_AI_chooseFreeTech);CivRegisterReplace<CivHooks::CvPlayerAI_AI_chooseFreeTech>(host, &ReplaceCvPlayerAI_AI_chooseFreeTech);
Code
607void CvPlayerAI::AI_chooseFreeTech()608{609 TechTypes eBestTech = NO_TECH;610 611#if defined(MOD_BUGFIX_MINOR)612 if(GC.getGame().isOption(GAMEOPTION_NO_SCIENCE))613 return;614#endif615616 clearResearchQueue();617618#if defined(MOD_EVENTS_AI_OVERRIDE_TECH)619 if (MOD_EVENTS_AI_OVERRIDE_TECH && eBestTech == NO_TECH) {620 int iValue = 0;621 if (GAMEEVENTINVOKE_VALUE(iValue, GAMEEVENT_AiOverrideChooseNextTech, GetID(), true) == GAMEEVENTRETURN_VALUE) {622 // Defend against modder stupidity!623 if (iValue >= 0 && iValue < GC.getNumTechInfos() && !GET_TEAM(getTeam()).GetTeamTechs()->HasTech((TechTypes) iValue)) {624 eBestTech = (TechTypes)iValue;625 }626 }627 }628#else629 // TODO: script override630#endif631632 if(eBestTech == NO_TECH)633 {634 eBestTech = GetPlayerTechs()->GetTechAI()->ChooseNextTech(this, /*bFreeTech*/ true);635 }636637 if(eBestTech != NO_TECH)638 {639 GET_TEAM(getTeam()).setHasTech(eBestTech, true, GetID(), true, true);640 }641}
Calls
- CustomMods::eventAccumulator(int &, const char *, const char *, ...)
- CustomMods::isEVENTS_AI_OVERRIDE_TECH()
- CvGame::isOption(GameOptionTypes) const
- CvGlobals::getGame()
- CvGlobals::getNumTechInfos()
- CvPlayer::clearResearchQueue()
- CvPlayer::GetID() const
- CvPlayer::GetPlayerTechs() const
- CvPlayer::getTeam() const
- CvPlayerTechs::GetTechAI()
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeam::setHasTech(TechTypes, bool, PlayerTypes, bool, bool)
- CvTeamTechs::HasTech(TechTypes) const
- CvTechAI::ChooseNextTech(CvPlayer *, bool)