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
- CvDiplomacyAI::ChangeOtherPlayerWarmongerAmountTimes100(PlayerTypes, int)
- CvDiplomacyAI::GetMajorCivApproach(PlayerTypes, bool) const
- CvDiplomacyAI::GetOtherPlayerNumMajorsConquered(PlayerTypes) const
- CvDiplomacyAI::GetOtherPlayerNumMinorsConquered(PlayerTypes) const
- CvDiplomacyAI::GetOtherPlayerWarmongerScore(PlayerTypes)
- CvDiplomacyAI::GetWarmongerHate() const
- CvDiplomacyAI::IsPlayerValid(PlayerTypes, bool)
- CvDiplomacyAI::SetWarmongerThreat(PlayerTypes, ThreatTypes)
- CvGame::countCivPlayersEverAlive() const
- CvGlobals::getDEFAULT_FLAVOR_VALUE()
- CvGlobals::getGame()
- CvGlobals::getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_AFRAID()
- CvGlobals::getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_FRIENDLY()
- CvGlobals::getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_GUARDED()
- CvGlobals::getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_HOSTILE()
- CvGlobals::getWARMONGER_THREAT_APPROACH_DECAY_PERCENT_NEUTRAL()
- CvGlobals::getWARMONGER_THREAT_CRITICAL_PERCENT_THRESHOLD()
- CvGlobals::getWARMONGER_THREAT_CRITICAL_THRESHOLD()
- CvGlobals::getWARMONGER_THREAT_MAJOR_THRESHOLD()
- CvGlobals::getWARMONGER_THREAT_MINOR_THRESHOLD()
- CvGlobals::getWARMONGER_THREAT_PER_TURN_DECAY()
- CvGlobals::getWARMONGER_THREAT_PERSONALITY_MOD()
- CvGlobals::getWARMONGER_THREAT_SEVERE_PERCENT_THRESHOLD()
- CvGlobals::getWARMONGER_THREAT_SEVERE_THRESHOLD()