CvPlayerAI::AI_chooseResearch()
- Defined in
- CvPlayerAI.cpp, line 644
- Class
- CvPlayerAI
- Hook name
CivHooks::CvPlayerAI_AI_chooseResearch- Overrides
- CvPlayer::AI_chooseResearch()
- Lua events
GameEvents.AiOverrideChooseNextTech
Hooks
static bool BeforeCvPlayerAI_AI_chooseResearch(CvPlayerAI* self);static void AfterCvPlayerAI_AI_chooseResearch(CvPlayerAI* self);static void ReplaceCvPlayerAI_AI_chooseResearch(void (*original)(CvPlayerAI*), CvPlayerAI* self);CivRegisterBefore<CivHooks::CvPlayerAI_AI_chooseResearch>(host, &BeforeCvPlayerAI_AI_chooseResearch);CivRegisterAfter<CivHooks::CvPlayerAI_AI_chooseResearch>(host, &AfterCvPlayerAI_AI_chooseResearch);CivRegisterReplace<CivHooks::CvPlayerAI_AI_chooseResearch>(host, &ReplaceCvPlayerAI_AI_chooseResearch);
Code
644void CvPlayerAI::AI_chooseResearch()645{646 AI_PERF("AI-perf.csv", "AI_chooseResearch");647648 TechTypes eBestTech = NO_TECH;649 int iI;650651 clearResearchQueue();652653 if(GetPlayerTechs()->GetCurrentResearch() == NO_TECH)654 {655 for(iI = 0; iI < MAX_PLAYERS; iI++)656 {657 if(GET_PLAYER((PlayerTypes)iI).isAlive())658 {659 if((iI != GetID()) && (GET_PLAYER((PlayerTypes)iI).getTeam() == getTeam()))660 {661 if(GET_PLAYER((PlayerTypes)iI).GetPlayerTechs()->GetCurrentResearch() != NO_TECH)662 {663 if(GetPlayerTechs()->CanResearch(GET_PLAYER((PlayerTypes)iI).GetPlayerTechs()->GetCurrentResearch()))664 {665 pushResearch(GET_PLAYER((PlayerTypes)iI).GetPlayerTechs()->GetCurrentResearch());666 }667 }668 }669 }670 }671 }672673 if(GetPlayerTechs()->GetCurrentResearch() == NO_TECH)674 {675#if defined(MOD_EVENTS_AI_OVERRIDE_TECH)676 if (MOD_EVENTS_AI_OVERRIDE_TECH && eBestTech == NO_TECH) {677 int iValue = 0;678 if (GAMEEVENTINVOKE_VALUE(iValue, GAMEEVENT_AiOverrideChooseNextTech, GetID(), false) == GAMEEVENTRETURN_VALUE) {679 // Defend against modder stupidity!680 if (iValue >= 0 && iValue < GC.getNumTechInfos() && !GET_TEAM(getTeam()).GetTeamTechs()->HasTech((TechTypes) iValue)) {681 eBestTech = (TechTypes)iValue;682 }683 }684 }685#else686 //todo: script override687#endif688689 if(eBestTech == NO_TECH)690 {691 eBestTech = GetPlayerTechs()->GetTechAI()->ChooseNextTech(this);692 }693694 if(eBestTech != NO_TECH)695 {696 pushResearch(eBestTech);697 }698 }699}
Calls
- CustomMods::eventAccumulator(int &, const char *, const char *, ...)
- CustomMods::isEVENTS_AI_OVERRIDE_TECH()
- CvGlobals::getNumTechInfos()
- CvPlayer::clearResearchQueue()
- CvPlayer::GetID() const
- CvPlayer::GetPlayerTechs() const
- CvPlayer::getTeam() const
- CvPlayer::isAlive() const
- CvPlayer::pushResearch(TechTypes, bool)
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTechs::CanResearch(TechTypes, bool) const
- CvPlayerTechs::GetCurrentResearch() const
- CvPlayerTechs::GetTechAI()
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::HasTech(TechTypes) const
- CvTechAI::ChooseNextTech(CvPlayer *, bool)