CK3 DatabaseCrusader Kings III · 1.20.1.2 “Crozier” · unofficial
Silk & Silverout Tue, Nov 17What's free, what needs the DLC, price →

Interaction · Uncategorized actions

Offer of Peace

No costThe AI weighs itnot in the character menu

What you need

You

To send it

  • The war:
    • Has a valid Casus Belli
    • is_white_peace_possible = yes

To see it in the menu

  • If played by the AI:
    • Character war (at least 1):
      • casus_belli = { … }
    • If

      a check the game hides

      Then

      • None of these

        • The war:
          • casus_belli ?= { … }
          • Attacker war score at least 10
        • The war:
          • casus_belli ?= { … }
          • Defender war score at least 70

Which character you can pick

  • The war:
    • Hostages cannot be exchanged to settle Great Holy Wars
    • Hostages cannot be used to settle a …

Offer of Peace is an uncategorized character interaction in Crusader Kings III. The AI weighs it. Reasons the AI weighs include Other Wars (+10), Peacemaker (+10), Peacemaker (+10) and 8 more. Patch 1.20.1.2, from game/common/character_interactions/00_war.txt.

for a guide, post or blog
Quick answers (1)
How do I get the AI to accept Offer of Peace?
The AI weighs it. Its reasons: War Score, War Score, Long War, Significantly Bankrupt, Other Wars +10, Peacemaker +10, Peacemaker +10, The Secret History +10, The Secret History +10, Cowed by predecessor's beheading +30, Cowed by predecessor's beheading +30, Astute Diplomats Cultural Tradition +10, Astute Diplomats Cultural Tradition +10, Struggle Phase Bonus +10, Greatest of Khans' Onslaught -70, Occupied Counties that will be taken, The character you send's value as a Hostage for White Peace and The other character's value as a Hostage for White Peace.

Will they accept?

The AI adds these up and accepts above zero. Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base-30
War Score
when
  • The war’s casus belli: Has the target as the war's defender
attacker_war_score
War Score
when
  • The war’s casus belli: Has the target as the war's attacker
defender_war_score
Long War
when
  • The war: War days at least 365
varies
Significantly Bankrupt
when
  • The war: War days at least 182
  • The war’s casus belli: Has you as the war's defender
  • One of these

    • Debt level at least 1
    • or

      Treasury debt level at least 1
varies
Other Wars
when
  • The war’s casus belli: Has the target as the war's attacker
  • The character you target › Any character war: Has the target as the war's defender
+10
Their personality (AI values: vengefulness (scripted), greed (scripted), zeal (scripted))varies
Peacemaker
when
  • The war’s casus belli:
    • Has the target as the war's defender
    • primary_attacker = { has_perk = peacemaker_perk }
+10
Peacemaker
when
  • The war’s casus belli:
    • Has the target as the war's attacker
    • primary_defender = { has_perk = peacemaker_perk }
+10
The Secret History
when
  • The war’s casus belli:
    • Has the target as the war's defender
    • primary_attacker = { … }
+10
The Secret History
when
  • The war’s casus belli:
    • Has the target as the war's attacker
    • primary_defender = { … }
+10
Cowed by predecessor's beheading
when
  • The war’s casus belli:
    • Has the target as the war's attacker
    • primary_attacker = { is_ai = yes save_temporary_scope_as = attacker }
    • primary_defender = { … }
+30
Cowed by predecessor's beheading
when
  • The war’s casus belli:
    • Has the target as the war's defender
    • primary_defender = { is_ai = yes save_temporary_scope_as = defender }
    • primary_attacker = { … }
+30
Astute Diplomats Cultural Tradition
when
  • The war’s casus belli:
    • Has the target as the war's defender
    • primary_attacker = { … }
+10
Astute Diplomats Cultural Tradition
when
  • The war’s casus belli:
    • Has the target as the war's attacker
    • primary_defender = { … }
+10
Struggle Phase Bonus
when
  • One of these

    • Any character struggle:
      • involvement = involved
      • All of these

        • has_struggle_phase_parameter = white_peace_acceptance_between_involved_or_interloper_with_region_easier
        • The character you target › Any character struggle: Is the struggle temp
    • or

      Any character struggle:
      • involvement = interloper
      • All of these

        • has_struggle_phase_parameter = white_peace_acceptance_between_involved_or_interloper_with_region_easier
        • The character you target › Any character struggle: Is the struggle temp
+10
Greatest of Khans' Onslaught
when
  • The war:
    • The war’s casus belli is Greatest of Khans' Onslaught
    • Has you as the war's defender
