Bazaar developer reference

CvPlayerAI::AI_chooseFreeGreatPerson()

Defined in
CvPlayerAI.cpp, line 438
Class
CvPlayerAI
Hook name
CivHooks::CvPlayerAI_AI_chooseFreeGreatPerson
Overrides
CvPlayer::AI_chooseFreeGreatPerson()

Hooks

static bool BeforeCvPlayerAI_AI_chooseFreeGreatPerson(CvPlayerAI* self);static void AfterCvPlayerAI_AI_chooseFreeGreatPerson(CvPlayerAI* self);static void ReplaceCvPlayerAI_AI_chooseFreeGreatPerson(void (*original)(CvPlayerAI*), CvPlayerAI* self);CivRegisterBefore<CivHooks::CvPlayerAI_AI_chooseFreeGreatPerson>(host, &BeforeCvPlayerAI_AI_chooseFreeGreatPerson);CivRegisterAfter<CivHooks::CvPlayerAI_AI_chooseFreeGreatPerson>(host, &AfterCvPlayerAI_AI_chooseFreeGreatPerson);CivRegisterReplace<CivHooks::CvPlayerAI_AI_chooseFreeGreatPerson>(host, &ReplaceCvPlayerAI_AI_chooseFreeGreatPerson);

Code

438void CvPlayerAI::AI_chooseFreeGreatPerson()439{440#if defined(MOD_AI_GREAT_PEOPLE_CHOICES)441	bool bCanPickProphet = true;442	bool bCanPickMoV = true;443	bool bCanPickEngineer = true;444#endif445446	while(GetNumFreeGreatPeople() > 0)447	{448		UnitTypes eDesiredGreatPerson = NO_UNIT;449		450#if defined(MOD_AI_GREAT_PEOPLE_CHOICES)451		if (MOD_AI_GREAT_PEOPLE_CHOICES && bCanPickProphet && CanFoundOrEnhanceReligion())452		{453#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)454			eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_PROPHET");455#else456			eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_PROPHET");457#endif458459			bCanPickProphet = false;460		}461		else if (MOD_AI_GREAT_PEOPLE_CHOICES && bCanPickMoV && GetPlayerTraits()->IsNoAnnexing() && GC.getGame().getGameTurn() <= (GC.getGame().getEstimateEndTurn() / 3))462		{463			// Find the eUnit replacement that's the merchant of venice464			for(int iVeniceSearch = 0; iVeniceSearch < GC.getNumUnitClassInfos(); iVeniceSearch++)465			{466				const UnitClassTypes eVeniceUnitClass = static_cast<UnitClassTypes>(iVeniceSearch);467				CvUnitClassInfo* pkVeniceUnitClassInfo = GC.getUnitClassInfo(eVeniceUnitClass);468				if(pkVeniceUnitClassInfo)469				{470					const UnitTypes eMerchantOfVeniceUnit = (UnitTypes) getCivilizationInfo().getCivilizationUnits(eVeniceUnitClass);471					if (eMerchantOfVeniceUnit != NO_UNIT)472					{473						CvUnitEntry* pVeniceUnitEntry = GC.getUnitInfo(eMerchantOfVeniceUnit);474						if (pVeniceUnitEntry->IsCanBuyCityState())475						{476							eDesiredGreatPerson = eMerchantOfVeniceUnit;	477							break;478						}479					}480				}481			}482			483			bCanPickMoV = false;484		}485		else if(bCanPickEngineer && GetDiplomacyAI()->GetWonderCompetitiveness() >= 8 && GC.getGame().getGameTurn() <= (GC.getGame().getEstimateEndTurn() / 2))486#else487		// Highly wonder competitive and still early in game?488		if(GetDiplomacyAI()->GetWonderCompetitiveness() >= 8 && GC.getGame().getGameTurn() <= (GC.getGame().getEstimateEndTurn() / 2))489#endif490		{491#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)492			eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_ENGINEER");493#else494			eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ENGINEER");495#endif496497#if defined(MOD_AI_GREAT_PEOPLE_CHOICES)498			bCanPickEngineer = false;499#endif500		}501		else502		{503			// Pick the person based on our victory method504			AIGrandStrategyTypes eVictoryStrategy = GetGrandStrategyAI()->GetActiveGrandStrategy();505			if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_CONQUEST"))506			{507#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)508				eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_GREAT_GENERAL");509#else510				eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_GREAT_GENERAL");511#endif512			}513			else if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_CULTURE"))514			{515#if defined(MOD_AI_GREAT_PEOPLE_CHOICES)516				if (MOD_AI_GREAT_PEOPLE_CHOICES)517				{518					if (GetCulture()->GetNumAvailableGreatWorkSlots(CvTypes::getGREAT_WORK_SLOT_ART_ARTIFACT()) > 0)519					{520						// Grab an artist first, as they come after writers, so we'll likely to have less of them521#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)522						eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_ARTIST");523#else524						eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ARTIST");525#endif526					}527					else if (GetCulture()->GetNumAvailableGreatWorkSlots(CvTypes::getGREAT_WORK_SLOT_LITERATURE()))528					{529#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)530						eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_WRITER");531#else532						eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_WRITER");533#endif534					}535					else536					{537						// Even without a music slot, we can always send them on a concert tour538#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)539						eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_MUSICIAN");540#else541						eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_MUSICIAN");542#endif543					}544				}545				else546#endif547#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)548					eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_ARTIST");549#else550					eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ARTIST");551#endif552			}553			else if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_UNITED_NATIONS"))554			{555#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)556					eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_MERCHANT");557#else558					eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_MERCHANT");559#endif560			}561#if defined(MOD_BUGFIX_MINOR)562			else563#else564			else if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_SPACESHIP"))565#endif566			{567#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)568				eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_SCIENTIST");569#else570				eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_SCIENTIST");571#endif572			}573		}574575#if defined(MOD_AI_GREAT_PEOPLE_CHOICES)576		if(MOD_AI_GREAT_PEOPLE_CHOICES && eDesiredGreatPerson != NO_UNIT)577		{578			// Can't go wrong with a Great Scientist!579#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)580			eDesiredGreatPerson = GetSpecificUnitType("UNITCLASS_SCIENTIST");581#else582			eDesiredGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_SCIENTIST");583#endif584		}585#endif586587		if(eDesiredGreatPerson != NO_UNIT)588		{589			CvCity* pCapital = getCapitalCity();590			if(pCapital)591			{592#if defined(MOD_GLOBAL_TRULY_FREE_GP)593				pCapital->GetCityCitizens()->DoSpawnGreatPerson(eDesiredGreatPerson, true, false, MOD_GLOBAL_TRULY_FREE_GP);594#else595				pCapital->GetCityCitizens()->DoSpawnGreatPerson(eDesiredGreatPerson, true, false);596#endif597			}598			ChangeNumFreeGreatPeople(-1);599		}600		else601		{602			break;603		}604	}605}

Calls