Bazaar developer reference

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

Called by