Bazaar developer reference

CvPlayerTraits::ChooseMayaBoost()

Defined in
CvTraitClasses.cpp, line 3254
Class
CvPlayerTraits
Hook name
CivHooks::CvPlayerTraits_ChooseMayaBoost

Hooks

static bool BeforeCvPlayerTraits_ChooseMayaBoost(CvPlayerTraits* self);static void AfterCvPlayerTraits_ChooseMayaBoost(CvPlayerTraits* self);static void ReplaceCvPlayerTraits_ChooseMayaBoost(void (*original)(CvPlayerTraits*), CvPlayerTraits* self);CivRegisterBefore<CivHooks::CvPlayerTraits_ChooseMayaBoost>(host, &BeforeCvPlayerTraits_ChooseMayaBoost);CivRegisterAfter<CivHooks::CvPlayerTraits_ChooseMayaBoost>(host, &AfterCvPlayerTraits_ChooseMayaBoost);CivRegisterReplace<CivHooks::CvPlayerTraits_ChooseMayaBoost>(host, &ReplaceCvPlayerTraits_ChooseMayaBoost);

Code

3253/// AI routine to pick a Maya bonus for an AI civ3254void CvPlayerTraits::ChooseMayaBoost()3255{3256	UnitTypes eDesiredGreatPerson = NO_UNIT;3257	UnitTypes ePossibleGreatPerson;32583259	// Go for a prophet?3260#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3261	ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_PROPHET", true);3262#else3263	ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_PROPHET", true);3264#endif3265	if(GetUnitBaktun(ePossibleGreatPerson) == 0)3266	{3267		CvGameReligions* pReligions = GC.getGame().GetGameReligions();3268		ReligionTypes eReligion = pReligions->GetReligionCreatedByPlayer(m_pPlayer->GetID());32693270		// Have a religion that isn't enhanced yet?3271		if(eReligion != NO_RELIGION)3272		{3273			const CvReligion* pMyReligion = pReligions->GetReligion(eReligion, m_pPlayer->GetID());3274			if(!pMyReligion->m_bEnhanced)3275			{3276				eDesiredGreatPerson = ePossibleGreatPerson;3277			}3278		}32793280		// Don't have a religion and they can still be founded?3281		else3282		{3283			if(pReligions->GetNumReligionsStillToFound() > 0)3284			{3285				eDesiredGreatPerson = ePossibleGreatPerson;3286			}3287		}3288	}32893290	// Highly wonder competitive and still early in game?3291	if(eDesiredGreatPerson == NO_UNIT)3292	{3293#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3294		ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_ENGINEER");3295#else3296		ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ENGINEER");3297#endif3298		if(GetUnitBaktun(ePossibleGreatPerson) == 0)3299		{3300			if(m_pPlayer->GetDiplomacyAI()->GetWonderCompetitiveness() >= 8 && GC.getGame().getGameTurn() <= (GC.getGame().getEstimateEndTurn() / 2))3301			{3302				eDesiredGreatPerson = ePossibleGreatPerson;3303			}3304		}3305	}33063307	// Does our grand strategy match one that is available?3308	AIGrandStrategyTypes eVictoryStrategy = m_pPlayer->GetGrandStrategyAI()->GetActiveGrandStrategy();3309	if(eDesiredGreatPerson == NO_UNIT)3310	{3311#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3312		ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_SCIENTIST");3313#else3314		ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_SCIENTIST");3315#endif3316		if(GetUnitBaktun(ePossibleGreatPerson) == 0)3317		{3318			if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_SPACESHIP"))3319			{3320				eDesiredGreatPerson = ePossibleGreatPerson;3321			}3322		}3323	}3324	if(eDesiredGreatPerson == NO_UNIT)3325	{3326#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3327		ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_ARTIST");3328#else3329		ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ARTIST");3330#endif3331		if(GetUnitBaktun(ePossibleGreatPerson) == 0)3332		{3333			if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_CULTURE"))3334			{3335				eDesiredGreatPerson = ePossibleGreatPerson;3336			}3337		}3338	}3339	if(eDesiredGreatPerson == NO_UNIT)3340	{3341#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3342			ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_MERCHANT");3343#else3344			ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_MERCHANT");3345#endif3346		if(GetUnitBaktun(ePossibleGreatPerson) == 0)3347		{3348			if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_UNITED_NATIONS"))3349			{3350				eDesiredGreatPerson = ePossibleGreatPerson;3351			}3352		}3353	}3354	if(eDesiredGreatPerson == NO_UNIT)3355	{3356#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3357		ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_GREAT_GENERAL");3358#else3359		ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_GREAT_GENERAL");3360#endif3361		if(GetUnitBaktun(ePossibleGreatPerson) == 0)3362		{3363			if(eVictoryStrategy == (AIGrandStrategyTypes) GC.getInfoTypeForString("AIGRANDSTRATEGY_CONQUEST"))3364			{3365				eDesiredGreatPerson = ePossibleGreatPerson;3366			}3367		}3368	}33693370	// No obvious strategic choice, just go for first one available in a reasonable order3371	if(eDesiredGreatPerson == NO_UNIT)3372	{3373#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3374		ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_PROPHET", true);3375#else3376		ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_PROPHET", true);3377#endif3378		if(GetUnitBaktun(ePossibleGreatPerson) == 0)3379		{3380			eDesiredGreatPerson = ePossibleGreatPerson;3381		}3382		else3383		{3384#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3385			ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_ENGINEER");3386#else3387			ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ENGINEER");3388#endif3389			if(GetUnitBaktun(ePossibleGreatPerson) == 0)3390			{3391				eDesiredGreatPerson = ePossibleGreatPerson;3392			}3393			else3394			{3395#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3396				ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_WRITER");3397#else3398				ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_WRITER");3399#endif3400				if(GetUnitBaktun(ePossibleGreatPerson) == 0)3401				{3402					eDesiredGreatPerson = ePossibleGreatPerson;3403				}3404				else3405				{3406#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3407					ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_MERCHANT");3408#else3409					ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_MERCHANT");3410#endif3411					if(GetUnitBaktun(ePossibleGreatPerson) == 0)3412					{3413						eDesiredGreatPerson = ePossibleGreatPerson;3414					}3415					else3416					{3417#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3418						ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_SCIENTIST");3419#else3420						ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_SCIENTIST");3421#endif3422						if(GetUnitBaktun(ePossibleGreatPerson) == 0)3423						{3424							eDesiredGreatPerson = ePossibleGreatPerson;3425						}3426						else3427						{3428#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3429							ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_ARTIST");3430#else3431							ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_ARTIST");3432#endif3433							if(GetUnitBaktun(ePossibleGreatPerson) == 0)3434							{3435								eDesiredGreatPerson = ePossibleGreatPerson;3436							}3437							else3438							{3439#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3440								ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_MUSICIAN");3441#else3442								ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_MUSICIAN");3443#endif3444								if(GetUnitBaktun(ePossibleGreatPerson) == 0)3445								{3446									eDesiredGreatPerson = ePossibleGreatPerson;3447								}3448								else3449								{3450#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3451									ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_GREAT_GENERAL");3452#else3453									ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_GREAT_GENERAL");3454#endif3455									if(GetUnitBaktun(ePossibleGreatPerson) == 0)3456									{3457										eDesiredGreatPerson = ePossibleGreatPerson;3458									}3459									else3460									{3461#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)3462										ePossibleGreatPerson = m_pPlayer->GetSpecificUnitType("UNITCLASS_GREAT_ADMIRAL");3463#else3464										ePossibleGreatPerson = (UnitTypes)GC.getInfoTypeForString("UNIT_GREAT_ADMIRAL");3465#endif3466										if(GetUnitBaktun(ePossibleGreatPerson) == 0)3467										{3468											eDesiredGreatPerson = ePossibleGreatPerson;3469										}3470									}3471								}3472							}3473						}3474					}3475				}3476			}3477		}3478	}34793480	// Actually get the great person3481	if(eDesiredGreatPerson != NO_UNIT)3482	{3483		CvCity* pCity = m_pPlayer->GetGreatPersonSpawnCity(eDesiredGreatPerson);3484		if(pCity)3485		{3486#if defined(MOD_GLOBAL_TRULY_FREE_GP)3487			pCity->GetCityCitizens()->DoSpawnGreatPerson(eDesiredGreatPerson, true, false, MOD_GLOBAL_TRULY_FREE_GP);3488#else3489			pCity->GetCityCitizens()->DoSpawnGreatPerson(eDesiredGreatPerson, true, false);3490#endif3491			SetUnitBaktun(eDesiredGreatPerson);3492		}3493		m_pPlayer->ChangeNumMayaBoosts(-1);3494	}3495}

Calls

Called by