2320 lines
49 KiB
Text
2320 lines
49 KiB
Text
#Interactions relating to tributary relationship management
|
|
|
|
### Become Tributary - bilateral
|
|
# actor = offerer / potential tributary
|
|
# recipient = receiver / potential suzerain
|
|
|
|
become_tributary_interaction = {
|
|
category = interaction_category_diplomacy
|
|
common_interaction = no
|
|
icon = become_tributary_interaction
|
|
|
|
desc = become_tributary_interaction_desc
|
|
|
|
is_shown = {
|
|
scope:actor = {
|
|
NOT = { government_has_flag = cannot_be_vassal_or_liege }
|
|
is_independent_ruler = yes # You have to be independent - This check exists to prevent a lot of edge-cases where you can change liege
|
|
is_tributary = no
|
|
highest_held_title_tier >= tier_county
|
|
trigger_if = {
|
|
limit = {
|
|
is_ai = yes
|
|
}
|
|
current_military_strength < scope:recipient.one_and_a_half_times_current_military_strength
|
|
primary_title.tier < scope:recipient.primary_title.tier
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
is_independent_ruler = yes # while it's possible for tributaries to have their own tributaries, it should not be possible to create a tributary relationship with a non-independent ruler
|
|
NOT = {
|
|
this = scope:actor
|
|
top_suzerain = scope:actor
|
|
}
|
|
can_have_tributaries_trigger = yes
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
scope:actor = {
|
|
is_physically_able = yes
|
|
is_travelling = no
|
|
NOT = { exists = involved_activity }
|
|
is_confederation_member = no
|
|
is_at_war = no
|
|
}
|
|
}
|
|
|
|
greeting = positive
|
|
notification_text = BECOME_TRIBUTARY_INTERACTION_NOTIFICATION
|
|
|
|
# Low starting obligations
|
|
send_option = {
|
|
flag = low_obligations
|
|
localization = low_tributary_obligations
|
|
}
|
|
|
|
# Medium starting obligations
|
|
send_option = {
|
|
flag = normal_obligations
|
|
localization = normal_tributary_obligations
|
|
starts_enabled = { always = yes }
|
|
|
|
}
|
|
|
|
# High starting obligations
|
|
send_option = {
|
|
flag = high_obligations
|
|
localization = high_tributary_obligations
|
|
}
|
|
|
|
send_options_exclusive = yes
|
|
|
|
on_accept = {
|
|
start_tributary_interaction_effect = {
|
|
TRIBUTARY = scope:actor
|
|
SUZERAIN = scope:recipient
|
|
}
|
|
scope:actor = {
|
|
trigger_event = char_interaction.0360
|
|
}
|
|
scope:recipient = {
|
|
if = {
|
|
limit = { scope:high_obligations = yes }
|
|
add_opinion = {
|
|
modifier = tributary_volunteered_opinion
|
|
target = scope:actor
|
|
opinion = 20
|
|
}
|
|
}
|
|
else_if = {
|
|
limit = { scope:normal_obligations = yes }
|
|
add_opinion = {
|
|
modifier = tributary_volunteered_opinion
|
|
target = scope:actor
|
|
}
|
|
}
|
|
|
|
consume_all_criminal_reasons_effect = {
|
|
LIEGE = scope:recipient
|
|
CRIMINAL = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
on_decline = {
|
|
scope:actor = {
|
|
trigger_event = char_interaction.0361
|
|
}
|
|
}
|
|
|
|
ai_potential = {
|
|
highest_held_title_tier >= tier_county
|
|
is_independent_ruler = yes
|
|
}
|
|
|
|
ai_targets = {
|
|
ai_recipients = neighboring_rulers_including_tributary_borders
|
|
}
|
|
|
|
ai_targets = {
|
|
ai_recipients = neighboring_top_overlords_connected_by_land
|
|
}
|
|
|
|
ai_frequency = 6 # this might appear fairly frequent but is necessary in order to ensure AI can respond to sudden threats on their borders
|
|
|
|
force_notification = yes
|
|
|
|
ai_will_do = {
|
|
base = -50
|
|
ai_military_threat_modifier_with_cbs = {
|
|
SENDER = scope:actor
|
|
RECEIVER = scope:recipient
|
|
MULTIPLIER = -1
|
|
}
|
|
|
|
modifier = {
|
|
is_obedient_to = scope:recipient
|
|
add = 40
|
|
desc = obedient_interaction_reason
|
|
}
|
|
|
|
modifier = { # Rivalry modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_rival_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
has_relation_rival = scope:recipient
|
|
NOT = { has_relation_nemesis = scope:recipient }
|
|
}
|
|
}
|
|
add = -10
|
|
}
|
|
modifier = { # Nemesis modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_nemesis_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
has_relation_nemesis = scope:recipient
|
|
}
|
|
}
|
|
add = -30
|
|
}
|
|
modifier = { # Different faith, no pluralism.
|
|
desc = offer_vassalization_interaction_aibehavior_differentfaith_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
NOR = { # Of two different faiths AND the potential vassal's faith is not pluralistic.
|
|
faith = scope:recipient.faith
|
|
faith = { has_doctrine = doctrine_pluralism_pluralistic }
|
|
}
|
|
}
|
|
}
|
|
add = {
|
|
value = -25
|
|
if = {
|
|
limit = {
|
|
scope:actor.faith = {
|
|
faith_hostility_level = {
|
|
target = scope:recipient.faith
|
|
value >= faith_hostile_level
|
|
}
|
|
}
|
|
}
|
|
add = -10
|
|
}
|
|
if = {
|
|
limit = {
|
|
scope:actor.faith = {
|
|
faith_hostility_level = {
|
|
target = scope:recipient.faith
|
|
value >= faith_evil_level
|
|
}
|
|
}
|
|
}
|
|
add = -25
|
|
}
|
|
}
|
|
}
|
|
modifier = { # I am a King!
|
|
desc = offer_fealty_interaction_aibehavior_amkingtier_tt
|
|
trigger = {
|
|
highest_held_title_tier >= tier_kingdom
|
|
}
|
|
add = -20
|
|
}
|
|
|
|
modifier = { # Cultural Acceptance
|
|
add = -5
|
|
desc = cultural_acceptance_interaction_reason
|
|
trigger = {
|
|
scope:actor = {
|
|
NOT = { has_same_culture_as = scope:recipient }
|
|
culture = {
|
|
cultural_acceptance = { target = scope:recipient.culture value < 50 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = { # Same language
|
|
add = 5
|
|
desc = speaks_same_language_interaction_reason
|
|
trigger = {
|
|
scope:actor = {
|
|
knows_language_of_culture = scope:recipient.culture
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ai_min_reply_days = 5
|
|
ai_max_reply_days = 10
|
|
|
|
ai_accept = {
|
|
base = -50
|
|
|
|
modifier = {
|
|
desc = interaction_is_nomadic
|
|
scope:recipient = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
add = 100
|
|
}
|
|
|
|
modifier = { # Wide difference in rank
|
|
desc = offer_vassalization_interaction_aibehavior_widetitletier_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
tier_difference = {
|
|
target = scope:recipient
|
|
value > 1
|
|
}
|
|
}
|
|
}
|
|
add = 20
|
|
}
|
|
modifier = { # Distant Realm.
|
|
desc = offer_vassalization_interaction_aibehavior_distantrealm_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
NOT = {
|
|
any_neighboring_top_liege_realm_owner = { this = scope:recipient }
|
|
}
|
|
}
|
|
scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value < 200000 } }
|
|
}
|
|
add = -15
|
|
}
|
|
modifier = { # Remote Realm.
|
|
desc = offer_vassalization_interaction_aibehavior_remoterealm_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
NOT = {
|
|
any_neighboring_top_liege_realm_owner = { this = scope:recipient }
|
|
}
|
|
}
|
|
scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value >= 200000 } }
|
|
}
|
|
add = -25
|
|
}
|
|
|
|
# MINOR
|
|
modifier = { # Rivalry modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_rival_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
has_relation_rival = scope:actor
|
|
NOT = { has_relation_nemesis = scope:actor }
|
|
}
|
|
}
|
|
add = -10
|
|
}
|
|
modifier = { # Nemesis modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_nemesis_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
has_relation_nemesis = scope:actor
|
|
}
|
|
}
|
|
add = -30
|
|
}
|
|
modifier = { # Same Dynasty modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_dynasty_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
dynasty = scope:actor.dynasty
|
|
}
|
|
}
|
|
add = 10
|
|
}
|
|
|
|
# PERSONALITY
|
|
ai_value_modifier = {
|
|
ai_greed = 0.75
|
|
min = 0
|
|
}
|
|
|
|
# OPINION INFLUENCE
|
|
opinion_modifier = { # Compare Opinion modifier.
|
|
who = scope:recipient
|
|
opinion_target = scope:actor
|
|
multiplier = 1
|
|
}
|
|
|
|
# CONTRACT OPTIONS
|
|
modifier = {
|
|
add = -25
|
|
scope:low_obligations = yes
|
|
desc = CONTRACT_LOW_TAXES_REASON
|
|
}
|
|
modifier = {
|
|
add = 25
|
|
scope:high_obligations = yes
|
|
desc = CONTRACT_HIGH_TAXES_REASON
|
|
}
|
|
}
|
|
}
|
|
|
|
### Demand Tributary - bilateral
|
|
# actor = offerer / potential suzerain
|
|
# recipient = receiver / potential tributary
|
|
|
|
demand_tributary_interaction = {
|
|
category = interaction_category_diplomacy
|
|
common_interaction = yes
|
|
icon = demand_tributary_interaction
|
|
|
|
desc = demand_tributary_interaction_desc
|
|
|
|
is_shown = {
|
|
scope:actor = {
|
|
NOT = {
|
|
this = scope:recipient
|
|
top_suzerain = scope:recipient.top_suzerain # ensures the actor and recipient is not already in the same "suzerain bloc"
|
|
}
|
|
can_get_tributaries_peacefully_trigger = yes
|
|
|
|
trigger_if = {
|
|
limit = {
|
|
is_ai = yes
|
|
}
|
|
current_military_strength >= scope:recipient.one_and_a_half_times_current_military_strength
|
|
primary_title.tier >= scope:recipient.primary_title.tier
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
highest_held_title_tier >= tier_county
|
|
is_independent_ruler = yes # target cannot be a vassal
|
|
NOT = { government_has_flag = cannot_be_vassal_or_liege }
|
|
}
|
|
# Temujin cannot make Jamukha his subject once he leaves him
|
|
NOT = {
|
|
scope:actor = {
|
|
has_variable = had_mpo_temujin_flavor_0010
|
|
var:had_mpo_temujin_flavor_0010 ?= scope:recipient
|
|
}
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
scope:actor = {
|
|
NOT = { has_truce = scope:actor }
|
|
is_physically_able = yes
|
|
is_travelling = no
|
|
NOT = { exists = involved_activity }
|
|
}
|
|
scope:recipient = {
|
|
is_tributary = no
|
|
is_at_war = no
|
|
custom_tooltip = {
|
|
text = demand_tributary_interaction_cooldown_active_tt
|
|
NOT = {
|
|
has_opinion_modifier = {
|
|
modifier = tributary_demanded_opinion
|
|
target = scope:actor
|
|
}
|
|
}
|
|
}
|
|
is_confederation_member = no
|
|
}
|
|
scope:actor = {
|
|
custom_tooltip = {
|
|
text = mpo_interaction_not_neighbouring_tt
|
|
any_land_neighboring_realm_with_tributaries_owner = {
|
|
this = scope:recipient
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
cost = {
|
|
prestige = minor_prestige_value
|
|
}
|
|
|
|
greeting = positive
|
|
notification_text = DEMAND_TRIBUTARY_INTERACTION_NOTIFICATION
|
|
|
|
on_accept = {
|
|
start_tributary_interaction_effect = {
|
|
TRIBUTARY = scope:recipient
|
|
SUZERAIN = scope:actor
|
|
}
|
|
scope:actor = {
|
|
trigger_event = char_interaction.0362
|
|
}
|
|
scope:recipient = {
|
|
add_opinion = {
|
|
modifier = tributary_demanded_opinion # this opinion also acts as a built-in cooldown
|
|
target = scope:actor
|
|
}
|
|
}
|
|
consume_all_criminal_reasons_effect = {
|
|
LIEGE = scope:actor
|
|
CRIMINAL = scope:recipient
|
|
}
|
|
}
|
|
|
|
on_decline = {
|
|
scope:actor = {
|
|
trigger_event = char_interaction.0363
|
|
}
|
|
scope:recipient = {
|
|
add_opinion = {
|
|
modifier = tributary_demanded_opinion # this opinion also acts as a built-in cooldown
|
|
target = scope:actor
|
|
}
|
|
custom_tooltip = demand_tributary_interaction_cooldown_tt
|
|
}
|
|
}
|
|
|
|
ai_maybe = yes
|
|
|
|
ai_potential = {
|
|
highest_held_title_tier > 1 # at least a count-level ruler
|
|
is_independent_ruler = yes
|
|
}
|
|
|
|
ai_targets = {
|
|
ai_recipients = neighboring_rulers_including_tributary_borders
|
|
max = 5
|
|
}
|
|
|
|
ai_frequency = 4
|
|
|
|
force_notification = yes
|
|
|
|
ai_will_do = { # AI will often do this to valid targets that aren't a military threat to them, especially if they're rich
|
|
base = 0
|
|
|
|
modifier = {
|
|
add = {
|
|
add = scope:recipient.gold
|
|
divide = 10
|
|
max = 100
|
|
}
|
|
desc = accumulated_wealth_reason
|
|
}
|
|
|
|
ai_military_threat_modifier_with_cbs = {
|
|
SENDER = scope:actor
|
|
RECEIVER = scope:recipient
|
|
MULTIPLIER = -1
|
|
}
|
|
|
|
modifier = {
|
|
scope:recipient = { is_obedient_to = scope:actor }
|
|
add = 40
|
|
desc = obedient_interaction_reason
|
|
}
|
|
|
|
modifier = { # Generally don't try to tributarize those of higher rank than you
|
|
trigger = {
|
|
"scope:recipient.tier_difference(scope:actor)" > 1
|
|
}
|
|
add = -20
|
|
}
|
|
|
|
modifier = { # Generally don't try to tributarize those of higher dominance than you
|
|
trigger = {
|
|
scope:recipient.dominance_value > scope:actor.dominance_value
|
|
}
|
|
add = -30
|
|
}
|
|
|
|
modifier = { # Remote Realm.
|
|
trigger = {
|
|
scope:actor = {
|
|
NOT = {
|
|
any_neighboring_top_liege_realm_owner = { this = scope:recipient }
|
|
}
|
|
}
|
|
scope:actor.capital_province = { squared_distance = { target = scope:recipient.capital_province value >= 200000 } }
|
|
}
|
|
add = -25
|
|
}
|
|
|
|
modifier = {
|
|
trigger = {
|
|
scope:recipient = { government_has_flag = government_is_herder }
|
|
}
|
|
add = 1000
|
|
}
|
|
}
|
|
|
|
ai_min_reply_days = 5
|
|
ai_max_reply_days = 10
|
|
|
|
auto_accept = {
|
|
custom_tooltip = {
|
|
text = scheme_agent_aptitude.is_herder
|
|
scope:recipient = { government_has_flag = government_is_herder }
|
|
}
|
|
}
|
|
|
|
ai_accept = {
|
|
base = -60
|
|
|
|
modifier = { # Perk boost
|
|
desc = offer_vassalization_true_ruler_perk_tt
|
|
trigger = {
|
|
scope:actor = { has_perk = true_ruler_perk }
|
|
}
|
|
add = true_ruler_value
|
|
}
|
|
|
|
#Yurt bonuses
|
|
modifier = {
|
|
desc = tributary_yurt_02_domicile_building
|
|
trigger = {
|
|
scope:actor.domicile ?= { has_domicile_parameter = nomad_yurt_increased_tributary_acceptance_lvl_1 }
|
|
}
|
|
add = 5
|
|
}
|
|
|
|
modifier = {
|
|
desc = tributary_yurt_02_domicile_building
|
|
trigger = {
|
|
scope:actor.domicile ?= { has_domicile_parameter = nomad_yurt_increased_tributary_acceptance_lvl_2 }
|
|
}
|
|
add = 10
|
|
}
|
|
|
|
modifier = {
|
|
desc = tributary_yurt_02_domicile_building
|
|
trigger = {
|
|
scope:actor.domicile ?= { has_domicile_parameter = nomad_yurt_increased_tributary_acceptance_lvl_3 }
|
|
}
|
|
add = 15
|
|
}
|
|
|
|
modifier = { # the bolder they are, the less likely they will agree to this and vice versa
|
|
NOT = { ai_boldness = 0 }
|
|
add = {
|
|
value = ai_boldness
|
|
multiply = -1
|
|
divide = 2
|
|
}
|
|
desc = TRIBUTARY_BOLDNESS_REASON
|
|
}
|
|
|
|
modifier = { # the greedier they are, the less likely they will agree to this
|
|
ai_greed > 0
|
|
add = {
|
|
value = ai_greed
|
|
multiply = -1
|
|
divide = 4
|
|
}
|
|
desc = TRIBUTARY_GREED_REASON
|
|
}
|
|
|
|
modifier = {
|
|
is_obedient_to = scope:actor
|
|
add = 40
|
|
desc = obedient_interaction_reason
|
|
}
|
|
|
|
modifier = {
|
|
scope:actor = { is_gurkhan = yes }
|
|
scope:recipient = { government_has_flag = government_is_nomadic }
|
|
add = 20
|
|
desc = gurkhan_interaction_reason
|
|
}
|
|
|
|
# Easier to make Tributaries during the Zud season
|
|
modifier = {
|
|
any_character_situation = {
|
|
any_situation_sub_region = {
|
|
has_sub_region_phase_parameter = the_great_steppe_easier_tributaries
|
|
any_situation_sub_region_participant_group = {
|
|
participant_group_type = nomad_rulers_capital
|
|
participant_group_has_character = scope:actor
|
|
}
|
|
}
|
|
}
|
|
scope:recipient = { government_has_flag = government_is_nomadic }
|
|
add = 25
|
|
desc = zud_season_reason
|
|
}
|
|
|
|
# if the actor is a major threat to the recipient they're more likely to accept
|
|
ai_military_threat_modifier_with_cbs = {
|
|
SENDER = scope:recipient
|
|
RECEIVER = scope:actor
|
|
MULTIPLIER = 1
|
|
}
|
|
|
|
modifier = { # They are a King
|
|
desc = demand_tributary_interaction_aibehavior_hightier_tt
|
|
trigger = {
|
|
scope:recipient = { highest_held_title_tier = tier_kingdom }
|
|
}
|
|
add = -100
|
|
}
|
|
|
|
modifier = { # They are an Emperor or greater
|
|
desc = demand_tributary_interaction_aibehavior_hightier_tt
|
|
trigger = {
|
|
scope:recipient = { highest_held_title_tier >= tier_empire }
|
|
}
|
|
add = -200
|
|
}
|
|
|
|
modifier = { # Recipient has higher Dominance than the actor
|
|
desc = demand_tributary_interaction_aibehavior_dominance_tt
|
|
trigger = {
|
|
scope:recipient.dominance_value > scope:actor.dominance_value
|
|
}
|
|
add = -20
|
|
}
|
|
|
|
modifier = { # Actor has higher Dominance than the recipient
|
|
desc = demand_tributary_interaction_aibehavior_dominance_tt
|
|
trigger = {
|
|
scope:recipient = { government_has_flag = government_is_nomadic }
|
|
scope:actor.dominance_value > scope:recipient.dominance_value
|
|
}
|
|
add = 20
|
|
}
|
|
|
|
# Legitimacy
|
|
modifier = {
|
|
desc = "LOW_LEGITIMACY_REASON"
|
|
scope:actor = {
|
|
has_legitimacy_flag = very_reduced_tributarization_acceptance
|
|
}
|
|
add = -25
|
|
}
|
|
modifier = {
|
|
desc = "LOW_LEGITIMACY_REASON"
|
|
scope:actor = {
|
|
has_legitimacy_flag = reduced_tributarization_acceptance
|
|
}
|
|
add = -10
|
|
}
|
|
modifier = {
|
|
desc = "HIGH_LEGITIMACY_REASON"
|
|
scope:actor = {
|
|
has_legitimacy_flag = increased_tributarization_acceptance
|
|
}
|
|
add = 10
|
|
}
|
|
modifier = {
|
|
desc = "HIGH_LEGITIMACY_REASON"
|
|
scope:actor = {
|
|
has_legitimacy_flag = very_increased_tributarization_acceptance
|
|
}
|
|
add = 25
|
|
}
|
|
|
|
# Non-nomadic
|
|
modifier = {
|
|
desc = AI_FILTHY_HORSE_LORD_REASON
|
|
trigger = {
|
|
scope:actor = { government_has_flag = government_is_nomadic }
|
|
scope:recipient = {
|
|
NOT = { government_has_flag = government_is_nomadic }
|
|
}
|
|
}
|
|
add = {
|
|
value = -50
|
|
if = {
|
|
limit = {
|
|
scope:recipient = { government_has_flag = government_is_tribal }
|
|
}
|
|
multiply = 0.5
|
|
}
|
|
}
|
|
}
|
|
|
|
# MINOR
|
|
modifier = { # Rivalry modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_rival_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
has_relation_rival = scope:actor
|
|
NOT = { has_relation_nemesis = scope:actor }
|
|
}
|
|
}
|
|
add = -100
|
|
}
|
|
modifier = { # Nemesis modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_nemesis_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
has_relation_nemesis = scope:actor
|
|
}
|
|
}
|
|
add = -200
|
|
}
|
|
modifier = { # Same Dynasty modifier.
|
|
desc = offer_vassalization_interaction_aibehavior_dynasty_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
dynasty = scope:actor.dynasty
|
|
}
|
|
}
|
|
add = 10
|
|
}
|
|
modifier = { # Different faith, no pluralism.
|
|
desc = offer_vassalization_interaction_aibehavior_differentfaith_tt
|
|
trigger = {
|
|
scope:actor = {
|
|
NOT = { # faith condition below doesn't have to apply if both actor and recipient have nomadic_philosophy
|
|
has_trait = nomadic_philosophy
|
|
scope:recipient = { has_trait = nomadic_philosophy }
|
|
}
|
|
faith = {
|
|
NOR = { # Of two different faiths AND the potential vassal's faith is not pluralistic
|
|
this = scope:recipient.faith
|
|
has_doctrine = doctrine_pluralism_pluralistic
|
|
}
|
|
}
|
|
}
|
|
}
|
|
add = {
|
|
value = -25
|
|
if = {
|
|
limit = {
|
|
scope:actor.faith = {
|
|
faith_hostility_level = {
|
|
target = scope:recipient.faith
|
|
value >= faith_hostile_level
|
|
}
|
|
}
|
|
}
|
|
add = -10
|
|
}
|
|
if = {
|
|
limit = {
|
|
scope:actor.faith = {
|
|
faith_hostility_level = {
|
|
target = scope:recipient.faith
|
|
value >= faith_evil_level
|
|
}
|
|
}
|
|
}
|
|
add = -25
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = { # Encircled
|
|
desc = offer_vassalization_interaction_aibehavior_encircled_tt
|
|
trigger = {
|
|
scope:recipient = {
|
|
NOT = {
|
|
any_neighboring_top_suzerain_realm_owner = {
|
|
NOT = {
|
|
this = scope:actor
|
|
}
|
|
}
|
|
}
|
|
NOT = {
|
|
any_realm_county = {
|
|
is_coastal_county = yes
|
|
}
|
|
}
|
|
}
|
|
}
|
|
add = 30
|
|
}
|
|
|
|
modifier = { # Cultural Acceptance
|
|
add = -5
|
|
desc = cultural_acceptance_interaction_reason
|
|
trigger = {
|
|
scope:actor = {
|
|
NOT = { # cultural condition below doesn't have to apply if both actor and recipient have nomadic_philosophy
|
|
has_trait = nomadic_philosophy
|
|
scope:recipient = { has_trait = nomadic_philosophy }
|
|
}
|
|
NOT = { has_same_culture_as = scope:recipient }
|
|
culture = {
|
|
cultural_acceptance = { target = scope:recipient.culture value < 50 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = { # Same language
|
|
add = 5
|
|
desc = speaks_same_language_interaction_reason
|
|
trigger = {
|
|
scope:actor = {
|
|
knows_language_of_culture = scope:recipient.culture
|
|
}
|
|
}
|
|
}
|
|
|
|
# OPINION INFLUENCE
|
|
opinion_modifier = { # Compare Opinion modifier.
|
|
who = scope:recipient
|
|
opinion_target = scope:actor
|
|
multiplier = 1
|
|
}
|
|
|
|
#Severed head acceptance
|
|
modifier = {
|
|
add = 200
|
|
scope:actor = {
|
|
has_variable = severed_head_vassalization
|
|
var:severed_head_vassalization = {
|
|
this = scope:recipient
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
### Cease Paying Tribute - unilateral
|
|
### Name referenced in code! Don't change it without an adult present!
|
|
# actor = tributary
|
|
# recipient = suzerain
|
|
|
|
cease_paying_tribute_interaction = {
|
|
category = interaction_category_diplomacy
|
|
common_interaction = yes
|
|
use_diplomatic_range = no
|
|
icon = cease_paying_tributary_interaction
|
|
|
|
desc = cease_paying_tribute_interaction_desc
|
|
|
|
is_shown = {
|
|
scope:actor = {
|
|
this != scope:recipient
|
|
suzerain = scope:recipient
|
|
subject_can_break_tributary = yes
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
scope:actor = {
|
|
is_physically_able = yes
|
|
is_travelling = no
|
|
NOT = { exists = involved_activity }
|
|
trigger_if = {
|
|
limit = {
|
|
OR = {
|
|
any_land_neighboring_realm_with_tributaries_owner = {
|
|
this = scope:recipient
|
|
}
|
|
scope:recipient = {
|
|
is_landed = no
|
|
}
|
|
}
|
|
}
|
|
NOT = { has_truce = scope:recipient }
|
|
}
|
|
}
|
|
}
|
|
|
|
cost = {
|
|
prestige = {
|
|
value = 0
|
|
if = {
|
|
limit = {
|
|
scope:actor = {
|
|
OR = {
|
|
any_land_neighboring_realm_with_tributaries_owner = {
|
|
this = scope:recipient
|
|
}
|
|
scope:recipient = {
|
|
is_landed = no
|
|
}
|
|
}
|
|
}
|
|
}
|
|
add = minor_prestige_value
|
|
}
|
|
}
|
|
}
|
|
|
|
auto_accept = yes
|
|
on_accept = {
|
|
scope:actor = {
|
|
end_tributary = yes
|
|
}
|
|
scope:recipient = {
|
|
if = {
|
|
limit = { is_ai = yes }
|
|
trigger_event = {
|
|
id = char_interaction.0370
|
|
days = 14 # we delay the response from the AI for 2 weeks to make it feel more like a "diplomacy response"
|
|
}
|
|
}
|
|
else = {
|
|
trigger_event = char_interaction.0370
|
|
}
|
|
add_opinion = {
|
|
modifier = tributary_ceased_payments_opinion
|
|
target = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
ai_potential = {
|
|
is_at_war = no
|
|
is_migrating = no
|
|
suzerain ?= {
|
|
is_migrating = no
|
|
|
|
OR = {
|
|
is_landed = no
|
|
NOT = { # disconnected tributaries can always do this, even herders
|
|
any_land_neighboring_realm_with_tributaries_owner = {
|
|
this = root
|
|
}
|
|
}
|
|
AND = {
|
|
NOT = { root = { government_has_flag = government_is_herder } }
|
|
trigger_if = { # Obedience is a hard blocker, but only if suzerain is landed
|
|
limit = {
|
|
is_landed = yes
|
|
}
|
|
root = { is_obedient = no }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ai_targets = {
|
|
ai_recipients = suzerain
|
|
}
|
|
|
|
ai_frequency = 12 # this must be 12 (1 year) in order to ensure the integrity of the UI-visualized chance the tributary will break the contract
|
|
|
|
# visualized in the UI as the annual chance the tributary will break the contract, based on a percentage chance per year
|
|
ai_will_do = {
|
|
base = -25
|
|
|
|
modifier = {
|
|
add = {
|
|
add = obedience_value
|
|
subtract = obedience_threshold
|
|
multiply = -1
|
|
max = obedience_threshold
|
|
min = {
|
|
value = obedience_threshold
|
|
multiply = -1
|
|
}
|
|
}
|
|
desc = obedience_value_reason
|
|
}
|
|
|
|
modifier = {
|
|
scope:recipient = {
|
|
has_variable = temp_tributary_protection
|
|
}
|
|
add = -150
|
|
desc = temp_tributary_protection_reason
|
|
}
|
|
|
|
modifier = {
|
|
dominance_value > suzerain.dominance_value
|
|
add = 30
|
|
desc = cease_tribute_higher_dominance_reason
|
|
}
|
|
|
|
modifier = {
|
|
suzerain = {
|
|
any_memory = {
|
|
has_memory_type = nomad_showed_weakness_in_war
|
|
memory_age_years < 5
|
|
}
|
|
}
|
|
add = 30
|
|
desc = cease_tribute_showed_weakness_in_war_reason
|
|
}
|
|
|
|
modifier = {
|
|
any_memory = {
|
|
has_memory_type = suzerain_defended_me_in_war
|
|
has_memory_participant = root.suzerain
|
|
memory_age_years < 10
|
|
}
|
|
add = -100
|
|
desc = cease_tribute_defended_me_in_war_reason
|
|
}
|
|
|
|
modifier = {
|
|
suzerain = {
|
|
any_memory = {
|
|
has_memory_type = had_chaotic_kurultai_succession
|
|
memory_age_years < 5
|
|
}
|
|
}
|
|
add = 30
|
|
desc = cease_tribute_had_chaotic_kurultai_succession_reason
|
|
}
|
|
|
|
# if the actor is sufficiently scared of the recipient they're way less likely to do this
|
|
ai_military_threat_modifier = {
|
|
SENDER = scope:actor
|
|
RECEIVER = scope:recipient
|
|
MULTIPLIER = -2.5
|
|
}
|
|
|
|
modifier = {
|
|
scope:actor = {
|
|
is_migrating = no
|
|
}
|
|
scope:recipient = {
|
|
NOT = {
|
|
any_land_neighboring_realm_with_tributaries_owner = {
|
|
this = scope:actor
|
|
}
|
|
}
|
|
}
|
|
add = 1000
|
|
desc = cease_tribute_disconnected_suzerain
|
|
}
|
|
|
|
modifier = {
|
|
scope:recipient = {
|
|
is_landed = no
|
|
is_migrating = no
|
|
is_at_war = no
|
|
}
|
|
add = 10000
|
|
desc = cease_tribute_landless_suzerain
|
|
}
|
|
}
|
|
}
|
|
|
|
### Release Tributary - unilateral
|
|
# actor = suzerain
|
|
# recipient = tributary
|
|
|
|
release_tributary_interaction = {
|
|
category = interaction_category_diplomacy
|
|
common_interaction = no
|
|
icon = release_tributary_interaction
|
|
|
|
desc = release_tributary_interaction_desc
|
|
|
|
is_shown = {
|
|
scope:recipient = {
|
|
this != scope:actor
|
|
suzerain = scope:actor
|
|
OR = { # AI should only ever consider releasing unruly subjects
|
|
scope:actor = { is_ai = no }
|
|
NOT = { is_obedient_to = scope:actor }
|
|
}
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {}
|
|
|
|
cost = {
|
|
prestige = minor_prestige_value
|
|
}
|
|
|
|
auto_accept = yes
|
|
on_accept = {
|
|
add_truce_one_way = {
|
|
character = scope:recipient
|
|
years = 5
|
|
name = TRUCE_TRIBUTARY_RELEASED
|
|
}
|
|
scope:recipient = {
|
|
end_tributary = yes
|
|
save_scope_as = tributary_loc
|
|
scope:actor = { save_scope_as = suzerain_loc }
|
|
add_truce_both_ways = {
|
|
character = scope:actor
|
|
years = 5
|
|
name = TRUCE_TRIBUTARY_STOPPED
|
|
}
|
|
add_opinion = {
|
|
target = scope:actor
|
|
modifier = tributary_released_opinion
|
|
opinion = 25
|
|
}
|
|
trigger_event = char_interaction.0380
|
|
}
|
|
scope:actor = {
|
|
#TODO_CD_MPO some sort of message here
|
|
}
|
|
}
|
|
}
|
|
|
|
### Release as Tributary - unilateral
|
|
# actor = suzerain
|
|
# recipient = tributary
|
|
|
|
release_as_tributary_interaction = {
|
|
category = interaction_category_vassal
|
|
common_interaction = no
|
|
icon = release_as_tributary
|
|
interface_priority = 4
|
|
|
|
desc = release_as_tributary_interaction_desc
|
|
|
|
is_shown = {
|
|
scope:actor = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
scope:recipient = {
|
|
is_vassal_of = scope:actor
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
scope:actor = {
|
|
is_independent_ruler = yes
|
|
is_at_war = no
|
|
}
|
|
}
|
|
|
|
auto_accept = yes
|
|
|
|
on_accept = {
|
|
scope:actor = {
|
|
hidden_effect = {
|
|
send_interface_toast = {
|
|
type = event_toast_effect_neutral
|
|
title = release_as_tributary_interaction_toast
|
|
left_icon = scope:actor
|
|
right_icon = scope:recipient
|
|
|
|
custom_tooltip = release_as_tributary_interaction_toast_desc
|
|
}
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
add_opinion = {
|
|
target = scope:actor
|
|
modifier = granted_independence_opinion
|
|
opinion = 10
|
|
}
|
|
create_title_and_vassal_change = {
|
|
type = independency
|
|
save_scope_as = change
|
|
add_claim_on_loss = yes
|
|
}
|
|
becomes_independent = {
|
|
change = scope:change
|
|
}
|
|
|
|
resolve_title_and_vassal_change = scope:change
|
|
}
|
|
start_tributary_interaction_effect = {
|
|
SUZERAIN = scope:actor
|
|
TRIBUTARY = scope:recipient
|
|
}
|
|
}
|
|
|
|
ai_potential = {
|
|
government_has_flag = government_is_nomadic
|
|
this = top_liege
|
|
vassal_count > vassal_limit
|
|
}
|
|
|
|
ai_targets = {
|
|
ai_recipients = vassals
|
|
}
|
|
|
|
ai_frequency = 12
|
|
|
|
ai_will_do = {
|
|
base = 0
|
|
modifier = {
|
|
scope:recipient = { # Only on your borders
|
|
any_held_title = {
|
|
tier = tier_county
|
|
any_neighboring_county = {
|
|
OR = {
|
|
is_coastal_county = yes
|
|
holder.top_liege != scope:recipient.top_liege
|
|
}
|
|
}
|
|
}
|
|
}
|
|
add = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
# Offer Courtier
|
|
offer_courtier_interaction = {
|
|
category = interaction_category_diplomacy
|
|
common_interaction = no
|
|
icon = courtier_interaction
|
|
interface_priority = 40
|
|
|
|
desc = offer_courtier_interaction_desc
|
|
|
|
ai_targets = {
|
|
ai_recipients = suzerain
|
|
ai_recipients = liege
|
|
ai_recipients = scripted_relations
|
|
max = 5
|
|
}
|
|
ai_target_quick_trigger = {
|
|
adult = yes
|
|
}
|
|
ai_frequency = 36
|
|
|
|
greeting = positive
|
|
notification_text = OFFER_COURTIER_NOTIFICATION
|
|
|
|
needs_recipient_to_open = yes
|
|
|
|
populate_actor_list = {
|
|
scope:actor = {
|
|
every_courtier = {
|
|
limit = {
|
|
is_available_healthy_ai_adult = yes
|
|
NOR = {
|
|
is_consort_of = scope:actor
|
|
is_heir_of = scope:actor
|
|
AND = {
|
|
is_female = yes
|
|
patrilinear_marriage = yes
|
|
}
|
|
AND = {
|
|
is_male = yes
|
|
matrilinear_marriage = yes
|
|
}
|
|
is_diarch = yes
|
|
is_designated_diarch = yes
|
|
has_character_flag = has_been_offered_as_concubine
|
|
}
|
|
}
|
|
add_to_list = characters
|
|
}
|
|
}
|
|
}
|
|
|
|
is_shown = {
|
|
scope:actor != scope:recipient
|
|
scope:recipient = {
|
|
is_ruler = yes
|
|
NOT = { government_has_flag = government_is_herder }
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
custom_tooltip = {
|
|
text = offer_courtier_valid_courtier_tt
|
|
scope:actor = {
|
|
any_courtier = {
|
|
is_available_healthy_ai_adult = yes
|
|
NOR = {
|
|
is_consort_of = scope:actor
|
|
is_heir_of = scope:actor
|
|
AND = {
|
|
is_female = yes
|
|
patrilinear_marriage = yes
|
|
}
|
|
AND = {
|
|
is_male = yes
|
|
matrilinear_marriage = yes
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
can_be_picked = {
|
|
is_adult = yes
|
|
}
|
|
|
|
can_send = {
|
|
custom_tooltip = {
|
|
text = no_heirs_can_be_sent_tt
|
|
scope:secondary_actor = {
|
|
NOT = {
|
|
is_heir_of = scope:actor
|
|
}
|
|
}
|
|
}
|
|
custom_tooltip = {
|
|
text = no_spouses_can_be_sent_tt
|
|
scope:secondary_actor = {
|
|
NOT = {
|
|
is_consort_of = scope:actor
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
auto_accept = no
|
|
|
|
ai_accept = {
|
|
base = -10
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_good
|
|
martial >= monumentally_high_skill_rating
|
|
prowess >= extremely_high_skill_rating
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating }
|
|
}
|
|
has_relation_lover = scope:recipient # Shhh, don't tell anyone, of course you're 'skilled'!
|
|
trigger_if = {
|
|
limit = {
|
|
scope:recipient = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
}
|
|
OR = {
|
|
AND = {
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_average
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
count < 10
|
|
}
|
|
}
|
|
}
|
|
aptitude:master_of_hunt_court_position >= 4
|
|
aptitude:keeper_of_the_horses_court_position >= 4
|
|
aptitude:boyan_court_position >= 4
|
|
aptitude:siege_engineer_court_position >= 4
|
|
aptitude:yurtchi_court_position >= 4
|
|
aptitude:cherbi_court_position >= 4
|
|
aptitude:yeke_jarquchi_court_position >= 4
|
|
aptitude:foreign_emissary_court_position >= 4
|
|
}
|
|
}
|
|
}
|
|
}
|
|
desc = AI_INTERESTING_COURTIER_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor.prowess >= decent_skill_rating
|
|
scope:recipient.number_of_knights < scope:recipient.max_number_of_knights
|
|
desc = AI_KNIGHT_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
exists = scope:secondary_actor.inspiration
|
|
desc = AI_INSPIRED_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor = {
|
|
is_close_or_extended_family_of = scope:recipient
|
|
}
|
|
desc = AI_FAMILY_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor = {
|
|
is_consort_of = scope:recipient
|
|
}
|
|
desc = AI_SPOUSE_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor = {
|
|
has_relation_friend = scope:recipient
|
|
}
|
|
desc = AI_FRIEND_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -200
|
|
scope:secondary_actor = {
|
|
has_relation_rival = scope:recipient
|
|
}
|
|
desc = AI_RIVAL_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
is_consort_of = scope:secondary_actor
|
|
}
|
|
}
|
|
desc = AI_SPOUSE_OF_COURTIER_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
count < 5
|
|
}
|
|
}
|
|
desc = AI_LACK_COURTIERS_REASON
|
|
}
|
|
}
|
|
|
|
ai_potential = {
|
|
OR = {
|
|
ai_greed <= 25
|
|
is_obedient = yes
|
|
}
|
|
OR = {
|
|
is_tributary = yes
|
|
num_of_relation_friend > 0
|
|
num_of_relation_lover > 0
|
|
}
|
|
}
|
|
|
|
ai_will_do = {
|
|
base = 0
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:recipient = {
|
|
OR = {
|
|
has_relation_friend = scope:actor
|
|
has_relation_lover = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:recipient = {
|
|
is_tributary_of = scope:actor
|
|
OR = {
|
|
ai_greed <= -50
|
|
is_obedient_to = scope:actor
|
|
opinion = {
|
|
target = scope:actor
|
|
value >= 50
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = {
|
|
factor = 0
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
has_relation_friend = scope:actor
|
|
has_relation_lover = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = {
|
|
factor = 0
|
|
scope:actor = {
|
|
NOR = {
|
|
government_has_flag = government_is_nomadic
|
|
government_has_flag = government_is_herder
|
|
}
|
|
}
|
|
scope:secondary_actor = {
|
|
is_close_or_extended_family_of = scope:actor
|
|
}
|
|
}
|
|
|
|
modifier = { # The AI only offers really good characters
|
|
factor = 0
|
|
scope:secondary_actor = {
|
|
NOR = {
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_good
|
|
martial >= monumentally_high_skill_rating
|
|
prowess >= extremely_high_skill_rating
|
|
exists = inspiration
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating }
|
|
}
|
|
trigger_if = {
|
|
limit = {
|
|
scope:recipient = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
}
|
|
OR = {
|
|
AND = {
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_average
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
count < 10
|
|
}
|
|
}
|
|
}
|
|
aptitude:master_of_hunt_court_position >= 4
|
|
aptitude:keeper_of_the_horses_court_position >= 4
|
|
aptitude:boyan_court_position >= 4
|
|
aptitude:siege_engineer_court_position >= 4
|
|
aptitude:yurtchi_court_position >= 4
|
|
aptitude:cherbi_court_position >= 4
|
|
aptitude:yeke_jarquchi_court_position >= 4
|
|
aptitude:foreign_emissary_court_position >= 4
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
on_send = {
|
|
scope:secondary_actor = { # to block the same character from being offered twice
|
|
add_character_flag = {
|
|
flag = has_been_offered_as_concubine
|
|
days = 5
|
|
}
|
|
}
|
|
}
|
|
|
|
on_accept = {
|
|
scope:secondary_actor = {
|
|
add_opinion = {
|
|
target = scope:recipient
|
|
modifier = piqued_opinion
|
|
opinion = 10
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
add_courtier = scope:secondary_actor
|
|
scope:secondary_actor = {
|
|
every_consort = {
|
|
limit = {
|
|
is_courtier_of = scope:actor
|
|
}
|
|
scope:recipient = {
|
|
add_courtier = prev
|
|
}
|
|
}
|
|
every_child = {
|
|
limit = {
|
|
is_adult = no
|
|
is_courtier_of = scope:recipient
|
|
}
|
|
scope:actor = {
|
|
add_courtier = prev
|
|
}
|
|
}
|
|
}
|
|
add_opinion = {
|
|
target = scope:actor
|
|
modifier = grateful_opinion
|
|
opinion = 10
|
|
}
|
|
}
|
|
}
|
|
|
|
on_decline = {
|
|
scope:actor = {
|
|
send_interface_toast = {
|
|
type = event_toast_effect_bad
|
|
title = msg_courtier_offer_rejected_title
|
|
right_icon = scope:recipient
|
|
left_icon = scope:secondary_actor
|
|
custom_tooltip = msg_courtier_offer_rejected
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Demand Courtier
|
|
demand_courtier_interaction = {
|
|
category = interaction_category_vassal
|
|
common_interaction = yes
|
|
icon = request_courtier_interaction
|
|
interface_priority = 45
|
|
|
|
desc = demand_courtier_interaction_desc
|
|
|
|
ai_targets = {
|
|
ai_recipients = tributaries
|
|
ai_recipients = vassals
|
|
}
|
|
ai_target_quick_trigger = {
|
|
adult = yes
|
|
}
|
|
ai_frequency = 12
|
|
cooldown_against_recipient = { years = 3 }
|
|
|
|
greeting = positive
|
|
notification_text = DEMAND_COURTIER_NOTIFICATION
|
|
|
|
highlighted_reason = HIGHLIGHTED_SKILLED_COURTIER
|
|
is_highlighted = {
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
is_available_healthy_ai_adult = yes
|
|
NOR = {
|
|
is_consort_of = scope:recipient
|
|
is_heir_of = scope:recipient
|
|
AND = {
|
|
is_female = yes
|
|
patrilinear_marriage = yes
|
|
}
|
|
AND = {
|
|
is_male = yes
|
|
matrilinear_marriage = yes
|
|
}
|
|
is_diarch = yes
|
|
is_designated_diarch = yes
|
|
has_character_flag = has_been_offered_as_concubine
|
|
}
|
|
OR = {
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_good
|
|
martial >= monumentally_high_skill_rating
|
|
prowess >= extremely_high_skill_rating
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating }
|
|
}
|
|
trigger_if = {
|
|
limit = {
|
|
scope:actor = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
}
|
|
OR = {
|
|
aptitude:master_of_hunt_court_position >= 4
|
|
aptitude:keeper_of_the_horses_court_position >= 4
|
|
aptitude:boyan_court_position >= 4
|
|
aptitude:siege_engineer_court_position >= 4
|
|
aptitude:yurtchi_court_position >= 4
|
|
aptitude:cherbi_court_position >= 4
|
|
aptitude:yeke_jarquchi_court_position >= 4
|
|
aptitude:foreign_emissary_court_position >= 4
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
needs_recipient_to_open = yes
|
|
|
|
populate_actor_list = {
|
|
scope:recipient = {
|
|
every_courtier = {
|
|
limit = {
|
|
is_available_healthy_ai_adult = yes
|
|
NOR = {
|
|
is_consort_of = scope:recipient
|
|
is_heir_of = scope:recipient
|
|
AND = {
|
|
is_female = yes
|
|
patrilinear_marriage = yes
|
|
}
|
|
AND = {
|
|
is_male = yes
|
|
matrilinear_marriage = yes
|
|
}
|
|
is_diarch = yes
|
|
is_designated_diarch = yes
|
|
has_character_flag = has_been_offered_as_concubine
|
|
}
|
|
}
|
|
add_to_list = characters
|
|
}
|
|
}
|
|
}
|
|
|
|
is_shown = {
|
|
scope:actor != scope:recipient
|
|
scope:recipient = {
|
|
OR = {
|
|
trigger_if = {
|
|
limit = {
|
|
scope:actor = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
}
|
|
is_vassal_of = scope:actor
|
|
}
|
|
is_tributary_of = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
custom_tooltip = {
|
|
text = demand_courtier_valid_courtier_tt
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
is_available_healthy_ai_adult = yes
|
|
NOR = {
|
|
is_consort_of = scope:recipient
|
|
is_heir_of = scope:recipient
|
|
AND = {
|
|
is_female = yes
|
|
patrilinear_marriage = yes
|
|
}
|
|
AND = {
|
|
is_male = yes
|
|
matrilinear_marriage = yes
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
can_be_picked = {
|
|
is_adult = yes
|
|
}
|
|
|
|
can_send = {
|
|
}
|
|
|
|
auto_accept = no
|
|
|
|
ai_accept = {
|
|
base = 0
|
|
|
|
modifier = {
|
|
add = 1000
|
|
scope:recipient = {
|
|
is_obedient_to = scope:actor
|
|
}
|
|
desc = AI_OBEDIENT_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 25
|
|
scope:recipient = {
|
|
has_dread_level_towards = {
|
|
target = scope:actor
|
|
level = 1
|
|
}
|
|
}
|
|
desc = INTIMIDATED_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 50
|
|
scope:recipient = {
|
|
has_dread_level_towards = {
|
|
target = scope:actor
|
|
level = 2
|
|
}
|
|
}
|
|
desc = COWED_REASON
|
|
}
|
|
|
|
opinion_modifier = { # Opinion Factor
|
|
who = scope:recipient
|
|
opinion_target = scope:actor
|
|
multiplier = 1.0
|
|
desc = AI_OPINION_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -25
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
is_councillor = yes
|
|
has_any_court_position = yes
|
|
}
|
|
}
|
|
desc = AI_EMPLOYED_COURTIER_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -15
|
|
scope:secondary_actor = {
|
|
is_knight = yes
|
|
}
|
|
desc = AI_IS_KNIGHT_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -50
|
|
exists = scope:secondary_actor.inspiration
|
|
desc = AI_INSPIRED_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -25
|
|
scope:secondary_actor = {
|
|
is_close_or_extended_family_of = scope:recipient
|
|
}
|
|
desc = AI_FAMILY_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -50
|
|
scope:secondary_actor = {
|
|
has_relation_friend = scope:recipient
|
|
}
|
|
desc = AI_FRIEND_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 1000
|
|
scope:secondary_actor = {
|
|
has_relation_rival = scope:recipient
|
|
}
|
|
desc = AI_RIVAL_REASON
|
|
}
|
|
}
|
|
|
|
ai_potential = {
|
|
ai_greed >= 0
|
|
any_tributary = { }
|
|
}
|
|
|
|
ai_will_do = {
|
|
base = 0
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
has_relation_friend = scope:actor
|
|
has_relation_lover = scope:actor
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_good
|
|
martial >= monumentally_high_skill_rating
|
|
prowess >= extremely_high_skill_rating
|
|
exists = inspiration
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating }
|
|
}
|
|
trigger_if = {
|
|
limit = {
|
|
scope:actor = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
}
|
|
OR = {
|
|
AND = {
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_average
|
|
scope:actor = {
|
|
any_courtier = {
|
|
count < 10
|
|
}
|
|
}
|
|
}
|
|
aptitude:master_of_hunt_court_position >= 4
|
|
aptitude:keeper_of_the_horses_court_position >= 4
|
|
aptitude:boyan_court_position >= 4
|
|
aptitude:siege_engineer_court_position >= 4
|
|
aptitude:yurtchi_court_position >= 4
|
|
aptitude:cherbi_court_position >= 4
|
|
aptitude:yeke_jarquchi_court_position >= 4
|
|
aptitude:foreign_emissary_court_position >= 4
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = {
|
|
factor = 0
|
|
scope:recipient = {
|
|
OR = {
|
|
has_relation_friend = scope:actor
|
|
has_relation_lover = scope:actor
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
on_send = {
|
|
scope:secondary_actor = { # to block the same character from being offered twice
|
|
add_character_flag = {
|
|
flag = has_been_offered_as_concubine
|
|
days = 5
|
|
}
|
|
}
|
|
}
|
|
|
|
on_accept = {
|
|
scope:secondary_actor = {
|
|
add_opinion = {
|
|
target = scope:recipient
|
|
modifier = annoyed_opinion
|
|
opinion = -10
|
|
}
|
|
}
|
|
scope:actor = {
|
|
add_courtier = scope:secondary_actor
|
|
scope:secondary_actor = {
|
|
every_consort = {
|
|
limit = {
|
|
is_courtier_of = scope:recipient
|
|
}
|
|
scope:actor = {
|
|
add_courtier = prev
|
|
}
|
|
}
|
|
every_child = {
|
|
limit = {
|
|
is_adult = no
|
|
is_courtier_of = scope:recipient
|
|
}
|
|
scope:actor = {
|
|
add_courtier = prev
|
|
}
|
|
}
|
|
}
|
|
add_opinion = {
|
|
target = scope:recipient
|
|
modifier = pleased_opinion
|
|
opinion = 20
|
|
}
|
|
}
|
|
scope:recipient = {
|
|
add_opinion = {
|
|
target = scope:actor
|
|
modifier = upset_opinion
|
|
opinion = -15
|
|
}
|
|
}
|
|
}
|
|
|
|
on_decline = {
|
|
scope:actor = {
|
|
send_interface_toast = {
|
|
type = event_toast_effect_bad
|
|
title = msg_courtier_demand_rejected_title
|
|
right_icon = scope:recipient
|
|
left_icon = scope:secondary_actor
|
|
custom_tooltip = msg_courtier_demand_rejected
|
|
}
|
|
}
|
|
scope:actor = {
|
|
add_opinion = {
|
|
target = scope:recipient
|
|
modifier = upset_opinion
|
|
opinion = -15
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Demand Concubine
|
|
demand_concubine_interaction = {
|
|
category = interaction_category_vassal
|
|
common_interaction = yes
|
|
icon = request_concubine_interaction
|
|
interface_priority = 44
|
|
|
|
desc = demand_concubine_interaction_desc
|
|
|
|
ai_targets = {
|
|
ai_recipients = tributaries
|
|
ai_recipients = vassals
|
|
}
|
|
ai_target_quick_trigger = {
|
|
adult = yes
|
|
}
|
|
ai_frequency = 12
|
|
cooldown_against_recipient = { years = 3 }
|
|
|
|
greeting = positive
|
|
notification_text = DEMAND_CONCUBINE_NOTIFICATION
|
|
|
|
needs_recipient_to_open = yes
|
|
|
|
populate_actor_list = {
|
|
scope:recipient = {
|
|
every_courtier = {
|
|
limit = {
|
|
is_physically_able_adult = yes
|
|
is_ruler = no
|
|
could_marry_character_trigger = { CHARACTER = scope:actor }
|
|
}
|
|
add_to_list = characters
|
|
}
|
|
}
|
|
}
|
|
|
|
is_shown = {
|
|
scope:actor != scope:recipient
|
|
scope:actor = {
|
|
allowed_concubines = yes
|
|
}
|
|
scope:recipient = {
|
|
OR = {
|
|
trigger_if = {
|
|
limit = {
|
|
scope:actor = {
|
|
government_has_flag = government_is_nomadic
|
|
}
|
|
}
|
|
is_vassal_of = scope:actor
|
|
}
|
|
is_tributary_of = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
is_valid_showing_failures_only = {
|
|
scope:actor = {
|
|
allowed_more_concubines = yes
|
|
is_physically_able_adult = yes
|
|
}
|
|
custom_tooltip = {
|
|
text = must_have_valid_concubine_tt
|
|
scope:recipient = {
|
|
any_courtier = {
|
|
is_physically_able_adult = yes
|
|
is_ruler = no
|
|
could_marry_character_trigger = { CHARACTER = scope:actor }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
can_be_picked = {
|
|
is_adult = yes
|
|
}
|
|
|
|
can_send = {
|
|
}
|
|
|
|
auto_accept = no
|
|
|
|
ai_accept = {
|
|
base = 0
|
|
|
|
modifier = {
|
|
add = 1000
|
|
scope:recipient = {
|
|
is_obedient_to = scope:actor
|
|
}
|
|
desc = AI_OBEDIENT_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 25
|
|
scope:recipient = {
|
|
has_dread_level_towards = {
|
|
target = scope:actor
|
|
level = 1
|
|
}
|
|
}
|
|
desc = INTIMIDATED_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 50
|
|
scope:recipient = {
|
|
has_dread_level_towards = {
|
|
target = scope:actor
|
|
level = 2
|
|
}
|
|
}
|
|
desc = COWED_REASON
|
|
}
|
|
|
|
opinion_modifier = { # Opinion Factor
|
|
who = scope:recipient
|
|
opinion_target = scope:actor
|
|
multiplier = 1.0
|
|
desc = AI_OPINION_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -25
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
is_councillor = yes
|
|
has_any_court_position = yes
|
|
}
|
|
}
|
|
desc = AI_EMPLOYED_COURTIER_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -15
|
|
scope:secondary_actor = {
|
|
is_knight = yes
|
|
}
|
|
desc = AI_IS_KNIGHT_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -50
|
|
exists = scope:secondary_actor.inspiration
|
|
desc = AI_INSPIRED_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -25
|
|
scope:secondary_actor = {
|
|
is_close_or_extended_family_of = scope:recipient
|
|
}
|
|
desc = AI_FAMILY_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -50
|
|
scope:secondary_actor = {
|
|
has_relation_friend = scope:recipient
|
|
}
|
|
desc = AI_FRIEND_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -50
|
|
scope:secondary_actor = {
|
|
is_consort_of = scope:recipient
|
|
}
|
|
desc = AI_SPOUSE_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = -50
|
|
scope:secondary_actor = {
|
|
is_child_of = scope:recipient
|
|
}
|
|
desc = AI_CHILD_REASON
|
|
}
|
|
|
|
modifier = {
|
|
add = 1000
|
|
scope:secondary_actor = {
|
|
has_relation_rival = scope:recipient
|
|
}
|
|
desc = AI_RIVAL_REASON
|
|
}
|
|
}
|
|
|
|
ai_potential = {
|
|
OR = {
|
|
has_trait = lustful
|
|
ai_honor <= 0
|
|
}
|
|
any_tributary = { }
|
|
}
|
|
|
|
ai_will_do = {
|
|
base = 0
|
|
|
|
modifier = {
|
|
add = 100
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
has_relation_friend = scope:actor
|
|
has_relation_lover = scope:actor
|
|
sum_of_all_skills_value >= sum_of_all_skills_threshold_good
|
|
martial >= monumentally_high_skill_rating
|
|
prowess >= extremely_high_skill_rating
|
|
exists = inspiration
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_chancellor ?= { diplomacy < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_steward ?= { stewardship < monumentally_high_skill_rating }
|
|
}
|
|
AND = {
|
|
diplomacy >= monumentally_high_skill_rating
|
|
scope:actor.cp:councillor_spymaster ?= { intrigue < monumentally_high_skill_rating }
|
|
}
|
|
has_conventionally_attractive_trigger = yes
|
|
num_of_good_genetic_traits > 1
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = {
|
|
factor = 0
|
|
scope:recipient = {
|
|
OR = {
|
|
has_relation_friend = scope:actor
|
|
has_relation_lover = scope:actor
|
|
}
|
|
}
|
|
}
|
|
|
|
modifier = {
|
|
factor = 0
|
|
scope:secondary_actor = {
|
|
OR = {
|
|
has_conventionally_ugly_trigger = yes
|
|
age >= 30
|
|
is_visibly_fertile = no
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
on_send = {
|
|
scope:secondary_actor = { # to block the same character from being offered twice
|
|
add_character_flag = {
|
|
flag = has_been_offered_as_concubine
|
|
days = 5
|
|
}
|
|
}
|
|
}
|
|
|
|
on_accept = {
|
|
scope:recipient = {
|
|
if = {
|
|
limit = {
|
|
scope:secondary_actor = {
|
|
NOR = {
|
|
is_consort_of = scope:recipient
|
|
is_close_or_extended_family_of = scope:recipient
|
|
}
|
|
}
|
|
}
|
|
add_opinion = {
|
|
target = scope:actor
|
|
modifier = upset_opinion
|
|
opinion = -15
|
|
}
|
|
}
|
|
else = {
|
|
scope:secondary_actor = { save_scope_as = relationship_reason_involved_character }
|
|
progress_towards_rival_effect = {
|
|
REASON = rival_demanded_concubine
|
|
CHARACTER = scope:actor
|
|
OPINION = 0
|
|
}
|
|
add_opinion = {
|
|
target = scope:actor
|
|
modifier = upset_opinion
|
|
opinion = -50
|
|
}
|
|
clear_saved_scope = secondary_actor
|
|
}
|
|
}
|
|
demand_concubine_interaction_on_accept_effect = yes
|
|
}
|
|
|
|
on_decline = {
|
|
scope:actor = {
|
|
send_interface_toast = {
|
|
type = event_toast_effect_bad
|
|
title = msg_concubine_demand_rejected_title
|
|
right_icon = scope:recipient
|
|
left_icon = scope:secondary_actor
|
|
custom_tooltip = msg_courtier_demand_rejected
|
|
}
|
|
}
|
|
scope:actor = {
|
|
add_opinion = {
|
|
target = scope:recipient
|
|
modifier = upset_opinion
|
|
opinion = -15
|
|
}
|
|
}
|
|
}
|
|
}
|