Interaction · Diplomatic actions
Offer Military Assistance
…
What you need
You
To send it
- Not: Armies are raised
- If you have a Adventurer Government: You must have a Men-at-Arms Regiment
- You are already Assisting Militarily in a war
- Exiled
- Highest held Title is less than Empire Rank
- The target: Is war leader in the war against the target
To see it in the menu
- If played by the AI:
- Current military strength at least 500
- Ai boldness at least -25
- Is at not War
- Is not imprisoned
One of these
- Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_contract_assistance_interaction
or
Your culture: The Culture has the Unlocks the Offer Military Assistance Interaction Traditionor
Your Government is Adventurer
- Any character struggle:
- Your government is not unplayable
The character you target
To send it
- Is not allied to you
- If any character war: You decided to leave this War
- A mighty … cannot serve at the pleasure of such a small …
To see it in the menu
If
- You › Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_contract_assistance_interaction
Then
- Any character struggle:
involvement = involvedhas_struggle_phase_parameter = unlocks_contract_assistance_interaction
- You › Any character struggle:
- 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 any war attacker:
None of these
- Any war defender: Is allied to you
- Otherwise:
None of these
- Any war attacker: Is allied to you
Offer Military Assistance is a diplomatic character interaction in Crusader Kings III. You need: Not: Armies are raised, You are already Assisting Militarily in a war, Exiled and 1 more. The character you target needs: Is not allied to you and A mighty … cannot serve at the pleasure of such a small …. The AI weighs it (the answer is partly random). Reasons the AI weighs include The recipient is winning the War (-50), The recipient is losing the War (+50), The recipient outnumbers their enemy (-50) and 7 more. Patch 1.20.1.2, from game/common/character_interactions/03_fp2_interactions.txt.
Quick answers (2)
- What are the requirements for Offer Military Assistance in CK3?
- You: Not: Armies are raised, You are already Assisting Militarily in a war, Exiled and Highest held Title is less than Empire Rank. The character you target: Is not allied to you and A mighty … cannot serve at the pleasure of such a small …. (patch 1.20.1.2)
- How do I get the AI to accept Offer Military Assistance?
- The AI weighs it (the answer is partly random). Its reasons: The recipient is winning the War -50, The recipient is losing the War +50, The recipient outnumbers their enemy -50, The recipient is outnumbered +50, The recipient is heavily outnumbered +125, The recipient has little Gold, The recipient has Gold to spend, You Army is too small to be relevant -50, The recipient is defending … +25, The recipient is not interested in help for this war -300, The recipient finds your Martial Skill impressive, You past failures as a contractor -50, … Opinion of …, Greed, Boldness and Has Swords-for-Hire Camp Purpose +50.
Will they accept?
The AI adds these up and accepts above zero; near zero the answer is partly random (ai_maybe). Reasons in italics are the script's, with no label in the game.
| Reason | Amount |
|---|---|
| Base | 0 |
The recipient is winning the Warwhen
| -50 |
The recipient is losing the Warwhen
| +50 |
The recipient outnumbers their enemywhen
| -50 |
| The recipient is outnumbered | +50 |
The recipient is heavily outnumberedwhen
| +125 |
The recipient has little Goldwhen
| varies |
The recipient has Gold to spendwhen
| varies |
You Army is too small to be relevantwhen
| -50 |
The recipient is defending …when
| +25 |
The recipient is not interested in help for this warwhen
| -300 |
The recipient finds your Martial Skill impressivewhen
| your martial × 2 |
| You past failures as a contractor | -50 |
| … Opinion of … | varies |
Greedwhen
| varies |
Boldnesswhen
| varies |
Has Swords-for-Hire Camp Purposewhen
| +50 |
Acceptance (ai_accept) (241 lines of game script)
base = 0
modifier = {
add = -50
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_winning_trigger = yes
}
}
trigger_else = {
any_character_war = {
count = all
fp2_struggle_contract_assistance_war_winning_trigger = yes
}
}
desc = OA_AI_WINNING_WAR_REASON
}
modifier = {
add = 50
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_losing_trigger = yes
}
}
trigger_else = {
any_character_war = {
fp2_struggle_contract_assistance_war_losing_trigger = yes
}
}
desc = OA_AI_LOSING_WAR_REASON
}
modifier = {
add = -50
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_outnumbering_trigger = yes
}
}
trigger_else = {
any_character_war = {
count = all
fp2_struggle_contract_assistance_war_outnumbering_trigger = yes
}
}
desc = OA_AI_OUTNUMBER_ENEMY_REASON
}
modifier = {
add = 50
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_outnumbered_minor_trigger = yes
NOT = {
fp2_struggle_contract_assistance_war_outnumbered_trigger = yes
}
}
}
trigger_else = {
any_character_war = {
fp2_struggle_contract_assistance_war_outnumbered_minor_trigger = yes
NOT = {
fp2_struggle_contract_assistance_war_outnumbered_trigger = yes
}
}
}
desc = OA_AI_OUTNUMBERED_MINOR_REASON
}
modifier = {
add = 125
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 = {
value = -50
if = {
limit = {
gold < 0
}
add = -100
}
if = {
limit = {
debt_level >= 2
}
add = -200
}
if = {
limit = {
OR = {
ai_greed <= -50
ai_vengefulness >= 50
}
}
multiply = 0.5
}
}
gold < offer_assistance_interaction_gold_value
desc = OA_AI_CANNOT_AFFORD_REASON
}
modifier = {
add = {
value = 25
if = {
limit = {
gold >= {
value = offer_assistance_interaction_gold_value
multiply = 2
}
}
add = 50
}
if = {
limit = {
gold >= {
value = offer_assistance_interaction_gold_value
multiply = 3
}
}
add = 50
}
}
gold >= offer_assistance_interaction_gold_value
desc = OA_AI_EXTRA_GOLD_REASON
}
modifier = {
add = -50
trigger_if = {
limit = {
exists = scope:target
}
scope:target = {
fp2_struggle_contract_assistance_war_insufficient_trigger = yes
}
}
trigger_else = {
any_character_war = {
count = all
fp2_struggle_contract_assistance_war_insufficient_trigger = yes
}
}
desc = OA_AI_FEW_TROOPS_REASON
}
modifier = {
add = 25
trigger_if = {
limit = {
exists = scope:target
}
scope:target.casus_belli.primary_defender = scope:recipient
}
trigger_else = {
scope:recipient = {
any_character_war = {
primary_defender = scope:recipient
}
}
}
desc = OA_AI_DEFENSIVE_WAR_REASON
}
modifier = {
add = -300
exists = scope:target
scope:target = {
OR = {
using_cb = peasant_war
using_cb = fp2_border_raid
}
}
desc = OA_AI_UNINTERESTED_WAR_REASON
}
modifier = {
add = {
value = scope:actor.martial
multiply = 2
}
scope:actor = {
martial >= 12
}
desc = OA_AI_MARTIAL_REASON
}
modifier = {
add = -50
scope:actor = {
has_character_flag = fp2_contract_assistance_failure
}
desc = OA_AI_FAILURE_REASON
}
opinion_modifier = {
who = scope:recipient
opinion_target = scope:actor
multiplier = 0.25
desc = AI_OPINION_REASON
}
modifier = {
add = {
value = ai_greed
multiply = -0.2
}
ai_greed <= 0.5
desc = AI_VALUE_MODIFIER_GREED
}
modifier = {
add = {
value = ai_boldness
multiply = -0.2
}
NOT = {
ai_boldness = 0
}
desc = AI_VALUE_MODIFIER_BOLDNESS
}
modifier = {
add = 50
desc = camp_purpose_mercenaries_reason
scope:actor = {
has_realm_law = camp_purpose_mercenaries
}
}As written in game/common/character_interactions/03_fp2_interactions.txt.
What happens
If they accept
- The target:
If
is_attacker = scope:recipient
Then
add_attacker = scope:actor
Otherwise
add_defender = scope:actor
- Stress and fulfillment impact: by trait: Craven +40, Shy +20
If
- Any character struggle:
involvement = involvedphase_has_catalyst = catalyst_join_war_as_assisant- The character you target › Any character struggle:
involvement = involved
Then
- Every character struggle:
- Where:
phase_has_catalyst = catalyst_join_war_as_assisant- The character you target › Any character struggle:
involvement = involved
involvement = involvedactivate_struggle_catalyst = { catalyst = catalyst_join_war_as_assisant character = scope:actor }
- Where:
- Any character struggle:
- The character you target:
- Stress and fulfillment impact: by trait: Greedy +40, Arrogant +40
- If … War Contribution is at least … when the War ends:
- Pay 0 gold to you
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) (43 lines of game script)
is_available = trigger_if = {
limit = {
is_ai = yes
}
current_military_strength >= 500
ai_boldness >= -25
is_at_war = no
is_imprisoned = no
}
OR = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_contract_assistance_interaction
}
culture ?= {
has_cultural_parameter = unlocks_contract_assistance
}
government_has_flag = government_is_landless_adventurer
}
NOT = {
government_has_flag = government_is_herder
}
is_shown = scope:recipient = {
trigger_if = {
limit = {
scope:actor = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_contract_assistance_interaction
}
}
}
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_contract_assistance_interaction
}
}
is_at_war = yes
NOR = {
this = scope:actor
is_at_war_with = scope:actor
}
}As written in game/common/character_interactions/03_fp2_interactions.txt.
Can be sent when (is_valid…) (79 lines of game script)
scope:recipient = {
NOT = {
is_allied_to = scope:actor
}
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_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
}
}
}
}
}
scope:actor = {
has_raised_armies = no
trigger_if = {
limit = {
has_government = landless_adventurer_government
}
custom_tooltip = {
text = reinforce_soldiers_any_regiment_tt
maa_regiments_count >= 1
}
}
}
custom_tooltip = {
text = contract_assistance_war_already_contracted_tt
scope:actor = {
NOT = {
has_variable = owed_contract_assistance_war
}
}
}
custom_tooltip = {
text = the_wake_1
NOT = {
is_laamp_exiled_from_province_trigger = {
PROVINCE = scope:recipient.capital_province
LAAMP = scope:actor
}
}
}
scope:recipient = {
custom_tooltip = {
text = contract_assistance_tier_too_high_tt
OR = {
highest_held_title_tier = tier_county
highest_held_title_tier >= scope:actor.highest_held_title_tier
sub_realm_size >= scope:actor.sub_realm_size
}
}
}
scope:actor = {
NOT = {
highest_held_title_tier >= tier_empire
}
}As written in game/common/character_interactions/03_fp2_interactions.txt.
Effects (on_send, on_accept, on_decline) (91 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
}
else = {
add_defender = scope:actor
}
}
scope:actor = {
save_scope_as = contract_assistance_helper
set_variable = {
name = owed_contract_assistance_war
value = scope:target
}
set_variable = {
name = owed_contract_assistance_contribution
value = offer_assistance_interaction_war_contribution_value
}
set_variable = {
name = owed_contract_assistance_gold
value = scope:recipient.offer_assistance_interaction_gold_value
}
stress_and_fulfillment_impact = {
craven = medium_stress_impact_gain
shy = minor_stress_impact_gain
}
if = {
limit = {
any_character_struggle = {
involvement = involved
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_join_war_as_assisant
CHAR = scope:recipient
}
}
}
every_character_struggle = {
involvement = involved
limit = {
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
CATALYST = catalyst_join_war_as_assisant
CHAR = scope:recipient
}
}
activate_struggle_catalyst = {
catalyst = catalyst_join_war_as_assisant
character = scope:actor
}
}
}
}
scope:recipient = {
stress_and_fulfillment_impact = {
greedy = medium_stress_impact_gain
arrogant = medium_stress_impact_gain
}
custom_description_no_bullet = {
text = contract_assistance_interaction_condition_tt
subject = scope:recipient
object = scope:actor
}
show_as_tooltip = {
pay_short_term_gold = {
target = scope:actor
gold = offer_assistance_interaction_gold_value
}
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_contract_assistance.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 = minor_unity_gain
DESC = clan_unity_contract_assistance_decline.desc
REVERSE_NON_HOUSE_TARGET = no
}As written in game/common/character_interactions/03_fp2_interactions.txt.
- Category
- Diplomatic actions
- Again on the same character
- after 5 years
- In the menu
- main list
- ID
contract_assistance_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. “…” marks words the game fills in at play time (a name, a title).