Bazaar developer reference

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

Called by