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}