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

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

        • Defender 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_attacker ?= { save_temporary_scope_as = attacker is_ai = yes }
          • Defender 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 attacker

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 Would Win (+1,000), Peacemaker (+10), The Secret History (+10) 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, Would Win +1,000, Peacemaker +10, The Secret History +10, Cowed by predecessor's beheading +30, Stalwart Culture +10, The character you send's value as a Hostage and The other character's value as a Hostage.

Will they accept?

Accepted automatically when:

  • One of these

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

      All of these

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

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 Scoredefender_war_score
Would Win
when
  • The war’s casus belli: Has the target as the war's defender
+1,000
Peacemaker
when
  • The war’s casus belli:
    • primary_defender = { has_perk = peacemaker_perk this != scope:recipient }
+10
The Secret History
when
  • The war’s casus belli:
    • primary_defender = { … }
+10
Cowed by predecessor's beheading
when
  • The war’s casus belli:
    • primary_attacker = { is_ai = yes save_temporary_scope_as = attacker }
    • primary_defender = { … }
+30
Stalwart Culture
when
  • The war’s casus belli:
    • primary_defender = { … }
+10
The character you send's value as a Hostagewar_actor_hostage_value
The other character's value as a Hostagewar_recipient_hostage_value
Acceptance (ai_accept) (75 lines of game script)
base = -99
compare_modifier = {
	target = scope:war
	value = defender_war_score
	desc = WARSCORE_MODIFIER
}
modifier = {
	add = 1000
	scope:war.casus_belli = {
		primary_defender = scope:recipient
	}
	desc = WOULD_WIN_MODIFIER
}
modifier = {
	scope:war.casus_belli = {
		primary_defender = {
			has_perk = peacemaker_perk
			this != scope:recipient
		}
	}
	add = peacemaker_value
	desc = PEACEMAKER_PERK_MODIFIER
}
modifier = {
	scope:war.casus_belli = {
		primary_defender = {
			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_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 = {
	scope:war.casus_belli = {
		primary_defender = {
			culture = {
				has_cultural_parameter = can_end_defensive_wars_earlier
			}
			this != scope:recipient
		}
	}
	add = 10
	desc = TRADITION_BONUS_DEFENSIVE_WARS
}
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
}

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: Is landed

      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

            • If

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

              Then

              • … is higher Tier than …

          Otherwise

        • Sets out on a journey (a travel plan)
    • If

      • You: Is landed

      Then

      • The other character:
        • If any relation › Every relation:
          • The current guardian scope:
            • remove_relation_ward = scope:secondary_recipient
            • return_guardian_travel_effect = { GUARDIAN = scope:current_guardian_scope WARD = scope:secondary_recipient }
          • If never › The other character:
            • return_ward_travel_effect = { }
          • Otherwise:
            • guardian_remove_opinion_effect = { GUARDIAN = scope:current_guardian_scope WARD = scope:secondary_recipient WARD_LIEGE = scope:secondary_recipient.liege }
        • … (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) (63 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	is_at_war = yes
	any_character_war = {
		is_war_leader = root
		OR = {
			defender_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_attacker ?= {
					save_temporary_scope_as = attacker
					is_ai = yes
				}
				defender_war_score >= 70
				root = {
					has_variable = peace_acceptance_head_scare
					var:peace_acceptance_head_scare ?= {
						this = scope:attacker
					}
				}
			}
		}
	}
}

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

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

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

Effects (on_send, on_accept, on_decline) (104 lines of game script)
on_accept = scope:war ?= {
	casus_belli = {
		primary_attacker = {
			save_scope_as = attacker_loser
		}
		primary_defender = {
			save_scope_as = defender_winner
			set_signature_weapon_effect = yes
		}
	}
	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 = 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 = yes
			}
		}
		hostage_depart_effect = {
			HOSTAGE = scope:secondary_recipient
			WARDEN = scope:actor
			HOME_COURT = scope:recipient
		}
	}
}
hidden_effect = {
	scope:attacker_loser = {
		if = {
			limit = {
				any_vassal = {
					this != scope:defender_winner
				}
			}
			every_vassal = {
				limit = {
					this != scope:defender_winner
				}
				send_interface_toast = {
					type = msg_liege_war_ended_defender_win
					title = war_event.notification_liege_loss.t
					left_icon = scope:attacker_loser
					right_icon = scope:defender_winner
					custom_tooltip = war_event.1905
				}
			}
		}
	}
	scope:defender_winner = {
		if = {
			limit = {
				any_vassal = {
					this != scope:attacker_loser
				}
			}
			every_vassal = {
				limit = {
					this != scope:attacker_loser
				}
				send_interface_toast = {
					type = msg_liege_war_ended_defender_win
					title = war_event.notification_liege_win.t
					left_icon = scope:defender_winner
					right_icon = scope:attacker_loser
					custom_tooltip = war_event.1906
				}
			}
		}
	}
}
scope:war ?= {
	end_war = defender
}
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_defeat_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?