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 costAccepted automatically in some cases; otherwise the AI weighs itnot in the character menu

What you need

You

To send it

  • The war:
    • Has a valid Casus Belli
    • If

      • One of these

        • exists = scope:secondary_actor
        • or

          exists = scope:secondary_recipient
      • casus_belli = { … }

      Then

      • Hostages can only be exchanged if both parties will still be Rulers after the Peace

To see it in the menu

  • If played by the AI:
    • Is at War
    • Any character war:
      • Is war leader in the war against you
      • One of these

        • Attacker war score at least 100
        • or

          All of these

          • primary_defender ?= { is_ai = yes }
          • One of these

            • Attacker war score at least 90
            • or

              All of these

          • You: Has the Peacemaker Perk
        • or

          All of these

          • primary_defender ?= { is_ai = yes }
          • You › Your dynasty: The Dynasty has the The Secret History Legacy
          • One of these

            • Attacker war score at least 90
            • or

              All of these

        • or

          All of these

          • primary_defender ?= { save_temporary_scope_as = defender is_ai = yes }
          • Attacker war score at least 70
          • You:
            • Has “peace acceptance head scare” (a variable the game's script sets)
            • var:peace_acceptance_head_scare: Is the defender
        • or

          primary_defender ?= { is_ai = yes has_variable = conqueror }

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. Accepted automatically in some cases; otherwise the AI weighs it. Reasons the AI weighs include Peacemaker (+10), The Secret History (+10), Cowed by predecessor's beheading (+30) and 2 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?
Accepted automatically in some cases; otherwise the AI weighs it. Its reasons: War Score, Peacemaker +10, The Secret History +10, Cowed by predecessor's beheading +30, The character you send's value as a Hostage, The other character's value as a Hostage, The recipient will lose their Realm -10,000 and War Score +1,000.

Will they accept?

Accepted automatically when:

  • If

    • One of these

      • The war: Attacker war score at least 100
      • or

        All of these

        • The character you target: Is played by the AI
        • scope:war.casus_belli.primary_attacker ?= scope:recipient
      • or

        The war’s casus belli:
        • primary_attacker = { is_ai = yes current_military_strength >= scope:recipient.fifty_percent_more_of_current_military_strength }
        • primary_defender = { is_ai = yes has_variable = conqueror this = scope:recipient }

    Then

    • always = yes

    Otherwise

    • Never
  • The war:
    • If

      • One of these

        • exists = scope:secondary_actor
        • or

          exists = scope:secondary_recipient
      • casus_belli = { … }
      • None of these

        • The character you target › Any held title:
          • Title tier exactly County
          • None of these

            • Any this title or de jure above:
              • is_in_list = target_titles

      Then

      • Never

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

ReasonAmount
Base-99
War Scoreattacker_war_score
Peacemaker
when
  • The war’s casus belli:
    • primary_attacker = { has_perk = peacemaker_perk this != scope:recipient }
+10
The Secret History
when
  • The war’s casus belli:
    • primary_attacker = { … }
+10
Cowed by predecessor's beheading
when
  • The war’s casus belli:
    • primary_defender = { save_temporary_scope_as = defender }
    • primary_attacker = { … }
    • primary_defender = { is_ai = yes }
+30
The character you send's value as a Hostagewar_actor_hostage_value
The other character's value as a Hostagewar_recipient_hostage_value
The recipient will lose their Realm
when
  • The war:
    • One of these

      • exists = scope:secondary_actor
      • or

        exists = scope:secondary_recipient
    • casus_belli = { … }
    • None of these

      • The character you target › Any held title:
        • Title tier exactly County
        • None of these

          • Any this title or de jure above:
            • is_in_list = target_titles
-10,000
War Score
when
  • The war:
    • Attacker war score at least 100
    • One of these

      • exists = scope:secondary_actor
      • or

        exists = scope:secondary_recipient
    • casus_belli = { … }
    • The character you target › Any held title:
      • Title tier exactly County
      • No this title or de jure above:
+1,000
Acceptance (ai_accept) (113 lines of game script)
base = -99
compare_modifier = {
	target = scope:war
	value = attacker_war_score
	desc = WARSCORE_MODIFIER
}
modifier = {
	scope:war.casus_belli = {
		primary_attacker = {
			has_perk = peacemaker_perk
			this != scope:recipient
		}
	}
	add = peacemaker_value
	desc = PEACEMAKER_PERK_MODIFIER
}
modifier = {
	scope:war.casus_belli = {
		primary_attacker = {
			dynasty ?= {
				has_dynasty_perk = mpo_nomad_legacy_3
			}
			NOT = {
				this = scope:recipient
			}
		}
	}
	add = 10
	desc = NOMAD_LEGACY_PERK_MODIFIER
}
modifier = {
	scope:war.casus_belli = {
		primary_defender = {
			save_temporary_scope_as = defender
		}
		primary_attacker = {
			has_variable = peace_acceptance_head_scare
			var:peace_acceptance_head_scare = {
				this = scope:defender
			}
		}
		primary_defender = {
			is_ai = yes
		}
	}
	add = 30
	desc = COWED_BY_SEVERED_HEAD_MODIFIER
}
modifier = {
	exists = scope:secondary_actor
	add = war_actor_hostage_value
	desc = WAR_OVERVIEW_HOSTAGE_OFFER_VALUE
}
modifier = {
	exists = scope:secondary_recipient
	add = war_recipient_hostage_value
	desc = WAR_OVERVIEW_HOSTAGE_DEMAND_VALUE
}
modifier = {
	scope:war = {
		OR = {
			exists = scope:secondary_actor
			exists = scope:secondary_recipient
		}
		casus_belli = {
			any_target_title = {
				count >= 1
				add_to_temporary_list = target_titles
			}
		}
		NOT = {
			scope:recipient = {
				any_held_title = {
					tier = tier_county
					NOT = {
						any_this_title_or_de_jure_above = {
							is_in_list = target_titles
						}
					}
				}
			}
		}
	}
	add = -10000
	desc = WAR_OVERVIEW_HOSTAGE_DEMAND_BLOCKED
}
modifier = {
	scope:war = {
		attacker_war_score >= 100
		OR = {
			exists = scope:secondary_actor
			exists = scope:secondary_recipient
		}
		casus_belli = {
			any_target_title = {
				count >= 1
				add_to_temporary_list = target_titles
			}
		}
		scope:recipient = {
			any_held_title = {
				tier = tier_county
				NOT = {
					any_this_title_or_de_jure_above = {
						is_in_list = target_titles
					}
				}
			}
		}
	}
	add = 1000
	desc = WARSCORE_MODIFIER
}

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) (67 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	is_at_war = yes
	any_character_war = {
		is_war_leader = root
		OR = {
			attacker_war_score >= 100
			AND = {
				primary_defender ?= {
					is_ai = yes
				}
				OR = {
					attacker_war_score >= 90
					AND = {
						root = {
							dynasty ?= {
								has_dynasty_perk = mpo_nomad_legacy_3
							}
						}
						attacker_war_score >= 80
					}
				}
				root = {
					has_perk = peacemaker_perk
				}
			}
			AND = {
				primary_defender ?= {
					is_ai = yes
				}
				root = {
					dynasty ?= {
						has_dynasty_perk = mpo_nomad_legacy_3
					}
				}
				OR = {
					attacker_war_score >= 90
					AND = {
						root = {
							has_perk = peacemaker_perk
						}
						attacker_war_score >= 80
					}
				}
			}
			AND = {
				primary_defender ?= {
					save_temporary_scope_as = defender
					is_ai = yes
				}
				attacker_war_score >= 70
				root = {
					has_variable = peace_acceptance_head_scare
					var:peace_acceptance_head_scare ?= {
						this = scope:defender
					}
				}
			}
			primary_defender ?= {
				is_ai = yes
				has_variable = conqueror
			}
		}
	}
}

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

