GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveScientist (CvUnit* pGreatScientist) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && PreparingForWar(this) && !isGoldenAge()) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // If I'm in danger, use great person to get a tech if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !IsSafe(this)) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GC.getGame().getGameTurn() <= ((GC.getGame().getEstimateEndTurn() * 1) / 4)) { if (GetDiplomacyAI()->IsGoingForSpaceshipVictory()) { eDirective = GREAT_PEOPLE_DIRECTIVE_CONSTRUCT_IMPROVEMENT; } } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && (GC.getGame().getGameTurn() - pGreatScientist->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT()) { // a free tech is not bad eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } return eDirective; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveMerchant (CvUnit* pGreatMerchant) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; // if the merchant is in an army, he's already marching to a destination, so don't evaluate him if (pGreatMerchant->getArmyID() != FFreeList::INVALID_INDEX) { return NO_GREAT_PEOPLE_DIRECTIVE_TYPE; } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && PreparingForWar(this) && !isGoldenAge()) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // Attempt a run to a minor civ if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && IsSafe(this)) { CvPlot* pTarget = FindBestMerchantTargetPlot (pGreatMerchant, true); if (pTarget) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && (GC.getGame().getGameTurn() - pGreatMerchant->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT()) { eDirective = GetUnresolvedAction(this, pGreatMerchant); } return eDirective; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveEngineer (CvUnit* pGreatEngineer) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !isGoldenAge() && PreparingForWar(this)) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } //if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GC.getGame().getGameTurn() <= ((GC.getGame().getEstimateEndTurn() * 3) / 4)) //{ // if (GetDiplomacyAI()->IsGoingForWorldConquest()) // { // eDirective = GREAT_PEOPLE_DIRECTIVE_CONSTRUCT_IMPROVEMENT; // } //} // look for a wonder to rush if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE) { int iNextWonderWeight; BuildingTypes eNextWonderDesired = GetWonderProductionAI()->ChooseWonder(false /*bUseAsyncRandom*/, false /*bAdjustForOtherPlayers*/, iNextWonderWeight); if (eNextWonderDesired != NO_BUILDING) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && (GC.getGame().getGameTurn() - pGreatEngineer->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT()) { eDirective = GetUnresolvedAction(this, pGreatEngineer); } return eDirective; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveArtist (CvUnit* pGreatArtist) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && PreparingForWar(this) && !isGoldenAge()) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GC.getGame().getGameTurn() <= ((GC.getGame().getEstimateEndTurn() * 2) / 4)) { if (GetDiplomacyAI()->IsGoingForCultureVictory()) { eDirective = GREAT_PEOPLE_DIRECTIVE_CONSTRUCT_IMPROVEMENT; } } // gank territory from neighbor we don't like if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && IsSafe(this)) { int iScore = 0; CvPlot* pTargetPlot = FindBestArtistTargetPlot(pGreatArtist, iScore); if (pTargetPlot) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && (GC.getGame().getGameTurn() - pGreatArtist->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT()) { eDirective = GetUnresolvedAction(this, pGreatArtist); } return eDirective; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveArtist(CvUnit* /*pGreatArtist*/) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; if(eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && PreparingForWar(this) && !isGoldenAge()) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } if(eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GC.getGame().getGameTurn() <= ((GC.getGame().getEstimateEndTurn() * 2) / 4)) { if(GetDiplomacyAI()->IsGoingForCultureVictory()) { eDirective = GREAT_PEOPLE_DIRECTIVE_CONSTRUCT_IMPROVEMENT; } } if(eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } return eDirective; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveArtist(CvUnit* pGreatArtist) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; // Defend against ideology pressure if not going for culture win if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !GetDiplomacyAI()->IsGoingForCultureVictory() && GetCulture()->GetPublicOpinionUnhappiness() > 10) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // If prepping for war, Golden Age will build units quickly if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !GetDiplomacyAI()->IsGoingForCultureVictory() && PreparingForWar(this)) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // If finishing up spaceship parts, Golden Age will help build those quickly if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetDiplomacyAI()->IsGoingForSpaceshipVictory() && EconomicAIHelpers::IsTestStrategy_GS_SpaceshipHomestretch(this)) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // If Persia and I'm at war, get a Golden Age going if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetPlayerTraits()->GetGoldenAgeMoveChange() > 0 && GetMilitaryAI()->GetNumberCivsAtWarWith() > 1 && !isGoldenAge()) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // If Brazil and we're closing in on Culture Victory if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetPlayerTraits()->GetGoldenAgeTourismModifier() > 0 && GetCulture()->GetNumCivsInfluentialOn() > (GC.getGame().GetGameCulture()->GetNumCivsInfluentialForWin() / 4)) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } // Create Great Work if there is a slot GreatWorkType eGreatWork = pGreatArtist->GetGreatWork(); if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetEconomicAI()->GetBestGreatWorkCity(pGreatArtist->plot(), eGreatWork)) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !isGoldenAge() && ((GC.getGame().getGameTurn() - pGreatArtist->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT())) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } //AMS: If still no directive, defaults at building great work. if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } return eDirective; }