Bazaar developer reference

CvAdvisorRecommender::FindUnassignedAdvisorForTech(PlayerTypes, TechTypes)

Defined in
CvAdvisorRecommender.cpp, line 484
Class
CvAdvisorRecommender
Hook name
CivHooks::CvAdvisorRecommender_FindUnassignedAdvisorForTech

Hooks

static bool BeforeCvAdvisorRecommender_FindUnassignedAdvisorForTech(CvAdvisorRecommender* self, PlayerTypes ePlayer, TechTypes eTech, AdvisorTypes& result);static void AfterCvAdvisorRecommender_FindUnassignedAdvisorForTech(CvAdvisorRecommender* self, PlayerTypes ePlayer, TechTypes eTech, AdvisorTypes& result);static AdvisorTypes ReplaceCvAdvisorRecommender_FindUnassignedAdvisorForTech(AdvisorTypes (*original)(CvAdvisorRecommender*, PlayerTypes, TechTypes), CvAdvisorRecommender* self, PlayerTypes ePlayer, TechTypes eTech);CivRegisterBefore<CivHooks::CvAdvisorRecommender_FindUnassignedAdvisorForTech>(host, &BeforeCvAdvisorRecommender_FindUnassignedAdvisorForTech);CivRegisterAfter<CivHooks::CvAdvisorRecommender_FindUnassignedAdvisorForTech>(host, &AfterCvAdvisorRecommender_FindUnassignedAdvisorForTech);CivRegisterReplace<CivHooks::CvAdvisorRecommender_FindUnassignedAdvisorForTech>(host, &ReplaceCvAdvisorRecommender_FindUnassignedAdvisorForTech);

Code

484AdvisorTypes CvAdvisorRecommender::FindUnassignedAdvisorForTech(PlayerTypes ePlayer, TechTypes eTech)485{486	int aiAdvisorValues[NUM_ADVISOR_TYPES];487	for(uint ui = 0; ui < NUM_ADVISOR_TYPES; ui++)488	{489		aiAdvisorValues[ui] = 0;490	}491492	CvTechEntry* pTechEntry = GET_PLAYER(ePlayer).GetPlayerTechs()->GetTechs()->GetEntry(eTech);493	if(pTechEntry == NULL)494	{495		//Should never happen.496		return NO_ADVISOR_TYPE;497	}498499	for(int i = 0; i < GC.getNumFlavorTypes(); i++)500	{501		FlavorTypes eFlavor = (FlavorTypes)i;502		int iTechFlavorValue = pTechEntry->GetFlavorValue(eFlavor);503		if(iTechFlavorValue <= 0)504		{505			continue;506		}507508		for(uint uiAdvisor = 0; uiAdvisor < NUM_ADVISOR_TYPES; uiAdvisor++)509		{510			AdvisorTypes eAdvisor = (AdvisorTypes)uiAdvisor;511			aiAdvisorValues[uiAdvisor] += iTechFlavorValue * AdvisorInterestInFlavor(eAdvisor, eFlavor);512		}513	}514515	AdvisorTypes eWinningAdvisor = NO_ADVISOR_TYPE;516	int iHighestValue = 0;517	for(uint ui = 0; ui < NUM_ADVISOR_TYPES; ui++)518	{519		// skip this advisor if already assigned520		if(m_aRecommendedTechs[ui] != NO_TECH)521		{522			continue;523		}524525		if(aiAdvisorValues[ui] > iHighestValue)526		{527			eWinningAdvisor = (AdvisorTypes)ui;528			iHighestValue = aiAdvisorValues[ui];529		}530	}531532	return eWinningAdvisor;533}

Calls

Called by