CvDiplomacyAI::DoUpdatePeaceTreatyWillingness()
- Defined in
- CvDiplomacyAI.cpp, line 5186
- Class
- CvDiplomacyAI
- Hook name
CivHooks::CvDiplomacyAI_DoUpdatePeaceTreatyWillingness
Hooks
static bool BeforeCvDiplomacyAI_DoUpdatePeaceTreatyWillingness(CvDiplomacyAI* self);static void AfterCvDiplomacyAI_DoUpdatePeaceTreatyWillingness(CvDiplomacyAI* self);static void ReplaceCvDiplomacyAI_DoUpdatePeaceTreatyWillingness(void (*original)(CvDiplomacyAI*), CvDiplomacyAI* self);CivRegisterBefore<CivHooks::CvDiplomacyAI_DoUpdatePeaceTreatyWillingness>(host, &BeforeCvDiplomacyAI_DoUpdatePeaceTreatyWillingness);CivRegisterAfter<CivHooks::CvDiplomacyAI_DoUpdatePeaceTreatyWillingness>(host, &AfterCvDiplomacyAI_DoUpdatePeaceTreatyWillingness);CivRegisterReplace<CivHooks::CvDiplomacyAI_DoUpdatePeaceTreatyWillingness>(host, &ReplaceCvDiplomacyAI_DoUpdatePeaceTreatyWillingness);
Code
5185/// Updates what peace treaties we're willing to offer and accept5186void CvDiplomacyAI::DoUpdatePeaceTreatyWillingness()5187{5188 PeaceTreatyTypes eTreatyWillingToOffer, eTreatyWillingToAccept;5189 int iWillingToOfferScore, iWillingToAcceptScore;5190 WarProjectionTypes eWarProjection;51915192 // Loop through all (known) Players5193 PlayerTypes eLoopPlayer;5194 TeamTypes eLoopTeam;5195 for(int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)5196 {5197 eLoopPlayer = (PlayerTypes) iPlayerLoop;51985199 if(IsPlayerValid(eLoopPlayer))5200 {5201 eLoopTeam = GET_PLAYER(eLoopPlayer).getTeam();52025203 eTreatyWillingToOffer = NO_PEACE_TREATY_TYPE;5204 eTreatyWillingToAccept = NO_PEACE_TREATY_TYPE;5205 iWillingToOfferScore = 0;5206 iWillingToAcceptScore = 0;52075208 if(IsAtWar(eLoopPlayer))5209 {5210 // Have to be at war with the human for a certain amount of time before the AI will agree to peace5211 if(GET_PLAYER(eLoopPlayer).isHuman())5212 {5213 if(!IsWillingToMakePeaceWithHuman(eLoopPlayer))5214 {5215 SetTreatyWillingToOffer(eLoopPlayer, NO_PEACE_TREATY_TYPE);5216 SetTreatyWillingToAccept(eLoopPlayer, NO_PEACE_TREATY_TYPE);52175218 continue;5219 }5220 }52215222 // If we're out for conquest then no peace!5223 if(GetWarGoal(eLoopPlayer) != WAR_GOAL_CONQUEST)5224 {5225 eWarProjection = GetWarProjection(eLoopPlayer);52265227 // What we're willing to give up. The higher the number the more we're willing to part with52285229// if (IsWantsPeaceWithPlayer(eLoopPlayer))5230 {5231 // How is the war going?5232 switch(eWarProjection)5233 {5234 case WAR_PROJECTION_DESTRUCTION:5235 iWillingToOfferScore += /*100*/ GC.getPEACE_WILLINGNESS_OFFER_PROJECTION_DESTRUCTION();5236 break;5237 case WAR_PROJECTION_DEFEAT:5238 iWillingToOfferScore += /*60*/ GC.getPEACE_WILLINGNESS_OFFER_PROJECTION_DEFEAT();5239 break;5240 case WAR_PROJECTION_STALEMATE:5241 iWillingToOfferScore += /*20*/ GC.getPEACE_WILLINGNESS_OFFER_PROJECTION_STALEMATE();5242 break;5243 case WAR_PROJECTION_UNKNOWN:5244 iWillingToOfferScore += /*0*/ GC.getPEACE_WILLINGNESS_OFFER_PROJECTION_UNKNOWN();5245 break;5246 case WAR_PROJECTION_GOOD:5247 iWillingToOfferScore += /*-20*/ GC.getPEACE_WILLINGNESS_OFFER_PROJECTION_GOOD();5248 break;5249 case WAR_PROJECTION_VERY_GOOD:5250 iWillingToOfferScore += /*-50*/ GC.getPEACE_WILLINGNESS_OFFER_PROJECTION_VERY_GOOD();5251 break;5252 default:5253 break;5254 }52555256 // How much damage have we taken?5257 switch(GetWarDamageLevel(eLoopPlayer))5258 {5259 case WAR_DAMAGE_LEVEL_NONE:5260 iWillingToOfferScore += /*0*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_NONE();5261 break;5262 case WAR_DAMAGE_LEVEL_MINOR:5263 iWillingToOfferScore += /*10*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_MINOR();5264 break;5265 case WAR_DAMAGE_LEVEL_MAJOR:5266 iWillingToOfferScore += /*20*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_MAJOR();5267 break;5268 case WAR_DAMAGE_LEVEL_SERIOUS:5269 iWillingToOfferScore += /*50*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_SERIOUS();5270 break;5271 case WAR_DAMAGE_LEVEL_CRIPPLED:5272 iWillingToOfferScore += /*80*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_CRIPPLED();5273 break;5274 default:5275 break;5276 }52775278 // How much damage have we dished out?5279 switch(GET_PLAYER(eLoopPlayer).GetDiplomacyAI()->GetWarDamageLevel(GetPlayer()->GetID()))5280 {5281 case WAR_DAMAGE_LEVEL_NONE:5282 iWillingToOfferScore -= /*0*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_NONE();5283 break;5284 case WAR_DAMAGE_LEVEL_MINOR:5285 iWillingToOfferScore -= /*10*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_MINOR();5286 break;5287 case WAR_DAMAGE_LEVEL_MAJOR:5288 iWillingToOfferScore -= /*20*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_MAJOR();5289 break;5290 case WAR_DAMAGE_LEVEL_SERIOUS:5291 iWillingToOfferScore -= /*50*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_SERIOUS();5292 break;5293 case WAR_DAMAGE_LEVEL_CRIPPLED:5294 iWillingToOfferScore -= /*80*/ GC.getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_CRIPPLED();5295 break;5296 default:5297 break;5298 }52995300 // Do the final assessment5301 if(iWillingToOfferScore >= /*180*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_UN_SURRENDER())5302 eTreatyWillingToOffer = PEACE_TREATY_UNCONDITIONAL_SURRENDER;5303 else if(iWillingToOfferScore >= /*150*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_CAPITULATION())5304 eTreatyWillingToOffer = PEACE_TREATY_CAPITULATION;5305 else if(iWillingToOfferScore >= /*120*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_CESSION())5306 eTreatyWillingToOffer = PEACE_TREATY_CESSION;5307 else if(iWillingToOfferScore >= /*95*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_SURRENDER())5308 eTreatyWillingToOffer = PEACE_TREATY_SURRENDER;5309 else if(iWillingToOfferScore >= /*70*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_SUBMISSION())5310 eTreatyWillingToOffer = PEACE_TREATY_SUBMISSION;5311 else if(iWillingToOfferScore >= /*55*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_BACKDOWN())5312 eTreatyWillingToOffer = PEACE_TREATY_BACKDOWN;5313 else if(iWillingToOfferScore >= /*40*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_SETTLEMENT())5314 eTreatyWillingToOffer = PEACE_TREATY_SETTLEMENT;5315 else if(iWillingToOfferScore >= /*20*/ GC.getPEACE_WILLINGNESS_OFFER_THRESHOLD_ARMISTICE())5316 eTreatyWillingToOffer = PEACE_TREATY_ARMISTICE;5317 else // War Score could be negative here, but we're already assuming this player wants peace. But he's not willing to give up anything for it5318 eTreatyWillingToOffer = PEACE_TREATY_WHITE_PEACE;53195320 // If they've broken a peace deal before then we're not going to give them anything5321 if(GET_TEAM(eLoopTeam).IsHasBrokenPeaceTreaty())5322 {5323 if(eTreatyWillingToOffer > PEACE_TREATY_WHITE_PEACE)5324 eTreatyWillingToOffer = PEACE_TREATY_WHITE_PEACE;5325 }5326 }53275328 // What we're willing to accept from eLoopPlayer. The higher the number the more we want53295330 // How is the war going?5331 switch(eWarProjection)5332 {5333 case WAR_PROJECTION_DESTRUCTION:5334 iWillingToAcceptScore += /*-50*/ GC.getPEACE_WILLINGNESS_ACCEPT_PROJECTION_DESTRUCTION();5335 break;5336 case WAR_PROJECTION_DEFEAT:5337 iWillingToAcceptScore += /*-20*/ GC.getPEACE_WILLINGNESS_ACCEPT_PROJECTION_DEFEAT();5338 break;5339 case WAR_PROJECTION_STALEMATE:5340 iWillingToAcceptScore += /*-10*/ GC.getPEACE_WILLINGNESS_ACCEPT_PROJECTION_STALEMATE();5341 break;5342 case WAR_PROJECTION_UNKNOWN:5343 iWillingToAcceptScore += /*0*/ GC.getPEACE_WILLINGNESS_ACCEPT_PROJECTION_UNKNOWN();5344 break;5345 case WAR_PROJECTION_GOOD:5346 iWillingToAcceptScore += /*50*/ GC.getPEACE_WILLINGNESS_ACCEPT_PROJECTION_GOOD();5347 break;5348 case WAR_PROJECTION_VERY_GOOD:5349 iWillingToAcceptScore += /*100*/ GC.getPEACE_WILLINGNESS_ACCEPT_PROJECTION_VERY_GOOD();5350 break;5351 default:5352 break;5353 }53545355 // How easy would it be for us to squash them?5356 switch(GetPlayerTargetValue(eLoopPlayer))5357 {5358 case TARGET_VALUE_IMPOSSIBLE:5359 iWillingToAcceptScore += /*-50*/ GC.getPEACE_WILLINGNESS_ACCEPT_TARGET_IMPOSSIBLE();5360 break;5361 case TARGET_VALUE_BAD:5362 iWillingToAcceptScore += /*-20*/ GC.getPEACE_WILLINGNESS_ACCEPT_TARGET_BAD();5363 break;5364 case TARGET_VALUE_AVERAGE:5365 iWillingToAcceptScore += /*0*/ GC.getPEACE_WILLINGNESS_ACCEPT_TARGET_AVERAGE();5366 break;5367 case TARGET_VALUE_FAVORABLE:5368 iWillingToAcceptScore += /*20*/ GC.getPEACE_WILLINGNESS_ACCEPT_TARGET_FAVORABLE();5369 break;5370 case TARGET_VALUE_SOFT:5371 iWillingToAcceptScore += /*50*/ GC.getPEACE_WILLINGNESS_ACCEPT_TARGET_SOFT();5372 break;5373 default:5374 break;5375 }53765377 // Do the final assessment5378 if(iWillingToAcceptScore >= /*150*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_UN_SURRENDER())5379 eTreatyWillingToAccept = PEACE_TREATY_UNCONDITIONAL_SURRENDER;5380 else if(iWillingToAcceptScore >= /*115*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_CAPITULATION())5381 eTreatyWillingToAccept = PEACE_TREATY_CAPITULATION;5382 else if(iWillingToAcceptScore >= /*80*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_CESSION())5383 eTreatyWillingToAccept = PEACE_TREATY_CESSION;5384 else if(iWillingToAcceptScore >= /*65*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_SURRENDER())5385 eTreatyWillingToAccept = PEACE_TREATY_SURRENDER;5386 else if(iWillingToAcceptScore >= /*50*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_SUBMISSION())5387 eTreatyWillingToAccept = PEACE_TREATY_SUBMISSION;5388 else if(iWillingToAcceptScore >= /*35*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_BACKDOWN())5389 eTreatyWillingToAccept = PEACE_TREATY_BACKDOWN;5390 else if(iWillingToAcceptScore >= /*20*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_SETTLEMENT())5391 eTreatyWillingToAccept = PEACE_TREATY_SETTLEMENT;5392 else if(iWillingToAcceptScore >= /*10*/ GC.getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_ARMISTICE())5393 eTreatyWillingToAccept = PEACE_TREATY_ARMISTICE;5394 else// if (iWillingToAcceptScore >= /*0*/ GC.get())5395 eTreatyWillingToAccept = PEACE_TREATY_WHITE_PEACE;53965397 // If we're losing all wars then let's go ahead and accept a white peace5398 if (GetStateAllWars() == STATE_ALL_WARS_LOSING)5399 {5400 eTreatyWillingToAccept = PEACE_TREATY_WHITE_PEACE;5401 }5402 }5403 }54045405 SetTreatyWillingToOffer(eLoopPlayer, eTreatyWillingToOffer);5406 SetTreatyWillingToAccept(eLoopPlayer, eTreatyWillingToAccept);5407 }5408 }5409}
Calls
- CvDiplomacyAI::GetPlayer()
- CvDiplomacyAI::GetPlayerTargetValue(PlayerTypes) const
- CvDiplomacyAI::GetStateAllWars() const
- CvDiplomacyAI::GetWarDamageLevel(PlayerTypes) const
- CvDiplomacyAI::GetWarGoal(PlayerTypes) const
- CvDiplomacyAI::GetWarProjection(PlayerTypes) const
- CvDiplomacyAI::IsAtWar(PlayerTypes)
- CvDiplomacyAI::IsPlayerValid(PlayerTypes, bool)
- CvDiplomacyAI::IsWillingToMakePeaceWithHuman(PlayerTypes)
- CvDiplomacyAI::SetTreatyWillingToAccept(PlayerTypes, PeaceTreatyTypes)
- CvDiplomacyAI::SetTreatyWillingToOffer(PlayerTypes, PeaceTreatyTypes)
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_PROJECTION_DEFEAT()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_PROJECTION_DESTRUCTION()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_PROJECTION_GOOD()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_PROJECTION_STALEMATE()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_PROJECTION_UNKNOWN()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_PROJECTION_VERY_GOOD()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_TARGET_AVERAGE()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_TARGET_BAD()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_TARGET_FAVORABLE()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_TARGET_IMPOSSIBLE()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_TARGET_SOFT()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_ARMISTICE()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_BACKDOWN()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_CAPITULATION()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_CESSION()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_SETTLEMENT()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_SUBMISSION()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_SURRENDER()
- CvGlobals::getPEACE_WILLINGNESS_ACCEPT_THRESHOLD_UN_SURRENDER()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_PROJECTION_DEFEAT()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_PROJECTION_DESTRUCTION()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_PROJECTION_GOOD()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_PROJECTION_STALEMATE()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_PROJECTION_UNKNOWN()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_PROJECTION_VERY_GOOD()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_ARMISTICE()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_BACKDOWN()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_CAPITULATION()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_CESSION()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_SETTLEMENT()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_SUBMISSION()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_SURRENDER()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_THRESHOLD_UN_SURRENDER()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_CRIPPLED()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_MAJOR()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_MINOR()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_NONE()
- CvGlobals::getPEACE_WILLINGNESS_OFFER_WAR_DAMAGE_SERIOUS()
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayer::isHuman() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvTeam::getTeam(TeamTypes)
- CvTeam::IsHasBrokenPeaceTreaty() const