Bazaar developer reference

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

Called by