Can be sent when (is_valid…) (30 lines of game script)
scope:war = {
	has_valid_casus_belli = yes
	trigger_if = {
		limit = {
			OR = {
				exists = scope:secondary_actor
				exists = scope:secondary_recipient
			}
			casus_belli = {
				any_target_title = {
					count >= 1
					add_to_temporary_list = target_titles
				}
			}
		}
		custom_tooltip = {
			text = hostage_no_land_after_war_tt
			scope:recipient = {
				any_held_title = {
					title_tier = county
					NOT = {
						any_this_title_or_de_jure_above = {
							is_in_list = target_titles
						}
					}
				}
			}
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (105 lines of game script)
on_accept = scope:war ?= {
	casus_belli = {
		primary_attacker = {
			save_scope_as = attacker_winner
			set_signature_weapon_effect = yes
		}
		primary_defender = {
			save_scope_as = defender_loser
		}
	}
	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_winner = {
		if = {
			limit = {
				any_vassal = {
					this != scope:defender_loser
				}
			}
			every_vassal = {
				limit = {
					this != scope:defender_loser
				}
				send_interface_toast = {
					type = msg_liege_war_ended_attacker_win
					title = war_event.notification_liege_win.t
					left_icon = scope:attacker_winner
					right_icon = scope:defender_loser
					custom_tooltip = war_event.1901
				}
			}
		}
	}
	scope:defender_loser = {
		if = {
			limit = {
				any_vassal = {
					this != scope:attacker_winner
				}
			}
			every_vassal = {
				limit = {
					this != scope:attacker_winner
				}
				send_interface_toast = {
					type = msg_liege_war_ended_attacker_win
					title = war_event.notification_liege_loss.t
					left_icon = scope:defender_loser
					right_icon = scope:attacker_winner
					custom_tooltip = war_event.1902
				}
			}
		}
	}
}
bookmark_867_northmen_aellas_capture_war_imprisonment_effect = yes
scope:war ?= {
	end_war = attacker
}
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_victory_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?