Bazaar developer reference

CvDiplomacyAI::DoUpdateWarmongerThreats()

Defined in
CvDiplomacyAI.cpp, line 7296
Class
CvDiplomacyAI
Hook name
CivHooks::CvDiplomacyAI_DoUpdateWarmongerThreats

Hooks

static bool BeforeCvDiplomacyAI_DoUpdateWarmongerThreats(CvDiplomacyAI* self);static void AfterCvDiplomacyAI_DoUpdateWarmongerThreats(CvDiplomacyAI* self);static void ReplaceCvDiplomacyAI_DoUpdateWarmongerThreats(void (*original)(CvDiplomacyAI*), CvDiplomacyAI* self);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoUpdateWarmongerThreats>(host, &BeforeCvDiplomacyAI_DoUpdateWarmongerThreats);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoUpdateWarmongerThreats>(host, &AfterCvDiplomacyAI_DoUpdateWarmongerThreats);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoUpdateWarmongerThreats>(host, &ReplaceCvDiplomacyAI_DoUpdateWarmongerThreats);

Code

7295/// Updates how much of a threat each player is to run amok and break everything7296void CvDiplomacyAI::DoUpdateWarmongerThreats()7297{7298	ThreatTypes eThreatType;72997300	int iThreatValue;73017302	int iNumPlayersKilled;7303	int iNumPlayersEver = GC.getGame().countCivPlayersEverAlive();7304	int iPlayersKilledPercent;7305	int iWarmongerMod;73067307	PlayerTypes eLoopPlayer;7308	for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)7309	{7310		eLoopPlayer = (PlayerTypes) iPlayerLoop;73117312		if(IsPlayerValid(eLoopPlayer))7313		{7314			eThreatType = THREAT_NONE;7315			iThreatValue = GetOtherPlayerWarmongerScore(eLoopPlayer);73167317			// Now do the final assessment7318			if(iThreatValue >= /*200*/ GC.getWARMONGER_THREAT_CRITICAL_THRESHOLD())7319				eThreatType = THREAT_CRITICAL;7320			else if(iThreatValue >= /*100*/ GC.getWARMONGER_THREAT_SEVERE_THRESHOLD())7321				eThreatType = THREAT_SEVERE;7322			else if(iThreatValue >= /*50*/ GC.getWARMONGER_THREAT_MAJOR_THRESHOLD())7323				eThreatType = THREAT_MAJOR;7324			else if(iThreatValue >= /*20*/ GC.getWARMONGER_THREAT_MINOR_THRESHOLD())7325				eThreatType = THREAT_MINOR;73267327			// Also test % of players killed (in case we're on a map with very few players or something)7328			iNumPlayersKilled = GetOtherPlayerNumMinorsConquered(eLoopPlayer) + GetOtherPlayerNumMajorsConquered(eLoopPlayer);7329			if(iNumPlayersKilled > 0)7330			{7331				iPlayersKilledPercent = iNumPlayersKilled * 100 / iNumPlayersEver;73327333				iWarmongerMod = GetWarmongerHate() - /*5*/ GC.getDEFAULT_FLAVOR_VALUE();	// Calculate difference from default7334				iWarmongerMod *= /*10*/ GC.getWARMONGER_THREAT_PERSONALITY_MOD();	// This will range from -50 to 50 (%)7335				iPlayersKilledPercent += (iPlayersKilledPercent * iWarmongerMod / 100);73367337				if(iPlayersKilledPercent >= /*40*/ GC.getWARMONGER_THREAT_CRITICAL_PERCENT_THRESHOLD())7338					eThreatType = THREAT_CRITICAL;7339				if(iPlayersKilledPercent >= /*25*/ GC.getWARMONGER_THREAT_SEVERE_PERCENT_THRESHOLD())7340					eThreatType = THREAT_SEVERE;7341			}73427343			// Set the Threat7344			SetWarmongerThreat(eLoopPlayer, eThreatType);7345			// decay score7346#if defined(MOD_API_EXTENSIONS)7347			int iDecayModifier = 100;7348#if defined(MOD_CONFIG_AI_IN_XML)7349			switch (GetMajorCivApproach(eLoopPlayer, false)) {7350				case MAJOR_CIV_APPROACH_WAR:7351					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_HOSTILE();7352					break;7353				case MAJOR_CIV_APPROACH_HOSTILE:7354					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_HOSTILE();7355					break;7356				case MAJOR_CIV_APPROACH_DECEPTIVE:7357					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_GUARDED();7358					break;7359				case MAJOR_CIV_APPROACH_GUARDED:7360					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_GUARDED();7361					break;7362				case MAJOR_CIV_APPROACH_AFRAID:7363					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_AFRAID();7364					break;7365				case MAJOR_CIV_APPROACH_NEUTRAL:7366					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_NEUTRAL();7367					break;7368				case MAJOR_CIV_APPROACH_FRIENDLY:7369					iDecayModifier = GC.getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_FRIENDLY();7370					break;7371				default:7372					break;7373			}7374#endif7375#endif73767377#if defined(MOD_API_EXTENSIONS)7378				// TODO - WH - should decay be normalise to a base of 1000, so if actual warmonger value is 5000, decay will be (5000/1000) * 5, ie 25 per turn7379				ChangeOtherPlayerWarmongerAmountTimes100(eLoopPlayer, /*-5*/GC.getWARMONGER_THREAT_PER_TURN_DECAY() * iDecayModifier);7380#else7381				ChangeOtherPlayerWarmongerAmount(eLoopPlayer, /*-5*/GC.getWARMONGER_THREAT_PER_TURN_DECAY());7382#endif7383		}7384	}7385}

Calls

Called by