Bazaar developer reference

CvDiplomacyAI::GetBestApproachTowardsMajorCiv(PlayerTypes, int &, bool, bool, WarFaceTypes &)

Defined in
CvDiplomacyAI.cpp, line 2859
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_GetBestApproachTowardsMajorCiv

Hooks

static bool BeforeCvDiplomacyAI_GetBestApproachTowardsMajorCiv(CvDiplomacyAI* self, PlayerTypes ePlayer, int& iHighestWeight, bool bLookAtOtherPlayers, bool bLog, WarFaceTypes& eWarFace, MajorCivApproachTypes& result);static void AfterCvDiplomacyAI_GetBestApproachTowardsMajorCiv(CvDiplomacyAI* self, PlayerTypes ePlayer, int& iHighestWeight, bool bLookAtOtherPlayers, bool bLog, WarFaceTypes& eWarFace, MajorCivApproachTypes& result);static MajorCivApproachTypes ReplaceCvDiplomacyAI_GetBestApproachTowardsMajorCiv(MajorCivApproachTypes (*original)(CvDiplomacyAI*, PlayerTypes, int&, bool, bool, WarFaceTypes&), CvDiplomacyAI* self, PlayerTypes ePlayer, int& iHighestWeight, bool bLookAtOtherPlayers, bool bLog, WarFaceTypes& eWarFace);CivRegisterBefore<CivHooks::CvDiplomacyAI_GetBestApproachTowardsMajorCiv>(host, &BeforeCvDiplomacyAI_GetBestApproachTowardsMajorCiv);CivRegisterAfter<CivHooks::CvDiplomacyAI_GetBestApproachTowardsMajorCiv>(host, &AfterCvDiplomacyAI_GetBestApproachTowardsMajorCiv);CivRegisterReplace<CivHooks::CvDiplomacyAI_GetBestApproachTowardsMajorCiv>(host, &ReplaceCvDiplomacyAI_GetBestApproachTowardsMajorCiv);

Code

