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
- CustomMods::isAI_GREAT_PEOPLE_CHOICES()
- CustomMods::isGLOBAL_TRULY_FREE_GP()
- CvCity::GetCityCitizens() const
- CvCityCitizens::DoSpawnGreatPerson(UnitTypes, bool, bool, bool)
- CvCivilizationInfo::getCivilizationUnits(int) const
- CvDiplomacyAI::GetWonderCompetitiveness() const
- CvGame::getEstimateEndTurn() const
- CvGame::getGameTurn()
- CvGlobals::getGame()
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvGlobals::getNumUnitClassInfos()
- CvGlobals::getUnitClassInfo(UnitClassTypes)
- CvGlobals::getUnitInfo(UnitTypes)
- CvGrandStrategyAI::GetActiveGrandStrategy() const
- CvPlayer::ChangeNumFreeGreatPeople(int)
- CvPlayer::getCapitalCity()
- CvPlayer::getCivilizationInfo() const
- CvPlayer::GetCulture() const
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetGrandStrategyAI() const
- CvPlayer::GetNumFreeGreatPeople() const
- CvPlayer::GetPlayerTraits() const
- CvPlayer::GetSpecificUnitType(const char *, bool)
- CvPlayerAI::CanFoundOrEnhanceReligion()
- CvPlayerCulture::GetNumAvailableGreatWorkSlots(GreatWorkSlotType) const
- CvPlayerTraits::IsNoAnnexing() const
- CvTypes::getGREAT_WORK_SLOT_ART_ARTIFACT()
- CvTypes::getGREAT_WORK_SLOT_LITERATURE()
- CvUnitEntry::IsCanBuyCityState() const