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

Interaction · Diplomatic actions

Offer to Join War

No costAccepted automatically

Offer to come to the aid of an Ally, your Overlord or Tributary, a defender of your Faith in a Holy War, or help a Vassal put down a Peasant Revolt

What you need

You

  • Else, if all of these hold:
    • Conditions › You: Is not a vassal (or below) of the target
    • Then:
      • If

        Then

        • The character you target › If any character war: You decided to leave this War

        Else if

        • You:
          • is_member_of_confederation = scope:recipient.confederation

        Then

        • You:
          • is_member_of_confederation = scope:recipient.confederation

        Else if

        • The character you target: Is a tributary of you or of your suzerains

        Then

        Else if

        • You: Is a tributary of the target

        Then

  • If you have a Adventurer Government: You must have a Men-at-Arms Regiment
  • Exiled

The character you target

  • Is at War
  • Is not at war with you

Which character you can pick

  • The target:
    • Is war leader in the war against the target
    • If

      • One of these

        • You: Is a tributary of the target or of the target’s suzerains
        • or

          The character you target: Is a tributary of you

      Then

      • If

        • The character you target: Is a tributary of you

        Then

        • … is not the primary defender in this war

        Otherwise

        • always = yes

      Else if

      Then

      • casus_belli = { … }

      Else if

      • None of these

      • You: Is the liege (or above) of the target
      • Has the target as the war's defender
      • primary_attacker = { is_leading_faction_type = peasant_faction }
      • Not all of these

        • Has “struggle conciliation ending” (a variable the game's script sets)
        • Your capital province: Is in the Iberia region
        • The target’s capital province: Is in the Iberia region
        • One of these

          • Any in global list:
            • this = scope:actor.faith
          • or

            Any in global list:
            • this = scope:actor.culture
        • One of these

          • Any in global list:
            • this = scope:recipient.faith
          • or

            Any in global list:
            • this = scope:recipient.culture
      • None of these

        • All of these

          • Has “struggle conciliation ending” (a variable the game's script sets)
          • One of these

            • None of these

              • Any in global list:
                • this = scope:target.primary_attacker.faith
              • Any in global list:
                • this = scope:target.primary_attacker.culture
            • or

              None of these

              • The target’s primary attacker’s capital province: Is in the Iberia region

      Then

      • always = yes

      Else if

      • You: Is not allied to the target
      • Has the target as the war's attacker

      Then

      • You:
        • is_member_of_confederation = scope:recipient.confederation

      Otherwise

      • always = yes
  • If

    • The target: Has the target as the war's attacker

    Then

    • The target:
      • primary_defender = { save_temporary_scope_as = primary_enemy }

    Otherwise

    • The target:
      • primary_attacker = { save_temporary_scope_as = primary_enemy }

Offer to Join War is a diplomatic character interaction in Crusader Kings III. You need: Exiled. Accepted automatically. Patch 1.20.1.2, from game/common/character_interactions/00_alliance.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Offer to Join War in CK3?
You: Exiled. (patch 1.20.1.2)
Will the AI accept Offer to Join War?
Yes: it is accepted automatically.

Will they accept?

The other character has no choice: the game accepts it automatically.

Acceptance (ai_accept) (1 line of game script)
base = 100

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

What happens

Effects

  • The target:
    • If

      • is_attacker = scope:recipient

      Then

      • add_attacker = scope:actor
      • If

        • One of these

          • You › Any home court hostage:
            • warden ?= { is_defender_in_war = scope:target }
          • or

            The target › Any war defender › Any warden hostage:
            • home_court ?= scope:actor

        Then

      Otherwise

      • add_defender = scope:actor
      • If

        • One of these

          • You › Any home court hostage:
            • warden ?= { is_attacker_in_war = scope:target }
          • or

            The target › Any war attacker › Any warden hostage:
            • home_court ?= scope:actor

        Then

    • If

      • One of these

      • You › Any active accolade:
        • accolade_parameter = acclaimed_knight_piety_from_battle

      Then

    • If

      • One of these

      • You › Any active accolade:
        • accolade_parameter = acclaimed_knight_piety_from_battle_high

      Then

  • Stress and fulfillment impact: by trait: Craven +40
  • The character you target › If played by the AI:
    • If

      • Has the target char as potential friend
      • Does not have the target char as friend
      • Does not have the target char as best friend
      • Does not have the target char as rival
      • Does not have the target char as nemesis

      Then

      • If a check the game hides passes: the same again (1 line)
        Else if a check the game hides passes: the same again (1 line)
        Else if a check the game hides passes: the same again (1 line)

        Otherwise

      • If

        • has_activity_intent = befriend_attendee_intent
        • intent_target ?= scope:target_char
        • intent_target.involved_activity ?= this.involved_activity

        Then

        • complete_activity_intent = yes

      Otherwise

      • If

        • Does not have the target char as potential friend
        • can_set_relation_friend_trigger = { CHARACTER = scope:target_char }
        • If

          • Is played by the AI
          • The target char: Is played by the AI

          Then

          • The target char: Opinion of prev at least -25

          Otherwise

          • always = yes

        Then

        • set_relation_potential_friend = scope:target_char
      • If

        • scope:friend_opinion != 0

        Then

        • If

          • The target char: Is played by the AI

          Then

          • The target char gains the opinion “Friendly” of them
        • Opinion: Friendly
  • If

    • The target:
      • One of these

        • All of these

          • Has the target as the war's attacker
          • The target’s house is your
          • primary_defender = { house != scope:actor.house }
        • or

          All of these

          • Has the target as the war's defender
          • The target’s house is your
          • primary_attacker = { house != scope:actor.house }

    Then

    • If

      • You: Government is Clan
      • The character you target: Government is Clan
      • Your house is the target’s
      • If

        • You are not the target

        Then

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

If they refuse

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) (7 lines of game script)
is_shown = scope:recipient = {
	is_at_war = yes
	NOR = {
		this = scope:actor
		is_at_war_with = scope:actor
	}
}

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

Can be sent when (is_valid…) (213 lines of game script)
trigger_if = {
	limit = {
		exists = scope:actor.liege
	}
	custom_description = {
		text = join_war_interaction_recipient_warring_with_my_liege
		subject = scope:recipient
		scope:actor = {
			NOT = {
				any_liege_or_above = {
					is_at_war_with = scope:recipient
				}
			}
		}
	}
}
trigger_if = {
	limit = {
		scope:actor = {
			target_is_vassal_or_below = scope:recipient
		}
	}
	custom_description = {
		text = join_war_interaction_recipient_not_fighting_peasant_faction
		subject = scope:recipient
		scope:recipient = {
			any_war_enemy = {
				is_leading_faction_type = peasant_faction
			}
		}
	}
}
trigger_else_if = {
	limit = {
		scope:actor.faith = scope:recipient.faith
		scope:recipient = {
			any_character_war = {
				OR = {
					using_cb = pam_challenge_hof_cb
					AND = {
						using_cb = pam_antiking_cb
						scope:actor.religious_head_or_challenger ?= scope:recipient
					}
				}
			}
		}
	}
}
trigger_else_if = {
	limit = {
		scope:actor = {
			NOT = {
				target_is_liege_or_above = scope:recipient
			}
		}
	}
	trigger_if = {
		limit = {
			scope:actor = {
				has_government = landless_adventurer_government
			}
		}
		scope:recipient = {
			trigger_if = {
				limit = {
					any_character_war = {
						has_variable_list = left_voluntarily
					}
				}
				custom_tooltip = {
					text = laamp_war_change_sides_interaction.left_voluntarily
					is_target_in_variable_list = {
						name = left_voluntarily
						target = scope:actor
					}
				}
			}
		}
	}
	trigger_else_if = {
		limit = {
			scope:recipient = {
				any_character_war = {
					OR = {
						scope:recipient.faith = scope:actor.faith
						AND = {
							scope:recipient.faith.religion = scope:actor.faith.religion
							scope:actor.faith = {
								faith_hostility_level = {
									target = scope:recipient.faith
									value < religious_cb_enabled_hostility_level
								}
							}
						}
						AND = {
							scope:recipient = {
								target_is_liege_or_above = scope:actor
							}
							casus_belli = {
								any_target_title = {
									holder = {
										OR = {
											this = scope:actor
											is_vassal_or_below_of = scope:actor
										}
									}
								}
							}
						}
					}
					any_war_defender = {
						this = scope:recipient
					}
				}
			}
		}
	}
	trigger_else_if = {
		limit = {
			fp2_struggle_conciliation_recipient_actor_involved_trigger = yes
			scope:recipient = {
				any_character_war = {
					primary_defender = scope:recipient
					primary_attacker = {
						save_temporary_scope_as = attacker_temp
					}
					fp2_struggle_conciliation_scope_uninvolved_trigger = {
						SCOPE = scope:attacker_temp
					}
				}
			}
		}
	}
	trigger_else_if = {
		limit = {
			exists = scope:recipient.confederation
			scope:actor = {
				is_member_of_confederation = scope:recipient.confederation
			}
		}
		scope:actor = {
			is_member_of_confederation = scope:recipient.confederation
		}
	}
	trigger_else_if = {
		limit = {
			scope:recipient = {
				is_tributary_of_suzerain_or_above = scope:actor
			}
		}
		custom_tooltip = {
			text = join_war_interaction_recipient_tributary_no_defensive_war
			scope:recipient = {
				any_character_war = {
					primary_defender = scope:recipient
				}
			}
		}
	}
	trigger_else_if = {
		limit = {
			scope:actor = {
				is_tributary_of = scope:recipient
			}
		}
		custom_tooltip = {
			text = join_war_interaction_recipient_tributary_no_defensive_war
			scope:recipient = {
				any_character_war = {
					primary_defender = scope:recipient
				}
			}
		}
	}
	trigger_else = {
		custom_description = {
			text = join_war_interaction_recipient_not_ally
			subject = scope:recipient
			scope:recipient = {
				is_allied_to = scope:actor
			}
		}
	}
}
trigger_else = {
	custom_description = {
		text = join_war_interaction_recipient_not_liege
		subject = scope:recipient
		scope:actor = {
			target_is_liege_or_above = scope:recipient
		}
	}
}
scope:actor = {
	trigger_if = {
		limit = {
			has_government = landless_adventurer_government
		}
		custom_tooltip = {
			text = reinforce_soldiers_any_regiment_tt
			maa_regiments_count >= 1
		}
	}
}
custom_tooltip = {
	text = the_wake_1
	NOT = {
		is_laamp_exiled_from_province_trigger = {
			PROVINCE = scope:recipient.capital_province
			LAAMP = scope:actor
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (151 lines of game script)
on_accept = scope:target ?= {
	hidden_effect = {
		set_called_to = scope:actor
	}
	if = {
		limit = {
			is_attacker = scope:recipient
		}
		add_attacker = scope:actor
		if = {
			limit = {
				OR = {
					scope:actor = {
						any_home_court_hostage = {
							warden ?= {
								is_defender_in_war = scope:target
							}
						}
					}
					scope:target = {
						any_war_defender = {
							any_warden_hostage = {
								home_court ?= scope:actor
							}
						}
					}
				}
			}
			custom_tooltip = hostage_execution_warning_tt
		}
	}
	else = {
		add_defender = scope:actor
		if = {
			limit = {
				OR = {
					scope:actor = {
						any_home_court_hostage = {
							warden ?= {
								is_attacker_in_war = scope:target
							}
						}
					}
					scope:target = {
						any_war_attacker = {
							any_warden_hostage = {
								home_court ?= scope:actor
							}
						}
					}
				}
			}
			custom_tooltip = hostage_execution_warning_tt
		}
	}
	if = {
		limit = {
			is_religious_war = yes
			scope:actor = {
				any_active_accolade = {
					accolade_parameter = acclaimed_knight_piety_from_battle
				}
			}
		}
		scope:actor = {
			add_piety = medium_piety_gain
		}
	}
	if = {
		limit = {
			is_religious_war = yes
			scope:actor = {
				any_active_accolade = {
					accolade_parameter = acclaimed_knight_piety_from_battle_high
				}
			}
		}
		scope:actor = {
			add_piety = major_piety_gain
		}
	}
}
scope:actor = {
	stress_and_fulfillment_impact = {
		craven = medium_stress_impact_gain
	}
	add_to_variable_list = {
		name = joined_as_ally
		target = scope:target
	}
}
scope:recipient = {
	show_as_tooltip = {
		if = {
			limit = {
				is_ai = yes
			}
			progress_towards_friend_effect = {
				CHARACTER = scope:actor
				OPINION = 0
				REASON = friend_alliance
			}
		}
		else = {
			hidden_effect = {
				if = {
					limit = {
						NOR = {
							has_relation_friend = scope:actor
							has_relation_potential_friend = scope:actor
						}
					}
					set_relation_potential_friend = scope:actor
				}
			}
		}
	}
}
if = {
	limit = {
		exists = scope:target
		scope:target = {
			OR = {
				AND = {
					primary_attacker = scope:recipient
					scope:recipient.house = scope:actor.house
					primary_defender = {
						house != scope:actor.house
					}
				}
				AND = {
					primary_defender = scope:recipient
					scope:recipient.house = scope:actor.house
					primary_attacker = {
						house != scope:actor.house
					}
				}
			}
		}
	}
	add_clan_unity_interaction_effect = {
		CHARACTER = scope:actor
		TARGET = scope:recipient
		VALUE = medium_unity_gain
		DESC = clan_unity_join_war.desc
		REVERSE_NON_HOUSE_TARGET = no
	}
}
on_decline = scope:actor = {
	trigger_event = char_interaction.0236
}

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

Category
Diplomatic actions
In the menu
under More…
ID
join_war_interaction

Source: game/common/character_interactions/00_alliance.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?