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}