2858/// What is the best approach to take towards a player?  Can also pass in iHighestWeight by reference if you just want to know what the player feels most strongly about without actually caring about WHAT it is2859MajorCivApproachTypes CvDiplomacyAI::GetBestApproachTowardsMajorCiv(PlayerTypes ePlayer, int& iHighestWeight, bool bLookAtOtherPlayers, bool bLog, WarFaceTypes& eWarFace)2860{2861	CvAssertMsg(ePlayer >= 0, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");2862	CvAssertMsg(ePlayer < MAX_MAJOR_CIVS, "DIPLOMACY_AI: Invalid Player Index.  Please send Jon this with your last 5 autosaves and what changelist # you're playing.");28632864	TeamTypes eTeam = GET_PLAYER(ePlayer).getTeam();2865	CvTeam* pTeam = &GET_TEAM(eTeam);28662867	PlayerTypes eMyPlayer = GetPlayer()->GetID();28682869	MajorCivApproachTypes eApproach;2870	// This vector is what we'll stuff the values into first, and pass it into our logging function (which can't take a CvWeightedVector, which we need to sort...)2871	FStaticVector< int, 128, true, c_eCiv5GameplayDLL > viApproachWeights;28722873	int iApproachLoop;28742875	viApproachWeights.clear();28762877	for(iApproachLoop = 0; iApproachLoop < NUM_MAJOR_CIV_APPROACHES; iApproachLoop++)2878	{2879		viApproachWeights.push_back(0);2880	}28812882	////////////////////////////////////2883	// NEUTRAL DEFAULT WEIGHT2884	////////////////////////////////////28852886	viApproachWeights[MAJOR_CIV_APPROACH_NEUTRAL] += /*4*/ GC.getAPPROACH_NEUTRAL_DEFAULT();28872888	////////////////////////////////////2889	// CURRENT APPROACH BIASES2890	////////////////////////////////////28912892	// Bias for our current Approach.  This should prevent it from jumping around from turn-to-turn as much2893	// We use the scratch pad here since the normal array has been cleared so that we have knowledge of who we've already assigned an Approach for this turn; this should be the only place the scratch pad is used2894	MajorCivApproachTypes eOldApproach = (MajorCivApproachTypes) m_paeApproachScratchPad[ePlayer];2895	if(eOldApproach == NO_MAJOR_CIV_APPROACH)2896		eOldApproach = MAJOR_CIV_APPROACH_NEUTRAL;28972898	viApproachWeights[eOldApproach] += /*5*/ GC.getAPPROACH_BIAS_FOR_CURRENT();28992900	// If our previous Approach was deceptive, this gives us a bonus for war2901	if(eOldApproach == MAJOR_CIV_APPROACH_DECEPTIVE)2902		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*2*/ GC.getAPPROACH_WAR_CURRENTLY_DECEPTIVE();29032904	// If our previous Approach was Hostile, boost the strength (so we're unlikely to switch out of it)2905	if(eOldApproach == MAJOR_CIV_APPROACH_HOSTILE)2906		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*5*/ GC.getAPPROACH_HOSTILE_CURRENTLY_HOSTILE();29072908	// Wanted war last turn bias: war must be calm or better to apply2909	WarStateTypes eWarState = GetWarState(ePlayer);2910	if(eWarState > WAR_STATE_STALEMATE)2911	{2912		// If we're planning a war then give it a bias so that we don't get away from it too easily2913		if(eOldApproach == MAJOR_CIV_APPROACH_WAR)2914			viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*3*/ GC.getAPPROACH_WAR_CURRENTLY_WAR();2915	}29162917	// Conquest bias: must be a stalemate or better to apply (or not at war yet)2918	if(eWarState == NO_WAR_STATE_TYPE || eWarState > WAR_STATE_DEFENSIVE)2919	{2920		if(IsGoingForWorldConquest())2921			viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*5*/ GC.getAPPROACH_WAR_CONQUEST_GRAND_STRATEGY();2922	}29232924	////////////////////////////////////2925	// PERSONALITY2926	////////////////////////////////////29272928	for(iApproachLoop = 0; iApproachLoop < NUM_MAJOR_CIV_APPROACHES; iApproachLoop++)2929	{2930		viApproachWeights[iApproachLoop] += GetPersonalityMajorCivApproachBias((MajorCivApproachTypes) iApproachLoop);2931	}29322933	////////////////////////////////////2934	// OPINION2935	////////////////////////////////////29362937	switch(GetMajorCivOpinion(ePlayer))2938	{2939	case MAJOR_CIV_OPINION_UNFORGIVABLE:2940		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*10*/ GC.getAPPROACH_OPINION_UNFORGIVABLE_WAR();2941		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*4*/ GC.getAPPROACH_OPINION_UNFORGIVABLE_HOSTILE();2942		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_OPINION_UNFORGIVABLE_DECEPTIVE();2943		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*4*/ GC.getAPPROACH_OPINION_UNFORGIVABLE_GUARDED();2944		break;2945	case MAJOR_CIV_OPINION_ENEMY:2946		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*8*/ GC.getAPPROACH_OPINION_ENEMY_WAR();2947		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*4*/ GC.getAPPROACH_OPINION_ENEMY_HOSTILE();2948		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*1*/ GC.getAPPROACH_OPINION_ENEMY_DECEPTIVE();2949		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*4*/ GC.getAPPROACH_OPINION_ENEMY_GUARDED();2950		break;2951	case MAJOR_CIV_OPINION_COMPETITOR:2952		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_OPINION_COMPETITOR_WAR();2953		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*4*/ GC.getAPPROACH_OPINION_COMPETITOR_HOSTILE();2954		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*2*/ GC.getAPPROACH_OPINION_COMPETITOR_DECEPTIVE();2955		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*2*/ GC.getAPPROACH_OPINION_COMPETITOR_GUARDED();2956		break;2957	case MAJOR_CIV_OPINION_NEUTRAL:2958		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_OPINION_NEUTRAL_DECEPTIVE();2959		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY]  += /*2*/ GC.getAPPROACH_OPINION_NEUTRAL_FRIENDLY();2960		break;2961	case MAJOR_CIV_OPINION_FAVORABLE:2962		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-5*/ GC.getAPPROACH_OPINION_FAVORABLE_HOSTILE();2963		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_OPINION_FAVORABLE_DECEPTIVE();2964		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*4*/ GC.getAPPROACH_OPINION_FAVORABLE_FRIENDLY();2965		break;2966	case MAJOR_CIV_OPINION_FRIEND:2967		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-5*/ GC.getAPPROACH_OPINION_FRIEND_HOSTILE();2968		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*10*/ GC.getAPPROACH_OPINION_FRIEND_FRIENDLY();2969		break;2970	case MAJOR_CIV_OPINION_ALLY:2971		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*10*/ GC.getAPPROACH_OPINION_ALLY_FRIENDLY();2972		break;2973	}29742975	////////////////////////////////////2976	// DECLARATION OF FRIENDSHIP2977	////////////////////////////////////29782979	if(IsDoFAccepted(ePlayer))2980	{2981		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*3*/ GC.getAPPROACH_DECEPTIVE_WORKING_WITH_PLAYER();2982		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*15*/ GC.getAPPROACH_FRIENDLY_WORKING_WITH_PLAYER();2983		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-100*/ GC.getAPPROACH_HOSTILE_WORKING_WITH_PLAYER();2984		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*-100*/ GC.getAPPROACH_GUARDED_WORKING_WITH_PLAYER();2985	}29862987	////////////////////////////////////2988	// DENOUNCE2989	////////////////////////////////////29902991	// We denounced them2992	if(IsDenouncedPlayer(ePlayer))2993	{2994		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*10*/ GC.getAPPROACH_WAR_DENOUNCED();2995		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*10*/ GC.getAPPROACH_HOSTILE_DENOUNCED();2996		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*5*/ GC.getAPPROACH_GUARDED_DENOUNCED();2997		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-100*/ GC.getAPPROACH_FRIENDLY_DENOUNCED();2998		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-100*/ GC.getAPPROACH_DECEPTIVE_DENOUNCED();2999	}30003001	// We were friends and they betrayed us!3002	if(IsFriendDenouncedUs(ePlayer))3003	{3004		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*10*/ GC.getAPPROACH_WAR_DENOUNCED();3005		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*10*/ GC.getAPPROACH_HOSTILE_DENOUNCED();3006		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*5*/ GC.getAPPROACH_GUARDED_DENOUNCED();3007		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-100*/ GC.getAPPROACH_FRIENDLY_DENOUNCED();3008		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-100*/ GC.getAPPROACH_DECEPTIVE_DENOUNCED();3009	}30103011	// They denounced us3012	if(GET_PLAYER(ePlayer).GetDiplomacyAI()->IsDenouncedPlayer(eMyPlayer))3013	{3014		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*10*/ GC.getAPPROACH_WAR_DENOUNCED();3015		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*10*/ GC.getAPPROACH_HOSTILE_DENOUNCED();3016		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*5*/ GC.getAPPROACH_GUARDED_DENOUNCED();3017		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-100*/ GC.getAPPROACH_FRIENDLY_DENOUNCED();3018		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-100*/ GC.getAPPROACH_DECEPTIVE_DENOUNCED();3019	}30203021	////////////////////////////////////3022	// WORKING AGAINST THIS PLAYER?3023	////////////////////////////////////30243025	//if (IsWorkingAgainstPlayer(ePlayer))3026	//{3027	//	viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*10*/ GC.getAPPROACH_DECEPTIVE_WORKING_AGAINST_PLAYER();3028	//	viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*10*/ GC.getAPPROACH_HOSTILE_WORKING_AGAINST_PLAYER();3029	//	viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*10*/ GC.getAPPROACH_WAR_WORKING_AGAINST_PLAYER();3030	//}30313032	////////////////////////////////////3033	// MISTREATED OUR PROTECTED MINORS?3034	////////////////////////////////////30353036	//antonjs: consider: add cases for IsAngryAboutProtectedMinorBullied, IsAngryAboutSidedWithTheirProtectedMinor30373038	if(IsAngryAboutProtectedMinorKilled(ePlayer) || IsAngryAboutProtectedMinorAttacked(ePlayer))3039	{3040		int iTurnsSinceMinorAttack = GetTurnsSincePlayerAttackedProtectedMinor(ePlayer);3041		if (IsAngryAboutProtectedMinorKilled(ePlayer) || iTurnsSinceMinorAttack < /*50*/ GC.getOPINION_WEIGHT_ATTACKED_PROTECTED_MINOR_RECENTLY_NUM_TURNS())3042		{3043			viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*6*/ GC.getAPPROACH_ATTACKED_PROTECTED_MINOR_WAR();3044			viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*2*/ GC.getAPPROACH_ATTACKED_PROTECTED_MINOR_HOSTILE();3045			viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*1*/ GC.getAPPROACH_ATTACKED_PROTECTED_MINOR_GUARDED();3046		}3047		else3048		{3049			viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_ATTACKED_PROTECTED_MINOR_PAST_WAR();3050			viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*1*/ GC.getAPPROACH_ATTACKED_PROTECTED_MINOR_PAST_HOSTILE();3051			viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*1*/ GC.getAPPROACH_ATTACKED_PROTECTED_MINOR_PAST_GUARDED();3052		}3053	}30543055	////////////////////////////////////3056	// They made a demand3057	////////////////////////////////////30583059	if(IsDemandEverMade(ePlayer))3060	{3061		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-6*/ GC.getAPPROACH_DECEPTIVE_DEMAND();3062		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-6*/ GC.getAPPROACH_FRIENDLY_DEMAND();3063	}30643065	////////////////////////////////////3066	// BROKEN PROMISES ;_;3067	////////////////////////////////////30683069	// Broken military promise with us?3070	if(IsPlayerBrokenMilitaryPromise(ePlayer))3071	{3072		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_BROKEN_MILITARY_PROMISE();3073		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-10*/ GC.getAPPROACH_DECEPTIVE_BROKEN_MILITARY_PROMISE();3074		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-10*/ GC.getAPPROACH_FRIENDLY_BROKEN_MILITARY_PROMISE();3075	}3076	// Broken military promise with someone?3077	else if(pTeam->IsBrokenMilitaryPromise())3078	{3079		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*5*/ GC.getAPPROACH_WAR_BROKEN_MILITARY_PROMISE_WORLD();3080		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-4*/ GC.getAPPROACH_DECEPTIVE_BROKEN_MILITARY_PROMISE_WORLD();3081		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-4*/ GC.getAPPROACH_FRIENDLY_BROKEN_MILITARY_PROMISE_WORLD();3082	}3083	// Ignored our request for them to make a military promise?3084	else if(IsPlayerIgnoredMilitaryPromise(ePlayer))3085	{3086		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-4*/ GC.getAPPROACH_DECEPTIVE_IGNORED_MILITARY_PROMISE();3087		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-4*/ GC.getAPPROACH_FRIENDLY_IGNORED_MILITARY_PROMISE();3088	}30893090	// Broken Expansion promise with us?3091	if(IsPlayerBrokenExpansionPromise(ePlayer))3092	{3093		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_BROKEN_EXPANSION_PROMISE();3094		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-6*/ GC.getAPPROACH_DECEPTIVE_BROKEN_EXPANSION_PROMISE();3095		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-6*/ GC.getAPPROACH_FRIENDLY_BROKEN_EXPANSION_PROMISE();3096	}3097	// Ignored our request for them to make a Expansion promise?3098	else if(IsPlayerIgnoredExpansionPromise(ePlayer))3099	{3100		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*3*/ GC.getAPPROACH_WAR_IGNORED_EXPANSION_PROMISE();3101		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-4*/ GC.getAPPROACH_DECEPTIVE_IGNORED_EXPANSION_PROMISE();3102		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-4*/ GC.getAPPROACH_FRIENDLY_IGNORED_EXPANSION_PROMISE();3103	}31043105	// Broken Border promise with us?3106	if(IsPlayerBrokenBorderPromise(ePlayer))3107	{3108		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_BROKEN_BORDER_PROMISE();3109		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-6*/ GC.getAPPROACH_DECEPTIVE_BROKEN_BORDER_PROMISE();3110		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-6*/ GC.getAPPROACH_FRIENDLY_BROKEN_BORDER_PROMISE();3111	}3112	// Ignored our request for them to make a Border promise?3113	else if(IsPlayerIgnoredBorderPromise(ePlayer))3114	{3115		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*3*/ GC.getAPPROACH_WAR_IGNORED_BORDER_PROMISE();3116		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-4*/ GC.getAPPROACH_DECEPTIVE_IGNORED_BORDER_PROMISE();3117		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-4*/ GC.getAPPROACH_FRIENDLY_IGNORED_BORDER_PROMISE();3118	}31193120	// Broken CityState attack promise with us?3121	if(IsPlayerBrokenAttackCityStatePromise(ePlayer))3122	{3123		//antonjs: todo: rename these constants3124		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_BROKEN_CITY_STATE_PROMISE();3125		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-10*/ GC.getAPPROACH_DECEPTIVE_BROKEN_CITY_STATE_PROMISE();3126		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-10*/ GC.getAPPROACH_FRIENDLY_BROKEN_CITY_STATE_PROMISE();3127	}3128	// Broken CityState attack promise with someone?3129	else if(pTeam->IsBrokenCityStatePromise())3130	{3131		//antonjs: todo: rename these constants3132		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*3*/ GC.getAPPROACH_WAR_BROKEN_CITY_STATE_PROMISE_WORLD();3133		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-3*/ GC.getAPPROACH_DECEPTIVE_BROKEN_CITY_STATE_PROMISE_WORLD();3134		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-3*/ GC.getAPPROACH_FRIENDLY_BROKEN_CITY_STATE_PROMISE_WORLD();3135	}3136	// Ignored our request for them to make a CityState attack promise?3137	else if(IsPlayerIgnoredAttackCityStatePromise(ePlayer))3138	{3139		//antonjs: todo: rename these constants3140		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_IGNORED_CITY_STATE_PROMISE();3141		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-4*/ GC.getAPPROACH_DECEPTIVE_IGNORED_CITY_STATE_PROMISE();3142		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-4*/ GC.getAPPROACH_FRIENDLY_IGNORED_CITY_STATE_PROMISE();3143	}31443145	// Promise to not bully a city-state3146	if(IsPlayerBrokenBullyCityStatePromise(ePlayer))3147	{3148		//antonjs: todo: custom constants3149		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_BROKEN_CITY_STATE_PROMISE() / 2;3150		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-10*/ GC.getAPPROACH_DECEPTIVE_BROKEN_CITY_STATE_PROMISE() / 2;3151		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-10*/ GC.getAPPROACH_FRIENDLY_BROKEN_CITY_STATE_PROMISE() / 2;3152	}3153	else if(IsPlayerIgnoredBullyCityStatePromise(ePlayer))3154	{3155		//antonjs: todo: custom constants3156		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*4*/ GC.getAPPROACH_WAR_IGNORED_CITY_STATE_PROMISE() / 2;3157		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*-4*/ GC.getAPPROACH_DECEPTIVE_IGNORED_CITY_STATE_PROMISE() / 2;3158		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*-4*/ GC.getAPPROACH_FRIENDLY_IGNORED_CITY_STATE_PROMISE() / 2;3159	}316031613162	////////////////////////////////////3163	// MILITARY THREAT3164	////////////////////////////////////31653166	switch(GetMilitaryThreat(ePlayer))3167	{3168	case THREAT_CRITICAL:3169		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_DECEPTIVE_MILITARY_THREAT_CRITICAL();3170		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*4*/ GC.getAPPROACH_GUARDED_MILITARY_THREAT_CRITICAL();3171		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] += /*4*/ GC.getAPPROACH_AFRAID_MILITARY_THREAT_CRITICAL();3172		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*0*/ GC.getAPPROACH_FRIENDLY_MILITARY_THREAT_CRITICAL();3173		break;3174	case THREAT_SEVERE:3175		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_DECEPTIVE_MILITARY_THREAT_SEVERE();3176		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*3*/ GC.getAPPROACH_GUARDED_MILITARY_THREAT_SEVERE();3177		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] += /*2*/ GC.getAPPROACH_AFRAID_MILITARY_THREAT_SEVERE();3178		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*0*/ GC.getAPPROACH_FRIENDLY_MILITARY_THREAT_SEVERE();3179		break;3180	case THREAT_MAJOR:3181		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_DECEPTIVE_MILITARY_THREAT_MAJOR();3182		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*2*/ GC.getAPPROACH_GUARDED_MILITARY_THREAT_MAJOR();3183		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] += /*1*/ GC.getAPPROACH_AFRAID_MILITARY_THREAT_MAJOR();3184		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*0*/ GC.getAPPROACH_FRIENDLY_MILITARY_THREAT_MAJOR();3185		break;3186	case THREAT_MINOR:3187		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*0*/ GC.getAPPROACH_DECEPTIVE_MILITARY_THREAT_MINOR();3188		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*0*/ GC.getAPPROACH_GUARDED_MILITARY_THREAT_MINOR();3189		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] += /*1*/ GC.getAPPROACH_AFRAID_MILITARY_THREAT_MINOR();3190		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*0*/ GC.getAPPROACH_FRIENDLY_MILITARY_THREAT_MINOR();3191		break;3192	case THREAT_NONE:3193		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*2*/ GC.getAPPROACH_HOSTILE_MILITARY_THREAT_NONE();3194		break;3195	}31963197	////////////////////////////////////3198	// NUKES3199	////////////////////////////////////32003201	int iTheirNukes = GET_PLAYER(ePlayer).getNumNukeUnits();3202	int iOurNukes = m_pPlayer->getNumNukeUnits();3203	int iHowLikelyAreTheyToNukeUs = GET_PLAYER(ePlayer).isHuman() ? 100 : 0; // assume humans will use 'em if they've got 'em3204	if (iHowLikelyAreTheyToNukeUs == 0)3205	{3206		if (IsNukedBy(ePlayer) || GET_PLAYER(ePlayer).GetDiplomacyAI()->IsNukedBy(eMyPlayer)) // nukes have been used already3207		{3208			iHowLikelyAreTheyToNukeUs = 100;3209		}3210		//else if (GET_PLAYER(ePlayer).GetDiplomacyAI()->GetWarProjection(eMyPlayer) == WAR_PROJECTION_DESTRUCTION) // they are surely going to lose a war with 3211		//{3212		//	iHowLikelyAreTheyToNukeUs = 100;3213		//}3214		else3215		{3216			int iFlavorNuke = GET_PLAYER(ePlayer).GetGrandStrategyAI()->GetPersonalityAndGrandStrategy((FlavorTypes)GC.getInfoTypeForString("FLAVOR_USE_NUKE")) + 1;3217			iHowLikelyAreTheyToNukeUs = iFlavorNuke * iFlavorNuke; // use nukes has to pass 2 rolls3218		}3219	}3220	// do we have nukes and they don't3221	if(iTheirNukes == 0 && iOurNukes > 0)3222	{3223		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += 25;3224		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += 25;3225		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += 25;3226		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] -= 25;3227		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] -= 50;3228	}3229	// do they have nukes and we don't3230	else if (iTheirNukes > 0 && iOurNukes == 0 && iHowLikelyAreTheyToNukeUs > 50)3231	{3232		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] += 50;3233		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += 50;3234		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] -= 25;3235		viApproachWeights[MAJOR_CIV_APPROACH_WAR] -= 50;3236	}3237	// do we both have nukes3238	else if (iTheirNukes > 0 && iOurNukes > 0 && iHowLikelyAreTheyToNukeUs > 25)3239	{3240		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += 25;3241		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] -= 25;3242		viApproachWeights[MAJOR_CIV_APPROACH_WAR] -= 25;3243		viApproachWeights[MAJOR_CIV_APPROACH_NEUTRAL] += 25;3244	}32453246	int iPlayerLoop;3247	PlayerTypes eLoopPlayer;32483249	////////////////////////////////////3250	// AT WAR RIGHT NOW3251	////////////////////////////////////32523253	for(iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)3254	{3255		eLoopPlayer = (PlayerTypes) iPlayerLoop;32563257		// Don't look at the guy we're already thinking about or anyone on his team3258		if(ePlayer != eLoopPlayer && GET_PLAYER(ePlayer).getTeam() != GET_PLAYER(eLoopPlayer).getTeam())3259		{3260			if(IsPlayerValid(eLoopPlayer))3261			{3262				if(GET_TEAM(GetTeam()).isAtWar(GET_PLAYER(eLoopPlayer).getTeam()))3263				{3264					if(GetStateAllWars() == STATE_ALL_WARS_NEUTRAL)3265						viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*-9*/ GC.getAPPROACH_WAR_AT_WAR_WITH_PLAYER_WARS_NEUTRAL();3266					else if(GetStateAllWars() == STATE_ALL_WARS_WINNING)3267						viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*-3*/ GC.getAPPROACH_WAR_AT_WAR_WITH_PLAYER_WARS_WINNING();3268					else3269						viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*-12*/ GC.getAPPROACH_WAR_AT_WAR_WITH_PLAYER_WARS_LOSING();32703271					viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-2*/ GC.getAPPROACH_HOSTILE_AT_WAR_WITH_PLAYER();3272					viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*2*/ GC.getAPPROACH_DECEPTIVE_AT_WAR_WITH_PLAYER();3273					viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*0*/ GC.getAPPROACH_GUARDED_AT_WAR_WITH_PLAYER();3274					viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*2*/ GC.getAPPROACH_FRIENDLY_AT_WAR_WITH_PLAYER();3275				}3276			}3277		}3278	}32793280	////////////////////////////////////3281	// APPROACHES TOWARDS OTHER PLAYERS3282	////////////////////////////////////32833284	// Look at Approaches we've already adopted for players we feel more strongly about3285	if(bLookAtOtherPlayers)3286	{3287		bool bMinorCiv;32883289		for(iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)3290		{3291			eLoopPlayer = (PlayerTypes) iPlayerLoop;32923293			// Don't look at the guy we're already thinking about3294			if(eLoopPlayer != ePlayer)3295			{3296				if(IsPlayerValid(eLoopPlayer))3297				{3298					bMinorCiv = GET_PLAYER(eLoopPlayer).isMinorCiv();32993300					// Planning war with this player? (Can't ONLY use the War Approach because this could have been cleared before, but we have to also check it because it could have just been set for someone else earlier this turn)3301					if(GetWarGoal(eLoopPlayer) == WAR_GOAL_PREPARE ||3302					        (!bMinorCiv && GetMajorCivApproach(eLoopPlayer, /*bHideTrueFeelings*/ false) == MAJOR_CIV_APPROACH_WAR))	// Major Civs only3303					{3304						viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*-12*/ GC.getAPPROACH_WAR_PLANNING_WAR_WITH_ANOTHER_PLAYER();3305						viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-2*/ GC.getAPPROACH_HOSTILE_PLANNING_WAR_WITH_ANOTHER_PLAYER();3306						viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*2*/ GC.getAPPROACH_DECEPTIVE_PLANNING_WAR_WITH_ANOTHER_PLAYER();3307						viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] += /*0*/ GC.getAPPROACH_GUARDED_PLANNING_WAR_WITH_ANOTHER_PLAYER();3308						viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*2*/ GC.getAPPROACH_FRIENDLY_PLANNING_WAR_WITH_ANOTHER_PLAYER();3309					}33103311					// Approaches already assigned to other higher-priority Majors3312					if(!bMinorCiv)3313					{3314						switch(GetMajorCivApproach(eLoopPlayer, /*bHideTrueFeelings*/ false))3315						{3316						case MAJOR_CIV_APPROACH_HOSTILE:3317							viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*-2*/ GC.getAPPROACH_WAR_HOSTILE_WITH_ANOTHER_PLAYER();3318							viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-2*/ GC.getAPPROACH_HOSTILE_HOSTILE_WITH_ANOTHER_PLAYER();3319							viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*2*/ GC.getAPPROACH_DECEPTIVE_HOSTILE_WITH_ANOTHER_PLAYER();3320							viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*2*/ GC.getAPPROACH_FRIENDLY_HOSTILE_WITH_ANOTHER_PLAYER();3321							break;3322						case MAJOR_CIV_APPROACH_AFRAID:3323							viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*-4*/ GC.getAPPROACH_WAR_AFRAID_WITH_ANOTHER_PLAYER();3324							viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] += /*-4*/ GC.getAPPROACH_HOSTILE_AFRAID_WITH_ANOTHER_PLAYER();3325							viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += /*2*/ GC.getAPPROACH_DECEPTIVE_AFRAID_WITH_ANOTHER_PLAYER();3326							viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += /*2*/ GC.getAPPROACH_FRIENDLY_AFRAID_WITH_ANOTHER_PLAYER();3327							break;3328						}3329					}3330				}3331			}3332		}3333	}33343335	////////////////////////////////////3336	// Are we getting money from trade with them3337	////////////////////////////////////3338	int iCurrentTradeValue = GetPlayer()->GetTrade()->GetAllTradeValueFromPlayerTimes100(YIELD_GOLD, ePlayer) / 100;3339	if(iCurrentTradeValue > 0) // todo: add thresholds3340	{3341		// todo: constant/XML3342		viApproachWeights[MAJOR_CIV_APPROACH_WAR] -= 5;3343		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] -= 5;3344		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] += 5;3345		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] -= 1;3346		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] -= 1;3347		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] += 5;3348		viApproachWeights[MAJOR_CIV_APPROACH_NEUTRAL] -= 2;33493350		// sanity check - if we will go negative from war with this player, don't go to war3351		int iGPT = GetPlayer()->calculateGoldRate();3352		int iDeltaGPT = iGPT - iCurrentTradeValue;3353		if (iGPT >= 0 && (iDeltaGPT < 0))3354		{3355			viApproachWeights[MAJOR_CIV_APPROACH_WAR] += iDeltaGPT;3356		}3357	}33583359	////////////////////////////////////3360	// WAR PROJECTION - how do we think a war against ePlayer will go?3361	////////////////////////////////////33623363	switch(GetWarProjection(ePlayer))3364	{3365	case WAR_PROJECTION_DESTRUCTION:3366		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*45*/ GC.getAPPROACH_WAR_PROJECTION_DESTRUCTION_PERCENT();3367		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3368		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*45*/ GC.getAPPROACH_WAR_PROJECTION_DESTRUCTION_PERCENT();3369		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3370		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] *= /*125*/ GC.getAPPROACH_GUARDED_PROJECTION_DESTRUCTION_PERCENT();3371		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] /= 100;3372		break;3373	case WAR_PROJECTION_DEFEAT:3374		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*60*/ GC.getAPPROACH_WAR_PROJECTION_DEFEAT_PERCENT();3375		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3376		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*60*/ GC.getAPPROACH_WAR_PROJECTION_DEFEAT_PERCENT();3377		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3378		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] *= /*115*/ GC.getAPPROACH_GUARDED_PROJECTION_DEFEAT_PERCENT();3379		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] /= 100;3380		break;3381	case WAR_PROJECTION_STALEMATE:3382		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*80*/ GC.getAPPROACH_WAR_PROJECTION_STALEMATE_PERCENT();3383		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3384		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] *= /*105*/ GC.getAPPROACH_GUARDED_PROJECTION_STALEMATE_PERCENT();3385		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] /= 100;3386		break;3387	case WAR_PROJECTION_UNKNOWN:3388		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*100*/ GC.getAPPROACH_WAR_PROJECTION_UNKNOWN_PERCENT();3389		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3390		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] *= /*100*/ GC.getAPPROACH_GUARDED_PROJECTION_UNKNOWN_PERCENT();3391		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] /= 100;3392		break;3393	case WAR_PROJECTION_GOOD:3394		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*150*/ GC.getAPPROACH_WAR_PROJECTION_GOOD_PERCENT();3395		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3396		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*150*/ GC.getAPPROACH_WAR_PROJECTION_GOOD_PERCENT();3397		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3398		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] *= /*80*/ GC.getAPPROACH_GUARDED_PROJECTION_GOOD_PERCENT();3399		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] /= 100;3400		break;3401	case WAR_PROJECTION_VERY_GOOD:3402		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*180*/ GC.getAPPROACH_WAR_PROJECTION_VERY_GOOD_PERCENT();3403		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3404		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*180*/ GC.getAPPROACH_WAR_PROJECTION_VERY_GOOD_PERCENT();3405		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3406		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] *= /*60*/ GC.getAPPROACH_GUARDED_PROJECTION_VERY_GOOD_PERCENT();3407		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] /= 100;3408		break;3409	}34103411	////////////////////////////////////3412	// Is this player a reckless expander?3413	////////////////////////////////////34143415	if(IsPlayerRecklessExpander(ePlayer))3416	{3417		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*160*/ GC.getAPPROACH_WAR_RECKLESS_EXPANDER();3418		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3419		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*160*/ GC.getAPPROACH_WAR_RECKLESS_EXPANDER();3420		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3421	}34223423	////////////////////////////////////3424	// Is this player already in a war with someone who isn't us?3425	////////////////////////////////////34263427	bool bThinkingAboutDogpiling = false;3428	for(iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)3429	{3430		eLoopPlayer = (PlayerTypes) iPlayerLoop;34313432		// Is this a player we have relations with?3433		if(eLoopPlayer != GET_PLAYER(ePlayer).GetID() && eLoopPlayer != m_pPlayer->GetID() && GET_PLAYER(ePlayer).GetDiplomacyAI()->IsPlayerValid(eLoopPlayer))3434		{3435			eWarState = GET_PLAYER(ePlayer).GetDiplomacyAI()->GetWarState(eLoopPlayer);3436			if(eWarState != NO_WAR_STATE_TYPE)3437			{3438				bThinkingAboutDogpiling = true;3439			}3440		}3441	}3442	if (bThinkingAboutDogpiling)3443	{3444		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= 200;3445		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3446		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= 150;3447		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3448	}34493450	////////////////////////////////////3451	// DISTANCE - the farther away a player is the less likely we are to want to attack them!3452	////////////////////////////////////34533454	// Factor in distance3455	switch(GetPlayer()->GetProximityToPlayer(ePlayer))3456	{3457	case PLAYER_PROXIMITY_NEIGHBORS:3458		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*115*/ GC.getAPPROACH_WAR_PROXIMITY_NEIGHBORS();3459		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3460		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*115*/ GC.getAPPROACH_WAR_PROXIMITY_NEIGHBORS();3461		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3462		break;3463	case PLAYER_PROXIMITY_CLOSE:3464		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*100*/ GC.getAPPROACH_WAR_PROXIMITY_CLOSE();3465		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3466		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*100*/ GC.getAPPROACH_WAR_PROXIMITY_CLOSE();3467		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3468		break;3469	case PLAYER_PROXIMITY_FAR:3470		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*60*/ GC.getAPPROACH_WAR_PROXIMITY_FAR();3471		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3472		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*60*/ GC.getAPPROACH_WAR_PROXIMITY_FAR();3473		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3474		break;3475	case PLAYER_PROXIMITY_DISTANT:3476		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*50*/ GC.getAPPROACH_WAR_PROXIMITY_DISTANT();3477		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3478		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= /*50*/ GC.getAPPROACH_WAR_PROXIMITY_DISTANT();3479		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3480		break;3481	}34823483	////////////////////////////////////3484	// PEACE TREATY - have we made peace with this player before?  If so, reduce war weight3485	////////////////////////////////////34863487	int iPeaceTreatyTurn = GET_TEAM(GetTeam()).GetTurnMadePeaceTreatyWithTeam(eTeam);3488	if(iPeaceTreatyTurn > -1)3489	{3490		int iTurnsSincePeace = GC.getGame().getElapsedGameTurns() - iPeaceTreatyTurn;3491		if(iTurnsSincePeace < /*25*/ GC.getTURNS_SINCE_PEACE_WEIGHT_DAMPENER())3492		{3493			viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= /*65*/ GC.getAPPROACH_WAR_HAS_MADE_PEACE_BEFORE_PERCENT();3494			viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3495		}3496	}34973498	////////////////////////////////////3499	// DUEL - If there's only 2 players in this game, no friendly or deceptive3500	////////////////////////////////////35013502	int iNumMajorsLeft = GC.getGame().countMajorCivsAlive();3503	if(iNumMajorsLeft == 2)3504	{3505		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] = 0;3506		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] = 0;3507	}35083509	////////////////////////////////////3510	// COOP WAR - agreed to go to war with someone?3511	////////////////////////////////////35123513	if(IsLockedIntoCoopWar(ePlayer))3514		viApproachWeights[MAJOR_CIV_APPROACH_WAR] += /*1000*/ GC.getCOOP_WAR_LOCKED_TURNS_WAR_WEIGHT();35153516	////////////////////////////////////3517	// RANDOM FACTOR3518	////////////////////////////////////35193520	int iRandAmount;3521	for(iApproachLoop = 0; iApproachLoop < NUM_MAJOR_CIV_APPROACHES; iApproachLoop++)3522	{3523		// Increase weights to hundreds to give us more fidelity3524		viApproachWeights[iApproachLoop] *= 100;35253526		iRandAmount = viApproachWeights[iApproachLoop] * /*15*/ GC.getAPPROACH_RANDOM_PERCENT();35273528		// If the amount is negative, only bad things can happen.  Plus, it's not likely we're going to pick this anyways3529		if(iRandAmount > 0)3530		{3531			iRandAmount /= 100;3532			viApproachWeights[iApproachLoop] += GC.getGame().getJonRandNumVA(iRandAmount, "Randomizing Diplo AI Major Civ Approach Weight (%d; %d)", (int)GetPlayer()->GetID(), (int)ePlayer);3533		}3534	}35353536	////////////////////////////////////3537	// CAN WE DECLARE WAR?3538	////////////////////////////////////35393540#if defined(MOD_EVENTS_WAR_AND_PEACE)3541	if(!GET_TEAM(GetTeam()).canDeclareWar(GET_PLAYER(ePlayer).getTeam(), GetPlayer()->GetID()))3542#else3543	if(!GET_TEAM(GetTeam()).canDeclareWar(GET_PLAYER(ePlayer).getTeam()))3544#endif3545	{3546		// If we're already at war with this player don't cancel out the weight for them!3547		if(!GET_TEAM(GetTeam()).isAtWar(GET_PLAYER(ePlayer).getTeam()))3548		{3549			viApproachWeights[MAJOR_CIV_APPROACH_WAR] = 0;3550		}3551	}35523553	////////////////////////////////////3554	// On the same team?3555	////////////////////////////////////3556	if(GetTeam() == GET_PLAYER(ePlayer).getTeam())3557	{3558		viApproachWeights[MAJOR_CIV_APPROACH_WAR] = 0;3559		viApproachWeights[MAJOR_CIV_APPROACH_HOSTILE] = 0;3560		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] = 0;3561		viApproachWeights[MAJOR_CIV_APPROACH_GUARDED] = 0;3562		viApproachWeights[MAJOR_CIV_APPROACH_AFRAID] = 0;3563		viApproachWeights[MAJOR_CIV_APPROACH_NEUTRAL] = 0;3564		viApproachWeights[MAJOR_CIV_APPROACH_FRIENDLY] = 100;3565	}35663567	////////////////////////////////////3568	// MODIFY WAR BASED ON HUMAN DIFFICULTY LEVEL3569	////////////////////////////////////35703571	if(GET_PLAYER(ePlayer).isHuman())3572	{3573		HandicapTypes eHandicap = GET_PLAYER(ePlayer).getHandicapType();3574		int iWarMod = 100;35753576		CvHandicapInfo* pHandicap = GC.getHandicapInfo(eHandicap);3577		if(pHandicap)3578			iWarMod = pHandicap->getAIDeclareWarProb();35793580		viApproachWeights[MAJOR_CIV_APPROACH_WAR] *= iWarMod;3581		viApproachWeights[MAJOR_CIV_APPROACH_WAR] /= 100;3582		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] *= iWarMod;3583		viApproachWeights[MAJOR_CIV_APPROACH_DECEPTIVE] /= 100;3584	}35853586	// This vector is what we'll use to sort3587	CvWeightedVector< MajorCivApproachTypes, 128 > vApproachWeightsForSorting;3588	vApproachWeightsForSorting.clear();35893590	// Transfer values from our normal int vector (which we need for logging) to the Weighted Vector we can sort3591	for(iApproachLoop = 0; iApproachLoop < NUM_MAJOR_CIV_APPROACHES; iApproachLoop++)3592	{3593		vApproachWeightsForSorting.push_back((MajorCivApproachTypes) iApproachLoop, viApproachWeights[iApproachLoop]);3594	}35953596	vApproachWeightsForSorting.SortItems();35973598	eApproach = vApproachWeightsForSorting.GetElement(0);3599	iHighestWeight = vApproachWeightsForSorting.GetWeight(0);36003601	// If we're going to war then update how we're acting3602	if(eApproach == MAJOR_CIV_APPROACH_WAR)3603	{3604		eWarFace = GetWarFaceWithPlayer(ePlayer);36053606		// If we haven't set WarFace on a previous turn, figure out what it should be3607		if(eWarFace == NO_WAR_FACE_TYPE)3608		{3609			MajorCivApproachTypes eTempApproach;36103611			// Use index of 1 since we already know element 0 is war; that will give us the most reasonable approach3612			eTempApproach = vApproachWeightsForSorting.GetElement(1);36133614			// Pick among the Approach types3615			switch(eTempApproach)3616			{36173618			case MAJOR_CIV_APPROACH_HOSTILE:3619				eWarFace = WAR_FACE_HOSTILE;3620				break;36213622			case MAJOR_CIV_APPROACH_DECEPTIVE:3623			case MAJOR_CIV_APPROACH_AFRAID:3624			case MAJOR_CIV_APPROACH_FRIENDLY:36253626				// Denounced them?  If so, let's not be too friendly3627				if(IsDenouncedPlayer(ePlayer))3628				{3629					eWarFace = WAR_FACE_NEUTRAL;3630				}3631				else3632				{3633					eWarFace = WAR_FACE_FRIENDLY;3634				}3635				break;36363637			default:3638				eWarFace = WAR_FACE_NEUTRAL;3639				break;3640			}3641		}3642	}3643	else3644	{3645		eWarFace = NO_WAR_FACE_TYPE;3646	}36473648	// Don't want to log if we're just seeing what the highest weight is and don't care about what Approach we like3649	if(bLog)3650	{3651		LogMajorCivApproachUpdate(ePlayer, viApproachWeights.begin(), eApproach, eOldApproach, eWarFace);3652	}36533654	return eApproach;3655}

Calls

Called by