Bazaar developer reference

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

Called by