-70
Occupied Counties that will be taken
when
  • The war:
    • The war’s casus belli is Greatest of Khans' Onslaught
    • Attacker war score at most 25
    • primary_defender = { … }
    • Has you as the war's defender
varies
The character you send's value as a Hostage for White Peacevaries
The other character's value as a Hostage for White Peacevaries
Acceptance (ai_accept) (283 lines of game script)
base = -30
compare_modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_defender = scope:recipient
		}
	}
	target = scope:war
	value = attacker_war_score
	desc = WARSCORE_MODIFIER
}
compare_modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_attacker = scope:recipient
		}
	}
	target = scope:war
	value = defender_war_score
	desc = WARSCORE_MODIFIER
}
compare_modifier = {
	target = scope:war
	trigger = {
		scope:war = {
			war_days >= 365
		}
	}
	value = {
		value = war_days
		divide = 91
	}
	desc = WAR_LENGTH
}
modifier = {
	scope:war = {
		war_days >= 182
	}
	scope:war.casus_belli = {
		primary_defender = root
	}
	OR = {
		debt_level >= 1
		treasury_debt_level >= 1
	}
	add = {
		value = debt_level
		multiply = 20
	}
	desc = COMPLETELY_BANKRUPT
}
modifier = {
	scope:war.casus_belli = {
		primary_attacker = scope:recipient
	}
	scope:recipient = {
		any_character_war = {
			this != scope:war
			primary_defender = scope:recipient
		}
	}
	add = 10
	desc = CONCERN_ABOUT_OTHER_WARS
}
ai_value_modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_defender = scope:recipient
		}
	}
	ai_vengefulness = {
		if = {
			limit = {
				scope:war.casus_belli = {
					primary_defender = scope:recipient
				}
			}
			value = -0.25
		}
	}
	ai_greed = {
		if = {
			limit = {
				scope:war.casus_belli = {
					primary_attacker = scope:recipient
				}
			}
			value = -0.25
		}
	}
	ai_zeal = {
		value = -0.2
		if = {
			limit = {
				faith = {
					faith_hostility_level = {
						target = scope:actor.faith
						value = 2
					}
				}
			}
			multiply = 2
		}
		if = {
			limit = {
				faith = {
					faith_hostility_level = {
						target = scope:actor.faith
						value = 3
					}
				}
			}
			multiply = 3
		}
		if = {
			limit = {
				OR = {
					ai_zeal <= 0
					faith = {
						faith_hostility_level = {
							target = scope:actor.faith
							value <= 0
						}
					}
				}
			}
			value = 0
		}
	}
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_defender = scope:recipient
			primary_attacker = {
				has_perk = peacemaker_perk
			}
		}
	}
	add = peacemaker_value
	desc = PEACEMAKER_PERK_MODIFIER
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_attacker = scope:recipient
			primary_defender = {
				has_perk = peacemaker_perk
			}
		}
	}
	add = peacemaker_value
	desc = PEACEMAKER_PERK_MODIFIER
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_defender = scope:recipient
			primary_attacker = {
				dynasty ?= {
					has_dynasty_perk = mpo_nomad_legacy_3
				}
			}
		}
	}
	add = 10
	desc = NOMAD_LEGACY_PERK_MODIFIER
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_attacker = scope:recipient
			primary_defender = {
				dynasty ?= {
					has_dynasty_perk = mpo_nomad_legacy_3
				}
			}
		}
	}
	add = 10
	desc = NOMAD_LEGACY_PERK_MODIFIER
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_attacker = scope:recipient
			primary_attacker = {
				is_ai = yes
				save_temporary_scope_as = attacker
			}
			primary_defender = {
				has_variable = peace_acceptance_head_scare
				var:peace_acceptance_head_scare = {
					this = scope:attacker
				}
			}
		}
	}
	add = 30
	desc = COWED_BY_SEVERED_HEAD_MODIFIER
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_defender = scope:recipient
			primary_defender = {
				is_ai = yes
				save_temporary_scope_as = defender
			}
			primary_attacker = {
				has_variable = peace_acceptance_head_scare
				var:peace_acceptance_head_scare = {
					this = scope:defender
				}
			}
		}
	}
	add = 30
	desc = COWED_BY_SEVERED_HEAD_MODIFIER
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_defender = scope:recipient
			primary_attacker = {
				culture = {
					has_cultural_parameter = facilitate_white_peace
				}
			}
		}
	}
	add = 10
	desc = TRADITION_BONUS_WHITE_PEACE
}
modifier = {
	trigger = {
		scope:war.casus_belli = {
			primary_attacker = scope:recipient
			primary_defender = {
				culture = {
					has_cultural_parameter = facilitate_white_peace
				}
			}
		}
	}
	add = 10
	desc = TRADITION_BONUS_WHITE_PEACE
}
modifier = {
	trigger = {
		scope:actor = {
			OR = {
				any_character_struggle = {
					involvement = involved
					is_struggle_parameter_active_secondary_character_involvement_either_trigger = {
						PARAMETER = white_peace_acceptance_between_involved_or_interloper_with_region_easier
						CHAR = scope:recipient
					}
				}
				any_character_struggle = {
					involvement = interloper
					is_struggle_parameter_active_secondary_character_involvement_either_trigger = {
						PARAMETER = white_peace_acceptance_between_involved_or_interloper_with_region_easier
						CHAR = scope:recipient
					}
				}
			}
		}
	}
	add = 10
	desc = STRUGGLE_INVOLVED_OR_INTERLOPER_PHASE_BONUS
}
modifier = {
	desc = WAR_OVERVIEW_WHITE_PEACE_GOK
	add = -70
	scope:war = {
		using_cb = mpo_gok_onslaught_cb
		primary_defender = scope:actor
	}
}
modifier = {
	desc = WAR_OVERVIE
# … (cut here; the rest is in the file)

As written in game/common/character_interactions/00_war.txt.

What happens

If they accept

  • The war:
    • casus_belli = { … }
    • If

      Then

      • Every war defender › Every prisoner:
        • Where:
          • One of these

            • this = scope:war.primary_attacker
            • or

              The war’s primary attacker’s primary title:
              • place_in_line_of_succession = { target = prev value <= 3 }
        • release_from_prison = yes
      • Every war attacker › Every prisoner:
        • Where:
          • One of these

            • this = scope:war.primary_defender
            • or

              The war’s primary defender’s primary title:
              • place_in_line_of_succession = { target = prev value <= 3 }
        • release_from_prison = yes
  • If

    Then

    • If

      • The character you target:
        • One of these

          • Is landed
          • or

            All of these

            • they has administrative government mechanic
            • Is not landed
            • If

              a check the game hides

              Then

              • Their house: Has the house check as house head
            • Has a domicile
          • or

            All of these

            • Their liege:
              • tgp_has_access_to_ministry_trigger = { }
            • One of these

          • or

            All of these

            • Is a ruler
            • Government is a Theocratic-type Government

      Then

      • The character you send:
        • If any relation › Every relation:
          • The current guardian scope:
            • remove_relation_ward = scope:secondary_actor
            • return_guardian_travel_effect = { GUARDIAN = scope:current_guardian_scope WARD = scope:secondary_actor }
          • If never › The character you send:
            • return_ward_travel_effect = { }
          • Otherwise:
            • guardian_remove_opinion_effect = { GUARDIAN = scope:current_guardian_scope WARD = scope:secondary_actor WARD_LIEGE = scope:secondary_actor.liege }
        • Else, if any relation › Every relation:
          • The character you send:
            • remove_relation_ward = scope:current_ward_scope
            • return_guardian_travel_effect = { GUARDIAN = scope:secondary_actor WARD = scope:current_ward_scope }
          • If

            • always = yes

            Then

            • The current ward scope:
              • return_ward_travel_effect = { }

            Otherwise

            • guardian_remove_opinion_effect = { GUARDIAN = scope:secondary_actor WARD = scope:current_ward_scope WARD_LIEGE = scope:current_ward_scope.liege }
        • The character you target:
          • take_hostage = scope:secondary_actor
        • If

          • One of these

            • All of these

              • exists = scope:actor.primary_title
              • exists = scope:recipient.primary_title
              • scope:recipient.primary_title.tier < scope:actor.primary_title.tier
            • or

              All of these

              • exists = scope:actor.dynasty
              • exists = scope:recipient.dynasty
              • scope:recipient.dynasty.dynasty_prestige_level < scope:actor.dynasty.dynasty_prestige_level

          Then

          • If

            • The target’s faith:
              • faith_hostility_level = { target = scope:actor.faith value >= faith_hostile_level }

            Then

            • They will earn Prestige, Renown, and Piety
            • ⟨faith⟩ consider ⟨faith⟩ Faith …
            • If

              • bp2_warden_dynasty_renown_lower_trigger = { WARDEN = scope:recipient HOME_COURT = scope:actor }

              Then

            • If

              • bp2_warden_title_tier_lower_trigger = { WARDEN = scope:recipient HOME_COURT = scope:actor }

              Then

              • … is higher Tier than …

            Otherwise

            • They will earn Prestige and Renown
            • If

              • bp2_warden_dynasty_renown_lower_trigger = { WARDEN = scope:recipient HOME_COURT = scope:actor }

              Then

              • … (more in the script below)
            • … (more in the script below)
        • … (more in the script below)
    • … (more in the script below)
  • … (more in the script below)

• the game's own tooltip text · ◦ our reading of the script line · code the script where neither exists

Who can use it and sees it (is_available, is_shown) (39 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	any_character_war = {
		count >= 1
		casus_belli = {
			OR = {
				primary_attacker ?= root
				primary_defender ?= root
			}
		}
	}
	trigger_if = {
		limit = {
			exists = scope:war
		}
		NOR = {
			scope:war ?= {
				casus_belli ?= {
					primary_defender ?= root
					primary_attacker ?= {
						is_ai = no
					}
				}
				attacker_war_score >= 10
			}
			scope:war ?= {
				casus_belli ?= {
					primary_attacker ?= root
					primary_defender ?= {
						is_ai = no
					}
				}
				defender_war_score >= 70
			}
		}
	}
}

As written in game/common/character_interactions/00_war.txt.

Can be sent when (is_valid…) (4 lines of game script)
scope:war ?= {
	has_valid_casus_belli = yes
	is_white_peace_possible = yes
}

As written in game/common/character_interactions/00_war.txt.

Effects (on_send, on_accept, on_decline) (103 lines of game script)
on_accept = scope:war ?= {
	casus_belli = {
		primary_attacker = {
			save_scope_as = attacker_white_peace
		}
		primary_defender = {
			save_scope_as = defender_white_peace
		}
	}
	if = {
		limit = {
			NOT = {
				using_cb = fp3_free_house_member_cb
			}
		}
		release_prisoners_of_war_effect = yes
	}
}
if = {
	limit = {
		scope:war ?= {
			NOR = {
				using_cb = undirected_great_holy_war
				using_cb = directed_great_holy_war
			}
			bp2_hostage_exchange_invalid_cb_trigger = no
		}
	}
	if = {
		limit = {
			exists = scope:secondary_actor
			scope:recipient = {
				is_landed_or_landless_administrative_or_theocratic = yes
			}
		}
		hostage_depart_effect = {
			HOSTAGE = scope:secondary_actor
			WARDEN = scope:recipient
			HOME_COURT = scope:actor
		}
	}
	if = {
		limit = {
			exists = scope:secondary_recipient
			scope:actor = {
				is_landed_or_landless_administrative_or_theocratic = yes
			}
		}
		hostage_depart_effect = {
			HOSTAGE = scope:secondary_recipient
			WARDEN = scope:actor
			HOME_COURT = scope:recipient
		}
	}
}
hidden_effect = {
	scope:attacker_white_peace = {
		if = {
			limit = {
				any_vassal = {
					this != scope:defender_white_peace
				}
			}
			every_vassal = {
				limit = {
					this != scope:defender_white_peace
				}
				send_interface_toast = {
					type = msg_liege_war_ended_white_peace
					title = WAR_RESULTS_WHITE_PEACE
					left_icon = scope:attacker_white_peace
					right_icon = scope:defender_white_peace
					custom_tooltip = war_event.1903
				}
			}
		}
	}
	scope:defender_white_peace = {
		if = {
			limit = {
				any_vassal = {
					this != scope:attacker_white_peace
				}
			}
			every_vassal = {
				limit = {
					this != scope:attacker_white_peace
				}
				send_interface_toast = {
					type = msg_liege_war_ended_white_peace
					title = WAR_RESULTS_WHITE_PEACE
					left_icon = scope:defender_white_peace
					right_icon = scope:attacker_white_peace
					custom_tooltip = war_event.1904
				}
			}
		}
	}
}
scope:war ?= {
	end_war = white_peace
}
on_decline = 

As written in game/common/character_interactions/00_war.txt.

Category
Uncategorized actions
In the menu
no (opened from elsewhere)
ID
end_war_attacker_white_peace_interaction

Source: game/common/character_interactions/00_war.txt and the English localisation, Crusader Kings III 1.20.1.2. “You” is the character who sends it (scope:actor, or a puppet acting for you); “the character you target” is the recipient.

Spotted a mistake on this page?