CvDiplomacyAI::IsDontSettleAcceptable(PlayerTypes) const
- Defined in
- CvDiplomacyAI.cpp, line 20776
- Class
- CvDiplomacyAI
- Hook name
CivHooks::CvDiplomacyAI_IsDontSettleAcceptable
Hooks
static bool BeforeCvDiplomacyAI_IsDontSettleAcceptable(const CvDiplomacyAI* self, PlayerTypes ePlayer, bool& result);static void AfterCvDiplomacyAI_IsDontSettleAcceptable(const CvDiplomacyAI* self, PlayerTypes ePlayer, bool& result);static bool ReplaceCvDiplomacyAI_IsDontSettleAcceptable(bool (*original)(const CvDiplomacyAI*, PlayerTypes), const CvDiplomacyAI* self, PlayerTypes ePlayer);CivRegisterBefore<CivHooks::CvDiplomacyAI_IsDontSettleAcceptable>(host, &BeforeCvDiplomacyAI_IsDontSettleAcceptable);CivRegisterAfter<CivHooks::CvDiplomacyAI_IsDontSettleAcceptable>(host, &AfterCvDiplomacyAI_IsDontSettleAcceptable);CivRegisterReplace<CivHooks::CvDiplomacyAI_IsDontSettleAcceptable>(host, &ReplaceCvDiplomacyAI_IsDontSettleAcceptable);
Code
20775/// Is this AI willing to not settle near ePlayer?20776bool CvDiplomacyAI::IsDontSettleAcceptable(PlayerTypes ePlayer) const20777{20778 MajorCivApproachTypes eApproach = GetMajorCivApproach(ePlayer, /*bHideTrueFeelings*/ true);2077920780 // If player is afraid, always say yes20781 if(eApproach == MAJOR_CIV_APPROACH_AFRAID)20782 return true;2078320784 // If player is Hostile, always say no20785 else if(eApproach == MAJOR_CIV_APPROACH_HOSTILE)20786 return false;2078720788 MajorCivOpinionTypes eOpinion = GetMajorCivOpinion(ePlayer);2078920790 // If player is unforgivable, always say no20791 if(eOpinion == MAJOR_CIV_OPINION_UNFORGIVABLE)20792 return false;2079320794 // If the player has deleted the EXPANSION Flavor we have to account for that20795 int iExpansionFlavor = /*5*/ GC.getDEFAULT_FLAVOR_VALUE();2079620797 for(int iFlavorLoop = 0; iFlavorLoop < GC.getNumFlavorTypes(); iFlavorLoop++)20798 {20799 if(GC.getFlavorTypes((FlavorTypes) iFlavorLoop) == "FLAVOR_EXPANSION")20800 {20801 iExpansionFlavor = m_pPlayer->GetGrandStrategyAI()->GetPersonalityAndGrandStrategy((FlavorTypes) iFlavorLoop);20802 break;20803 }20804 }2080520806 // Default threshold20807 // EX: 8 - 10 Expansion = -2 * 5 = -10%20808 // EX: 8 - 7 Expansion = 1 * 5 = 5%20809 // EX: 8 - 5 Expansion = 3 * 5 = 15%20810 // EX: 8 - 2 Expansion = 6 * 5 = 30%20811 int iThreshold = (/*8*/ GC.getDONT_SETTLE_FLAVOR_BASE() - iExpansionFlavor) * /*5*/ GC.getDONT_SETTLE_FLAVOR_MULTIPLIER();2081220813 bool bFriendly = eApproach == MAJOR_CIV_APPROACH_FRIENDLY;2081420815 // If player is Friendly, add weight20816 if(bFriendly)20817 iThreshold += /*30*/ GC.getDONT_SETTLE_FRIENDLY();2081820819 int iMilitaryMod = 0;2082020821 // Military Strength compared to us20822 switch(GetPlayerMilitaryStrengthComparedToUs(ePlayer))20823 {20824 case STRENGTH_PATHETIC:20825 if(!bFriendly)20826 iMilitaryMod += /*-30*/ GC.getDONT_SETTLE_STRENGTH_PATHETIC();20827 break;20828 case STRENGTH_WEAK:20829 if(!bFriendly)20830 iMilitaryMod += /*-20*/ GC.getDONT_SETTLE_STRENGTH_WEAK();20831 break;20832 case STRENGTH_POOR:20833 if(!bFriendly)20834 iMilitaryMod += /*-10*/ GC.getDONT_SETTLE_STRENGTH_POOR();20835 break;20836 case STRENGTH_AVERAGE:20837 iMilitaryMod += /*0*/ GC.getDONT_SETTLE_STRENGTH_AVERAGE();20838 break;20839 case STRENGTH_STRONG:20840 iMilitaryMod += /*25*/ GC.getDONT_SETTLE_STRENGTH_STRONG();20841 break;20842 case STRENGTH_POWERFUL:20843 iMilitaryMod += /*40*/ GC.getDONT_SETTLE_STRENGTH_POWERFUL();20844 break;20845 case STRENGTH_IMMENSE:20846 iMilitaryMod += /*60*/ GC.getDONT_SETTLE_STRENGTH_IMMENSE();20847 break;20848 }2084920850 // Military Aggressive Posture - MULTIPLIER20851 switch(GetMilitaryAggressivePosture(ePlayer))20852 {20853 case AGGRESSIVE_POSTURE_NONE:20854 iMilitaryMod *= /*100*/ GC.getDONT_SETTLE_MOD_MILITARY_POSTURE_NONE();20855 break;20856 case AGGRESSIVE_POSTURE_LOW:20857 iMilitaryMod *= /*100*/ GC.getDONT_SETTLE_MOD_MILITARY_POSTURE_LOW();20858 break;20859 case AGGRESSIVE_POSTURE_MEDIUM:20860 iMilitaryMod *= /*150*/ GC.getDONT_SETTLE_MOD_MILITARY_POSTURE_MEDIUM();20861 break;20862 case AGGRESSIVE_POSTURE_HIGH:20863 iMilitaryMod *= /*200*/ GC.getDONT_SETTLE_MOD_MILITARY_POSTURE_HIGH();20864 break;20865 case AGGRESSIVE_POSTURE_INCREDIBLE:20866 iMilitaryMod *= /*300*/ GC.getDONT_SETTLE_MOD_MILITARY_POSTURE_INCREDIBLE();20867 break;20868 }2086920870 // Bring it out of hundreds20871 iMilitaryMod /= 100;2087220873 iThreshold += iMilitaryMod;2087420875 int iRand = GC.getGame().getJonRandNum(/*100*/ GC.getDONT_SETTLE_RAND(), "Diplomacy AI: will AI agree to not settle near a player?");2087620877 // Passes the test?20878 if(iRand < iThreshold)20879 return true;2088020881 return false;20882}
Calls
- CvDiplomacyAI::GetMajorCivApproach(PlayerTypes, bool) const
- CvDiplomacyAI::GetMajorCivOpinion(PlayerTypes) const
- CvDiplomacyAI::GetMilitaryAggressivePosture(PlayerTypes) const
- CvDiplomacyAI::GetPlayerMilitaryStrengthComparedToUs(PlayerTypes) const
- CvGame::getJonRandNum(int, const char *)
- CvGlobals::getDEFAULT_FLAVOR_VALUE()
- CvGlobals::getDONT_SETTLE_FLAVOR_BASE()
- CvGlobals::getDONT_SETTLE_FLAVOR_MULTIPLIER()
- CvGlobals::getDONT_SETTLE_FRIENDLY()
- CvGlobals::getDONT_SETTLE_MOD_MILITARY_POSTURE_HIGH()
- CvGlobals::getDONT_SETTLE_MOD_MILITARY_POSTURE_INCREDIBLE()
- CvGlobals::getDONT_SETTLE_MOD_MILITARY_POSTURE_LOW()
- CvGlobals::getDONT_SETTLE_MOD_MILITARY_POSTURE_MEDIUM()
- CvGlobals::getDONT_SETTLE_MOD_MILITARY_POSTURE_NONE()
- CvGlobals::getDONT_SETTLE_RAND()
- CvGlobals::getDONT_SETTLE_STRENGTH_AVERAGE()
- CvGlobals::getDONT_SETTLE_STRENGTH_IMMENSE()
- CvGlobals::getDONT_SETTLE_STRENGTH_PATHETIC()
- CvGlobals::getDONT_SETTLE_STRENGTH_POOR()
- CvGlobals::getDONT_SETTLE_STRENGTH_POWERFUL()
- CvGlobals::getDONT_SETTLE_STRENGTH_STRONG()
- CvGlobals::getDONT_SETTLE_STRENGTH_WEAK()
- CvGlobals::getFlavorTypes(FlavorTypes)
- CvGlobals::getGame()
- CvGlobals::getNumFlavorTypes()
- CvGrandStrategyAI::GetPersonalityAndGrandStrategy(FlavorTypes, bool)
- CvPlayer::GetGrandStrategyAI() const
std::operator==