//AMS: Wait for some turns if no work slot is available. GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveWriter(CvUnit* pGreatWriter) { 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_CULTURE_BLAST; } // If not going for culture win and a Level 2 or 3 Tenet is available, try to snag it if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !GetDiplomacyAI()->IsGoingForCultureVictory() && GetPlayerPolicies()->CanGetAdvancedTenet()) { eDirective = GREAT_PEOPLE_DIRECTIVE_CULTURE_BLAST; } // Create Great Work if there is a slot GreatWorkType eGreatWork = pGreatWriter->GetGreatWork(); if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetEconomicAI()->GetBestGreatWorkCity(pGreatWriter->plot(), eGreatWork)) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } else if ((GC.getGame().getGameTurn() - pGreatWriter->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT()) { eDirective = GREAT_PEOPLE_DIRECTIVE_CULTURE_BLAST; } //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; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveWriter(CvUnit* pGreatWriter) { 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_CULTURE_BLAST; } // If not going for culture win and a Level 2 or 3 Tenet is available, try to snag it if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && !GetDiplomacyAI()->IsGoingForCultureVictory() && GetPlayerPolicies()->CanGetAdvancedTenet()) { eDirective = GREAT_PEOPLE_DIRECTIVE_CULTURE_BLAST; } // Create Great Work if there is a slot GreatWorkType eGreatWork = pGreatWriter->GetGreatWork(); if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetEconomicAI()->GetBestGreatWorkCity(pGreatWriter->plot(), eGreatWork)) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } else { eDirective = GREAT_PEOPLE_DIRECTIVE_CULTURE_BLAST; } 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; }
//AMS: Instead of culture blast when created if no great work slot, we wait some turns until use... GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveMusician(CvUnit* pGreatMusician) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; // If headed on a concert tour, keep going if (pGreatMusician->getArmyID() != FFreeList::INVALID_INDEX) { eDirective = GREAT_PEOPLE_DIRECTIVE_TOURISM_BLAST; } // If closing in on a Culture win, go for the Concert Tour if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetDiplomacyAI()->IsGoingForCultureVictory() && GetCulture()->GetNumCivsInfluentialOn() > (GC.getGame().GetGameCulture()->GetNumCivsInfluentialForWin() / 2)) { CvPlot* pTarget = FindBestMusicianTargetPlot(pGreatMusician, true); if(pTarget) { eDirective = GREAT_PEOPLE_DIRECTIVE_TOURISM_BLAST; } } // Create Great Work if there is a slot GreatWorkType eGreatWork = pGreatMusician->GetGreatWork(); if (eDirective == NO_GREAT_PEOPLE_DIRECTIVE_TYPE && GetEconomicAI()->GetBestGreatWorkCity(pGreatMusician->plot(), eGreatWork)) { eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } else if ((GC.getGame().getGameTurn() - pGreatMusician->getGameTurnCreated()) >= GC.getAI_HOMELAND_GREAT_PERSON_TURNS_TO_WAIT()) { CvPlot* pTarget = FindBestMusicianTargetPlot(pGreatMusician, true); if(pTarget) { eDirective = GREAT_PEOPLE_DIRECTIVE_TOURISM_BLAST; } } //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; }