Interaction · Diplomatic actions
Enforce Truce
Enforce a Truce to end a War involving an Independent or same Realm Involved Ruler of a lower Rank
What you need
You
- If played by the AI: Is not imprisoned
One of these
All of these
- You:
- Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_enforce_truces_interaction
primary_title.tier >= tier_duchy
- Any character struggle:
- The character you target:
- Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_enforce_truces_interaction
tier_difference = { target = scope:actor value <= 0 }
- Any character struggle:
- You:
or
The character you target
- Is at War
If
- You › Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_enforce_truces_interaction- The character you target › Any character struggle:
involvement = involved
Then
- Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_enforce_truces_interaction
Otherwise
- Their house: The House their has the Compromise modifier
- You › Any character struggle:
- … or … enemy must be an Independent Ruler or of equal or lower Rank in the same Realm
Which character you can pick
- The target:
- Is war leader in the war against the target
is_civil_war = no- Not: The war’s casus belli is Border Raid
If
- The character you target › Any character struggle:
involvement = involved
Then
If
- Has the target as the war's attacker
Then
primary_defender = { fp2_struggle_enforce_truce_war_leader_trigger = yes }
Otherwise
primary_attacker = { fp2_struggle_enforce_truce_war_leader_trigger = yes }
Otherwise
- The character you target › Their capital county’s province: Is in the Iberia region
- The character you target › Any character struggle:
Enforce Truce is a diplomatic character interaction in Crusader Kings III. The character you target needs: Is at War. The AI weighs it. Reasons the AI weighs include War has only just begun (-25), War is dragging on (+25), The recipient is defending … (+25) and 10 more. Patch 1.20.1.2, from game/common/character_interactions/03_fp2_interactions.txt.
Quick answers (2)
- What are the requirements for Enforce Truce in CK3?
- The character you target: Is at War. (patch 1.20.1.2)
- How do I get the AI to accept Enforce Truce?
- The AI weighs it. Its reasons: War has only just begun -25, War is dragging on +25, The recipient is defending … +25, The recipient is your Ally +25, The recipient is your Vassal or below +25, The recipient is losing the War +25, The recipient is heavily outnumbered +25, The recipient outnumbers their enemy -25, Your Army is too small to enforce this Truce -50, The recipient is fighting a Holy War -25, You are the recipient's Head of Faith +25, You are the recipient's Dynasty Head +50, You are the recipient's House Head +25 and … Opinion of ….
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.
| Reason | Amount |
|---|---|
| Base | -50 |
War has only just begunwhen
| -25 |
War is dragging onwhen
| +25 |
The recipient is defending …when
| +25 |
The recipient is your Allywhen
| +25 |
The recipient is your Vassal or belowwhen
| +25 |
The recipient is losing the Warwhen
| +25 |
The recipient is heavily outnumberedwhen
| +25 |
The recipient outnumbers their enemywhen
| -25 |
Your Army is too small to enforce this Trucewhen
| -50 |
| The recipient is fighting a Holy War | -25 |
You are the recipient's Head of Faithwhen
| +25 |
You are the recipient's Dynasty Headwhen
| +50 |
You are the recipient's House Headwhen
| +25 |
| … Opinion of … | varies |
| Their personality (AI values: boldness -0.5) | varies |
Acceptance (ai_accept) (179 lines of game script)
base = -50
modifier = {
add = -25
trigger_if = {
limit = {
exists = scope:target
}
scope:target.war_days < 180
}
trigger_else = {
always = no
}
desc = ET_AI_WAR_NEW_REASON
}
modifier = {
add = 25
trigger_if = {
limit = {
exists = scope:target
}
scope:target.war_days > 1095
}
trigger_else = {
always = no
}
desc = ET_AI_WAR_OLD_REASON
}
modifier = {
add = 25
trigger_if = {
limit = {
exists = scope:target
}
scope:recipient = scope:target.primary_defender
}
trigger_else = {
always = no
}
desc = OA_AI_DEFENSIVE_WAR_REASON
}
modifier = {
add = 25
scope:recipient = {
is_allied_to = scope:actor
}
desc = ET_AI_ALLY_REASON
}
modifier = {
add = 25
scope:recipient = {
target_is_liege_or_above = scope:actor
}
desc = ET_AI_LIEGE_REASON
}
modifier = {
add = 25
trigger_if = {
limit = {
exists = scope:target
}
trigger_if = {
limit = {
scope:recipient = scope:target.primary_defender
}
scope:target = {
attacker_war_score >= fp2_enforce_truce_war_score_value
}
}
trigger_else = {
scope:target = {
defender_war_score >= fp2_enforce_truce_war_score_value
}
}
}
trigger_else = {
always = no
}
desc = OA_AI_LOSING_WAR_REASON
}
modifier = {
add = 25
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_outnumbered_trigger = yes
}
}
trigger_else = {
any_character_war = {
fp2_struggle_contract_assistance_war_outnumbered_trigger = yes
}
}
desc = OA_AI_OUTNUMBERED_REASON
}
modifier = {
add = -25
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_outnumbering_trigger = yes
}
}
trigger_else = {
any_character_war = {
fp2_struggle_contract_assistance_war_outnumbering_trigger = yes
}
}
desc = OA_AI_OUTNUMBER_ENEMY_REASON
}
modifier = {
add = -50
trigger_if = {
limit = {
exists = scope:target
}
OR = {
scope:target.war_attacker_total_strength_halved_value > scope:actor.max_military_strength
scope:target.war_defender_total_strength_halved_value > scope:actor.max_military_strength
}
}
trigger_else = {
always = no
}
desc = ET_AI_SMALL_ARMY_REASON
}
modifier = {
add = -25
trigger_if = {
limit = {
exists = scope:target
}
scope:recipient = {
NOT = {
has_trait = cynical
}
}
scope:target = {
OR = {
using_cb = minor_religious_war
using_cb = religious_war
using_cb = major_religious_war
}
}
}
trigger_else = {
always = no
}
desc = ET_AI_HOLY_WAR_REASON
}
modifier = {
add = 25
scope:recipient.faith.religious_head = scope:actor
desc = ET_AI_HOF_REASON
}
modifier = {
add = 50
scope:recipient.dynasty.dynast = scope:actor
desc = ET_AI_DYNAST_REASON
}
modifier = {
add = 25
scope:recipient.dynasty.dynast != scope:actor
scope:recipient.house.house_head = scope:actor
desc = ET_AI_HOUSE_HEAD_REASON
}
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 1
desc = AI_OPINION_REASON
}
ai_value_modifier = {
ai_boldness = -0.5
max = 0
}As written in game/common/character_interactions/03_fp2_interactions.txt.
What happens
If they accept
If
a check the game hides
Then
- scope:truce_1: Gain -75 Prestige
- scope:truce_2: Gain -75 Prestige
- You:
If
scope:target.attacker_war_score >= fp2_enforce_truce_war_score_value
Then
reverse_add_opinion = { target = scope:target.primary_attacker modifier = fp2_enforced_truce_opinion opinion = -20 }reverse_add_opinion = { target = scope:target.primary_defender modifier = fp2_enforced_truce_opinion opinion = 20 }
Else if
scope:target.defender_war_score >= fp2_enforce_truce_war_score_value
Then
reverse_add_opinion = { target = scope:target.primary_defender modifier = fp2_enforced_truce_opinion opinion = -20 }reverse_add_opinion = { target = scope:target.primary_attacker modifier = fp2_enforced_truce_opinion opinion = 20 }
Otherwise
reverse_add_opinion = { target = scope:target.primary_defender modifier = fp2_enforced_truce_opinion opinion = -10 }reverse_add_opinion = { target = scope:target.primary_attacker modifier = fp2_enforced_truce_opinion opinion = -10 }
scope:truce_1:add_truce_one_way = { character = scope:truce_2 years = fp2_enforce_truce_duration_value name = TRUCE_ENFORCE_TRUCE }
scope:truce_2:add_truce_one_way = { character = scope:truce_1 years = fp2_enforce_truce_duration_value name = TRUCE_ENFORCE_TRUCE }
- You get a Truce with … and … for 5 years
- The target:
end_war = white_peace
- You:
If
- Any character struggle:
involvement = involvedphase_has_catalyst = catalyst_truce_was_enforced- The character you target › Any character struggle:
involvement = involved
Then
- Every character struggle:
- Where:
phase_has_catalyst = catalyst_truce_was_enforced- The character you target › Any character struggle:
involvement = involved
involvement = involvedactivate_struggle_catalyst = { catalyst = catalyst_truce_was_enforced character = scope:actor }
- Where:
- Any character struggle:
If
Then
- Your house:
add_unity_value = { … }
- Your house:
If they refuse
- Event char_interaction.0236
If
Then
- The target’s house:
add_unity_value = { … }
- The target’s house:
Events it fires: char_interaction.0236
• 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) (46 lines of game script)
is_available = trigger_if = {
limit = {
is_ai = yes
}
is_imprisoned = no
}
is_shown = OR = {
AND = {
scope:actor = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_enforce_truces_interaction
}
primary_title.tier >= tier_duchy
}
scope:recipient = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_enforce_truces_interaction
}
tier_difference = {
target = scope:actor
value <= 0
}
}
}
AND = {
scope:actor = {
exists = house
primary_title.tier >= tier_duchy
house ?= {
has_house_modifier = fp2_struggle_compromise_house_reward_modifier
}
}
scope:recipient = {
exists = house
house ?= {
has_house_modifier = fp2_struggle_compromise_house_reward_modifier
}
tier_difference = {
target = scope:actor
value <= 0
}
}
}
}As written in game/common/character_interactions/03_fp2_interactions.txt.
Can be sent when (is_valid…) (57 lines of game script)
scope:recipient = {
is_at_war = yes
trigger_if = {
limit = {
scope:actor = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_enforce_truces_interaction
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:recipient
}
}
}
}
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_enforce_truces_interaction
}
}
trigger_else = {
exists = house
house = {
has_house_modifier = fp2_struggle_compromise_house_reward_modifier
}
}
custom_tooltip = {
text = fp2_enforce_truce_liege_or_independent_tt
OR = {
top_liege = this
top_liege = scope:actor.top_liege
any_character_war = {
primary_attacker = {
NOR = {
this = scope:recipient
this = scope:actor
}
OR = {
top_liege = this
top_liege = scope:actor.top_liege
}
}
}
any_character_war = {
primary_defender = {
NOR = {
this = scope:recipient
this = scope:actor
}
OR = {
top_liege = this
top_liege = scope:actor.top_liege
}
}
}
}
}
}As written in game/common/character_interactions/03_fp2_interactions.txt.
Effects (on_send, on_accept, on_decline) (174 lines of game script)
on_accept = if = {
limit = {
exists = scope:target
}
scope:target = {
primary_attacker = {
save_scope_as = truce_1
}
primary_defender = {
save_scope_as = truce_2
}
}
show_as_tooltip = {
scope:truce_1 = {
add_prestige = minor_prestige_loss
}
scope:truce_2 = {
add_prestige = minor_prestige_loss
}
}
scope:actor = {
fp2_enforce_truce_opinion_effect = yes
show_as_tooltip = {
scope:truce_1 = {
add_truce_one_way = {
character = scope:truce_2
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
}
scope:truce_2 = {
add_truce_one_way = {
character = scope:truce_1
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
}
}
custom_tooltip = fp2_enforce_truce_peacemaker_tt
hidden_effect = {
add_truce_one_way = {
character = scope:target.primary_attacker
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
add_truce_one_way = {
character = scope:target.primary_defender
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
send_interface_message = {
type = event_truce_neutral
title = enforce_truce_interaction_actor_toast
left_icon = scope:truce_1
right_icon = scope:truce_2
show_as_tooltip = {
fp2_enforce_truce_opinion_effect = yes
}
custom_tooltip = fp2_enforce_truce_other_tt
custom_tooltip = fp2_enforce_truce_peacemaker_tt
}
}
}
hidden_effect = {
scope:truce_1 = {
send_interface_message = {
type = event_truce_neutral
title = enforce_truce_interaction_toast
left_icon = scope:actor
right_icon = scope:truce_2
add_prestige = minor_prestige_loss
show_as_tooltip = {
scope:target = {
end_war = white_peace
}
add_truce_both_ways = {
character = scope:truce_2
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
scope:actor = {
add_truce_one_way = {
character = scope:truce_1
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
}
}
stress_and_fulfillment_impact = {
wrathful = minor_stress_impact_gain
brave = minor_stress_impact_gain
ambitious = minor_stress_impact_gain
}
}
}
scope:truce_2 = {
send_interface_message = {
type = event_truce_neutral
title = enforce_truce_interaction_toast
left_icon = scope:actor
right_icon = scope:truce_1
add_prestige = minor_prestige_loss
show_as_tooltip = {
scope:target = {
end_war = white_peace
}
add_truce_both_ways = {
character = scope:truce_1
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
scope:actor = {
add_truce_one_way = {
character = scope:truce_2
years = fp2_enforce_truce_duration_value
name = TRUCE_ENFORCE_TRUCE
}
}
}
stress_and_fulfillment_impact = {
wrathful = minor_stress_impact_gain
brave = minor_stress_impact_gain
ambitious = minor_stress_impact_gain
}
}
}
}
scope:target = {
end_war = white_peace
}
scope:actor = {
if = {
limit = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_truce_was_enforced
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_truce_was_enforced
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_truce_was_enforced
character = scope:actor
}
}
}
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_gain
DESC = clan_unity_enforce_truce.desc
REVERSE_NON_HOUSE_TARGET = no
}
on_decline = scope:actor = {
trigger_event = char_interaction.0236
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:recipient
TARGET = scope:actor
VALUE = medium_unity_loss
DESC = clan_unity_enforce_truce_decline.desc
REVERSE_NON_HOUSE_TARGET = no
}As written in game/common/character_interactions/03_fp2_interactions.txt.
- Category
- Diplomatic actions
- Cooldown
- 5 years
- In the menu
- main list
- ID
enforce_truce_interaction
Source: game/common/character_interactions/03_fp2_interactions.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.