From c89cdc36f775e1de5cd6311374507643792f3cd8 Mon Sep 17 00:00:00 2001 From: Fishedotjpg Date: Mon, 2 Nov 2026 16:02:39 +0000 Subject: [PATCH] fix --- .../06_ep3_interactions.txt | 13877 ++++++++++++++++ 1 file changed, 13877 insertions(+) create mode 100644 common/character_interactions/06_ep3_interactions.txt diff --git a/common/character_interactions/06_ep3_interactions.txt b/common/character_interactions/06_ep3_interactions.txt new file mode 100644 index 000000000..0515165a2 --- /dev/null +++ b/common/character_interactions/06_ep3_interactions.txt @@ -0,0 +1,13877 @@ +# PLAYER ONLY - AI uses the two separate interactions below this ( Promote/Harm Candidacy) +influence_candidacy_interaction = { + icon = support_candidacy + category = interaction_category_succession + common_interaction = yes + interface_priority = 100 + + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor.top_liege ?= { has_government = japan_administrative_government } + } + desc = influence_candidacy_interaction_desc_japan + } + desc = influence_candidacy_interaction_desc + } + } + + target_type = title + target_filter = recipient_de_jure_titles + + custom_character_sort = { governor_efficiency candidate_score } + + populate_recipient_list = { + scope:actor = { + house ?= { + every_house_member = { + limit = { + top_liege != this + government_has_mechanic = administrative + top_liege = scope:actor.top_liege + any_valid_title_to_grant_trigger = { + CANDIDATE = this + TOP_LIEGE = scope:actor.top_liege + } + } + add_to_list = characters + } + } + if = { + limit = { primary_title.tier >= tier_kingdom } + every_courtier_or_guest = { + limit = { + top_liege != this + government_has_mechanic = administrative + top_liege = scope:actor.top_liege + any_valid_title_to_grant_trigger = { + CANDIDATE = this + TOP_LIEGE = scope:actor.top_liege + } + } + add_to_list = characters + } + } + } + } + + can_be_picked_title = { + trigger_if = { + limit = { exists = scope:secondary_recipient } + is_appointment_valid_trigger = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + TOP_LIEGE = scope:recipient + } + } + } + + has_valid_target_showing_failures_only = { + exists = scope:target + exists = scope:recipient + scope:actor = { + main_administrative_tier <= scope:target.tier + } + scope:target = { + exists = holder + is_noble_family_title = no + holder.top_liege = scope:recipient + OR = { + has_title_law_flag = appointment_type_succession + holder = { has_realm_law_flag = appointment_type_succession } + } + } + scope:recipient = { government_has_mechanic = administrative } + } + + is_available = { + is_ai = no + government_has_mechanic = administrative + NOT = { government_has_flag = government_has_merit } + } + + is_valid_showing_failures_only = { + scope:actor = { government_has_mechanic = administrative } + trigger_if = { + limit = { + exists = scope:secondary_recipient + scope:actor != scope:secondary_recipient + } + scope:secondary_recipient = { + is_independent_ruler = no + government_has_mechanic = administrative + top_liege = scope:actor.top_liege + } + } + } + + can_send = { + trigger_if = { + limit = { + OR = { + scope:as_much_as_needed_influence_option = yes + scope:major_influence_option = yes + scope:medium_influence_option = yes + } + } + scope:actor = { + custom_tooltip = { + text = support_candidacy_cap_reached_tt + succession_appointment_score_invested = { + title = scope:target + candidate = scope:secondary_recipient + value < scope:actor.appointment_investment_cap + } + } + } + # Check if the target is available or if they have decided to not compete for the throne + trigger_if = { + limit = { + exists = scope:target + scope:target.tier = scope:recipient.highest_held_title_tier + } + scope:secondary_recipient = { + custom_tooltip = { + text = admin_renounce_throne_desc + NOR = { + has_character_modifier = ep3_admin_renounce_throne_personal + house ?= { has_house_modifier = ep3_admin_renounce_throne_house } + } + } + } + } + # Block disfigured characters if we go for our top liege's primary title and their culture blocks disfigurement + scope:target = { + exists = holder + trigger_if = { + limit = { + holder = { + this = top_liege # I.e. is independent + primary_title = scope:target # We are going for their primary title specifically + culture = { has_cultural_parameter = physical_disfigurement_blocks_inheritance } + } + } + scope:secondary_recipient ?= { + custom_description = { + text = "byzantine_claimant_is_disfigured" + object = scope:secondary_recipient + valid_for_byz_succession_trigger = yes + } + } + } + } + } + trigger_if = { + limit = { + exists = scope:secondary_recipient + exists = scope:target + } + # If a currency level is needed, does the candidate have a high enough level? + trigger_if = { + limit = { + scope:target.min_appointment_level > 0 + } + scope:secondary_recipient = { + has_appointment_level_for_title = scope:target + } + } + } + tgp_ceremonial_candidacy_restriction_trigger = yes + } + + redirect = { + scope:recipient = { + if = { + limit = { + this != scope:actor.top_liege + } + save_scope_as = secondary_recipient + scope:actor.top_liege = { save_scope_as = recipient } + } + } + } + + auto_accept = yes + + send_option = { + flag = as_much_as_needed_influence_option + localization = "as_much_as_needed_influence_option_desc" + is_valid = { + trigger_if = { + limit = { + exists = scope:target + exists = scope:secondary_recipient + } + custom_tooltip = { + text = already_first_in_line_influence_option_desc + NOT = { scope:target.current_heir = scope:secondary_recipient } + } + } + } + } + send_option = { + flag = major_influence_option + localization = "major_influence_option_desc" + } + send_option = { + flag = medium_influence_option + localization = "medium_influence_option_desc" + starts_enabled = { always = yes } + } + send_option = { + flag = medium_influence_loss_option + localization = "medium_influence_loss_option_desc" + } + send_option = { + flag = major_influence_loss_option + localization = "major_influence_loss_option_desc" + } + + cost = { + influence = { + # Base cost + switch = { + trigger = yes + scope:as_much_as_needed_influence_option = { + add = { + if = { + limit = { exists = scope:secondary_recipient } + value = { + add = { + value = "scope:target.current_heir.appointment_candidate_score(scope:target)" + multiply = 1.1 + } + subtract = "scope:secondary_recipient.appointment_candidate_score(scope:target)" + multiply = 5 + min = 20 # We do this to prevent cases when the default score of the candidate is already much higher than that the heir + } + } + else = { value = 20 } # Show the default cost if there is no candidate selected yet + desc = BASE + } + } + scope:major_influence_option = { + add = { + value = appointment_major_influence_cost + desc = BASE + } + } + scope:medium_influence_option = { + add = { + value = appointment_medium_influence_cost + desc = BASE + } + } + scope:medium_influence_loss_option = { + add = { + value = appointment_medium_influence_cost + desc = BASE + } + } + scope:major_influence_loss_option = { + add = { + value = appointment_major_influence_cost + desc = BASE + } + } + } + if = { + limit = { + scope:actor = { is_ai = no } + exists = scope:target + } + multiply = { + value = 0.75 + add = { + scope:target = { value = tier } + divide = 4 + } + } + } + + save_temporary_value_as = calculated_base_cost + + # Gender modifiers + if = { + limit = { + scope:secondary_recipient ?= { + top_liege = { has_realm_law = male_preference_law } + is_female = yes + } + } + if = { + limit = { + OR = { + scope:medium_influence_loss_option = yes + scope:major_influence_loss_option = yes + } + } + add = { + value = scope:calculated_base_cost + multiply = -0.5 + desc = male_preference_law + } + } + else = { + add = { # Double the (base) cost + value = scope:calculated_base_cost + desc = male_preference_law + } + } + } + else_if = { + limit = { + scope:secondary_recipient ?= { + top_liege = { has_realm_law = female_preference_law } + is_female = no + } + } + if = { + limit = { + OR = { + scope:medium_influence_loss_option = yes + scope:major_influence_loss_option = yes + } + } + add = { + value = scope:calculated_base_cost + multiply = -0.5 + desc = female_preference_law + } + } + else = { + add = { # Double the (base) cost + value = scope:calculated_base_cost + desc = female_preference_law + } + } + } + + + # Local bonuses + if = { + limit = { + scope:actor = { + domicile ?= { + domicile_location.county = { + scope:target ?= { is_de_jure_liege_or_above_target = prev } + } + } + } + scope:target ?= { tier < tier_empire } + } + add = { + value = scope:calculated_base_cost + multiply = { + value = -0.25 + if = { + limit = { # Increase the bonus if you have the "office" estate upgrade + scope:actor.domicile ?= { has_domicile_parameter = estate_local_theme_cost_reduction } + } + add = estate_local_theme_cost_reduction_value + } + if = { + limit = { + scope:actor.domicile ?= { has_domicile_parameter = japanese_manor_local_theme_cost_reduction } + } + add = japanese_manor_local_theme_cost_reduction_value + } + } + desc = estate_location_in_area + } + } + + # Bureaucracy Legacy Perk Discount + if = { + limit = { + scope:actor.dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_2 } + } + add = { + value = scope:calculated_base_cost + multiply = -0.1 + desc = "[GetDynastyPerk('ep3_administrative_legacy_2').GetName]" + } + } + + # A dominant family gets to spend less influence + if = { + limit = { + scope:actor.house ?= { is_dominant_family = yes } + } + add = { + value = scope:calculated_base_cost + multiply = -0.5 + desc = "[dominant_family|E]" + } + } + + # House Aspiration Service + if = { + limit = { + scope:actor.house ?= { has_house_aspiration_parameter = service_house_cheaper_influence_candidacy_investments } + } + add = { + value = scope:calculated_base_cost + multiply = -0.1 + desc = service_house_power + } + } + } + } + + localization_values = { + AS_MUCH_AS_NEEDED_INFLUENCE_OPTION = scope:actor.appointment_score_max_tt_value + MAJOR_INFLUENCE_OPTION = scope:actor.appointment_score_major_tt_value + MEDIUM_INFLUENCE_OPTION = scope:actor.appointment_score_medium_tt_value + MEDIUM_INFLUENCE_LOSS_OPTION = scope:actor.appointment_score_medium_loss_tt_value + MAJOR_INFLUENCE_LOSS_OPTION = scope:actor.appointment_score_major_loss_tt_value + } + + on_accept = { + if = { + limit = { + scope:target = { + this != holder.primary_title + OR = { + has_title_law = acclamation_succession_law + holder = { has_realm_law = acclamation_succession_law } + } + } + } + custom_tooltip = acclamation_succession_warning_tt + } + switch = { + trigger = yes + scope:as_much_as_needed_influence_option = { + # Save the score value + save_scope_value_as = { + name = support_candidate_score + value = { + value = 0 + if = { + limit = { exists = scope:target } + add = { + value = "scope:target.current_heir.appointment_candidate_score(scope:target)" + multiply = 1.1 + } + subtract = "scope:secondary_recipient.appointment_candidate_score(scope:target)" + } + min = 4 # We do this to prevent cases when the default score of the candidate is already much higher than that the heir + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + if = { + limit = { + scope:support_candidate_score >= 100 + } + save_scope_value_as = { + name = opinion_change_value + value = 25 + } + } + else_if = { + limit = { + scope:support_candidate_score >= 80 + } + save_scope_value_as = { + name = opinion_change_value + value = 20 + } + } + else_if = { + limit = { + scope:support_candidate_score >= 60 + } + save_scope_value_as = { + name = opinion_change_value + value = 15 + } + } + else_if = { + limit = { + scope:support_candidate_score >= 40 + } + save_scope_value_as = { + name = opinion_change_value + value = 10 + } + } + else_if = { + limit = { + scope:support_candidate_score >= 20 + } + save_scope_value_as = { + name = opinion_change_value + value = 5 + } + } + else_if = { + limit = { + scope:support_candidate_score >= 10 + } + save_scope_value_as = { + name = opinion_change_value + value = 3 + } + } + else = { + save_scope_value_as = { + name = opinion_change_value + value = 1 + } + } + } + scope:major_influence_option = { + save_scope_value_as = { + name = support_candidate_score + value = { + value = appointment_score_major_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = 10 + } + } + scope:medium_influence_option = { + # Save the score value + save_scope_value_as = { + name = support_candidate_score + value = { + value = appointment_score_medium_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = 5 + } + } + scope:medium_influence_loss_option = { + # Save the score value + save_scope_value_as = { + name = support_candidate_score + value = { + value = appointment_score_medium_loss_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = -10 + } + } + scope:major_influence_loss_option = { + # Save the score value + save_scope_value_as = { + name = support_candidate_score + value = { + value = appointment_score_major_loss_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = -20 + } + } + } + + # HOUSE RELATIONS + if = { # Promoting someone not of the same noble family as the current heir (with active investment) + limit = { + OR = { + scope:as_much_as_needed_influence_option = yes + scope:major_influence_option = yes + scope:medium_influence_option = yes + } + } + promote_appointment_house_relation_effect = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + INVESTOR = scope:actor + } + } + else = { # Damaging an invested candidate of another noble family + damage_appointment_house_relation_effect = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + INVESTOR = scope:actor + } + } + + # Update the score for the corresponding title + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:support_candidate_score + } + if = { + limit = { appointment_interactions_recipient_is_suitable_co_emperor_trigger = yes } + diarch_promoted_as_administrative_candidate_get_best_tooltip_effect = yes + } + } + + if = { + limit = { + OR = { + scope:as_much_as_needed_influence_option = yes + scope:major_influence_option = yes + scope:medium_influence_option = yes + } + } + # Notify the supported character (unless they are the actor) + scope:secondary_recipient ?= { + if = { + limit = { + this != scope:actor + } + hidden_effect = { + send_interface_message = { + type = msg_candidacy_improved + title = supported_candidacy_toast + left_icon = scope:actor + right_icon = scope:target + show_as_tooltip = { + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:support_candidate_score + } + } + } + } + } + } + if = { + limit = { + NOT = { house ?= scope:actor.house } + } + add_opinion = { + modifier = supported_candidacy_opinion + target = scope:actor + opinion = scope:opinion_change_value + } + custom_tooltip = support_candidacy_success_reward_tt + } + } + } + else = { + # Notify the harmed character (unless they are the actor) + scope:secondary_recipient ?= { + if = { + limit = { this != scope:actor } + hidden_effect = { + send_interface_message = { + type = msg_candidacy_harmed + title = harmed_candidacy_toast + left_icon = scope:actor + right_icon = scope:target + show_as_tooltip = { + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:support_candidate_score + } + } + } + } + } + add_opinion = { + modifier = harmed_candidacy_opinion + target = scope:actor + opinion = scope:opinion_change_value + } + } + } + } + } +} + +# AI ONLY - Interaction is referenced in code, please don't rename it used by AI from code +support_candidacy_interaction = { + icon = support_candidacy + common_interaction = yes + hidden = yes + + desc = support_candidacy_interaction_desc + + target_type = title + target_filter = recipient_de_jure_titles + + can_be_picked_title = { + is_appointment_valid_trigger = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + TOP_LIEGE = scope:recipient + } + } + + has_valid_target_showing_failures_only = { + exists = scope:target + exists = scope:recipient + scope:actor = { + main_administrative_tier <= scope:target.tier + } + scope:target = { + exists = holder + is_noble_family_title = no + holder.top_liege = scope:recipient + OR = { + has_title_law_flag = appointment_type_succession + holder = { + has_realm_law_flag = appointment_type_succession + } + } + } + scope:recipient = { government_has_mechanic = administrative } + } + + is_available = { + NOT = { government_has_flag = government_has_merit } + is_ai = yes + + # admin rule is already checked in code, no need to duplicate in trigger here + } + + is_shown = { + scope:secondary_recipient ?= { + top_liege != this + government_has_mechanic = administrative + top_liege ?= scope:actor.top_liege + + # Don't promote lowborn or different-house candidates (lifted from ai_will_do factor = 0) + NOR = { + is_lowborn = yes + AND = { + exists = house + exists = scope:actor.house + house != scope:actor.house + } + } + } + + # Don't promote rivals (lifted from ai_will_do factor = 0) + NOT = { scope:actor = { has_relation_rival = scope:secondary_recipient } } + + # Respect gender-preference succession laws (lifted from ai_will_do factor = 0) + NOR = { + AND = { + scope:actor.top_liege ?= { has_realm_law = male_preference_law } + scope:secondary_recipient ?= { is_female = yes } + } + AND = { + scope:actor.top_liege ?= { has_realm_law = female_preference_law } + scope:secondary_recipient ?= { is_male = yes } + } + } + } + + is_valid_showing_failures_only = { + scope:secondary_recipient ?= { + # This is broken out from any_valid_title_to_grant_trigger because of performance reasons + # When realms get really large, the AI needs a fixed pool of characters to promote + # Otherwise performance tanks significantly in the form of 'stutters'or smaller freezes + trigger_if = { # First, if the realm is enormous, restrict the candidate pool to the most immediate of family members + limit = { + scope:actor.top_liege.realm_size >= 250 + NOR = { + this = scope:actor + scope:actor.primary_heir ?= this + scope:actor.house.house_head ?= this + is_close_family_of = scope:actor + } + } + static_group_filter = { + group = ai_filter + match = { + value = 1 + subtract = { + add = scope:actor.top_liege.realm_size + multiply = 0.001 + multiply = 3 + min = 0.1 + max = 0.9 + } + } + } + } + trigger_else_if = { # Otherwise, go for close + extended family + limit = { + scope:actor.top_liege.realm_size >= 150 + NOR = { + this = scope:actor + scope:actor.primary_heir ?= this + scope:actor.house.house_head ?= this + is_close_or_extended_family_of = scope:actor + } + } + static_group_filter = { + group = ai_filter + match = { + value = 1 + subtract = { + add = scope:actor.top_liege.realm_size + multiply = 0.001 + multiply = 3 + min = 0.1 + max = 0.9 + } + } + } + } + trigger_else = { + always = yes + } + trigger_if = { # If the realm is large enough, the AI starts ignoring counties in their support + limit = { + scope:actor.top_liege.realm_size >= 150 + } + save_temporary_scope_as = candidate_temp + custom_tooltip = { + text = support_candidacy_can_appoint_for_title_tt + scope:recipient.primary_title = { + any_in_de_jure_hierarchy = { + continue = { + tier > tier_duchy + tier <= tier_county + } + + save_temporary_scope_as = title_temp + scope:candidate_temp = { can_appoint_for_title = scope:title_temp } + } + } + } + } + trigger_else = { + save_temporary_scope_as = candidate_temp + custom_tooltip = { + text = support_candidacy_can_appoint_for_title_tt + scope:recipient.primary_title = { + any_in_de_jure_hierarchy = { + continue = { + tier > tier_duchy + } + + save_temporary_scope_as = title_temp + scope:candidate_temp = { can_appoint_for_title = scope:title_temp } + } + } + } + } + } + scope:actor = { + NOT = { is_at_war_with = scope:recipient } + } + } + + can_send = { + is_appointment_valid_trigger = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + TOP_LIEGE = scope:recipient + } + # If a currency level is needed, does the candidate have a high enough level? + trigger_if = { + limit = { + scope:target.min_appointment_level > 0 + } + scope:secondary_recipient = { + has_appointment_level_for_title = scope:target + } + } + } + + redirect = { + scope:recipient = { + save_scope_as = secondary_recipient + } + scope:actor.top_liege = { + save_scope_as = recipient + } + } + + auto_accept = yes + + send_option = { + flag = as_much_as_needed_influence_option + localization = as_much_as_needed_influence_option_desc + } + send_option = { + flag = major_influence_option + localization = major_influence_option_desc + } + send_option = { + flag = medium_influence_option + localization = medium_influence_option_desc + starts_enabled = { always = yes } + } + + cost = { + influence = { + # Base cost + switch = { + trigger = yes + scope:as_much_as_needed_influence_option = { + add = { + value = { + add = { + value = "scope:target.current_heir.appointment_candidate_score(scope:target)" + multiply = 1.1 + } + subtract = "scope:secondary_recipient.appointment_candidate_score(scope:target)" + multiply = 5 + min = 20 # We do this to prevent cases when the default score of the candidate is already much higher than that the heir + } + desc = BASE + } + } + scope:major_influence_option = { + add = { + value = appointment_major_influence_cost + desc = BASE + } + } + scope:medium_influence_option = { + add = { + value = appointment_medium_influence_cost + desc = BASE + } + } + } + + save_temporary_value_as = calculated_base_cost + + # Gender modifiers + if = { + limit = { + scope:secondary_recipient ?= { + top_liege = { has_realm_law = male_preference_law } + is_female = yes + } + } + add = { # Double the (base) cost + value = scope:calculated_base_cost + desc = male_preference_law + } + } + else_if = { + limit = { + scope:secondary_recipient ?= { + top_liege = { has_realm_law = female_preference_law } + is_female = no + } + } + add = { # Double the (base) cost + value = scope:calculated_base_cost + desc = female_preference_law + } + } + + + # Local bonuses + if = { + limit = { + scope:actor = { + domicile ?= { + domicile_location.county = { + scope:target ?= { is_de_jure_liege_or_above_target = prev } + } + } + } + scope:target ?= { tier < tier_empire } + } + add = { + value = scope:calculated_base_cost + multiply = { + value = -0.25 + if = { + limit = { # Increase the bonus if you have the "office" estate upgrade + scope:actor.domicile ?= { has_domicile_parameter = estate_local_theme_cost_reduction } + } + add = estate_local_theme_cost_reduction_value + } + if = { + limit = { + scope:actor.domicile ?= { has_domicile_parameter = japanese_manor_local_theme_cost_reduction } + } + add = japanese_manor_local_theme_cost_reduction_value + } + } + desc = estate_location_in_area + } + } + + # Bureaucracy Legacy Perk Discount + if = { + limit = { + scope:actor.dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_2 } + } + add = { + value = scope:calculated_base_cost + multiply = -0.1 + desc = "[GetDynastyPerk('ep3_administrative_legacy_2').GetName]" + } + } + } + } + + on_accept = { + switch = { + trigger = yes + scope:as_much_as_needed_influence_option = { + # Save the score value + save_scope_value_as = { + name = support_candidate_score + value = { + value = 0 + if = { + limit = { exists = scope:target } + add = { + value = "scope:target.current_heir.appointment_candidate_score(scope:target)" + multiply = 1.1 + } + subtract = "scope:secondary_recipient.appointment_candidate_score(scope:target)" + } + min = 4 # We do this to prevent cases when the default score of the candidate is already much higher than that the heir + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = 20 + } + } + scope:major_influence_option = { + save_scope_value_as = { + name = support_candidate_score + value = { + value = appointment_score_major_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = 10 + } + } + scope:medium_influence_option = { + # Save the score value + save_scope_value_as = { + name = support_candidate_score + value = { + value = appointment_score_medium_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = 5 + } + } + } + + # HOUSE RELATIONS + promote_appointment_house_relation_effect = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + INVESTOR = scope:actor + } + + # Update the score for the corresponding title + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:support_candidate_score + } + if = { + limit = { appointment_interactions_recipient_is_suitable_co_emperor_trigger = yes } + diarch_promoted_as_administrative_candidate_get_best_tooltip_effect = yes + } + } + + + # Notify the supported character (unless they are the actor) + scope:secondary_recipient = { + if = { + limit = { + this != scope:actor + } + hidden_effect = { + send_interface_message = { + type = msg_candidacy_improved + title = supported_candidacy_toast + left_icon = scope:actor + right_icon = scope:target + show_as_tooltip = { + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:support_candidate_score + } + } + } + } + } + } + } + if = { + limit = { + scope:secondary_recipient = { + NOT = { + house ?= scope:actor.house + } + } + } + scope:secondary_recipient = { + add_opinion = { + modifier = supported_candidacy_opinion + target = scope:actor + opinion = scope:opinion_change_value + } + } + } + + scope:secondary_recipient = { + custom_tooltip = support_candidacy_success_reward_tt + } + } + + # AI + # Interaction frequency determined by code, do not set frequency + ai_will_do = { + base = 5 + + # No one promoting... ripe for the taking + modifier = { + scope:target = { + holder = { + has_realm_law_flag = appointment_type_succession + } + current_heir ?= { + NOR = { + AND = { + exists = house + exists = scope:actor.house + house = scope:actor.house + } + "appointment_candidate_accumulated_score(scope:target)" > 0 + } + } + } + add = 150 + } + + # Spending more influence in one go is better + modifier = { + scope:major_influence_option = yes + factor = 1.1 + } + + # Promote characters we like + modifier = { + scope:secondary_recipient ?= house.house_confederation.leading_house.house_head + factor = 5 + } + modifier = { + scope:secondary_recipient ?= { + is_close_family_of = scope:actor + } + factor = 3 + } + modifier = { + scope:secondary_recipient ?= { + is_extended_family_of = scope:actor + } + factor = 1.5 + } + modifier = { + scope:actor = { + has_relation_friend = scope:secondary_recipient + } + factor = 2 + } + modifier = { + scope:actor = { + has_relation_best_friend = scope:secondary_recipient + } + factor = 10 + } + + # For the imperial title, we want to promote ourselves + modifier = { + scope:target.tier >= tier_empire + scope:actor = scope:secondary_recipient + factor = 5 + } + + # Prefer unlanded relatives + modifier = { + scope:target.tier < tier_empire + scope:secondary_recipient ?= { + is_ruler = no + } + factor = 2 + } + + # Prefer titles that are somewhat close to the capital + modifier = { + exists = scope:recipient.capital_province # Make sure the top liege has a capital + scope:target = { + title_capital_county ?= { + squared_distance = { + target = scope:recipient.capital_province + value <= 130000 + } + } + } + factor = 1.1 + } + + # Try to avoid promoting the same candidate for multiple titles if they are winning a title already + modifier = { + scope:secondary_recipient ?= { + any_heir_title = { + is_noble_family_title = no + holder = { + government_has_mechanic = administrative + } + } + } + factor = 0 + } + + # Promote only one house member for each title + modifier = { + scope:target = { + holder = { + has_realm_law_flag = appointment_type_succession + } + any_title_heir = { + exists = house + exists = scope:actor.house + house = scope:actor.house + "appointment_candidate_accumulated_score(scope:target)" > 0 + } + } + scope:secondary_recipient ?= { + exists = house + exists = scope:actor.house + house = scope:actor.house + "appointment_candidate_accumulated_score(scope:target)" <= 0 + } + factor = 0 + } + + # Don't outcompete our own house/candidate at the top, or someone we like in the top 3 + modifier = { + scope:target = { + any_title_heir = { + save_temporary_scope_as = heir + scope:target = { + place_in_line_of_succession = { + target = scope:heir + value <= 3 + } + } + OR = { + AND = { + scope:target = { + place_in_line_of_succession = { + target = scope:heir + value = 1 + } + } + OR = { + scope:heir = scope:secondary_recipient + AND = { + scope:heir = { exists = house } + exists = scope:actor.house + scope:heir.house = scope:actor.house + } + } + } + scope:actor = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:heir } + } + } + } + } + factor = 0 + } + + # Don't support someone who has renounced their aspirations for the throne + modifier = { + scope:secondary_recipient = { + OR = { + has_character_modifier = ep3_admin_renounce_throne_personal + house ?= { has_house_modifier = ep3_admin_renounce_throne_house } + } + } + scope:target.tier = scope:recipient.highest_held_title_tier + factor = 0 + } + } +} + +# AI ONLY - Smear campaign against a character to reduce score +harm_candidacy_interaction = { + icon = harm_candidacy + common_interaction = yes + hidden = yes + + desc = harm_candidacy_interaction_desc + + target_type = title + target_filter = secondary_recipient_de_jure_titles + + can_be_picked_title = { + is_candidate_for_title_trigger = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + } + } + + has_valid_target_showing_failures_only = { + scope:target ?= { + tier >= tier_duchy + holder ?= { + top_liege = scope:recipient + has_realm_law_flag = appointment_type_succession + } + } + } + + is_available = { + government_has_mechanic = administrative + } + + is_shown = { + scope:secondary_recipient = { + top_liege != this + government_has_mechanic = administrative + top_liege ?= scope:actor.top_liege + } + } + + is_valid_showing_failures_only = { + any_valid_title_to_grant_trigger = { + CANDIDATE = scope:secondary_recipient + TOP_LIEGE = scope:recipient + } + } + + can_send = { + is_candidate_for_title_trigger = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + } + } + + redirect = { + scope:recipient = { save_scope_as = secondary_recipient } + scope:actor.top_liege = { save_scope_as = recipient } + } + + auto_accept = yes + + send_option = { + flag = minor_influence_option + localization = minor_influence_option_desc + starts_enabled = { always = yes } + } + send_option = { + flag = medium_influence_option + localization = medium_influence_option_desc + } + send_option = { + flag = major_influence_option + localization = major_influence_option_desc + } + + cost = { + influence = { + # Base cost + switch = { + trigger = yes + scope:minor_influence_option = { + add = { + value = appointment_minor_influence_cost + desc = BASE + } + } + scope:medium_influence_option = { + add = { + value = appointment_medium_influence_cost + desc = BASE + } + } + scope:major_influence_option = { + add = { + value = appointment_major_influence_cost + desc = BASE + } + } + } + + save_temporary_value_as = calculated_base_cost + + # Gender modifiers + if = { + limit = { + scope:secondary_recipient ?= { + top_liege = { has_realm_law = male_preference_law } + is_female = yes + } + } + add = { + value = scope:calculated_base_cost + multiply = -0.5 + desc = male_preference_law + } + } + else_if = { + limit = { + scope:secondary_recipient ?= { + top_liege = { has_realm_law = female_preference_law } + is_female = no + } + } + add = { + value = scope:calculated_base_cost + multiply = -0.5 + desc = female_preference_law + } + } + + + # Local bonuses + if = { + limit = { + scope:actor = { + domicile ?= { + domicile_location.county = { + scope:target ?= { is_de_jure_liege_or_above_target = prev } + } + } + } + scope:target ?= { tier < tier_empire } + } + add = { + value = scope:calculated_base_cost + multiply = { + value = -0.25 + if = { + limit = { # Increase the bonus if you have the "office" estate upgrade + scope:actor = { + domicile ?= { has_domicile_parameter = estate_local_theme_cost_reduction } + } + } + add = estate_local_theme_cost_reduction_value + } + if = { + limit = { + scope:actor.domicile ?= { has_domicile_parameter = japanese_manor_local_theme_cost_reduction } + } + add = japanese_manor_local_theme_cost_reduction_value + } + } + desc = estate_location_in_area + } + } + + # Bureaucracy Legacy Perk Discount + if = { + limit = { + scope:actor.dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_2 } + } + add = { + value = scope:calculated_base_cost + multiply = -0.1 + desc = "[GetDynastyPerk('ep3_administrative_legacy_2').GetName]" + } + } + } + } + + on_accept = { + switch = { + trigger = yes + scope:minor_influence_option = { + # Save the score value + save_scope_value_as = { + name = harm_candidate_score + value = { + value = appointment_score_minor_loss_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = -5 + } + } + scope:medium_influence_option = { + # Save the score value + save_scope_value_as = { + name = harm_candidate_score + value = { + value = appointment_score_medium_loss_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = -15 + } + } + scope:major_influence_option = { + save_scope_value_as = { + name = harm_candidate_score + value = { + value = appointment_score_major_loss_value + multiply = scope:actor.appointment_score_interaction_multiplier_modifiers_value + } + } + save_scope_value_as = { + name = opinion_change_value + value = -30 + } + } + } + + # HOUSE RELATIONS + damage_appointment_house_relation_effect = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + INVESTOR = scope:actor + } + + # Update the score for the corresponding title + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:harm_candidate_score + } + } + + # Handle opinion change and chance for a rivalry + if = { + limit = { + scope:secondary_recipient = { this != scope:actor } + } + scope:secondary_recipient = { + add_opinion = { + modifier = harmed_candidacy_opinion + target = scope:actor + opinion = scope:opinion_change_value + } + hidden_effect = { + send_interface_message = { + type = msg_candidacy_harmed + title = harmed_candidacy_toast + left_icon = scope:actor + right_icon = scope:target + show_as_tooltip = { + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:actor + value = scope:harm_candidate_score + } + } + } + } + } + } + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = harm_candidate_rival_progress_toast + left_icon = scope:secondary_recipient + scope:secondary_recipient = { + progress_towards_rival_effect = { + REASON = rival_harmed_candidacy + CHARACTER = scope:actor + OPINION = 0 + } + } + } + } + } + } + + # Interaction frequency determined by code, do not set frequency + ai_will_do = { + base = 0 + modifier = { + scope:actor = { + has_relation_rival = scope:secondary_recipient + } + add = 100 + } + modifier = { + scope:actor = { + has_relation_nemesis = scope:secondary_recipient + } + add = 150 + } + modifier = { + scope:actor = { + opinion = { + target = scope:secondary_recipient + value < medium_positive_opinion + } + } + add = 20 + } + modifier = { + scope:secondary_recipient = { + is_close_family_of = scope:actor + } + add = -50 + } + modifier = { + scope:secondary_recipient = { + is_extended_family_of = scope:actor + } + add = -25 + } + modifier = { + scope:actor = { + OR = { + has_trait = ambitious + has_trait = callous + has_trait = fickle + } + } + add = 40 + } + modifier = { + scope:actor = { + has_usable_hook = scope:secondary_recipient + } + add = -10 + } + modifier = { + scope:actor = { + OR = { + has_relation_friend = scope:secondary_recipient + has_relation_lover = scope:secondary_recipient + } + } + factor = 0 + } + # ai_potential is not evaluated on the code-driven path, so keep its gating here as hard-no guards. + modifier = { + factor = 0 + scope:actor = { influence <= major_influence_value } + } + modifier = { + factor = 0 + scope:actor = { ai_honor > 25 } + } + } +} + +# Ask to Influence Candidacy/request support from another character +request_appointment_support = { + category = interaction_category_succession + common_interaction = no + interface_priority = 175 + filter_tags = { admin_house_head celestial_ministry dynastic_cycle ceremonial_liege } + highlighted_reason = tgp_interaction_minister_personnel_highlight_reason + + custom_character_sort = { governor_efficiency candidate_score } + + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor.top_liege ?= { has_government = japan_administrative_government } + } + desc = request_appointment_support_desc_japan + } + desc = request_appointment_support_desc + } + } + notification_text = request_appointment_support_notification + + target_type = title + target_filter = actor_top_liege_de_jure_titles + + populate_recipient_list = { + scope:actor = { + every_succession_appointment_invested_candidate = { + limit = { + this != scope:recipient + is_alive = yes + government_has_mechanic = administrative + # Check that they are still valid to be appointed + any_valid_title_to_grant_trigger = { + CANDIDATE = this + TOP_LIEGE = scope:actor.top_liege + } + } + add_to_list = characters + } + # We limit how many recipients to check for the AI for performance, player gets the unabridged list + if = { + limit = { + is_ai = no + } + house = { + every_house_member = { + limit = { + this != scope:recipient + government_has_mechanic = administrative + any_valid_title_to_grant_trigger = { + CANDIDATE = this + TOP_LIEGE = scope:actor.top_liege + } + } + add_to_list = characters + } + } + } + } + } + + can_be_picked_title = { + trigger_if = { + limit = { exists = scope:secondary_recipient } + is_appointment_valid_trigger = { + TITLE = scope:target + CANDIDATE = scope:secondary_recipient + TOP_LIEGE = scope:actor.top_liege + } + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + scope:secondary_recipient = { has_succession_appointment_investors = scope:target } + } + scope:target = { + any_succession_appointment_investors = { + candidate = scope:secondary_recipient + this = scope:actor + } + } + } + } + } + + has_valid_target_showing_failures_only = { + scope:target ?= { + tier >= scope:actor.main_administrative_tier + is_landless_type_title = no + is_noble_family_title = no + holder ?= { + top_liege = scope:actor.top_liege + has_realm_law_flag = appointment_type_succession + } + } + scope:actor = { + trigger_if = { + limit = { is_ai = yes } + any_succession_appointment_invested_title = { + this = scope:target + } + } + } + } + + is_available = { + government_has_mechanic = administrative + NOT = { government_has_flag = government_has_merit } + trigger_if = { + limit = { is_ai = yes } + house ?= { + OR = { + is_powerful_family = yes + is_dominant_family = yes + } + } + } + } + + is_shown = { + scope:recipient = { + this != scope:actor + NOT = { government_has_flag = government_has_merit } + government_has_mechanic = administrative + top_liege ?= scope:actor.top_liege + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_in_civil_war = no + } + scope:recipient = { + influence >= appointment_minor_influence_cost + is_in_civil_war = no + } + } + + can_send = { + trigger_if = { + limit = { scope:hook = no } + scope:actor = { + gold >= medium_gold_value + } + } + custom_tooltip = { + text = appointment_cannot_support_themself + scope:recipient != scope:secondary_recipient + } + trigger_if = { + limit = { + exists = scope:secondary_recipient + exists = scope:target + } + # If a currency level is needed, does the candidate have a high enough level? + trigger_if = { + limit = { + scope:target.min_appointment_level > 0 + } + scope:secondary_recipient = { + has_appointment_level_for_title = scope:target + } + } + } + } + + is_highlighted = { + scope:recipient = { + has_council_position = minister_personnel + } + } + + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_accept = { + if = { + limit = { + scope:target = { + this != holder.primary_title + OR = { + has_title_law = acclamation_succession_law + holder = { has_realm_law = acclamation_succession_law } + } + } + } + custom_tooltip = acclamation_succession_warning_tt + } + scope:actor = { + if = { + limit = { + scope:hook = yes + has_hook = scope:recipient + } + use_hook = scope:recipient + } + } + if = { + limit = { + scope:hook = no + } + scope:actor = { + pay_short_term_gold = { + target = scope:recipient + gold = medium_gold_value + } + } + } + if = { + limit = { # Players gets to accept/decline a specific suggestion + scope:recipient = { is_ai = no } + } + scope:recipient ={ + change_influence = { + value = appointment_medium_influence_cost + multiply = -1 + } + } + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:recipient + value = { + value = appointment_score_medium_value + if = { + limit = { + scope:recipient = { has_council_position = minister_personnel } + } + multiply = 2 + } + } + } + } + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = thankful_opinion + opinion = 30 + } + trigger_event = ep3_interactions_events.0201 + } + } + else = { # The AI randomizes the amount of support + scope:recipient = { custom_tooltip = request_appointment_support_tt } + hidden_effect = { + random_list = { + 60 = { + scope:actor = { + save_scope_value_as = { + name = request_support_score + value = { + value = appointment_score_minor_value + if = { + limit = { + scope:recipient = { has_council_position = minister_personnel } + } + multiply = 2 + } + } + } + send_interface_message = { + type = msg_candidacy_improved + title = supported_candidacy_toast + left_icon = scope:secondary_recipient + right_icon = scope:target + custom_tooltip = request_appointment_support_toast_tt + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:recipient + value = scope:request_support_score + } + } + } + } + scope:recipient = { + change_influence = { + value = appointment_minor_influence_cost + multiply = -1 + } + } + } + 30 = { + scope:actor = { + save_scope_value_as = { + name = request_support_score + value = { + value = appointment_score_medium_value + if = { + limit = { + scope:recipient = { has_council_position = minister_personnel } + } + multiply = 2 + } + } + } + send_interface_message = { + type = msg_candidacy_improved + title = supported_candidacy_toast + left_icon = scope:secondary_recipient + right_icon = scope:target + custom_tooltip = request_appointment_support_toast_tt + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:recipient + value = scope:request_support_score + } + } + } + } + scope:recipient = { + change_influence = { + value = appointment_medium_influence_cost + multiply = -1 + } + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.2 + min = 0 + } + modifier = { + factor = 1.5 + scope:recipient = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:actor } } + } + modifier = { + factor = 2 + scope:recipient = { has_any_best_good_relationship_with_character_trigger = { CHARACTER = scope:actor } } + } + modifier = { + factor = 0 + scope:recipient = { influence < appointment_medium_influence_cost } + } + } + 10 = { + scope:actor = { + save_scope_value_as = { + name = request_support_score + value = { + value = appointment_score_major_value + if = { + limit = { + scope:recipient = { has_council_position = minister_personnel } + } + multiply = 2 + } + } + } + send_interface_message = { + type = msg_candidacy_improved + title = supported_candidacy_toast + left_icon = scope:secondary_recipient + right_icon = scope:target + custom_tooltip = request_appointment_support_toast_tt + scope:target = { + change_appointment_investment = { + target = scope:secondary_recipient + investor = scope:recipient + value = scope:request_support_score + } + } + } + } + scope:recipient = { + change_influence = { + value = appointment_major_influence_cost + multiply = -1 + } + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.3 + min = 0 + } + modifier = { + factor = 1.5 + scope:recipient = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:actor } } + } + modifier = { + factor = 2 + scope:recipient = { has_any_best_good_relationship_with_character_trigger = { CHARACTER = scope:actor } } + } + modifier = { + factor = 0 + scope:recipient = { influence < appointment_major_influence_cost } + } + } + } + } + scope:actor = { trigger_event = ep3_interactions_events.0201 } + } + } + + on_decline = { + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -10 + } + trigger_event = ep3_interactions_events.0202 + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:recipient = { is_ai = yes } + } + } + + ai_accept = { + base = -40 + + # House Head Modifier + modifier = { + house.house_confederation.leading_house.house_head ?= scope:actor + add = 50 + desc = leading_house_head_reason + } + + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_SIMPLE_OPINION_REASON + } + + # Admin + modifier = { + influence >= { + value = monumental_influence_value + multiply = 3 + } + add = 20 + desc = plenty_of_influence_reason + } + modifier = { + influence >= massive_influence_value + influence < { + value = monumental_influence_value + multiply = 3 + } + add = 10 + desc = has_influence_reason + } + modifier = { + influence < major_influence_value + add = -100 + desc = not_enough_influence_reason + } + modifier = { # Don't support actor if recipient holds the title (they should want to secure it for their own family first) + exists = scope:target + scope:target.holder = scope:recipient + exists = scope:recipient.house + exists = scope:secondary_recipient + NOT = { scope:secondary_recipient.house ?= scope:recipient.house } + add = -25 + desc = requesting_my_title_reason + } + modifier = { # Don't support actor if there is a close family member within the top 3 candidates + exists = scope:recipient + scope:target ?= { + any_title_heir = { + scope:target ?= { + place_in_line_of_succession = { + target = prev + value <= 3 + } + } + is_close_family_of = scope:recipient + } + } + exists = scope:secondary_recipient + NOT = { # Unless secondary_recipient is, in fact, one of these + scope:secondary_recipient = { + scope:target ?= { + place_in_line_of_succession = { + target = prev + value <= 3 + } + } + is_close_family_of = scope:recipient + } + } + add = -100 + desc = close_family_in_line_of_succession + } + modifier = { # More reluctant to lend support towards titles held by top liege + exists = scope:target + scope:target.holder = { + top_liege = this + this != scope:actor # Assuming the top liege isn't the one doing the requesting + } + add = -25 + desc = targeting_top_liege_title + } + modifier = { # If you are from a powerful family, and they are not, they are more likely to accept + scope:actor.house ?= { + is_powerful_family = yes + } + scope:recipient.house ?= { + is_powerful_family = no + is_dominant_family = no + } + add = 15 + desc = your_house_is_powerful_reason + } + modifier = { # If you are from a dominant family, and they are not, they are more likely to accept + scope:actor.house ?= { + is_dominant_family = yes + } + scope:recipient.house ?= { + is_dominant_family = no + } + add = 25 + desc = your_house_is_dominant_reason + } + modifier = { # If they are from a powerful family, and you are not, they are more likely to refuse + scope:recipient.house ?= { + is_powerful_family = yes + } + scope:actor.house ?= { + is_powerful_family = no + is_dominant_family = no + } + add = -15 + desc = their_house_is_powerful_reason + } + modifier = { # If they are from a dominant family, and you are not, they are more likely to refuse + scope:recipient.house ?= { + is_dominant_family = yes + } + scope:actor.house ?= { + is_dominant_family = no + } + add = -25 + desc = their_house_is_dominant_reason + } + modifier = { # Difference in influence level + scope:actor.influence_level != scope:recipient.influence_level + add = { + add = { + add = 10 + multiply = scope:actor.influence_level + } + subtract = { + add = 10 + multiply = scope:recipient.influence_level + } + } + desc = difference_in_influence_level_reason + } + + # Relations to actor + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = -100 + desc = AI_YOUR_RIVAL + } + modifier = { + scope:actor = { + has_relation_nemesis = scope:recipient + } + add = -150 + desc = offer_vassalization_interaction_aibehavior_nemesis_tt # Reused loc + } + modifier = { + scope:recipient = { + is_close_family_of = scope:actor + } + add = 50 + desc = CLOSE_FAMILY_REASON + } + modifier = { + scope:recipient = { + is_extended_family_of = scope:actor + } + add = 25 + desc = EXTENDED_FAMILY_REASON + } + modifier = { + exists = scope:actor.house + scope:recipient = { + NOR = { + is_close_family_of = scope:actor + is_extended_family_of = scope:actor + } + house ?= scope:actor.house + } + add = 5 + desc = YOU_ARE_MY_HOUSE_MEMBER + } + modifier = { + scope:actor = { + has_relation_friend = scope:recipient + NOT = { has_relation_best_friend = scope:recipient } + } + add = 15 + desc = WE_ARE_FRIENDS + } + modifier = { + scope:actor = { + has_relation_best_friend = scope:recipient + } + add = 30 + desc = WE_ARE_BEST_FRIENDS + } + + # Relations to secondary_recipient (the character you want them to support) + modifier = { + scope:recipient = { + has_relation_rival = scope:secondary_recipient + NOT = { has_relation_nemesis = scope:secondary_recipient } + } + add = -50 + desc = RIVAL_TO_ME_REASON + } + modifier = { + scope:recipient = { + has_relation_nemesis = scope:secondary_recipient + } + add = -100 + desc = NEMESIS_TO_ME_REASON + } + + # Relations to current title holder + modifier = { + exists = scope:target + scope:recipient = { + has_relation_rival = scope:target.holder + NOT = { has_relation_nemesis = scope:target.holder } + liege = scope:target.holder + liege != scope:actor # Don't worry about liege relation when the liege is the one requesting support + } + add = 25 + desc = AI_THEIR_RIVAL + } + modifier = { + exists = scope:target + scope:recipient = { + has_relation_nemesis = scope:target.holder + liege = scope:target.holder + liege != scope:actor # Don't worry about liege relation when the liege is the one requesting support + } + add = 50 + desc = AI_THEIR_RIVAL + } + modifier = { + exists = scope:target + scope:recipient = { + has_relation_friend = scope:target.holder + NOT = { has_relation_best_friend = scope:target.holder } + liege = scope:target.holder + liege != scope:actor # Don't worry about liege relation when the liege is the one requesting support + } + add = -50 + desc = AI_THEIR_FRIEND + } + modifier = { + exists = scope:target + scope:recipient = { + has_relation_best_friend = scope:target.holder + liege = scope:target.holder + liege != scope:actor # Don't worry about liege relation when the liege is the one requesting support + } + add = -100 + desc = AI_THEIR_FRIEND + } + modifier = { + exists = scope:target + scope:recipient = { + has_relation_lover = scope:target.holder + liege = scope:target.holder + liege != scope:actor # Don't worry about liege relation when the liege is the one requesting support + } + add = -30 + desc = AI_THEIR_LOVER + } + modifier = { + exists = scope:target + scope:recipient = { + OR = { + is_close_family_of = scope:target.holder + is_extended_family_of = scope:target.holder + } + opinion = { target = scope:target.holder value > -25 } + liege = scope:target.holder + liege != scope:actor # Don't worry about liege relation when the liege is the one requesting support + } + add = -20 + desc = AI_THEIR_RELATIVE + } + + # Traits + modifier = { + scope:recipient = { # Ambitious characters doesn't want to spend their influence on anyone not from their house + has_trait = ambitious + exists = house + } + scope:secondary_recipient ?= { + exists = house + house != scope:recipient.house + } + add = -50 + desc = INTERACTION_AMBITIOUS + } + modifier = { + scope:recipient = { + has_trait = callous + } + add = -20 + desc = INTERACTION_CALLOUS + } + modifier = { + scope:recipient = { + has_trait = fickle + } + add = -30 + desc = INTERACTION_FICKLE + } + modifier = { + scope:recipient = { + has_trait = paranoid + } + add = -25 + desc = INTERACTION_PARANOID + } + modifier = { + scope:recipient = { + has_trait = trusting + } + add = 10 + desc = INTERACTION_TRUSTING + } + modifier = { + scope:recipient = { + has_trait = arbitrary + } + add = -15 + desc = INTERACTION_ARBITRARY + } + modifier = { # Cravens dare not help you + scope:recipient = { + has_trait = craven + } + scope:actor.house ?= { + is_dominant_family = no + } + add = -20 + desc = INTERACTION_CRAVEN + } + modifier = { # Cravens dare not refuse a dominant family + scope:recipient = { + has_trait = craven + } + scope:actor.house ?= { + is_dominant_family = yes + } + add = 20 + desc = INTERACTION_CRAVEN + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 48 + duchy = 48 + kingdom = 48 + empire = 0 + hegemony = 0 + } + + ai_targets = { + ai_recipients = peer_vassals + max = 8 + } + + ai_targets = { + ai_recipients = hooked_characters + max = 2 + } +} + +# Demand that a vassal switches to admin +# Note: Do not rename or delete this interaction as its directly referred to in code +demand_admin_interaction = { + category = interaction_category_vassal + icon = demand_admin_interaction + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + ai_accept_negotiation = yes + popup_on_receive = yes + common_interaction = no + + #according to telemetry, practically never used + interface_priority = 0 + + ai_targets = { + ai_recipients = vassals + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 120 + duchy = 120 + kingdom = 120 + empire = 120 + hegemony = 120 + } + + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor = { government_has_flag = government_is_japan_administrative } + } + desc = demand_admin_interaction_desc_japan + } + desc = demand_admin_interaction_desc + } + } + + is_available = { + government_has_mechanic = administrative + trigger_if = { + limit = { is_ai = yes } + is_adult = yes + } + } + + is_shown = { + scope:actor = { + trigger_if = { + limit = { is_ai = yes } + scope:recipient = { highest_held_title_tier >= tier_county } + } + } + scope:recipient = { + target_is_liege_or_above = scope:actor + is_ai = yes + is_landed = yes + is_ruler = yes + NOT = { has_same_government = scope:actor } + } + } + + cooldown_against_recipient = { years = 10 } + + is_valid_showing_failures_only = { + scope:recipient = { + NOT = { has_strong_hook = scope:actor } + is_at_war = no + trigger_if = { + limit = { + is_landed = no + exists = domicile + } + domicile.domicile_location.county.holder = { government_has_mechanic = administrative } + } + trigger_if = { + limit = { exists = confederation } + NOT = { scope:actor.confederation ?= confederation } + } + liege = scope:actor + } + scope:actor = { is_at_war = no } + custom_tooltip = { + text = cannot_take_overt_hostile_actions_against_diarch.tt + NOT = { scope:recipient ?= scope:actor.diarch } + } + custom_tooltip = { + text = demand_admin_tribal + NOT = { + scope:recipient = { government_has_flag = government_is_tribal } + } + } + custom_tooltip = { + text = clergy_unable_to_change_government_desc + NOT = { + scope:recipient = { holds_religious_office_trigger = yes } + } + } + } + + # Offer hereditary boost + send_option = { + is_valid = { + scope:recipient = { is_landed = yes } + custom_tooltip = { + text = demand_admin_hereditary_tt + scope:recipient.house ?= { + any_house_member = { count > 1 } + } + } + custom_tooltip = { + text = demand_admin_hereditary_exists_tt + NOT = { exists = scope:recipient.primary_title.var:petition_house_rights } + } + } + flag = hereditary + localization = demand_admin_hereditary + } + #Spend influence + send_option = { + flag = influence + is_valid = { + scope:actor.influence >= massive_influence_value + } + localization = SPEND_INFLUENCE + } + #Use hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + } + } + + on_send = { + scope:recipient = { + primary_title = { save_scope_as = demanded_administration } + trigger_event = { + id = ep3_interactions_events.0005 + days = 5 + } + } + } + + on_accept = { + show_as_tooltip = { + change_to_administrative_interaction_effect = yes + } + if = { + limit = { + scope:recipient = { is_ai = yes } + } + scope:recipient = { + set_variable = { + name = demand_admin_accepted_ai_block + value = scope:actor + years = 10 + } + } + } + } + + on_decline = { + # In Japan, this starts a war + if = { + limit = { + scope:actor = { government_has_flag = government_is_japan_administrative } + scope:recipient = { + is_landed = yes + government_has_flag = government_is_japan_feudal + } + } + tgp_japan_demand_administrative_refusal_effect = yes + } + # Elsewhere it does not + else = { + scope:recipient = { custom_tooltip = demand_admin_interaction_vassal_refuses } + } + } + + ai_will_do = { + base = 20 + modifier = { + factor = 0.1 + } + modifier = { + factor = 0 + scope:recipient = { highest_held_title_tier >= tier_county } + gold >= 300 + } + modifier = { + factor = 0 + scope:recipient = { highest_held_title_tier >= tier_duchy } + gold >= 600 + } + modifier = { + factor = 0 + scope:recipient = { highest_held_title_tier >= tier_kingdom } + gold >= 2000 + } + } + + ai_accept = { + base = 0 + japan_demand_admin_acceptance_modifier = yes + demand_admin_acceptance_modifier = yes + modifier = { + add = -20 + } + modifier = { + add = -20 + has_trait = content + } + modifier = { + add = -20 + has_trait = ambitious + } + modifier = { + add = -20 + has_trait = arrogant + } + modifier = { + add = -20 + has_trait = paranoid + } + modifier = { + add = -20 + has_trait = greedy + } + modifier = { + add = -20 + has_trait = shrewd + } + modifier = { + add = -20 + has_trait = intellect_good_1 + } + modifier = { + add = -20 + has_trait = intellect_good_2 + } + modifier = { + add = -20 + has_trait = intellect_good_3 + } + } +} + +# Contest the appointment of another character to a title you have a claim on - AKA Request Re-Appointment +contest_appointment_interaction = { + category = interaction_category_vassal + filter_tags = { admin_governor } + common_interaction = yes + highlighted_reason = HIGHLIGHTED_CAN_CONTEST_APPOINTMENT + notification_text = contest_appointment_interaction_desc_tt + intermediary_notification_text = contest_appointment_interaction_liege_desc + intermediary_breakdown_yes = ANSWER_TRILATERAL_CONTEST_LIEGE_YES + intermediary_breakdown_no = ANSWER_TRILATERAL_CONTEST_LIEGE_NO + intermediary_breakdown_maybe = ANSWER_TRILATERAL_INTERMEDIARY_LIEGE_MAYBE + intermediary_answer_accept_key = REPLY_ANSWER_ACCEPT + intermediary_answer_reject_key = REPLY_ANSWER_REJECT + pre_answer_yes_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_YES + pre_answer_no_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_NO + pre_answer_maybe_breakdown_key = ANSWER_TRILATERAL_RECIPIENT_MAYBE + + redirect = { + if = { + limit = { + scope:actor.top_liege = { government_has_flag = government_is_celestial } + } + scope:recipient.liege = { save_scope_as = intermediary } + } + else = { + scope:actor.top_liege = { save_scope_as = intermediary } + } + } + + desc = contest_appointment_interaction_desc + + target_type = title + target_filter = recipient_domain_titles + ai_maybe = yes + ai_intermediary_maybe = yes + can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + interface_priority = 60 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + prompt = CONTEST_TITLE_SELECT_TITLE + + is_available = { + trigger_if = { + limit = { is_ai = yes } + is_landless_administrative = yes + liege ?= { has_realm_law_flag = title_revocation_allowed } + } + } + + is_shown = { + # The obvious. + NOR = { + scope:actor = scope:recipient + scope:actor = scope:intermediary + scope:recipient = scope:intermediary + } + # Admin Govt + #You don't have another appointment + scope:actor = { is_landless_administrative = yes } + scope:recipient = { government_has_mechanic = administrative } + scope:intermediary ?= { government_has_mechanic = administrative } + # Make sure scope:recipient is suitable. + scope:recipient = { + # We only target vassals of the liege + top_liege ?= scope:actor.top_liege + # who have a contestable title + highest_held_title_tier >= main_administrative_tier + any_held_title = { + tier >= holder.main_administrative_tier + scope:actor = { + has_claim_on = prev + } + title_revocation_standard_can_pick_title_trigger = yes + } + } + } + + is_valid_showing_failures_only = { + trigger_if = { # Stop AI sending this too often + limit = { + scope:actor = { is_ai = yes } + } + NOT = { + scope:intermediary ?= { has_character_flag = contest_appointment_liege_cooldown } + } + } + trigger_if = { + limit = { + scope:recipient = { vassal_contract_has_flag = vassal_contract_cannot_revoke_titles } + } + custom_description = { + text = liege_vassal_contract_forbids_revocation + object = scope:recipient + scope:recipient = { + NOT = { vassal_contract_has_flag = vassal_contract_cannot_revoke_titles } + } + } + } + scope:intermediary = { + influence >= medium_influence_value + } + } + + cooldown_against_recipient = { years = 10 } + + can_send = { + scope:actor = { + custom_description = { + text = "character_interactions_hostile_actions_disabled_delay" + NOT = { has_character_flag = flag_hostile_actions_disabled_delay } + } + } + trigger_if = { + limit = { + exists = scope:target + } + is_appointment_valid_trigger = { + TITLE = scope:target + CANDIDATE = scope:actor + TOP_LIEGE = scope:intermediary + } + } + } + + is_highlighted = { + scope:recipient = { + any_held_title = { + scope:actor = { + has_claim_on = prev + } + title_revocation_standard_can_pick_title_trigger = yes + } + } + } + + can_be_picked_title = { + scope:target = { + title_revocation_standard_can_pick_title_trigger = yes + # Plus, must have scope:actor as a claimant. + custom_description = { + text = "you_must_have_a_claim_on_the_title" + tier >= holder.main_administrative_tier + scope:actor = { has_claim_on = scope:target } + } + } + } + + has_valid_target_showing_failures_only = { + # Let's make sure we only show titles that are interesting + scope:target = { + tier >= holder.main_administrative_tier + is_noble_family_title = no + } + } + + cost = { + influence = { + value = major_influence_value + if = { + limit = { scope:influence_bribe = yes } + add = 100 + } + } + } + + # Hooks can be used to force this through. + send_options_exclusive = no + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:intermediary } + } + flag = hook_liege + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { + OR = { + has_usable_hook = scope:intermediary + has_usable_hook = scope:recipient + } + } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + on_send = { + scope:actor = { + add_character_flag = { + flag = flag_hostile_actions_disabled_delay + days = 10 + } + } + scope:intermediary ?= { # Stop AI sending this too often + add_character_flag = { + flag = contest_appointment_liege_cooldown + years = 1 + } + } + } + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = SCHEME_HOOK + } + # Spend influence to convince your liege + send_option = { + flag = influence_bribe + localization = influence_value_bribe_desc + is_valid = { + scope:actor = { influence >= major_influence_value } + } + } + + on_auto_accept = { + scope:recipient = { trigger_event = ep3_interactions_events.0010 } + scope:actor = { + # Tell them that the revocation went through fine. + trigger_event = ep3_interactions_events.0011 + } + scope:actor = { + # Scope:actor can be hostile again. + clear_hostile_actions_lock_flag_effect = yes + } + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = yes + } + scope:target = { + change_title_holder_include_vassals = { + holder = scope:actor + change = scope:change + } + } + if = { + limit = { + scope:intermediary != scope:actor.liege + } + scope:actor = { + change_liege = { + liege = scope:intermediary + change = scope:change + } + } + } + resolve_title_and_vassal_change = scope:change + } + + on_accept = { + scope:recipient = { trigger_event = ep3_interactions_events.0010 } + scope:actor = { + # Tell them that the revocation went through fine. + trigger_event = ep3_interactions_events.0011 + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + scope:intermediary = { + change_influence = medium_influence_loss + if = { + limit = { + scope:influence_bribe = yes + } + change_influence = major_influence_gain + } + } + scope:actor = { + # Scope:actor can be hostile again. + clear_hostile_actions_lock_flag_effect = yes + } + scope:recipient = { + every_held_title = { + title_tier >= county + limit = { + is_noble_family_title = no + any_this_title_or_de_jure_above = { + this = scope:target + } + } + add_to_list = transfer_titles + } + } + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = yes + } + every_in_list = { + list = transfer_titles + change_title_holder_include_vassals = { + holder = scope:actor + change = scope:change + } + } + if = { + limit = { + scope:intermediary != scope:actor.liege + } + scope:actor = { + change_liege = { + liege = scope:intermediary + change = scope:change + } + } + } + resolve_title_and_vassal_change = scope:change + } + + on_intermediary_decline = { + scope:actor = { + # Inform scope:actor that their liege has vetoed them. + trigger_event = ep3_interactions_events.0012 + # Scope:actor can be hostile again. + clear_hostile_actions_lock_flag_effect = yes + } + # Inform scope:recipient that scope:intermediary has their back. + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_bad + title = liege_blocked_contest_title + left_icon = scope:actor + right_icon = scope:intermediary + custom_tooltip = liege_blocked_contest_title.inform_recipient + } + } + scope:intermediary = { + if = { + limit = { + scope:influence_bribe = yes + } + change_influence = major_influence_gain + } + } + # Flick out some opinions. + diarch_revoke_title_interaction_intermediary_fail_opinions_effect = yes + } + + on_decline = { + scope:intermediary = { + # Tell them that the revocation was refused + trigger_event = ep3_interactions_events.0013 + # And give a crime reason + if = { + limit = { is_ai = no } + custom_tooltip = ADD_OPINION_EFFECT_I_HAVE_IMPRISONMENT_REASON_UNUSABLE + hidden_effect = { + add_opinion = { + target = scope:recipient + modifier = treasonous_revoke_refusal + } + } + } + ## AI use the standard opinion flow. + else = { + add_opinion = { + target = scope:recipient + modifier = treasonous_revoke_refusal + } + } + } + scope:actor = { + # Notify + trigger_event = ep3_interactions_events.0014 + # Scope:actor can be hostile again. + clear_hostile_actions_lock_flag_effect = yes + } + ## Scope:recipient is annoyed with scope:actor and the other way around. + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = revoked_title + } + } + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = treasonous_revoke_refusal + } + } + } + + auto_accept = { + scope:recipient = { + calc_true_if = { + amount >= 2 + custom_description = { + text = "prisoner_revocation" + is_imprisoned_by = scope:actor + } + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + OR = { + # Strong hooks generally. + scope:actor = { has_strong_hook = scope:recipient } + # Weak hooks in inter-AI interactions count as strong hooks. + AND = { + scope:actor = { is_ai = yes } + scope:recipient = { is_ai = yes } + } + } + } + custom_description = { + text = "foreign_prison_revocation" + subject = scope:actor + object = scope:recipient + scope:recipient = { + is_imprisoned = yes + NOT = { is_imprisoned_by = scope:actor } + } + } + } + } + } + + ai_intermediary_accept = { + base = 0 + modifier = { + add = -50 + desc = BASE_RELUCTANCE + } + # Hook + modifier = { + add = 40 + desc = SCHEME_WEAK_HOOK_USED + scope:hook_liege = yes + } + # Bribe + modifier = { + desc = INFLUENCE_REASON + scope:influence_bribe = yes + add = { + value = 20 + multiply = scope:actor.influence_level + min = 5 + } + } + # Opinion Factor + opinion_modifier = { + who = scope:intermediary + opinion_target = scope:actor + multiplier = 1 + desc = AI_OPINION_REASON + } + opinion_modifier = { + who = scope:intermediary + opinion_target = scope:recipient + multiplier = -1 + desc = AI_OPINION_REASON + } + # You would be a better public official (or not)! + modifier = { + desc = AI_STEWARDSHIP_REASON + add = { + value = scope:actor.stewardship + subtract = scope:recipient.stewardship + multiply = 2 + } + } + # How good is the respective character's Governor Efficiency? + modifier = { + scope:actor = { is_ai = no } + desc = AI_GOVERNOR_EFFICIENCY + add = { + value = 0 + add = { + value = scope:actor.governor_efficiency + subtract = 1 + multiply = 100 + } + } + } + modifier = { + scope:actor = { is_ai = no } + desc = RECIPIENT_GOVERNOR_EFFICIENCY + add = { + value = 0 + add = { + value = scope:recipient.governor_efficiency + subtract = 1 + multiply = -100 + } + } + } + # Dread + ## Intimidation + modifier = { + add = { + value = 0 + subtract = intimidated_halved_reason_value + } + desc = YOU_INTIMIDATED_REASON + scope:actor = { + has_dread_level_towards = { + target = scope:intermediary + level = 1 + } + } + } + ## Cowing + modifier = { + add = { + value = 0 + subtract = cowed_halved_reason_value + } + desc = YOU_COWED_REASON + scope:actor = { + has_dread_level_towards = { + target = scope:intermediary + level = 2 + } + } + } + # Legalistic tradition + modifier = { + add = legalistic_vassal_punishment_acceptance + desc = tradition_legalistic_name + scope:actor = { + has_revoke_title_reason = scope:recipient + culture = { has_cultural_parameter = vassals_more_likely_accept_punishments } + } + } + } + + ai_accept = { + # Try to make it 0 for most interactions + base = 0 + + # Weak Hook + modifier = { + add = 40 + desc = SCHEME_WEAK_HOOK_USED + scope:hook = yes + } + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + # Refusal is Treason + ## It's always treason, but worth pointing it out. + modifier = { + add = 20 + desc = AI_REFUSAL_IS_TREASON + } + # I am a King! + modifier = { + add = -20 + desc = offer_vassalization_interaction_aibehavior_hightier_tt + scope:recipient = { highest_held_title_tier = tier_kingdom } + } + # Dread + ## Intimidation + modifier = { + add = intimidated_halved_reason_value + desc = INTIMIDATED_REASON + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + } + ## Cowing + modifier = { + add = cowed_halved_reason_value + desc = COWED_REASON + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + } + ## Intimidation + modifier = { + add = intimidated_halved_reason_value + desc = INTIMIDATED_REASON + scope:recipient = { + has_dread_level_towards = { + target = scope:intermediary + level = 1 + } + } + } + ## Cowing + modifier = { + add = cowed_halved_reason_value + desc = COWED_REASON + scope:recipient = { + has_dread_level_towards = { + target = scope:intermediary + level = 2 + } + } + } + # Difference in influence level + modifier = { + scope:actor.influence_level != scope:recipient.influence_level + add = { + value = scope:actor.influence_level + subtract = scope:recipient.influence_level + multiply = 20 + } + desc = difference_in_influence_level_reason + } + # Legalistic tradition + modifier = { + add = legalistic_vassal_punishment_acceptance + desc = tradition_legalistic_name + scope:actor = { + has_revoke_title_reason = scope:recipient + culture = { has_cultural_parameter = vassals_more_likely_accept_punishments } + } + } + # Factor for personality. + ai_value_modifier = { + who = scope:recipient + # Greed is always a factor. + ai_greed = { + if = { + limit = { + scope:recipient = { + NOT = { ai_greed = 0 } + } + } + value = -0.75 + } + } + # If AI is honourable and the law compels them to obey the liege, AI will be more likely to obey. + ai_honor = { + if = { + limit = { + scope:recipient = { ai_honor > 0 } + } + value = 0.5 + } + } + } + } + + # AI + ai_targets = { + ai_recipients = peer_vassals + max = 10 + } + + ai_frequency_by_tier = { + barony = 0 + county = 12 + duchy = 12 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + ai_will_do = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + ai_boldness = 1 + } + ## Opinion. + opinion_modifier = { + opinion_target = scope:recipient + multiplier = 0.25 + } + ## Traits. + ### +++ Ambitious. + modifier = { + add = 100 + has_trait = ambitious + } + ### +++ Greedy. + modifier = { + add = 50 + has_trait = greedy + } + ### +++ Vengeful (under certain criteria). + modifier = { + add = 100 + has_trait = vengeful + has_opinion_modifier = { + modifier = revoked_title + target = scope:recipient + } + } + ### --- Content. + modifier = { + add = -50 + has_trait = content + } + # hooked AI. + modifier = { + add = 50 + is_landed = no + has_hook = scope:recipient + scope:recipient = { is_ai = yes } + } + ### + Do pick on people we hate. + modifier = { + factor = 1.5 + should_prioritise_hostile_action_against_due_to_personal_relations_trigger = { + ACTOR = scope:actor + RECIPIENT = scope:recipient + } + } + ### - Try not to pick on allies of our liege. + modifier = { + factor = 0.25 + should_avoid_hostile_action_against_due_to_liege_relations_trigger = { + ACTOR = scope:actor + RECIPIENT = scope:recipient + } + } + ### x0 Don't pick on our friends or allies. + modifier = { + factor = 0 + should_avoid_hostile_action_against_due_to_personal_relations_trigger = { + ACTOR = scope:actor + RECIPIENT = scope:recipient + } + } + ### x0 Don't go into influence debt! + modifier = { + factor = 0 + influence <= 0 + } + + # Less likely against fellow movement members + modifier = { + factor = { + value = 0.25 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 0.5 + } + } + is_in_same_movement_as = { TARGET = scope:recipient } + } + } +} + +# Request a council position from your liege in exchange for influence +request_council_interaction = { + category = interaction_category_vassal + interface_priority = 119 #listed right after force_onto_council + icon = council + + desc = request_council_interaction_desc + + filter_tags = { admin_liege } + + special_interaction = request_council_position + interface = council_task_interaction + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + popup_on_receive = yes + send_name = "SEND_REQUEST_COUNCIL" + + greeting = positive + notification_text = REQUEST_COUNCIL_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + on_decline_summary = request_council_decline_summary + + ai_targets = { + ai_recipients = liege + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 0 + } + + cooldown_against_recipient = { years = 25 } + + cost = { + influence = admin_council_cost_value + } + + is_available = { + # Admin only + government_has_mechanic = administrative + trigger_if = { + limit = { is_ai = yes } + is_councillor = no + top_liege != this + liege ?= { + is_at_war = no + NOT = { has_character_flag = refused_council_request } + } + } + # Except for Merit based realms - they should compete with merit and score instead + liege ?= { + tgp_has_access_to_ministry_trigger = no + } + } + + is_shown = { + scope:actor = { + liege ?= scope:recipient + } + scope:recipient = { + government_has_mechanic = administrative + this != scope:actor + } + trigger_if = { + limit = { + exists = scope:target.councillor + } + scope:target = { can_fire_position = yes } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + NOT = { + is_at_war_with = scope:recipient + } + is_councillor = no + NAND = { + has_council_position = councillor_court_chaplain + rite = { + rite_has_parameter = clerical_appointment_fixed + } + } + tgp_is_ceremonial_liege_trigger = no + } + } + + has_valid_target_showing_failures_only = { + trigger_if = { + limit = { + exists = scope:target.councillor + } + scope:target.councillor = { + NOT = { + is_blocked_from_being_fired_from_council_trigger = { + COURT_OWNER = scope:recipient + } + } + } + } + } + + on_accept = { + scope:target = { + save_scope_as = council_task + } + scope:actor = { + block_firing_councillor_effect = { COURT_OWNER = scope:recipient } + custom_tooltip = force_onto_council.recipient.tt.duration + #And notify exactly which councillor type they've become. + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = force_onto_council.actor.tt + left_icon = scope:recipient + custom_tooltip = force_onto_council.actor.tt.duration + show_as_tooltip = { + change_influence = admin_council_loss_value + } + } + } + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + # If the minister's merit rank is too low, it will affect the dynastic cycle + if = { + limit = { + scope:target.councillor.primary_title ?= { + tgp_is_minister_title = yes + } + scope:recipient = { + NOT = { has_appointment_level_for_title = scope:target.councillor.primary_title } + } + } + show_as_tooltip = { + situation:dynastic_cycle ?= { + if = { + limit = { situation_top_has_catalyst = catalyst_hegemon_appointing_low_merit_councillor } + trigger_situation_catalyst = { + catalyst = catalyst_hegemon_appointing_low_merit_councillor + character = scope:recipient + } + } + } + } + } + stress_and_fulfillment_impact = { content = minor_stress_impact_gain } + } + scope:recipient = { + assign_council_task = { + target = scope:actor + council_task = scope:council_task + } + change_influence = massive_influence_gain + custom_tooltip = force_onto_council.desc.tt + #And notify exactly which councillor type they've become. + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_neutral + title = force_onto_council.recipient.tt + left_icon = scope:actor + custom_tooltip = force_onto_council.recipient.tt.duration + show_as_tooltip = { change_influence = massive_influence_gain } + } + } + } + } + + on_decline = { + scope:actor = { + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -25 + } + trigger_event = ep3_interactions_events.0020 + } + scope:recipient = { + if = { # If the liege is a player, put on a longer global cooldown to reduce potential spam + limit = { is_ai = no } + add_character_flag = { + flag = refused_council_request + years = 15 + } + } + } + } + + ai_set_target = { + scope:actor = { + random_list = { + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_chancellor + can_be_chancellor_trigger = { COURT_OWNER = scope:recipient } + } + modifier = { + factor = diplomacy + } + modifier = { + trigger = { highest_skill = diplomacy } + factor = 10 + } + scope:recipient.council_task:councillor_chancellor = { + save_scope_as = target + } + } + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_steward + can_be_steward_trigger = { COURT_OWNER = scope:recipient } + } + modifier = { + factor = stewardship + } + modifier = { + trigger = { highest_skill = stewardship } + factor = 10 + } + scope:recipient.council_task:councillor_steward = { + save_scope_as = target + } + } + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_marshal + can_be_marshal_trigger = { COURT_OWNER = scope:recipient } + } + modifier = { + factor = martial + } + modifier = { + trigger = { highest_skill = martial } + factor = 10 + } + scope:recipient.council_task:councillor_marshal = { + save_scope_as = target + } + } + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_spymaster + can_be_spymaster_trigger = { COURT_OWNER = scope:recipient } + } + modifier = { + factor = intrigue + } + modifier = { + trigger = { highest_skill = intrigue } + factor = 10 + } + scope:recipient.council_task:councillor_spymaster = { + save_scope_as = target + } + } + 10 = { + trigger = { + exists = scope:recipient.council_task:councillor_court_chaplain + can_be_court_chaplain_trigger = { COURT_OWNER = scope:recipient } + } + modifier = { + factor = learning + } + modifier = { + trigger = { highest_skill = learning } + factor = 10 + } + scope:recipient.council_task:councillor_court_chaplain = { + save_scope_as = target + } + } + } + } + } + + ai_will_do = { + base = 0 + + # Increase chance if greed and/or boldness is high enough + modifier = { + add = 20 + ai_greed >= medium_positive_ai_value + ai_boldness >= medium_positive_ai_value + } + modifier = { + factor = 1.5 + ai_greed >= very_high_positive_ai_value + } + modifier = { + factor = 1.5 + ai_boldness >= very_high_positive_ai_value + } + + # Don't do it towards a good relation, unless very greedy + modifier = { + factor = 0 + scope:actor = { + ai_greed <= very_high_positive_ai_value + OR = { + has_relation_friend = scope:recipient + has_relation_lover = scope:recipient + has_relation_best_friend = scope:recipient + has_relation_soulmate = scope:recipient + } + } + } + + # No need if they are a councillor already + modifier = { + factor = 0 + is_councillor = yes + } + } + + ai_accept = { + base = 0 + modifier = { + add = -50 + desc = BASE_RELUCTANCE + } + opinion_modifier = { # Opinion of you + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.8 + desc = AI_OPINION_REASON + } + opinion_modifier = { # Opinion of the current councillor + who = scope:recipient + opinion_target = scope:target.councillor + multiplier = -0.8 + desc = AI_OPINION_REASON + } + ai_value_modifier = { + ai_energy = 0.25 #It's a change + ai_greed = 0.4 #Free influence is free influence + ai_honor = -0.4 #Some might see it as a bribe + } + #Relations + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = -50 + desc = AI_YOUR_RIVAL + } + modifier = { + scope:actor = { + has_relation_friend = scope:recipient + } + add = 25 + desc = AI_YOUR_FRIEND + } + #You are better at the job + modifier = { + scope:target = council_task:councillor_chancellor + scope:actor.diplomacy > scope:target.councillor.diplomacy + desc = AI_BETTER_AT_THE_JOB + add = { + value = scope:actor.diplomacy + subtract = scope:target.councillor.diplomacy + multiply = 10 + } + } + modifier = { + scope:target = council_task:councillor_marshal + scope:actor.martial > scope:target.councillor.martial + desc = AI_BETTER_AT_THE_JOB + add = { + value = scope:actor.martial + subtract = scope:target.councillor.martial + multiply = 10 + } + } + modifier = { + scope:target = council_task:councillor_steward + scope:actor.stewardship > scope:target.councillor.stewardship + desc = AI_BETTER_AT_THE_JOB + add = { + value = scope:actor.stewardship + subtract = scope:target.councillor.stewardship + multiply = 10 + } + } + modifier = { + scope:target = council_task:councillor_spymaster + scope:actor.intrigue > scope:target.councillor.intrigue + desc = AI_BETTER_AT_THE_JOB + add = { + value = scope:actor.intrigue + subtract = scope:target.councillor.intrigue + multiply = 10 + } + } + modifier = { + scope:target = council_task:councillor_court_chaplain + scope:actor.learning > scope:target.councillor.learning + desc = AI_BETTER_AT_THE_JOB + add = { + value = scope:actor.learning + subtract = scope:target.councillor.learning + multiply = 10 + } + } + #You are significantly WORSE at the job (we start reducing AI acceptance when it is more than 10 below current councillor's skill) + modifier = { + scope:target = council_task:councillor_chancellor + scope:actor.diplomacy < { value = scope:target.councillor.diplomacy subtract = 10 } + desc = AI_WORSE_AT_THE_JOB + add = { + value = scope:actor.diplomacy + subtract = scope:target.councillor.diplomacy + add = 10 + multiply = 2 + } + } + modifier = { + scope:target = council_task:councillor_marshal + scope:actor.martial < { value = scope:target.councillor.martial subtract = 10 } + desc = AI_WORSE_AT_THE_JOB + add = { + value = scope:actor.martial + subtract = scope:target.councillor.martial + add = 10 + multiply = 2 + } + } + modifier = { + scope:target = council_task:councillor_steward + scope:actor.stewardship < { value = scope:target.councillor.stewardship subtract = 10 } + desc = AI_WORSE_AT_THE_JOB + add = { + value = scope:actor.stewardship + subtract = scope:target.councillor.stewardship + add = 10 + multiply = 2 + } + } + modifier = { + scope:target = council_task:councillor_spymaster + scope:actor.intrigue < scope:target.councillor.intrigue + desc = AI_WORSE_AT_THE_JOB + add = { + value = scope:actor.intrigue + subtract = scope:target.councillor.intrigue + add = 10 + multiply = 2 + } + } + modifier = { + scope:target = council_task:councillor_court_chaplain + scope:actor.learning < scope:target.councillor.learning + desc = AI_WORSE_AT_THE_JOB + add = { + value = scope:actor.learning + subtract = scope:target.councillor.learning + add = 10 + multiply = 2 + } + } + #You are more powerful + modifier = { + scope:actor = { is_powerful_vassal = yes } + scope:target.councillor = { is_powerful_vassal = no } + desc = AI_POWERFUL_VASSAL + add = 75 + } + modifier = { + scope:actor.house ?= { is_powerful_family = yes } + scope:target.councillor.house ?= { is_powerful_family = no } + desc = AI_POWERFUL_FAMILY + add = 100 + } + #You are more influential + modifier = { + scope:actor.influence_level != scope:target.councillor.influence_level + add = { + value = scope:actor.influence_level + subtract = scope:target.councillor.influence_level + multiply = 10 + } + desc = AI_DIFFERENCE_INFLUENCE + } + } +} + +# Transfer a single county (not belonging to a theme) to an already existing governor +transfer_county_interaction = { + icon = icon_transfer_county + category = interaction_category_vassal + filter_tags = { admin_governor } + common_interaction = no + interface_priority = 4 + + desc = transfer_county_interaction_desc + + target_type = title + target_filter = actor_domain_titles + + # actor character giving the title + # recipient character receiving the title + + is_available = { + highest_held_title_tier >= tier_empire + top_liege ?= this + government_has_mechanic = administrative + } + + is_shown = { + scope:actor != scope:recipient + scope:recipient = { + target_is_liege_or_above = scope:actor + highest_held_title_tier >= tier_duchy + is_governor = yes + government_has_mechanic = administrative + tgp_is_ceremonial_liege_trigger = no + } + } + + is_valid_showing_failures_only = { + scope:actor = { is_at_war = no } + scope:recipient = { + is_adult = yes + is_at_war = no + bp2_valid_for_standard_interactions_trigger = yes + } + custom_tooltip = { + text = have_no_valid_county_to_assign_trigger + scope:actor = { + any_held_title = { + count >= 1 + title_tier = county + this != scope:actor.primary_title.title_capital_county + duchy ?= { + this != scope:actor.primary_title.title_capital_county.duchy + } + } + } + } + } + + can_be_picked_title = { + scope:target = { + is_leased_out = no + tier = tier_county + custom_tooltip = { + NOR = { + this = scope:actor.primary_title.title_capital_county # Preferred capital county + this = scope:actor.capital_county # Actual current capital + } + text = not_can_be_picked_capital + } + custom_tooltip = { + duchy ?= { + NOR = { + this = scope:actor.primary_title.title_capital_county.duchy # Preferred capital county's duchy + this = scope:actor.capital_county.duchy # Actual current capital's duchy + } + } + text = not_can_be_picked_capital_duchy + } + } + + custom_description = { + text = grant_titles_interaction_can_only_give_diarch_de_jure_liege_to_diarch + subject = scope:actor.diarch + NAND = { + # Only applies if we have an active diarchy. + scope:actor = { has_active_diarchy = yes } + # Now, prevent us from giving away our diarch's land to invalidate them... + scope:target = { + any_dejure_vassal_title_holder = { this = scope:actor.diarch } + # ... _unless_ we're giving it _to_ the diarch. + scope:recipient != scope:actor.diarch + # Plus we only care if the title is below our tier. + tier < scope:actor.highest_held_title_tier + } + } + } + + custom_description = { + text = grant_titles_interaction_title_being_wagered + NOT = { + scope:target = { has_variable = wagered_county } + } + } + } + + auto_accept = yes + + on_auto_accept = { + scope:recipient = { + trigger_event = char_interaction.0111 + } + } + + on_accept = { + if = { + limit = { + scope:recipient = { + highest_held_title_tier >= tier_duchy + } + #you are giving away Order capital + scope:actor = { + any_patroned_holy_order = { + leader.capital_county ?= { + save_temporary_scope_as = ho_capital_temp + this = scope:target + } + } + } + } + if = { + limit = { + scope:recipient = { + highest_held_title_tier >= tier_duchy + } + } + custom_tooltip = holy_order_control_loss_warning_tt + } + else = { + custom_tooltip = potential_holy_order_control_loss_warning_tt + } + } + hidden_effect = { + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = received_title_county + } + } + scope:target = { add_to_temporary_list = titles_to_grant } + } + #Promised a vassal this title they had a claim on (vassal.2901) + if = { + limit = { + scope:actor = { + exists = var:was_promised_title + var:was_promised_title = scope:recipient + } + } + if = { + limit = { + scope:recipient = { + exists = var:promised_title + } + scope:landed_title = scope:recipient.var:promised_title + } + scope:actor = { + trigger_event = { + id = vassal.2910 + days = { 7 14 } + } + } + } + } + + # The accumulated discontent reduction of the recipient + scope:recipient = { + if = { + limit = { + is_a_faction_member = yes + } + add_joined_faction_discontent = grant_title_opinion_sum_discontent_calc + custom_tooltip = grant_title_modifier_stack_discontent + } + } + + custom_tooltip = grant_title_modifier_stack_counties + + # Jealousy check + if = { + limit = { + any_in_list = { + list = titles_to_grant + any_claimant = { grant_title_rivalry_trigger = yes } + } + } + hidden_effect = { + random = { + chance = 25 + ordered_in_list = { + list = titles_to_grant + limit = { + any_claimant = { grant_title_rivalry_trigger = yes } + } + order_by = tier + save_scope_as = claim_title + ordered_claimant = { + limit = { grant_title_rivalry_trigger = yes } + order_by = primary_title.tier + save_scope_as = claim_vassal + if = { + limit = { + scope:recipient = { is_lowborn = yes } + } + scope:recipient = { save_scope_as = lowborn_scope } + } + else_if = { + limit = { + scope:recipient = { has_claim_on = scope:claim_title } + } + scope:recipient = { save_scope_as = claimant_scope } + } + scope:actor = { + trigger_event = { + id = bp1_yearly.8070 + days = 5 + } + } + } + } + } + } + } + + scope:actor = { + # Maintenance for runestones + if = { + limit = { + # Use expanded version if we have FP1. + has_fp1_dlc_trigger = yes + fp1_remove_stele_new_holder_trigger = { + TITLE = scope:target + PREVIOUS_HOLDER = scope:actor + NEW_HOLDER = scope:recipient + } + } + # Actually removed in fp1_other_decisions.0113 + custom_tooltip = runestone_grant_title_warning + } + else_if = { + limit = { + scope:target = { + exists = var:ancestor_to_bury + has_county_modifier = county_raised_runestone_modifier + } + NOT = { scope:recipient.dynasty = var:ancestor_to_bury.dynasty } #We only have to change something if the new holder is of a different dynasty + } + # Actually removed in religious_decision.0312 + custom_tooltip = runestone_grant_title_warning + } + if = { # Maintenance for khachkar decision + limit = { + has_pam_dlc_trigger = yes + scope:target = { + exists = var:pam_khachkar_ancestor + has_county_modifier = pam_khachkar_ancestral_county + } + NOT = { scope:recipient.dynasty = scope:target.var:pam_khachkar_ancestor.dynasty } + } + custom_tooltip = pam_khachkar_grant_title_warning + } + + if = { + limit = { + exists = scope:actor.dynasty + scope:actor.dynasty = { + has_dynasty_perk = ep1_culture_legacy_3 + } + scope:recipient = { + is_playable_character = no + culture != scope:actor.culture + any_in_list = { + list = target_titles + OR = { + tier = tier_county + tier = tier_barony + } + culture = scope:recipient.culture + } + } + } + scope:actor = { + if = { + limit = { + can_add_hook = { + target = scope:recipient + type = favor_hook + } + } + add_hook = { + type = favor_hook + target = scope:recipient + } + } + } + } + + #Feedback for actor + hidden_effect = { + scope:target = { + save_scope_as = loc_title + } + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = transfer_county_interaction_notification + + left_icon = scope:actor + right_icon = scope:recipient + + custom_tooltip = grant_titles_interaction_notification_effect_2 + if = { + limit = { + exists = dynasty + is_diff_faith_or_culture_trigger = { + CHAR = scope:recipient + STATUS = involved + } + any_character_struggle = { + involvement = involved + has_struggle_phase_parameter = struggle_grant_titles_diff_faith_culture_gives_prestige + } + } + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + } + } + } + } + } + + hidden_effect = { + # Struggle Catalyst + if = { + limit = { + scope:actor = { + is_diff_faith_or_culture_trigger = { + CHAR = scope:recipient + STATUS = involved + } + any_character_struggle = { + involvement = involved + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal + CHAR = scope:recipient + } + } + } + } + scope:actor = { + every_character_struggle = { + involvement = involved + limit = { + activate_struggle_catalyst_secondary_character_involvement_involved_trigger = { + CATALYST = catalyst_grant_privilege_to_diff_faith_culture_vassal + CHAR = scope:recipient + } + } + activate_struggle_catalyst = { + catalyst = catalyst_grant_privilege_to_diff_faith_culture_vassal + character = scope:actor + } + } + } + } + } + # The actual transfer + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change_vassal + } + every_in_list = { + list = titles_to_grant + change_title_holder = { + holder = scope:recipient + change = scope:title_change_vassal + take_baronies = no + } + } + resolve_title_and_vassal_change = scope:title_change_vassal + } + # AI + ai_targets = { + ai_recipients = vassals + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 24 + kingdom = 24 + empire = 24 + hegemony = 24 + } + ai_will_do = { + base = 100 + + modifier = { + scope:recipient.house ?= scope:actor.house + add = 10 + } + modifier = { + scope:recipient = { + is_close_family_of = scope:actor + } + add = 10 + } + modifier = { + scope:target = { + any_neighboring_county = { + holder = { + this = scope:recipient + } + } + } + add = 200 + } + } +} + +# Demand that a family member be made a eunuch +castrate_child_interaction = { + category = interaction_category_friendly + icon = eunuch + common_interaction = yes + interface_priority = 60 + ai_maybe = yes + ai_min_reply_days = 1 + ai_max_reply_days = 1 + can_send_despite_rejection = yes + ai_accept_negotiation = yes + popup_on_receive = yes + + pre_answer_maybe_key = ANSWER_MIGHT_SUCCEED + pre_answer_no_key = ANSWER_CANT_SUCCEED + pre_answer_yes_key = ANSWER_WILL_SUCCEED + pre_answer_maybe_breakdown_key = ANSWER_SUM_CHANCE + + ai_targets = { + ai_recipients = family + max = 5 + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + desc = castrate_child_interaction_desc + + is_available = { + culture ?= { + has_cultural_parameter = family_castration + } + trigger_if = { + limit = { is_ai = yes } + is_adult = yes + } + NAND = { + is_ai = yes + any_close_family_member = { + is_ai = no + } + } + } + + is_shown = { + has_ep3_dlc_trigger = yes + scope:recipient = { + is_ai = yes + is_female = no + is_adult = no + is_close_family_of = scope:actor + is_eunuch_trigger = no + } + } + + cooldown_against_recipient = { years = 1 } + + is_valid_showing_failures_only = { + scope:actor = { + employs_court_position = court_physician_court_position + } + scope:recipient = { + custom_tooltip = { + text = COURTIER_OR_GUEST + OR = { + is_courtier_of = scope:actor + is_pool_guest_of = scope:actor + is_foreign_court_guest_of = scope:actor + } + } + is_ruler = no + is_available = yes + is_betrothed = no + NOT = { is_primary_heir_of = scope:actor } + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + exists = scope:hook + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + is_highlighted = { + #This interaction should only be suggested on potential rivals for the imperial throne, bastards, and for landless house heads + + OR = { + #bastards + AND = { + scope:actor = { + any_close_family_member = { + is_male = yes + house ?= scope:actor.house + is_eunuch_trigger = no + NOR = { + has_trait = celibate + has_trait = devoted + has_trait = order_member + has_trait = bastard + } + OR = { + #Is an old adult with a kid + AND = { + age >= 40 + any_child = { + is_male = yes + } + } + #Is a young adult or child + age < 40 + } + } + } + scope:recipient = { + has_trait = bastard + } + } + #You are poor and uninfluential OR Emperor + AND = { + scope:actor = { + ep3_castration_interest_trigger = yes + ep3_castration_male_family_trigger = yes + } + #Target is a good one + scope:recipient = { + NOT = { is_heir_of = scope:actor } + ep3_ideal_castration_candidate_trigger = yes + OR = { + #target is 3rd child or lower + any_sibling = { + count >= 2 + AND = { + is_male = yes + age > scope:recipient.age + } + } + #target is sibling + NOT = { is_child_of = scope:actor } + } + } + } + } + } + + on_accept = { + scope:recipient = { + if = { + limit = { + age < 12 + } + add_character_flag = accepted_castration_child + } + else = { + add_character_flag = accepted_castration_youth + } + } + show_as_tooltip = { + scope:actor = { change_influence = minor_influence_gain } + #Effects on child target + if = { + limit = { + scope:recipient = { + age < 12 + } + } + scope:recipient = { + ep3_child_castration_effect = yes + add_stress = medium_stress_gain + custom_tooltip = castration_better_before_maturity + } + #Notification that it is better than doing it after 12 years of age + } + #effects on teenaged target + else = { + scope:recipient = { + ep3_youth_castration_effect = yes + add_stress = major_stress_gain + } + } + } + #Immediate interaction effects + if = { + limit = { + exists = scope:hook + scope:hook = yes + scope:actor = { has_usable_hook = scope:recipient } + } + scope:actor = { + use_hook = scope:recipient + } + } + scope:actor = { + if = { + limit = { + scope:recipient = { + age > 6 + } + } + stress_and_fulfillment_impact = { + compassionate = medium_stress_impact_gain + content = minor_stress_impact_gain + generous = medium_stress_impact_gain + } + } + trigger_event = ep3_interactions_events.0030 + } + } + + on_decline = { + show_as_tooltip = { + #For child targets + if = { + limit = { + scope:recipient = { + age < 12 + } + } + scope:actor = { change_influence = minor_influence_gain } + scope:recipient = { + ep3_child_castration_effect = yes + add_opinion = { + modifier = castration_opinion + target = scope:actor + opinion = -50 + } + add_stress = major_stress_gain + custom_tooltip = castration_better_before_maturity + } + } + #For teenaged victims + else = { + scope:actor = { + remove_courtier_or_guest = scope:recipient + if = { + limit = { + has_hook = scope:recipient + } + remove_hook = { target = scope:recipient } + } + scope:recipient = { + set_relation_rival = { + target = scope:actor + reason = rival_attempted_castration + } + add_stress = medium_stress_gain + + } + } + } + } + if = { + limit = { + scope:hook = yes + scope:actor = { has_usable_hook = scope:recipient } + } + scope:actor = { + use_hook = scope:recipient + } + } + scope:actor = { + if = { + limit = { + scope:recipient = { + age > 6 + } + } + stress_and_fulfillment_impact = { + compassionate = medium_stress_impact_gain + content = minor_stress_impact_gain + generous = medium_stress_impact_gain + } + } + } + if = { + limit = { + scope:recipient = { + age < 12 + } + } + scope:recipient = { + add_character_flag = resents_castration + } + scope:actor = { + trigger_event = ep3_interactions_events.0030 + } + } + else = { + scope:actor = { + trigger_event = ep3_interactions_events.0031 + } + } + } + + # Use hook + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_will_do = { + base = 0 + modifier = { + scope:actor = { + has_trait = compassionate + } + add = -50 + } + modifier = { + scope:actor = { + has_trait = generous + } + add = -25 + } + modifier = { + scope:actor = { + has_trait = content + } + add = -25 + } + modifier = { + scope:recipient = { + has_trait = bastard + } + add = 100 + } + modifier = { + scope:actor = { + ep3_castration_interest_trigger = yes + } + scope:recipient = { + #target is 4 child or lower + AND = { + ep3_ideal_castration_candidate_trigger = yes + NOT = { is_heir_of = scope:actor } + #Not oldest child + any_sibling = { + count >= 3 + is_male = yes + age > scope:recipient.age + } + } + } + + add = 20 + } + modifier = { + scope:actor = { + ep3_castration_interest_trigger = yes + } + scope:recipient = { + #target is sibling + AND = { + ep3_ideal_castration_candidate_trigger = yes + NOT = { is_heir_of = scope:actor } + #Not oldest child + NOT = { is_child_of = scope:actor } + } + } + add = 20 + } + modifier = { + scope:actor = { + has_trait = paranoid + } + factor = 2 + } + modifier = { + scope:actor = { + has_trait = sadistic + } + factor = 2 + } + modifier = { + scope:actor = { + opinion = { + target = scope:recipient + value <= -50 + } + } + factor = 1.5 + } + modifier = { + scope:recipient = { + age > 6 + } + factor = 0.5 + } + modifier = { + scope:recipient = { + age >= 12 + } + factor = 0.5 + } + modifier = { + scope:actor = { + age <= 4 + } + factor = 2 + } + modifier = { + OR = { + scope:actor = { + ep3_castration_male_family_trigger = no + } + scope:recipient = { + is_primary_heir_of = scope:actor + } + scope:recipient = { + AND = { + is_child_of = scope:actor + any_sibling = { + count = 0 + is_male = yes + age >= scope:recipient.age + house ?= scope:recipient.house + } + } + } + } + factor = 0 + } + } + + ai_accept = { + base = 0 + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + ai_value_modifier = { + ai_rationality = 0.25 #It's just the way things are + ai_energy = -0.25 #I have big dreams! + ai_boldness = -0.25 #I don't want to be reduced + ai_honor = 0.12 #It is wrong to defy you + ai_sociability = 0.12 #I see the advantages + } + # Weak Hook + modifier = { + trigger = { + always = scope:hook + } + add = 50 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:recipient = { + age <= 2 + } + desc = SCHEME_AGE_2_OR_LESS + add = 50 + } + modifier = { + scope:recipient = { + age <= 6 + } + desc = SCHEME_AGE_6_OR_LESS + add = 20 + } + modifier = { + scope:recipient = { + age >= 10 + } + desc = SCHEME_AGE_10_OR_MORE + add = -20 + } + modifier = { + scope:recipient = { + age >= 14 + } + desc = SCHEME_AGE_14_OR_MORE + add = -40 + } + # They are afraid of you + modifier = { + scope:recipient = { + age >= 12 + has_dread_level_towards = { + target = scope:actor + level = 1 + } + } + desc = SCHEME_TOO_SCARED_TO_RUN + add = 30 + } + modifier = { + scope:recipient = { + age >= 12 + has_dread_level_towards = { + target = scope:actor + level = 2 + } + } + desc = SCHEME_TOO_TERRIFIED_TO_RUN + add = 60 + } + modifier = { + scope:actor = { + highest_held_title_tier >= tier_empire + } + desc = SCHEME_EMPIRE_TIER + add = 30 + } + #You are too good a governor for them to slip away + modifier = { + scope:recipient = { + age >= 12 + } + scope:actor = { + is_governor = yes + governor_efficiency >= 1.25 + } + desc = SCHEME_GOVERNOR_EFFICIENCY_DISSUADES_FLEEING + add = 20 + } + } +} + +### Offer eunuch +# actor = offerer +# recipient = receiver +# secondary_actor = eunuch +offer_eunuch_interaction = { + category = interaction_category_friendly + ai_min_reply_days = 4 + ai_max_reply_days = 9 + popup_on_receive = yes + pause_on_receive = yes + icon = eunuch + interface_priority = 29 #after Gift Artifact + + populate_recipient_list = { + scope:actor = { + every_courtier = { + limit = { + is_eunuch_trigger = yes + } + add_to_list = characters + } + } + } + + desc = offer_eunuch_interaction_desc + + prompt = OFFER_EUNUCH_SELECT_EUNUCH_TO_TRANSFER + + notification_text = OFFER_EUNUCH_PROPOSAL + + cooldown_against_recipient = { years = 1 } + + is_available = { + trigger_if = { + limit = { is_ai = yes } + government_has_mechanic = administrative + } + any_courtier = { + is_eunuch_trigger = yes + } + } + + is_shown = { + scope:recipient = { government_has_mechanic = administrative } + # Cannot exchange eunuchs with self + scope:recipient != scope:actor + # Target has to be a ruler and have a court + scope:recipient = { is_ruler = yes } + # Target has to be a direct vassal of the Emperor + scope:recipient.top_liege ?= scope:recipient.liege + # Only admin gov care about this + scope:actor = { government_has_mechanic = administrative } + } + + is_valid_showing_failures_only = { + # Must be available + NOT = { + # Must be at peace + scope:recipient = { is_at_war_with = scope:actor } + } + # Stop AI spamming eunuch offers + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + exists = scope:secondary_recipient + } + NOT = { + scope:secondary_recipient = { has_character_flag = ai_should_not_offer_eunuch } + } + } + } + + can_be_picked = { + # We don't want baby eunuchs, we want eunuchs who can actually do something + is_adult = yes + custom_tooltip = { + text = eunuch_offered_to_someone_else_tt + NOT = { + has_character_flag = under_offer_as_eunuch_flag + } + } + } + + can_send = { + scope:recipient = { + trigger_if = { + limit = { is_ai = no } + NOT = { + scope:secondary_recipient = { has_character_flag = ai_should_not_offer_eunuch } + } + } + } + } + + is_highlighted = { # We highlight this interaction so it's easier to notice, since we don't show it in the main list + scope:actor = { + any_courtier = { + is_eunuch_trigger = yes + } + } + } + + cost = {} + + on_send = { + scope:secondary_recipient = { + add_character_flag = { + flag = under_offer_as_eunuch_flag + months = 1 + } + court_position_generator_effect = { + VAR = target + EMPLOYER = scope:recipient + ONLY_EMPTY = no + } + } + if = { + limit = { + scope:recipient = { is_ai = no } + } + hidden_effect = { + scope:secondary_recipient = { + add_character_flag = { + flag = ai_should_not_offer_eunuch + years = 3 + } + } + } + } + } + + on_accept = { + # Save scopes for clarity + scope:actor = { save_scope_as = eunuch_sender } + scope:secondary_recipient = { save_scope_as = eunuch } + scope:recipient = { save_scope_as = eunuch_taker } + scope:actor = { trigger_event = char_interaction.0350 } + show_as_tooltip = { + ep3_give_eunuch_effect = { + EUNUCH = scope:secondary_recipient + TAKER = scope:recipient + GIVER = scope:actor + } + custom_tooltip = eunuch_will_be_given_a_position_tt + } + } + + on_decline = { + scope:actor = { + trigger_event = char_interaction.0351 + } + scope:secondary_recipient = { remove_character_flag = under_offer_as_eunuch_flag } + } + + auto_accept = { + trigger_if = { + limit = { + scope:hook ?= yes + scope:actor = { has_strong_hook = scope:recipient } + } + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook ?= yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + trigger_else = { always = no } + } + + can_be_blocked = { + custom_description = { #Hook from Recipient can counteract, but only if Actor is not forcing the action via Strong Hook. + text = "spending_hook" + subject = scope:recipient + object = scope:actor + scope:recipient = { has_hook = scope:actor } + NAND = { + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + } + + on_blocked_effect = { + scope:recipient = { + remove_hook = { target = scope:actor } + } + } + + #Use hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + # AI + ai_accept = { + base = -50 + ######### OPINION OF LIEGE + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + ######### OPINION OF EUNUCH + opinion_modifier = { + who = scope:recipient + opinion_target = scope:secondary_recipient + multiplier = 0.5 + desc = AI_OPINION_REASON + } + ######## EUNUCH AGE + modifier = { + add = { + value = 50 + subtract = scope:secondary_recipient.age + } + desc = AI_REASON_EUNUCH_AGE + } + ######## EUNUCH SKILLS + modifier = { + add = { + add = scope:secondary_recipient.diplomacy + add = scope:secondary_recipient.intrigue + add = scope:secondary_recipient.stewardship + add = scope:secondary_recipient.martial + add = scope:secondary_recipient.learning + } + desc = AI_REASON_EUNUCH_SKILLS + } + ######## EUNUCH SKILLS + modifier = { + scope:secondary_recipient = { + has_trait = beardless_eunuch + } + add = 25 + desc = AI_REASON_BEARDLESS_EUNUCH + } + } + + ai_targets = { + ai_recipients = liege + } + + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 36 + kingdom = 36 + empire = 0 + hegemony = 0 + } + + ai_will_do = { + base = 0 + modifier = { + add = scope:actor.ai_boldness + add = { + subtract = scope:actor.ai_compassion + } + } + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + desc = AI_OPINION_REASON + } + opinion_modifier = { # Opinion Factor + who = scope:actor + opinion_target = scope:secondary_recipient + multiplier = -0.5 + desc = AI_OPINION_REASON + } + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:hook = yes + add = -1 + } + # Cultural traditions + modifier = { + scope:actor.culture = { has_cultural_tradition = tradition_equitable } + add = 25 + } + modifier = { + scope:actor.culture = { has_cultural_tradition = tradition_esteemed_hospitality } + add = 25 + } + modifier = { + scope:actor = { + culture = { has_cultural_tradition = tradition_loyal_soldiers } + } + add = 25 + desc = HOSTAGE_CULTURAL_TRADITION_REASON + } + } +} + +# Add artifact to Cabinet of Curiosities +cabinet_of_curiosities_interaction = { + category = interaction_category_friendly + common_interaction = yes + interface_priority = 60 + desc = cabinet_of_curiosities_interaction_desc + icon = artisan_inspiration + + target_type = artifact + target_filter = actor_artifacts + show_all_targets = no + + can_be_picked_artifact = { + scope:actor = { + any_character_artifact = { + this = scope:target + } + #block the artifact from the laamp escort contract + NOT = { + any_scheme = { + var:escorted_artifact ?= scope:target + } + } + } + scope:target = { + is_equipped = no + } + } + + is_available = { + domicile ?= { + has_domicile_parameter = can_receive_artifacts + } + trigger_if = { + limit = { is_ai = yes } + has_any_unequipped_artifact = yes + any_character_artifact = { + count >= 5 + is_equipped = no + } + } + } + + is_shown = { + scope:recipient = scope:actor + } + + is_valid_showing_failures_only = { + # needs to have an artifact to give away + scope:actor = { + custom_description = { + text = "any_unequipped_artifact_tt" + has_any_unequipped_artifact = yes + } + is_imprisoned = no + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_neutral + title = cabinet_of_curiosities_interaction_notification + left_icon = scope:actor + right_icon = scope:target + + custom_tooltip = artifact_added_to_domicile_tt + + # Determine Bonus + if = { + limit = { + scope:target = { is_unique = yes } + } + house = { + if = { + limit = { + has_variable = ep3_legacy_domicile_artifact_counter_unique + } + change_variable = { + name = ep3_legacy_domicile_artifact_counter_unique + add = 1 + } + } + else = { + set_variable = { + name = ep3_legacy_domicile_artifact_counter_unique + value = 1 + } + } + } + } + scope:target = { + if = { + limit = { rarity = common } + scope:actor.house = { + if = { + limit = { + has_variable = ep3_legacy_domicile_artifact_counter_common + } + change_variable = { + name = ep3_legacy_domicile_artifact_counter_common + add = 1 + } + } + else = { + set_variable = { + name = ep3_legacy_domicile_artifact_counter_common + value = 1 + } + } + } + } + else_if = { + limit = { rarity = masterwork } + scope:actor.house = { + if = { + limit = { + has_variable = ep3_legacy_domicile_artifact_counter_masterwork + } + change_variable = { + name = ep3_legacy_domicile_artifact_counter_masterwork + add = 1 + } + } + else = { + set_variable = { + name = ep3_legacy_domicile_artifact_counter_masterwork + value = 1 + } + } + } + } + else_if = { + limit = { rarity = famed } + scope:actor.house = { + if = { + limit = { + has_variable = ep3_legacy_domicile_artifact_counter_famed + } + change_variable = { + name = ep3_legacy_domicile_artifact_counter_famed + add = 1 + } + } + else = { + set_variable = { + name = ep3_legacy_domicile_artifact_counter_famed + value = 1 + } + } + } + } + else_if = { + limit = { rarity = illustrious } + scope:actor.house = { + if = { + limit = { + has_variable = ep3_legacy_domicile_artifact_counter_illustrious + } + change_variable = { + name = ep3_legacy_domicile_artifact_counter_illustrious + add = 1 + } + } + else = { + set_variable = { + name = ep3_legacy_domicile_artifact_counter_illustrious + value = 1 + } + } + } + } + } + } + + custom_tooltip = add_artifact_to_domicile_warning + hidden_effect = { + destroy_artifact = scope:target + house = { + if = { + limit = { + has_variable = ep3_legacy_domicile_artifact_counter + } + change_variable = { + name = ep3_legacy_domicile_artifact_counter + add = 1 + } + } + else = { + set_variable = { + name = ep3_legacy_domicile_artifact_counter + value = 1 + } + } + } + } + } + } + + auto_accept = yes + + # AI + ai_targets = { + ai_recipients = self + } + + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 84 + kingdom = 84 + empire = 84 + hegemony = 84 + } + + ai_will_do = { + base = 30 + } +} + +# Send an acknowledgment and reward for a governor's good performance +acknowledge_governor_interaction = { + category = interaction_category_vassal + filter_tags = { admin_governor } + + icon = icon_acknowledge_governor + common_interaction = no + interface_priority = 21 #right before mentor in governance + popup_on_receive = yes + + ai_targets = { + ai_recipients = vassals + max = 10 + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + desc = acknowledge_governor_interaction_desc + + is_available = { + highest_held_title_tier >= tier_empire + top_liege ?= this + government_has_mechanic = administrative + } + + is_shown = { + scope:actor != scope:recipient + scope:recipient = { + target_is_liege_or_above = scope:actor + highest_held_title_tier >= tier_duchy + government_has_mechanic = administrative + tgp_is_ceremonial_liege_trigger = no + } + } + + cooldown_against_recipient = { years = 10 } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + NOT = { + is_at_war_with = scope:recipient + } + } + scope:recipient = { + has_trait = governor + has_trait_xp = { + trait = governor + value >= 80 + } + } + } + + auto_accept = yes + + cost = { + influence = major_influence_value + } + + on_accept = { + scope:actor = { save_scope_as = emperor } + scope:recipient = { + trigger_event = { + id = ep3_interactions_events.0040 + days = 1 + } + } + custom_tooltip = acknowledge_governor_interaction_tt + show_as_tooltip = { + scope:actor = { + add_hook = { + target = scope:recipient + type = loyalty_hook + years = 5 + } + } + if = { + limit = { + scope:recipient = { is_ai = yes } + } + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = feeling_appreciated_opinion + opinion = 30 + } + } + } + } + } + + ai_will_do = { + base = 10 + modifier = { + scope:recipient.house ?= scope:actor.house + add = 10 + } + modifier = { + scope:recipient = { + is_close_family_of = scope:actor + } + add = 20 + } + modifier = { + scope:recipient = { + is_extended_family_of = scope:actor + } + add = 10 + } + modifier = { + scope:actor = { + has_relation_friend = scope:recipient + } + add = 10 + } + modifier = { + scope:actor = { + has_relation_best_friend = scope:recipient + } + add = 20 + } + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = -30 + } + opinion_modifier = { # Opinion Factor + who = scope:actor + opinion_target = scope:recipient + multiplier = 0.5 + } + modifier = { + scope:recipient = { + has_trait_xp = { + trait = governor + value >= 90 + } + } + factor = 1.5 + } + modifier = { + scope:recipient = { + has_trait_xp = { + trait = governor + value >= 100 + } + } + factor = 2 + } + modifier = { + scope:actor = { + has_strong_hook = scope:recipient + } + factor = 0.1 + } + + # More likely against fellow movement members - Or pro-hegemon movement if you are the hegemon + modifier = { + factor = { + value = 1.5 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 1.5 + } + } + is_in_same_movement_as = { TARGET = scope:recipient } + } + } +} + +# Affect Governor's performance / Bolster Governance +boost_efficiency_interaction = { + category = interaction_category_vassal + filter_tags = { admin_governor } + icon = icon_boost_efficiency + interface_priority = 19 + popup_on_receive = yes + common_interaction = no + + ai_targets = { + ai_recipients = peer_vassals + max = 15 + } + ai_targets = { + ai_recipients = vassals + max = 15 + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + desc = boost_efficiency_interaction_desc + + is_available = { + trigger_if = { + limit = { is_ai = yes } + government_has_mechanic = administrative + top_liege ?= { + any_vassal = { + is_governor = yes + this != root + } + } + } + } + + is_shown = { + scope:actor = { government_has_mechanic = administrative } + scope:recipient = { + government_has_mechanic = administrative + this != scope:actor + is_governor = yes + top_liege ?= scope:actor.top_liege + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + NOT = { is_at_war_with = scope:recipient } + } + trigger_if = { + limit = { + scope:actor = { + exists = top_participant_group:dynastic_cycle + } + } + scope:actor = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + } + } + custom_tooltip = { + text = boost_efficiency_interaction_too_high_tt + scope:recipient.governor_efficiency_presented <= boost_efficiency_maximum_value + } + custom_tooltip = { + text = efficiency_interaction_cooldown_tt + scope:recipient = { + NOR = { + is_target_in_variable_list = { + name = efficiency_boosters + target = scope:actor + } + is_target_in_variable_list = { + name = efficiency_damagers + target = scope:actor + } + } + } + } + } + + can_send = { + custom_tooltip = { + text = boost_efficiency_interaction_too_high_tt + scope:recipient.governor_efficiency_presented <= boost_efficiency_maximum_value + } + custom_tooltip = { + text = efficiency_interaction_cooldown_tt + scope:recipient = { + NOR = { + is_target_in_variable_list = { + name = efficiency_boosters + target = scope:actor + } + is_target_in_variable_list = { + name = efficiency_damagers + target = scope:actor + } + } + } + } + } + + cost = { + influence = { + value = { + value = minor_influence_value + desc = BASE + } + if = { + limit = { scope:influence_boost = yes } + add = { + value = scope:recipient.medium_influence_value + desc = influence_boost_desc + } + } + } + gold = { + value = 0 + if = { + limit = { scope:gold_boost = yes } + add = { + value = scope:recipient.medium_gold_value + desc = gold_boost_desc + } + } + } + } + + send_option = { + is_valid = { scope:actor.influence >= scope:recipient.medium_influence_gain } + localization = influence_boost_desc + flag = influence_boost + } + send_option = { + is_valid = { scope:actor.gold >= scope:recipient.medium_gold_value } + localization = gold_boost_desc + flag = gold_boost + } + send_option = { + localization = diplomacy_boost_desc + flag = diplomacy_boost + } + send_option = { + localization = stewardship_boost_desc + flag = stewardship_boost + } + send_option = { + localization = intrigue_boost_desc + flag = intrigue_boost + } + send_options_exclusive = yes + + on_send = { + scope:recipient = { + add_to_variable_list = { + name = efficiency_boosters + target = scope:actor + years = 2 + } + } + } + + auto_accept = yes + + on_accept = { + switch = { + trigger = yes + scope:diplomacy_boost = { + boost_governor_efficiency_duel_effect = { SKILL = diplomacy } + } + scope:stewardship_boost = { + boost_governor_efficiency_duel_effect = { SKILL = stewardship } + } + scope:intrigue_boost = { + boost_governor_efficiency_duel_effect = { SKILL = intrigue } + } + fallback = { boost_governor_efficiency_success_effect = yes } # Non-duel options always succeed + } + } + + ai_will_do = { + base = -10 + modifier = { # Boost house members + scope:recipient.house ?= scope:actor.house + add = 10 + } + modifier = { # Boost family + scope:recipient = { is_close_family_of = scope:actor } + add = 10 + } + modifier = { # Boost friends + scope:actor = { has_relation_friend = scope:recipient } + add = 10 + } + modifier = { # Boost elders/disciples + scope:actor = { + OR = { + has_relation_disciple = scope:recipient + has_relation_elder = scope:recipient + } + } + add = 10 + } + modifier = { # Avoid boosting rivals + scope:actor = { has_relation_rival = scope:recipient } + add = -25 + } + modifier = { # Avoid making potential house gains harder + scope:recipient = { + any_held_title = { + title_tier >= duchy + current_heir.house = scope:actor.house + scope:actor.house != scope:recipient.house + } + } + add = -10 + } + modifier = { # AI copy players they like + scope:recipient = { + any_in_list = { + variable = efficiency_boosters + is_ai = no + NOT = { has_relation_rival = scope:actor } + OR = { + has_relation_friend = scope:actor + AND = { + exists = house + scope:actor.house ?= house + } + is_close_family_of = scope:actor + } + } + } + add = 15 + } + modifier = { + scope:actor = { + is_in_same_movement_as = { TARGET = scope:recipient } + } + add = { + value = 10 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 1.5 + } + } + } + modifier = { + scope:actor = { + any_character_situation = { + situation_type = dynastic_cycle + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + add = 15 + } + opinion_modifier = { # Opinion Factor - boost for characters they like + who = scope:actor + opinion_target = scope:recipient + multiplier = 0.25 + } + } +} + +# Affect Governor's performance +damage_efficiency_interaction = { + category = interaction_category_vassal + filter_tags = { admin_governor } + + icon = icon_damage_efficiency + interface_priority = 18 #right after bolster governance + popup_on_receive = yes + + ai_targets = { + ai_recipients = peer_vassals + max = 15 + } + ai_targets = { + ai_recipients = vassals + max = 15 + } + ai_frequency_by_tier = { + barony = 0 + county = 72 + duchy = 48 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + desc = damage_efficiency_interaction_desc + + is_available = { + trigger_if = { + limit = { is_ai = yes } + government_has_mechanic = administrative + top_liege ?= { + any_vassal = { + is_governor = yes + this != root + } + } + } + } + + is_shown = { + scope:actor = { government_has_mechanic = administrative } + scope:recipient = { + is_governor = yes + this != scope:actor + top_liege ?= scope:actor.top_liege + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + NOT = { is_at_war_with = scope:recipient } + } + trigger_if = { + limit = { + scope:actor = { + exists = top_participant_group:dynastic_cycle + } + } + scope:actor = { + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = advancement_movement } + } + } + } + custom_tooltip = { + text = damage_efficiency_interaction_too_low_tt + scope:recipient.governor_efficiency_presented >= damage_efficiency_minimum_value + } + custom_tooltip = { + text = efficiency_interaction_cooldown_tt + scope:recipient = { + NOR = { + is_target_in_variable_list = { + name = efficiency_boosters + target = scope:actor + } + is_target_in_variable_list = { + name = efficiency_damagers + target = scope:actor + } + } + } + } + } + + can_send = { + custom_tooltip = { + text = damage_efficiency_interaction_too_low_tt + scope:recipient.governor_efficiency_presented >= damage_efficiency_minimum_value + } + custom_tooltip = { + text = efficiency_interaction_cooldown_tt + scope:recipient = { + NOR = { + is_target_in_variable_list = { + name = efficiency_boosters + target = scope:actor + } + is_target_in_variable_list = { + name = efficiency_damagers + target = scope:actor + } + } + } + } + } + + cost = { + influence = { + value = { + value = minor_influence_gain + desc = BASE + } + if = { + limit = { scope:influence_damage = yes } + add = { + value = scope:recipient.medium_influence_gain + desc = influence_damage_desc + } + } + } + gold = { + value = 0 + if = { + limit = { scope:gold_damage = yes } + add = { + value = scope:recipient.medium_gold_value + desc = gold_damage_desc + } + } + } + } + + send_option = { + is_valid = { scope:actor.influence >= scope:recipient.medium_influence_gain } + localization = influence_damage_desc + flag = influence_damage + } + send_option = { + is_valid = { scope:actor.gold >= scope:recipient.medium_gold_value } + localization = gold_damage_desc + flag = gold_damage + } + send_option = { + localization = diplomacy_damage_desc + flag = diplomacy_damage + } + send_option = { + localization = stewardship_damage_desc + flag = stewardship_damage + } + send_option = { + localization = intrigue_damage_desc + flag = intrigue_damage + } + send_options_exclusive = yes + + on_send = { + scope:recipient = { + add_to_variable_list = { + name = efficiency_damagers + target = scope:actor + years = 2 + } + } + } + + auto_accept = yes + + on_accept = { + switch = { + trigger = yes + scope:diplomacy_damage = { + damage_governor_efficiency_duel_effect = { SKILL = diplomacy } + } + scope:stewardship_damage = { + damage_governor_efficiency_duel_effect = { SKILL = stewardship } + } + scope:intrigue_damage = { + damage_governor_efficiency_duel_effect = { SKILL = intrigue } + } + fallback = { damage_governor_efficiency_success_effect = yes } # Non-duel options always succeed + } + } + + ai_will_do = { + base = -10 + modifier = { # Don't damage house members + scope:recipient.house ?= scope:actor.house + add = -10 + } + modifier = { # Don't damage close family + scope:recipient = { is_close_family_of = scope:actor } + add = -10 + } + modifier = { # Don't damage friends + scope:actor = { has_relation_friend = scope:recipient } + add = -10 + } + modifier = { # Don't damage elders/disciples + scope:actor = { + OR = { + has_relation_disciple = scope:recipient + has_relation_elder = scope:recipient + } + } + add = -10 + } + modifier = { # Damage rivals + scope:actor = { has_relation_rival = scope:recipient } + add = 15 + } + modifier = { # Damage when house stands to gain + scope:recipient = { + any_held_title = { + title_tier >= duchy + current_heir.house = scope:actor.house + scope:actor.house != scope:recipient.house + } + } + add = 10 + } + modifier = { # AI copy players they like + scope:recipient = { + any_in_list = { + variable = efficiency_damagers + is_ai = no + NOT = { has_relation_rival = scope:actor } + OR = { + has_relation_friend = scope:actor + AND = { + exists = house + scope:actor.house ?= house + } + is_close_family_of = scope:actor + } + } + } + add = 15 + } + modifier = { + scope:actor = { + any_character_situation = { + situation_type = dynastic_cycle + NOT = { situation_current_phase = situation_dynastic_cycle_phase_stability_advancement } + } + } + add = 15 + } + opinion_modifier = { # Opinion Factor - boost for characters they dislike + who = scope:actor + opinion_target = scope:recipient + multiplier = -0.25 + } + + # Avoid fellow movement members if possible (assuming they aren't rivals) + modifier = { + is_in_same_movement_as = { TARGET = scope:recipient } + NOT = { has_relation_rival = scope:recipient } + factor = { + value = 0.25 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 0.5 + } + } + } + } +} + +# Emperor fires Governor - AKA Depose Governor/depose_governor +governor_removal_interaction = { + category = interaction_category_succession + filter_tags = { admin_governor } + icon = icon_governor_removal + common_interaction = no + desc = governor_removal_interaction_desc + greeting = negative + notification_text = GOVERNOR_REMOVAL_NOTIFICATION_TEXT + popup_on_receive = yes + pause_on_receive = yes + cooldown_against_recipient = { years = 5 } + + auto_accept = yes + + is_available = { + government_has_mechanic = administrative + top_liege ?= this + trigger_if = { + limit = { is_ai = yes } + influence > massive_influence_value + is_at_war = no # Don't spend influence when at war in case troops are needed + } + } + + is_shown = { + scope:recipient = { + this != scope:actor + is_governor = yes + is_vassal_of = scope:actor + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { is_at_war_with = scope:recipient } + any_vassal = { + is_governor = yes + } + is_imprisoned = no + } + scope:recipient = { + trigger_if = { + limit = { + scope:actor = { + has_realm_law_flag = celestial_retirement_law + } + } + tgp_is_above_retirement_age_trigger = { + REALM_OWNER = scope:actor + } + } + } + } + + is_highlighted = { + scope:recipient ?= { + any_held_title = { + current_heir ?= { + OR = { + scope:actor ?= this + is_close_family_of = scope:actor + } + } + } + } + } + + highlighted_reason = HIGHLIGHTED_GOVERNOR_REMOVAL_HEIR + + can_send = { + scope:recipient != scope:actor + custom_tooltip = { + text = demand_governor_removal_dominant_family_tt + scope:recipient.house ?= { is_dominant_family = no } + } + } + + cost = { + influence = { + value = 0 + if = { + limit = { exists = scope:recipient } + scope:recipient ?= { + if = { + limit = { + any_held_title = { + title_tier = kingdom + is_landless_type_title = no + is_noble_family_title = no + } + } + add = { + every_held_title = { + title_tier = kingdom + limit = { + is_landless_type_title = no + is_noble_family_title = no + } + add = { + value = scope:recipient.massive_influence_value + multiply = 3 + } + } + desc = GOVERNOR_RESIGNATION_KINGDOM_COST + } + } + else_if = { + limit = { + any_held_title = { + title_tier = duchy + is_landless_type_title = no + is_noble_family_title = no + } + } + add = { + every_held_title = { + title_tier = duchy + limit = { + is_landless_type_title = no + is_noble_family_title = no + } + add = scope:recipient.massive_influence_value + } + desc = GOVERNOR_RESIGNATION_DUCHY_COST + } + } + if = { + limit = { house ?= { is_powerful_family = yes } } + add = { + value = scope:recipient.massive_influence_value + desc = GOVERNOR_RESIGNATION_POWERFUL_COST + } + } + else_if = { + limit = { house ?= { is_dominant_family = yes } } + add = { + value = scope:recipient.monumental_influence_value + desc = GOVERNOR_RESIGNATION_DOMINANT_COST + } + } + if = { + limit = { + scope:actor = { is_ai = no } # This cost is only for players due to performance reasons + } + if = { + limit = { + scope:recipient.governor_efficiency != 1 + } + add = { + value = -100 + add = { + value = scope:recipient.governor_efficiency + multiply = 100 + } + desc = GOVERNOR_RESIGNATION_EFFICIENCY_COST + } + } + } + if = { + limit = { + influence_level != 1 + } + add = { + value = { + value = influence_level + subtract = 1 + } + multiply = 50 + desc = GOVERNOR_RESIGNATION_INFLUENCE_LEVEL_COST + } + } + } + scope:actor = { + if = { + limit = { has_revoke_title_reason = scope:recipient } + multiply = { + value = 0.5 + desc = temporal_condemnation_got_revoke_reason # Reused loc + } + } + } + scope:recipient = { + if = { + limit = { + scope:actor = { + has_realm_law_flag = celestial_retirement_law + } + tgp_is_above_retirement_age_trigger = { REALM_OWNER = scope:actor } + } + multiply = { + value = 0.05 + desc = recipient_above_retirement_age_desc + } + } + } + } + } + } + + on_accept = { + scope:actor = { + if = { + limit = { + has_realm_law_flag = celestial_retirement_law + scope:recipient = { tgp_is_above_retirement_age_trigger = { REALM_OWNER = scope:actor } } + has_treasury = yes + } + save_scope_value_as = { + name = force_retirement_treasury_cost + value = scope:recipient.medium_treasury_value + } + pay_treasury_to_gold = { + target = scope:recipient + value = scope:force_retirement_treasury_cost + } + } + } + scope:recipient = { + if = { + limit = { + house ?= { + OR = { + is_powerful_family = yes + is_dominant_family = yes + } + } + can_set_relation_rival_trigger = { CHARACTER = scope:actor } + } + progress_towards_rival_effect = { + REASON = rival_deposed_governor + CHARACTER = scope:actor + OPINION = 0 + } + } + add_opinion = { + target = scope:actor + modifier = demanded_my_resignation_opinion + } + custom_tooltip = demanded_my_resignation_house_tt + hidden_effect = { + house ?= { + if = { + limit = { + this != scope:actor.house + } + every_house_member = { + custom = custom.every_house_member_secondary_recipient + limit = { + is_ai = yes + this != scope:recipient + } + if = { + limit = { + house = { + OR = { + is_powerful_family = yes + is_dominant_family = yes + } + } + } + add_opinion = { + target = scope:actor + modifier = demanded_my_house_members_resignation_opinion + opinion = -20 + } + } + else = { + add_opinion = { + target = scope:actor + modifier = demanded_my_house_members_resignation_opinion + opinion = -15 + } + } + } + } + } + } + if = { + limit = { + any_held_title = { + is_noble_family_title = no + current_heir ?= { + NOR = { + this = scope:actor + AND = { + exists = scope:recipient.house + house ?= scope:recipient.house + } + has_relation_friend = scope:recipient + has_relation_best_friend = scope:recipient + is_allied_to = scope:recipient + has_relation_soulmate = scope:recipient + is_spouse_of = scope:recipient + is_close_family_of = scope:recipient + } + opinion = { + target = scope:recipient + value <= 40 + } + } + } + } + every_held_title = { + limit = { + is_noble_family_title = no + current_heir ?= { + NOR = { + this = scope:actor + AND = { + exists = scope:recipient.house + house ?= scope:recipient.house + } + has_relation_friend = scope:recipient + has_relation_best_friend = scope:recipient + is_allied_to = scope:recipient + has_relation_soulmate = scope:recipient + is_spouse_of = scope:recipient + is_close_family_of = scope:recipient + } + opinion = { + target = scope:recipient + value <= 40 + } + } + } + current_heir = { + add_to_list = deposed_title_heirs + } + } + every_in_list = { + list = deposed_title_heirs + add_opinion = { + target = scope:actor + modifier = deposed_predecessor_opinion + } + } + } + trigger_event = ep3_interactions_events.0630 + show_as_tooltip = { + governor_resignation_title_transfer_effect = yes + # Create tooltips + every_held_title = { + limit = { + is_landless_type_title = no + is_noble_family_title = no + save_temporary_scope_as = liege_title + NOT = { + scope:resigner = { + any_held_title = { is_de_jure_liege_or_above_target = scope:liege_title } + } + } + } + save_scope_as = landed_title + current_heir = { save_scope_as = next_candidate } + if = { + limit = { tier >= scope:recipient.main_administrative_tier } + scope:next_candidate = { custom_tooltip = force_governor_removal_interaction_pass_effect_tt } + } + } + } + } + } + + on_decline = { + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = demanded_my_resignation_opinion + } + } + scope:actor = { + send_interface_toast = { + title = demand_governor_resignation_declined_toast + type = event_toast_effect_bad + left_icon = scope:recipient + revocation_tyranny_effect = { VASSAL = scope:recipient } + title_revocation_stress_effect = { VASSAL = scope:recipient } + } + } + war_for_revoke_effect = { + LIEGE = scope:actor + REBEL = scope:recipient + } + scope:actor = { + if = { + limit = { has_realm_law_flag = vassal_refusal_is_treason } + add_opinion = { + target = scope:recipient + modifier = treasonous_revoke_refusal + } + } + } + } + + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + can_be_blocked = { + custom_description = { #Hook from Recipient can counteract, but only if Actor is not forcing the action via Strong Hook. + text = "spending_hook" + subject = scope:recipient + object = scope:actor + scope:recipient = { has_hook = scope:actor } + NAND = { + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + } + + on_blocked_effect = { + scope:recipient = { + remove_hook = { target = scope:actor } + } + } + + # AI + ai_targets = { + ai_recipients = vassals + } + + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 6 + kingdom = 6 + empire = 6 + hegemony = 6 + } + + ai_will_do = { + base = -10 + modifier = { + scope:actor.house = scope:recipient.house + add = -50 + } + modifier = { + scope:actor = { has_relation_rival = scope:recipient } + add = 30 + } + modifier = { # Get rid of bad governors, but there is no point if the heir is worse + scope:recipient = { + governor_efficiency <= 0.7 + governor_efficiency < scope:recipient.primary_heir.governor_efficiency + } + add = 10 + } + modifier = { + scope:recipient = { + is_a_faction_member = yes + } + add = 20 + } + modifier = { + scope:recipient = { + governor_efficiency >= 1.25 + } + add = -10 + } + modifier = { + scope:recipient = { + has_trait = loyal + } + add = -10 + } + modifier = { + scope:recipient = { + has_trait = disloyal + } + add = 5 + } + modifier = { + scope:recipient = { + is_allied_to = scope:actor + } + add = -100 + } + modifier = { + scope:recipient = { + any_held_title = { + current_heir ?= { + house = scope:actor.house + this != scope:actor + } + } + } + add = 10 + } + opinion_modifier = { # Opinion Factor + who = scope:actor + opinion_target = scope:recipient + multiplier = -0.25 + } + } +} + +# Demand Emperor/liege fires target Governor - AKA Request Retirement/request_retirement +force_governor_removal_interaction = { + category = interaction_category_succession + filter_tags = { admin_governor dynastic_cycle } + icon = icon_force_governor_removal + desc = force_governor_removal_interaction_desc + interface_priority = 134 # right after Force Retirement + common_interaction = no + + greeting = positive + notification_text = DEMAND_GOVERNOR_REMOVAL_NOTIFICATION_TEXT + can_send_despite_rejection = yes + popup_on_receive = yes + pause_on_receive = yes + + cooldown = { years = 5 } + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_shown = { + scope:secondary_recipient ?= { + is_governor = yes + top_liege ?= scope:actor.top_liege + NOR = { + this = scope:actor + this = scope:recipient + } + trigger_if = { + limit = { + top_liege = { + NAND = { + highest_held_title_tier >= tier_hegemony + government_has_flag = government_is_celestial + } + } + } + is_vassal_of = scope:recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOR = { + is_at_war_with = scope:recipient + is_at_war_with = scope:secondary_recipient + } + } + scope:secondary_recipient = { + NOT = { is_at_war_with = scope:recipient } + } + scope:recipient = { + trigger_if = { + limit = { + top_liege = { + has_realm_law_flag = celestial_retirement_law + } + scope:actor = { + NOT = { has_title = title:e_minister_of_personnel } + } + } + tgp_is_above_retirement_age_trigger = { + REALM_OWNER = scope:recipient + } + } + is_imprisoned = no + } + } + + is_highlighted = { + scope:secondary_recipient ?= { + any_held_title = { + current_heir ?= { + OR = { + scope:actor ?= this + house ?= scope:actor.house + } + } + } + } + } + + highlighted_reason = HIGHLIGHTED_DEMAND_GOVERNOR_REMOVAL_HEIR + + can_send = { + scope:secondary_recipient != scope:actor + custom_tooltip = { + text = demand_governor_removal_dominant_family_tt + scope:secondary_recipient.house ?= { is_dominant_family = no } + } + scope:actor = { + NAND = { + is_ai = yes + scope:recipient = { has_character_flag = force_governor_resignation_ai_cooldown } + } + } + } + + can_be_picked = { + is_governor = yes + house ?= { is_dominant_family = no } + NOR = { + this = scope:actor + this = scope:recipient + } + any_held_title = { + is_landless_type_title = no + is_noble_family_title = no + } + } + + redirect = { + if = { + limit = { scope:recipient != scope:actor.top_liege } + scope:recipient = { save_scope_as = secondary_recipient } + } + if = { + limit = { + scope:actor.top_liege ?= { + highest_held_title_tier >= tier_hegemony + government_has_flag = government_is_celestial + exists = cp:minister_personnel + } + } + scope:actor.top_liege.cp:minister_personnel = { save_scope_as = recipient } + } + else = { + scope:actor.top_liege ?= { save_scope_as = recipient } + } + } + + populate_recipient_list = { + scope:recipient = { + every_vassal = { + limit = { + exists = house + is_governor = yes + this != scope:actor + } + add_to_list = characters + } + } + } + + cost = { + influence = { + value = 0 + if = { + limit = { exists = scope:secondary_recipient } + scope:secondary_recipient ?= { + if = { + limit = { + any_held_title = { + title_tier = duchy + is_landless_type_title = no + is_noble_family_title = no + } + } + add = { + value = 0 + every_held_title = { + title_tier = duchy + limit = { + is_landless_type_title = no + is_noble_family_title = no + } + add = scope:secondary_recipient.massive_influence_value + } + desc = DEMAND_GOVERNOR_RESIGNATION_DUCHY_COST + } + } + if = { + limit = { + any_held_title = { + title_tier = kingdom + is_landless_type_title = no + is_noble_family_title = no + } + } + add = { + value = 0 + every_held_title = { + title_tier = kingdom + limit = { + is_landless_type_title = no + is_noble_family_title = no + } + add = { + value = scope:secondary_recipient.massive_influence_value + multiply = 2 + } + } + desc = DEMAND_GOVERNOR_RESIGNATION_KINGDOM_COST + } + } + if = { + limit = { house ?= { is_powerful_family = yes } } + add = { + value = scope:secondary_recipient.massive_influence_value + desc = DEMAND_GOVERNOR_RESIGNATION_POWERFUL_COST + } + } + else_if = { + limit = { house ?= { is_dominant_family = yes } } + add = { + value = scope:secondary_recipient.monumental_influence_value + desc = DEMAND_GOVERNOR_RESIGNATION_DOMINANT_COST + } + } + else_if = { + limit = { scope:secondary_recipient.governor_efficiency > 1 } + add = { + value = -100 + add = { + value = scope:secondary_recipient.governor_efficiency + multiply = 100 + } + desc = DEMAND_GOVERNOR_RESIGNATION_EFFICIENCY_COST + } + } + if = { + limit = { + influence_level != 1 + } + add = { + value = { + value = influence_level + subtract = 1 + } + multiply = 50 + desc = DEMAND_GOVERNOR_RESIGNATION_INFLUENCE_LEVEL_COST + } + } + if = { + limit = { tgp_is_above_retirement_age_trigger = { REALM_OWNER = scope:actor } } + multiply = { + value = 1 + subtract = { + add = age + subtract = retirement_age_current_value + divide = 100 + } + min = 0.1 # No less than 10% + desc = recipient_above_retirement_age_desc + } + } + } + } + } + } + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = force_governor_resignation_accepted_toast + left_icon = scope:secondary_recipient + right_icon = scope:recipient + if = { + limit = { scope:criminal_secret_recipient = yes} + scope:actor = { + random_known_secret = { + limit = { + secret_owner = scope:recipient + is_criminal_for = scope:recipient + can_be_exposed_by = scope:actor + } + disable_exposure_by = scope:actor + } + } + } + if = { + limit = { scope:criminal_secret_secondary_recipient = yes } + scope:actor = { + random_known_secret = { + limit = { + secret_owner = scope:secondary_recipient + is_criminal_for = scope:secondary_recipient + can_be_exposed_by = scope:actor + NOT = { is_known_by = scope:recipient } + } + reveal_to = scope:recipient + disable_exposure_by = scope:actor + } + } + } + scope:secondary_recipient ?= { + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:actor + modifier = forced_my_resignation_opinion + } + } + progress_towards_rival_effect = { + REASON = rival_forced_my_resignation_reason + CHARACTER = scope:actor + OPINION = default_rival_opinion + } + house ?= { + if = { + limit = { this != scope:actor.house } + change_house_relation_effect = { + HOUSE = scope:actor.house + VALUE = house_relation_damage_medium_value + REASON = forced_resignation + CHAR = scope:actor + TARGET_CHAR = scope:secondary_recipient + TITLE = scope:secondary_recipient.primary_title + } + every_house_member = { + custom = custom.every_house_member_secondary_recipient + limit = { + is_ai = yes + this != scope:secondary_recipient + } + add_opinion = { + target = scope:actor + modifier = forced_my_house_members_resignation_opinion + } + } + } + } + governor_resignation_title_transfer_effect = yes + } + } + if = { + limit = { scope:influence = yes } + change_influence = massive_influence_loss + } + } + } + + on_decline = { + scope:secondary_recipient ?= { + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:actor + modifier = attempted_force_my_resignation_opinion + } + add_opinion = { + target = scope:recipient + modifier = blocked_my_resignation_opinion + } + } + custom_tooltip = demanded_my_resignation_blocked_house_tt + hidden_effect = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = force_governor_resignation_vetoed_toast + left_icon = scope:secondary_recipient + right_icon = scope:recipient + scope:secondary_recipient = { + send_interface_toast = { + type = event_toast_effect_good + title = force_governor_resignation_vetoed_toast + left_icon = scope:actor + right_icon = scope:recipient + scope:recipient = { change_influence = medium_influence_loss } + house ?= { + every_house_member = { + custom = custom.every_house_member_secondary_recipient + limit = { + is_ai = yes + NOR = { + this = scope:secondary_recipient + this = scope:actor + this = scope:recipient + } + } + if = { + limit = { + NOT = { scope:actor.house ?= scope:secondary_recipient.house } + } + add_opinion = { + target = scope:actor + modifier = attempted_force_my_house_members_resignation_opinion + } + } + if = { + limit = { + NOT = { scope:recipient.house ?= scope:secondary_recipient.house } + } + add_opinion = { + target = scope:recipient + modifier = blocked_my_house_members_resignation_opinion + } + } + } + } + } + } + } + } + } + } + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = force_governor_resignation_declined_toast + left_icon = scope:secondary_recipient + right_icon = scope:recipient + scope:recipient = { + title_revocation_stress_effect = { VASSAL = scope:secondary_recipient } + + if = { + limit = { has_realm_law_flag = vassal_refusal_is_treason } + add_opinion = { + target = scope:secondary_recipient + modifier = treasonous_revoke_refusal + } + } + if = { + limit = { scope:criminal_secret_recipient = yes} + scope:actor = { + random_known_secret = { + limit = { + secret_owner = scope:recipient + is_criminal_for = scope:recipient + can_be_exposed_by = scope:actor + } + expose_secret = scope:actor + } + } + } + } + } + } + } + + on_send = { + scope:actor.top_liege = { + add_character_flag = { + flag = force_governor_resignation_ai_cooldown + months = 6 + } + } + } + + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + send_option = { + flag = influence + is_valid = { + scope:actor.influence >= massive_influence_value + scope:actor = { + government_has_flag = government_has_influence #If I do not use influence then this option is unavailable, even if my character has influence I cannot see + } + } + localization = SPEND_INFLUENCE + } + send_option = { + flag = criminal_secret_recipient + is_shown = { + scope:recipient = { + any_secret = { + is_criminal_for = scope:recipient + is_known_by = scope:actor + can_be_exposed_by = scope:actor + } + } + } + localization = LEVERAGE_CRIMINAL_SECRET_RECIPIENT + } + send_option = { + flag = criminal_secret_secondary_recipient + is_shown = { + scope:secondary_recipient ?= { + any_secret = { + is_criminal_for = scope:secondary_recipient + is_known_by = scope:actor + can_be_exposed_by = scope:actor + NOT = { is_known_by = scope:recipient } + } + } + } + localization = LEVERAGE_CRIMINAL_SECRET_SECONDARY_RECIPIENT + } + + send_options_exclusive = no + + can_be_blocked = { + custom_description = { #Hook from Recipient can counteract, but only if Actor is not forcing the action via Strong Hook. + text = "spending_hook" + subject = scope:recipient + object = scope:actor + scope:recipient = { has_hook = scope:actor } + NAND = { + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + } + + on_blocked_effect = { + scope:recipient = { + remove_hook = { target = scope:actor } + } + } + + # AI + ai_targets = { + ai_recipients = peer_vassals + max = 10 + } + ai_targets = { + ai_recipients = liege + } + + ai_frequency_by_tier = { + barony = 0 + county = 180 + duchy = 60 + kingdom = 24 + empire = 12 + hegemony = 12 + } + + is_available = { + government_has_mechanic = administrative + trigger_if = { + limit = { + is_ai = yes + } + influence > massive_influence_value + } + top_liege != this + top_liege ?= { government_has_mechanic = administrative } + } + + ai_accept = { + base = -50 + # SEND OPTIONS + modifier = { + scope:hook = yes + add = 30 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + desc = INFLUENCE_REASON + scope:influence = yes + add = { + value = 20 + multiply = scope:actor.influence_level + min = 5 + } + } + modifier = { + desc = RECIPIENT_SECRET + scope:criminal_secret_recipient = yes + add = 50 + } + modifier = { + desc = SECONDARY_RECIPIENT_SECRET + scope:criminal_secret_secondary_recipient = yes + add = 50 + } + + modifier = { + add = { + value = -100 + add = { + value = scope:secondary_recipient.governor_efficiency + multiply = 100 + } + multiply = -1 + round = yes + } + desc = SECONDARY_RECIPIENT_GOVERNOR_EFFICIENCY + } + modifier = { + scope:secondary_recipient.dynasty = scope:recipient.dynasty + scope:secondary_recipient.house != scope:recipient.house + NOT = { + scope:secondary_recipient = { is_close_family_of = scope:recipient } + } + add = -30 + desc = THEY_ARE_MY_HOUSE_MEMBER + } + modifier = { + scope:secondary_recipient.house = scope:recipient.house + NOT = { + scope:secondary_recipient = { is_close_family_of = scope:recipient } + } + add = -50 + desc = THEY_ARE_MY_HOUSE_MEMBER + } + modifier = { + scope:secondary_recipient = { is_close_family_of = scope:recipient } + add = -70 + desc = THEY_ARE_MY_CLOSE_FAMILY + } + modifier = { + scope:secondary_recipient = { is_councillor = yes } + add = -15 + desc = THEY_ARE_MY_COUNCILLOR + } + modifier = { + scope:recipient = { is_spouse_of = scope:secondary_recipient } + add = -25 + desc = THEY_ARE_MY_SPOUSE + } + modifier = { + scope:recipient = { has_relation_friend = scope:secondary_recipient } + add = -30 + desc = THEY_ARE_MY_FRIEND + } + modifier = { + scope:recipient = { has_relation_rival = scope:secondary_recipient } + add = 25 + desc = THEY_ARE_MY_RIVAL + } + modifier = { + scope:secondary_recipient.house = { + is_powerful_family = yes + NOR = { + this = scope:actor.house + this = scope:intermediary.house + } + } + add = -20 + desc = TARGET_FAMILY_IS_POWERFUL + } + modifier = { + scope:actor.house = { + is_powerful_family = yes + NOR = { + this = scope:actor.house + this = scope:intermediary.house + } + } + add = 20 + desc = YOUR_FAMILY_IS_POWERFUL + } + modifier = { + scope:actor.house = { + is_dominant_family = yes + this != scope:recipient.house + } + add = 30 + desc = YOUR_FAMILY_IS_DOMINANT + } + modifier = { + scope:secondary_recipient.house = { + is_dominant_family = yes + this != scope:recipient.house + } + add = -30 + desc = TARGET_FAMILY_IS_DOMINANT + } + modifier = { + scope:secondary_recipient = { + house != scope:recipient.house + any_held_title = { + current_heir ?= { + is_close_family_of = scope:recipient + this != scope:recipient + } + } + } + add = 30 + desc = THEIR_HOUSE_MEMBER_STANDS_TO_INHERIT + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:secondary_recipient + multiplier = -0.5 + } + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + } + # Retirement Age - AI is more likely to accept if target is above the retirement age, IF they don't like the character in question + modifier = { + scope:secondary_recipient = { + tgp_is_above_retirement_age_trigger = { REALM_OWNER = scope:actor } + NOR = { + has_relation_friend = scope:recipient + has_relation_lover = scope:recipient + has_relation_disciple = scope:recipient + has_relation_elder = scope:recipient + house ?= scope:recipient.house + } + } + add = { + value = scope:secondary_recipient.age + subtract = scope:secondary_recipient.retirement_age_current_value + } + desc = recipient_above_retirement_age_value_desc + } + } + auto_accept = { + trigger_if = { + limit = { + scope:hook ?= yes + scope:actor = { has_strong_hook = scope:recipient } + } + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook ?= yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + trigger_else = { always = no } + } + + ai_will_do = { + base = -10 + modifier = { + scope:actor.house = scope:recipient.house + add = -50 + } + modifier = { + scope:actor = { has_relation_rival = scope:secondary_recipient } + add = 10 + } + modifier = { + scope:secondary_recipient = { + any_held_title = { current_heir.house ?= scope:actor.house } + } + add = 10 + } + modifier = { + scope:actor = { + OR = { + has_relation_friend = scope:secondary_recipient + has_relation_lover = scope:secondary_recipient + is_spouse_of = scope:secondary_recipient + is_close_family_of = scope:secondary_recipient + } + } + add = -50 + } + + # Avoid fellow movement members + modifier = { + is_in_same_movement_as = { TARGET = scope:recipient } + add = { + value = -20 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 1.5 + } + } + } + } +} + +# Force Step Down - AKA Force Retirement +force_step_down_interaction = { + icon = icon_force_to_step_down + common_interaction = no + interface_priority = 135 + category = interaction_category_succession + + filter_tags = { admin_governor } + + cooldown_against_recipient = { years = 5 } + + target_type = title + target_filter = recipient_domain_titles + can_be_picked_title = { + scope:target = { + tier = scope:recipient.main_administrative_tier + is_noble_family_title = no + } + } + has_valid_target_showing_failures_only = { + scope:target = { + tier = scope:recipient.main_administrative_tier + is_noble_family_title = no + } + } + + ai_target_quick_trigger = { adult = yes } + ai_targets = { + ai_recipients = vassals + ai_recipients = peer_vassals + max = 10 + } + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + popup_on_receive = yes + + greeting = negative + notification_text = FORCE_STEP_DOWN_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + ai_frequency_by_tier = { + barony = 0 + county = 180 + duchy = 180 + kingdom = 180 + empire = 180 + hegemony = 0 + } + + is_available = { + government_has_mechanic = administrative + trigger_if = { + limit = { is_ai = yes } + highest_held_title_tier >= tier_duchy + NOT = { + any_scheme = { + is_scheme_category = political + } + } + } + top_liege != this + } + + is_shown = { + scope:actor = { + this != scope:recipient + } + scope:recipient = { + government_has_mechanic = administrative + is_governor = yes + top_liege ?= scope:actor.top_liege + } + } + + is_highlighted = { + scope:recipient ?= { + any_held_title = { + current_heir ?= { + OR = { + scope:actor ?= this + house ?= scope:actor.house + } + } + } + } + } + + highlighted_reason = HIGHLIGHTED_FORCE_STEP_DOWN_HEIR + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + is_imprisoned = no + is_in_civil_war = no + } + scope:recipient = { + is_in_civil_war = no + trigger_if = { + limit = { + top_liege = { + has_realm_law_flag = celestial_retirement_law + } + scope:actor = { + NOT = { has_title = title:e_minister_of_personnel } + } + } + tgp_is_above_retirement_age_trigger = { + REALM_OWNER = scope:recipient + } + } + } + } + + desc = scheme_interaction_tt_force_step_down_approved + + send_options_exclusive = no + send_option = { + flag = hook + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + NOT = { + scope:recipient = { has_hook = scope:actor } + } + } + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + send_option = { + flag = influence + is_shown = { + scope:actor = { government_has_flag = government_has_influence } #If I do not use influence then this option is unavailable, even if my character has influence I cannot see + } + is_valid = { + scope:actor = { + government_has_flag = government_has_influence #If I do not use influence then this option is unavailable, even if my character has influence I cannot see + influence >= force_step_down_interaction_influence_cost_value + } + } + localization = SPEND_INFLUENCE + } + send_option = { + flag = gold + is_valid = { scope:actor.gold >= force_step_down_interaction_gold_cost_value } + localization = GENERIC_SPEND_GOLD + } + send_option = { + flag = criminal_secret_recipient + is_shown = { + scope:recipient = { + any_secret = { + is_criminal_for = scope:recipient + is_known_by = scope:actor + can_be_exposed_by = scope:actor + } + } + } + localization = LEVERAGE_CRIMINAL_SECRET_RECIPIENT + } + + on_accept = { + scope:actor = { + if = { + limit = { scope:hook = yes } + use_hook = scope:recipient + } + if = { + limit = { scope:gold = yes } + pay_short_term_gold = { + target = scope:recipient + gold = force_step_down_interaction_gold_cost_value + } + } + if = { + limit = { scope:influence = yes } + change_influence = force_step_down_interaction_influence_cost_value + } + if = { + limit = { scope:criminal_secret_recipient = yes} + scope:actor = { + random_known_secret = { + limit = { + secret_owner = scope:recipient + is_criminal_for = scope:recipient + can_be_exposed_by = scope:actor + } + disable_exposure_by = scope:actor + } + } + } + send_interface_toast = { + type = event_toast_effect_good + title = force_governor_resignation_accepted_toast + left_icon = scope:target + right_icon = scope:recipient + scope:recipient = { + custom_tooltip = loses_target_title_tt + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:actor + modifier = forced_my_resignation_opinion + } + } + if = { + limit = { can_set_relation_rival_trigger = { CHARACTER = scope:actor } } + set_relation_rival = { + target = scope:actor + reason = rival_forced_my_resignation_reason + } + } + house ?= { + if = { + limit = { + this != scope:actor.house + } + change_house_relation_effect = { + HOUSE = scope:actor.house + VALUE = house_relation_damage_medium_value + REASON = forced_resignation + CHAR = scope:actor + TARGET_CHAR = scope:recipient + TITLE = scope:recipient.primary_title + } + every_house_member = { + custom = custom.every_house_member_recipient + limit = { + is_ai = yes + this != scope:secondary_recipient + } + add_opinion = { + target = scope:actor + modifier = forced_my_house_members_resignation_opinion + } + } + } + } + hidden_effect = { force_step_down_landed_titles = yes } + } + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = force_governor_resignation_declined_toast + left_icon = scope:target + right_icon = scope:recipient + + change_influence = major_influence_loss + add_prestige = medium_prestige_loss + scope:recipient = { + add_opinion = { + target = scope:actor + modifier = attempted_force_step_down_opinion + } + if = { + limit = { can_set_relation_rival_trigger = { CHARACTER = scope:actor } } + set_relation_rival = { + target = scope:actor + reason = rival_attempted_to_force_my_resignation_reason + } + } + } + if = { + limit = { scope:criminal_secret_recipient = yes} + scope:actor = { + random_known_secret = { + limit = { + secret_owner = scope:recipient + is_criminal_for = scope:recipient + can_be_exposed_by = scope:actor + } + expose_secret = scope:actor + } + } + } + } + scope:recipient.house ?= { + if = { + limit = { this != scope:actor.house } + every_house_member = { + custom = custom.every_house_member_recipient + limit = { + is_ai = yes + this != scope:secondary_recipient + } + add_opinion = { + target = scope:actor + modifier = demanded_my_house_members_resignation_opinion + opinion = -10 + } + } + } + } + } + } + + auto_accept = { + trigger_if = { + limit = { + scope:hook ?= yes + scope:actor = { has_strong_hook = scope:recipient } + } + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook ?= yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + trigger_else = { always = no } + } + + ai_accept = { + base = 0 + + # SEND OPTIONS + modifier = { + scope:hook = yes + add = 30 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + desc = INFLUENCE_REASON + scope:influence = yes + add = { + value = 20 + multiply = scope:actor.influence_level + min = 5 + } + } + modifier = { + desc = GOLD_REASON + scope:gold = yes + add = 30 + } + modifier = { + desc = RECIPIENT_SECRET + scope:criminal_secret_recipient = yes + add = 50 + } + + # TRAITS + modifier = { + scope:recipient = { has_trait = craven } + add = 10 + desc = INTERACTION_CRAVEN + } + modifier = { + scope:recipient = { has_trait = trusting } + add = 5 + desc = INTERACTION_TRUSTING + } + modifier = { + scope:recipient = { has_trait = generous } + add = 5 + desc = INTERACTION_GENEROUS + } + modifier = { + scope:recipient = { has_trait = lazy } + add = 10 + desc = INTERACTION_LAZY + } + modifier = { + scope:recipient = { has_trait = paranoid } + add = -20 + desc = INTERACTION_PARANOID + } + modifier = { + scope:recipient = { has_trait = patient } + add = -5 + desc = INTERACTION_PATIENT + } + modifier = { + scope:recipient = { has_trait = brave } + add = -10 + desc = INTERACTION_BRAVE + } + modifier = { + scope:recipient = { has_trait = greedy } + add = -10 + desc = INTERACTION_GREEDY + } + modifier = { + scope:recipient = { has_trait = ambitious } + add = -20 + desc = INTERACTION_AMBITIOUS + } + modifier = { + scope:recipient = { + is_any_movement_leader = yes + } + add = -20 + desc = recipient_is_any_movement_leader + } + modifier = { + exists = scope:recipient.var:movement_power + scope:recipient.var:movement_power >= high_movement_power_value + add = -20 + desc = recipient_has_high_movement_power + } + + # INTRIGUE COMPARISON + modifier = { + add = { + value = scope:actor.intrigue + multiply = 2 + } + desc = INTERACTION_ACTOR_INTRIGUE + } + modifier = { + add = { + value = scope:recipient.intrigue + multiply = -2 + } + desc = INTERACTION_RECIPIENT_INTRIGUE + } + } + + ai_will_do = { + base = -200 + + opinion_modifier = { + who = scope:actor + opinion_target = scope:recipient + multiplier = -1 + } + + modifier = { # AI should really only use this if they have a house member in line for the title + scope:actor.house = { + any_house_member = { + scope:recipient.primary_title = { + place_in_line_of_succession = { + target = prev + value <= 3 + } + } + } + } + add = 100 + } + + #Personality + modifier = { + scope:actor = { has_trait = vengeful } + add = 10 + } + + modifier = { + scope:actor = { has_trait = deceitful } + add = 10 + } + + modifier = { + scope:actor = { has_trait = honest } + add = -10 + } + + # House & Family + modifier = { + scope:actor = { is_close_family_of = scope:recipient } + add = -500 + } + modifier = { + scope:actor.house = scope:recipient.house + add = -500 + } + + #Feuds + modifier = { + scope:actor = { + house_has_feud_relation_with_trigger = { TARGET = scope:recipient } + + } + add = 75 + } + + # Relationships + modifier = { + add = 25 + scope:actor = { + has_any_mild_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + + modifier = { + add = 50 + scope:actor = { + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + + modifier = { + add = 100 + scope:actor = { + has_any_worst_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + + modifier = { + add = -50 + scope:actor = { + has_any_mild_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + + modifier = { + add = -100 + scope:actor = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + + modifier = { + factor = 0 + scope:actor = { + has_any_best_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + + # Avoid fellow movement members if possible (assuming they aren't rivals) + modifier = { + factor = { + value = 0.25 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 0.5 + } + } + is_in_same_movement_as = { TARGET = scope:recipient } + NOT = { has_relation_rival = scope:recipient } + } + } +} + +# Ask for Governorship / Request a governorship from your liege +request_governorship_interaction = { + category = interaction_category_vassal + icon = icon_request_governorship + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor.top_liege = { + tgp_has_access_to_ministry_trigger = yes + exists = cp:minister_personnel + } + } + desc = request_governorship_interaction_celestial_desc + } + desc = request_governorship_interaction_desc + } + } + common_interaction = yes + + filter_tags = { admin_liege celestial_ministry dynastic_cycle } + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + popup_on_receive = yes + + greeting = positive + notification_text = { + first_valid = { + triggered_desc = { + trigger = { + scope:recipient = { tgp_is_ceremonial_regent_trigger = yes } + } + desc = REQUEST_GOVERNORSHIP_PROPOSAL_REGENT + } + desc = REQUEST_GOVERNORSHIP_PROPOSAL + } + } + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + ai_targets = { ai_recipients = liege } + ai_target_quick_trigger = { adult = yes } + ai_frequency_by_tier = { + barony = 0 + county = 36 + duchy = 36 + kingdom = 0 + empire = 0 + hegemony = 0 + } + + cooldown_against_recipient = { years = 10 } + + redirect = { + scope:recipient = { save_scope_as = secondary_recipient } + } + + cost = { + influence = { + add = { + add = { + value = scope:actor.monumental_influence_value + multiply = 2 + } + desc = BASE + } + # Province Size + add = { + value = 0 + if = { + limit = { exists = scope:target } + scope:target = { + every_de_jure_county = { add = 10 } + } + } + multiply = 2 + desc = province_size_desc + } + # Being a Powerful or Dominant Family reduces the cost significantly + scope:actor.house = { + if = { + limit = { is_dominant_family = yes } + multiply = { + value = 0.25 + desc = is_dominant_family_desc + } + } + else_if = { + limit = { is_powerful_family = yes } + multiply = { + value = 0.5 + desc = is_powerful_family_desc + } + } + } + # Only asking for candidate score + scope:target = { + if = { + limit = { + exists = holder + holder != scope:recipient + } + multiply = { + value = 0.5 + desc = candidacy_request_desc + } + } + } + } + } + + is_available = { + government_has_mechanic = administrative + this != top_liege + trigger_if = { + limit = { is_ai = yes } + top_liege = { + NOT = { has_character_flag = refused_governorship_request } + } + } + } + + is_shown = { + scope:recipient != scope:actor + OR = { + scope:recipient = scope:actor.top_liege + scope:recipient = { + liege ?= scope:actor.top_liege + has_title = title:e_minister_of_personnel + } + } + scope:recipient = { + government_has_mechanic = administrative + } + } + + redirect = { + if = { + limit = { + scope:actor.top_liege = { + tgp_has_access_to_ministry_trigger = yes + exists = cp:minister_personnel + } + } + title:e_minister_of_personnel.holder ?= { + save_scope_as = recipient + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + is_landed = no + is_governor = no + tgp_is_ceremonial_liege_trigger = no + NOT = { is_at_war_with = scope:recipient } + custom_tooltip = { + text = is_a_minister_desc + tgp_is_any_minister = no + } + } + } + + target_type = title + target_filter = secondary_recipient_top_liege_de_jure_titles + + can_be_picked_title = { + scope:target = { + trigger_if = { + limit = { scope:actor.main_administrative_tier = tier_county } + custom_tooltip = { + text = request_governorship_interaction_tier_county_tt + tier >= scope:actor.main_administrative_tier + } + } + trigger_else = { + custom_tooltip = { + text = request_governorship_interaction_tier_tt + tier >= scope:actor.main_administrative_tier + } + } + custom_tooltip = { + text = request_governorship_interaction_tier_cap_tt + tier < scope:actor.top_liege.highest_held_title_tier + } + + trigger_if = { + limit = { is_title_created = no } + custom_tooltip = { + text = request_governorship_interaction_created_tt + any_de_jure_county = { holder = scope:actor.top_liege } + } + trigger_if = { + limit = { tier = tier_kingdom } + scope:actor.top_liege = { japan_government_japan_kingdom_restriction_trigger = yes } + } + } + custom_tooltip = { + text = request_governorship_interaction_liege_duchy_tt + NOT = { + any_de_jure_county = { this = scope:actor.top_liege.capital_county } + } + } + trigger_if = { + limit = { scope:target.holder ?= scope:actor.top_liege } + custom_tooltip = { + text = request_governorship_interaction_county_tt + any_de_jure_county = { holder = scope:actor.top_liege } + } + } + + trigger_if = { + limit = { + min_appointment_level > 0 + } + scope:actor = { has_appointment_level_for_title = scope:target } + } + } + } + + has_valid_target_showing_failures_only = { + exists = scope:target + scope:target = { + tier >= scope:actor.top_liege.main_administrative_tier + tier < scope:actor.top_liege.highest_held_title_tier + trigger_if = { + limit = { exists = holder } + # Only show titles held by admin governors within the realm + holder ?= { + government_has_mechanic = administrative + top_liege = scope:actor.top_liege + } + # If the target title is a military or civilian province, make sure actor uses the correct career pool + trigger_if = { + limit = { + holder = { + OR = { + vassal_contract_has_flag = celestial_military_appointment + vassal_contract_has_flag = meritocratic_military_appointment + } + } + scope:actor = { + government_has_mechanic = administrative + government_allows = merit + } + } + scope:actor = { is_military_candidate_trigger = yes } + } + trigger_if = { + limit = { + holder = { + OR = { + vassal_contract_has_flag = celestial_civil_appointment + vassal_contract_has_flag = meritocratic_civil_appointment + } + } + scope:actor = { + government_has_mechanic = administrative + government_allows = merit + } + } + scope:actor = { is_civilian_candidate_trigger = yes } + } + } + # If recipient isn't the top liege, we don't show uncreated titles or titles held by the top liege + trigger_if = { + limit = { + scope:recipient != scope:actor.top_liege + } + exists = holder + holder != scope:actor.top_liege + } + is_landless_type_title = no + } + } + + can_send = { + scope:actor = { + is_landed = no + } + trigger_if = { + limit = { exists = scope:target } + trigger_if = { + limit = { + scope:target = { is_title_created = yes } + } + is_appointment_valid_trigger = { + TITLE = scope:target + CANDIDATE = scope:actor + TOP_LIEGE = scope:recipient + } + } + } + } + + on_send = { + save_scope_value_as = { + name = influence_cost + value = { + add = { + add = { + value = scope:actor.monumental_influence_value + multiply = 2 + } + desc = BASE + } + # Province Size + add = { + value = 0 + if = { + limit = { exists = scope:target } + scope:target = { + every_de_jure_county = { add = 10 } + } + } + multiply = 2 + desc = province_size_desc + } + # Being a Powerful or Dominant Family reduces the cost significantly + scope:actor.house = { + if = { + limit = { is_dominant_family = yes } + multiply = { + value = 0.25 + desc = is_dominant_family_desc + } + } + else_if = { + limit = { is_powerful_family = yes } + multiply = { + value = 0.5 + desc = is_powerful_family_desc + } + } + } + # Only asking for candidate score + scope:target = { + if = { + limit = { + exists = holder + holder != scope:recipient + } + multiply = { + value = 0.5 + desc = candidacy_request_desc + } + } + } + } + } + } + + on_accept = { + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = request_governorship_interaction_toast_liege + left_icon = scope:actor + right_icon = scope:target + change_influence = massive_influence_gain + scope:actor = { + # Grant title if held by Liege or uncreated but de jure land is held + if = { + limit = { + scope:target = { + OR = { + is_title_created = no + holder ?= scope:recipient + } + } + } + send_interface_toast = { + type = event_toast_effect_good + title = request_governorship_interaction_toast_granted + left_icon = scope:target + right_icon = scope:recipient + # Create Title if necessary + hidden_effect = { + scope:target ?= { + if = { + limit = { is_title_created = no } + create_title_and_vassal_change = { + type = created + save_scope_as = creation_change + } + change_title_holder = { + holder = scope:recipient + change = scope:creation_change + } + resolve_title_and_vassal_change = scope:creation_change + } + } + } + # Move Titles + create_title_and_vassal_change = { + type = appointment + save_scope_as = grant_change + } + scope:target = { + # Transfer counties + hidden_effect = { + every_de_jure_county = { + limit = { holder = scope:recipient } + change_title_holder = { + holder = scope:actor + change = scope:grant_change + } + } + } + # Transfer governorship + change_title_holder_include_vassals = { + holder = scope:actor + change = scope:grant_change + } + } + resolve_title_and_vassal_change = scope:grant_change + } + } + # Grant Appointment score if already has a Governor + else = { + send_interface_toast = { + type = event_toast_effect_good + title = request_governorship_interaction_toast_candidacy + left_icon = scope:target + right_icon = scope:recipient + scope:target ?= { + change_appointment_investment = { + target = scope:actor + investor = scope:recipient + value = appointment_major_influence_cost + } + } + } + scope:target = { + ordered_title_heir = { + limit = { + NOR = { + house ?= scope:actor.house + house ?= scope:recipient.house + } + } + order_by = "appointment_candidate_score(scope:target)" + check_range_bounds = no + max = 3 + if = { + limit = { + is_house_head = no + exists = house.house_head + NOR = { + house.house_head = scope:actor + house.house_head = scope:recipient + } + } + house.house_head = { + if = { + limit = { + NOT = { is_in_list = governorship_house_head_opinion } + } + add_to_list = governorship_house_head_opinion + } + } + } + else = { add_to_list = governorship_direct_opinion } + } + } + every_in_list = { + list = governorship_direct_opinion + add_opinion = { + target = scope:actor + modifier = requested_heired_governorship + } + } + every_in_list = { + list = governorship_house_head_opinion + add_opinion = { + target = scope:actor + modifier = requested_house_heired_governorship + } + } + } + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + } + } + } + + on_decline = { + scope:actor = { + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -15 + } + } + trigger_event = ep3_interactions_events.0021 + } + scope:recipient = { + if = { + limit = { is_ai = no } + add_character_flag = { + flag = refused_governorship_request + years = 15 + } + } + } + } + + ai_will_do = { + base = 0 + # Increase chance if greed and/or boldness is high enough + modifier = { + add = 20 + ai_greed >= medium_positive_ai_value + ai_boldness >= medium_positive_ai_value + } + modifier = { + add = 15 + ai_greed >= high_positive_ai_value + } + modifier = { + add = 15 + ai_boldness >= high_positive_ai_value + } + } + + ai_accept = { + base = -15 + opinion_modifier = { # Opinion of you + who = scope:recipient + opinion_target = scope:actor + desc = AI_OPINION_REASON + } + modifier = { + exists = scope:target.current_heir + NOR = { + scope:target.current_heir = scope:recipient + scope:target.current_heir = scope:actor + } + add = { + value = "scope:recipient.opinion(scope:target.current_heir)" + divide = 2 + round = yes + } + desc = AI_RECIPIENT_OPINION_HEIR_REASON + } + modifier = { + exists = scope:target.current_heir.house.house_head + NOR = { + scope:target.current_heir.house.house_head = scope:target.current_heir + scope:target.current_heir.house.house_head = scope:recipient + scope:target.current_heir.house.house_head = scope:actor + } + add = { + value = "scope:recipient.opinion(scope:target.current_heir.house.house_head)" + round = yes + } + desc = AI_RECIPIENT_OPINION_HEIR_HOUSE_HEAD_REASON + } + ai_value_modifier = { + ai_energy = 0.1 #It's a change + ai_greed = 0.2 #Free influence is free influence + ai_honor = -0.2 #Some might see it as a bribe + } + # Your Efficiency + modifier = { + add = { + value = { + value = scope:actor.governor_efficiency + multiply = 25 + } + round = yes + } + desc = AI_GOVERNOR_EFFICIENCY + } + # Heir Governor Efficiency + modifier = { + exists = scope:target.current_heir + NOR = { + scope:target.current_heir = scope:recipient + scope:target.current_heir = scope:actor + } + add = { + value = { + value = scope:target.current_heir.governor_efficiency + multiply = -50 + } + round = yes + } + desc = AI_GOVERNOR_EFFICIENCY_HEIR + } + # Your family is dominant + modifier = { + scope:actor.house = { is_dominant_family = yes } + desc = AI_DOMINANT_FAMILY + add = 50 + } + # Your family is powerful + modifier = { + scope:actor.house = { is_powerful_family = yes } + desc = AI_POWERFUL_FAMILY + add = 25 + } + # Heir family is dominant + modifier = { + scope:target.current_heir.house ?= { is_dominant_family = yes } + desc = AI_HEIR_DOMINANT_FAMILY + add = -50 + } + # Heir family is powerful + modifier = { + scope:target.current_heir.house ?= { is_powerful_family = yes } + desc = AI_HEIR_POWERFUL_FAMILY + add = -25 + } + # House of Emperor + modifier = { + scope:actor.house != scope:recipient.house + scope:target.current_heir.house ?= scope:recipient.house + desc = AI_HEIR_IS_MY_HOUSE + add = -50 + } + # You are more influential than heir + modifier = { + exists = scope:target.current_heir + scope:actor.influence_level != scope:target.current_heir.influence_level + add = { + value = scope:actor.influence_level + subtract = scope:target.current_heir.influence_level + multiply = 2 + } + desc = AI_DIFFERENCE_INFLUENCE + } + # Size of Province + modifier = { + exists = scope:target + add = { + value = 0 + scope:target = { + every_de_jure_county = { add = -1 } + } + multiply = 2 + } + desc = AI_THEME_SIZE + } + # Kingdoms are harder to request + modifier = { + scope:target ?= { tier = tier_kingdom } + add = -50 + desc = AI_THEME_IS_KINGDOM + } + # Province is close to the capital duchy + modifier = { + add = -10 + scope:target.tier <= tier_duchy + trigger_if = { + limit = { scope:target.tier = tier_duchy } + scope:target = { save_temporary_scope_as = duchy } + } + trigger_else = { + scope:target.duchy = { save_temporary_scope_as = duchy } + } + scope:duchy = { + OR = { + this = scope:recipient.top_liege.capital_county.duchy + any_title_to_title_neighboring_and_across_water_duchy = { this = scope:recipient.top_liege.capital_county.duchy } + } + } + desc = AI_THEME_CLOSE_TO_CAPITAL + } + # Province is far from the capital + modifier = { + add = 10 + trigger_if = { + limit = { scope:target.tier < tier_kingdom } + scope:target.kingdom = { save_temporary_scope_as = kingdom } + } + trigger_if = { + limit = { scope:target.tier = tier_kingdom } + scope:target.kingdom = { save_temporary_scope_as = kingdom } + } + trigger_if = { + limit = { + exists = scope:kingdom + } + scope:kingdom = { + NOR = { + this = scope:recipient.top_liege.capital_county.kingdom + any_title_to_title_neighboring_and_across_water_kingdom = { this = scope:recipient.top_liege.capital_county.kingdom } + } + } + } + trigger_else = { + scope:recipient.top_liege.capital_county = { + NOT = { + target_is_de_jure_liege_or_above = scope:target + } + } + } + desc = AI_THEME_FAR_FROM_CAPITAL + } + } +} + +# Adopt character to Noble Family +noble_family_adoption_interaction = { + icon = icon_dynasty + category = interaction_category_friendly + interface_priority = 25 + + desc = noble_family_adoption_interaction_desc + use_diplomatic_range = yes + + ai_min_reply_days = 4 + ai_max_reply_days = 9 + ai_maybe = yes + + cooldown_against_recipient = { years = 5 } + + is_available = { + house.house_head ?= { + any_held_title = { is_noble_family_title = yes } + } + culture ?= { has_cultural_parameter = allows_noble_family_adoption } + is_house_head = yes + trigger_if = { + limit = { is_ai = yes } + house ?= { + any_house_member = { + count <= 5 + is_alive = yes + } + } + } + } + + is_shown = { + scope:actor != scope:recipient + scope:recipient = { + NOR = { + # They don't already belong to your house + house ?= scope:actor.house + # Don't adopt your own grandkids + any_ancestor = { this = scope:actor } + } + } + } + + is_valid = {} + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + } + can_recruit_character_to_court_trigger = { + RECRUITER = scope:actor + RECRUITEE = scope:recipient + } + scope:recipient = { + # Don't get imprisoned and so on + is_available = yes + age >= 10 + trigger_if = { + limit = { exists = house.house_head } + custom_tooltip = { + text = adopt_interaction_noble_family_is_not_house_head_tt + scope:recipient.house.house_head != scope:recipient + } + } + is_ruler = no + NOT = { has_trait = devoted } + } + + } + + send_option = { + is_valid = { scope:actor.gold >= scope:actor.minor_gold_value } + flag = gold + localization = GENERIC_SPEND_GOLD + } + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + NOT = { + scope:recipient = { has_hook = scope:actor } + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_accept = { + show_as_tooltip = { + noble_family_adoption_effect = { + ADOPTEE = scope:recipient + ADOPTER = scope:actor + } + } + hidden_effect = { + scope:actor = { trigger_event = ep3_interactions_events.0400 } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = noble_family_adoption_effect_toast + left_icon = scope:recipient + right_icon = scope:actor + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_bad + title = noble_family_adoption_effect_toast + left_icon = scope:recipient + right_icon = scope:actor + if = { + limit = { scope:actor = { is_ai = yes } } + reverse_add_opinion = { + modifier = angry_opinion + opinion = -20 + target = scope:actor + } + } + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = respect_opinion + opinion = -10 + target = scope:actor + } + } + } + } + } + } + } + + cost = { + prestige = { + value = { + add = medium_prestige_value + if = { + limit = { + scope:actor = { + OR = { + culture = { has_cultural_parameter = free_adoption } + has_game_rule = adoption_always_allowed + # Replace with Influence for Admin noble families + house.house_head ?= { + any_held_title = { is_noble_family_title = yes } + } + } + } + } + multiply = 0 + } + } + } + piety = { + value = { + add = medium_piety_value + if = { + limit = { + scope:actor = { + OR = { + culture = { has_cultural_parameter = free_adoption } + has_game_rule = adoption_always_allowed + } + } + } + multiply = 0 + } + # No piety cost for adopting a righteous-faith child + if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value < faith_astray_level + } + } + } + multiply = 0 + } + else_if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value > faith_astray_level + } + } + } + add = minor_piety_value + } + else_if = { + limit = { + scope:actor.faith = { + faith_hostility_level = { + target = scope:recipient.faith + value > faith_hostile_level + } + } + } + add = medium_piety_value + } + } + } + influence = { + value = { + value = 0 + # Influence cost for Admin noble families + if = { + limit = { + scope:actor.house.house_head ?= { + any_held_title = { is_noble_family_title = yes } + } + } + add = massive_influence_gain + } + if = { + limit = { + scope:actor = { + OR = { + culture = { has_cultural_parameter = free_adoption } + has_game_rule = adoption_always_allowed + } + } + } + multiply = 0 + } + } + } + } + + ai_targets = { + ai_recipients = courtiers + ai_recipients = guests + # Friends, wards, etc. + ai_recipients = scripted_relations + max = 20 + } + + ai_accept = { + base = 0 + modifier = { + exists = house + any_parent = { + is_alive = yes + house = scope:recipient.house + } + add = -15 + desc = MY_PARENT_HOUSE + } + modifier = { + exists = house.house_head + is_close_family_of = house.house_head + add = -15 + desc = CLOSE_FAMILY_OF_HOUSE_HEAD + } + modifier = { + scope:hook = yes + add = 40 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:gold = yes + add = 25 + desc = SCHEME_WITH_GIFT_SIGNIFICANT + } + modifier = { # I have a house + add = -15 + desc = I_ALREADY_HAVE_A_HOUSE + exists = house.house_head + } + modifier = { # My house is powerful + add = -10 + desc = MY_HOUSE_IS_POWERFUL + house ?= { is_powerful_family = yes } + } + modifier = { # My house is dominant + add = -25 + desc = MY_HOUSE_IS_DOMINANT + house ?= { is_dominant_family = yes } + } + modifier = { + scope:actor.house = { is_powerful_family = yes } + add = 10 + desc = YOUR_FAMILY_IS_POWERFUL + } + modifier = { + scope:actor.house = { is_dominant_family = yes } + add = 25 + desc = YOUR_FAMILY_IS_DOMINANT + } + opinion_modifier = { + opinion_target = scope:actor + multiplier = 0.5 + } + modifier = { # I hate my house head + add = 15 + desc = I_HATE_MY_HOUSE_HEAD + exists = house.house_head + is_house_head = no + opinion = { + value <= medium_negative_opinion + target = house.house_head + } + } + modifier = { # I like my house head + add = -15 + desc = I_LIKE_MY_HOUSE_HEAD + exists = house.house_head + is_house_head = no + opinion = { + value >= medium_positive_opinion + target = house.house_head + } + } + modifier = { # You're my friend :) + add = 10 + desc = youre_my_friend_tt + has_relation_friend = scope:actor + } + modifier = { # You're my guardian + add = 10 + desc = youre_my_guardian_tt + has_relation_guardian = scope:actor + } + modifier = { # I have no house + add = 10 + desc = I_WANT_A_HOUSE + NOT = { exists = house } + } + modifier = { # I am a noble! + add = -15 + desc = i_am_noble_tt + has_no_particular_noble_roots_trigger = no + } + modifier = { # Yo, you're offering me a place in a landed house? Sick. + add = 10 + desc = ambition_tt + has_trait = ambitious + has_no_particular_noble_roots_trigger = yes + } + modifier = { + exists = scope:actor.house + exists = scope:recipient.house + house.house_head.top_liege ?= scope:actor.house.house_head.top_liege + add = { + value = scope:actor.house.house_power_score + subtract = scope:recipient.house.house_power_score + } + desc = RELATIVE_FAMILY_RATING + } + modifier = { + exists = scope:actor.house + exists = house + scope:recipient.dynasty.dynasty_prestige_level != scope:actor.dynasty.dynasty_prestige_level + add = { + value = scope:actor.dynasty.dynasty_prestige_level + subtract = scope:recipient.dynasty.dynasty_prestige_level + multiply = 10 + } + desc = RELATIVE_FAMILY_RENOWN + } + modifier = { + house ?= { + any_house_member = { + count < 5 + is_alive = yes + } + } + scope:actor.house ?= { + any_house_member = { + count >= 5 + is_alive = yes + } + } + add = 10 + desc = MY_HOUSE_IS_SMALL + } + modifier = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_astray_level + } + } + add = { + value = "faith.faith_hostility_level(scope:actor.faith)" + multiply = -10 + } + desc = FAITH_HOSTILITY_LEVEL + } + modifier = { + exists = scope:actor.top_liege.primary_title.state_rite + rite = { + rite_hostility_level = { + target = scope:actor.top_liege.primary_title.state_rite + value >= faith_astray_level + } + } + add = { + value = "rite.rite_hostility_level(scope:actor.top_liege.primary_title.state_rite)" + multiply = -5 + } + desc = FAITH_HOSTILITY_LEVEL_STATE_FAITH + } + modifier = { + culture != scope:actor.culture + "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" < 50 + add = { + value = 50 + subtract = "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" + multiply = -0.25 + round = yes + } + desc = CULTURAL_ACCEPTANCE + } + modifier = { + culture != scope:actor.culture + "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" >= 50 + add = { + value = "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" + subtract = 50 + multiply = 0.25 + round = yes + } + desc = CULTURAL_ACCEPTANCE + } + modifier = { + NOT = { + culture = { has_cultural_parameter = allows_noble_family_adoption } + } + add = -10 + desc = NOBLE_FAMILY_ADOPTION_NOT_CULTURAL + } + modifier = { + exists = house + age >= 31 + add = { + value = age + subtract = 30 + multiply = -1 + } + desc = THEIR_AGE_REASON + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 120 + duchy = 120 + kingdom = 120 + empire = 120 + hegemony = 120 + } + + ai_will_do = { + base = 50 + modifier = { # My house needs more members + add = 100 + scope:actor.house = { + any_house_member = { + count < 3 + save_temporary_scope_as = house_member_temp + NOT = { + scope:actor.top_liege.faith = { has_dominant_ruling_gender = scope:house_member_temp } + } + } + } + } + opinion_modifier = { # Opinion + opinion_target = scope:recipient + multiplier = 0.5 + } + modifier = { # My rival + add = -25 + scope:actor = { has_relation_rival = scope:recipient } + } + modifier = { # My friend + add = 25 + scope:actor = { has_relation_friend = scope:recipient } + } + modifier = { # My ward + add = 25 + scope:actor = { has_relation_guardian = scope:recipient } + } + modifier = { # I care about bloodlines and dynasties and whatnot + add = -25 + scope:actor = { + OR = { + has_trait = arrogant + has_trait = callous + } + } + } + modifier = { # I will not adopt filthy filthy heretics + factor = 0 + ai_zeal >= medium_positive_ai_value + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_astray_level + } + } + } + } +} + +# Request title troops from an allied fellow vassal +# +# Referenced in code +request_ally_title_troops_interaction = { + desc = request_ally_title_troops_interaction_desc + hidden = yes + + ai_maybe = yes + ai_min_reply_days = 1 + ai_max_reply_days = 3 + popup_on_receive = yes + + greeting = positive + notification_text = REQUEST_TITLE_TROOPS_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + ai_targets = { ai_recipients = peer_vassals } + ai_target_quick_trigger = { adult = yes } + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 0 + } + + cooldown_against_recipient = { years = 1 } + + target_type = title + target_filter = recipient_domain_titles + + redirect = { + } + + cost = { + influence = { + value = 0 + if = { + limit = { exists = scope:target } + add = scope:target.admin_title_troop_command_cost_value + } + } + } + + is_available = { + government_has_mechanic = administrative + NOT = { government_allows = merit } + is_governor = yes + top_liege != this + } + + is_shown = { + scope:recipient = { + government_has_mechanic = administrative + NOT = { government_allows = merit } + NOT = { + this = scope:actor + this = scope:actor.top_liege + } + top_liege ?= scope:actor.top_liege + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = admin_troops_have_no_troops_desc + scope:recipient = { + any_maa_regiment = { + is_title_maa_regiment = yes + regiment_owning_title = { holder = scope:recipient } + } + } + } + custom_tooltip = { + text = admin_troops_can_request_from_governor_desc + scope:actor = { + OR = { + is_allied_to = scope:recipient + has_hook = scope:recipient + is_liege_or_above_of = scope:recipient + AND = { + culture ?= { has_cultural_parameter = frontier_themes_borrow_neighbor_troops } + vassal_contract_has_flag = admin_theme_frontier + any_character_to_title_neighboring_duchy = { + holder ?= { + this = scope:recipient + NOT = { vassal_contract_has_flag = admin_theme_frontier } + } + } + } + AND = { + has_perk = friendly_counsel_perk + has_relation_friend = scope:recipient + } + AND = { + has_perk = mortal_adoration_perk + has_relation_lover = scope:recipient + } + } + } + } + + scope:actor = { + NOT = { is_at_war_with = scope:recipient } + } + } + + has_valid_target_showing_failures_only = { + scope:target = { + tier >= tier_duchy + is_noble_family_title = no + } + } + + can_send = { + custom_tooltip = { + text = admin_troops_target_title_has_maa_desc + scope:target = { + any_owned_title_maa_regiment = { exists = this } + } + } + trigger_if = { + limit = { + scope:target = { + any_owned_title_maa_regiment = { exists = this } + } + } + custom_tooltip = { + text = admin_troops_target_title_controls_maa_desc #admin_troops_target_title_has_maa_desc + scope:target = { + any_owned_title_maa_regiment = { regiment_controlling_title = scope:target } + } + } + } + } + + on_send = { + } + + on_accept = { + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = request_governorship_interaction_toast_liege + left_icon = scope:actor + right_icon = scope:target + scope:target = { + transfer_owned_maa_control = scope:actor.primary_title + + # Set up a timer to allow the owner to take back the troops when duration runs out + set_variable = { + name = title_troops_lent_out + years = admin_troops_reclaim_cost_cooldown_value + } + } + } + } + scope:actor = { + hidden_effect = { + send_interface_message = { + type = msg_admin_provincial_army_request_accepted + title = msg_admin_provincial_army_request_accepted.title + left_icon = scope:recipient + right_icon = scope:target + show_as_tooltip = { + scope:target = { + transfer_owned_maa_control = scope:actor.primary_title + } + } + } + } + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + } + + on_decline = { + scope:actor = { + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -15 + } + } + hidden_effect = { + send_interface_message = { + type = msg_admin_provincial_army_request_denied + title = msg_admin_provincial_army_request_denied.title + desc = msg_admin_provincial_army_request_denied.desc + left_icon = scope:recipient + right_icon = scope:target + } + } + } + } + + ai_will_do = { + base = 0 # AI uses this interaction from code + } + + ai_accept = { + base = 100 + + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + desc = AI_SIMPLE_OPINION_REASON + } + modifier = { # Target is less likely to accept if at war + scope:recipient = { + is_at_war = yes + } + scope:target = { + holder = scope:recipient + } + add = -200 + desc = TARGET_IS_AT_WAR_REASON + } + } +} + +request_emperor_title_troops_interaction = { + interface_priority = 60 + common_interaction = yes + desc = request_emperor_title_troops_interaction_desc + hidden = yes + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + popup_on_receive = yes + + greeting = positive + notification_text = REQUEST_TITLE_TROOPS_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + ai_targets = { ai_recipients = liege } + ai_target_quick_trigger = { adult = yes } + ai_frequency_by_tier = { + barony = 0 + county = 48 + duchy = 24 + kingdom = 24 + empire = 24 + hegemony = 0 + } + + cooldown_against_recipient = { years = 1 } + + target_type = title + target_filter = recipient_de_jure_titles + + redirect = { + scope:actor.top_liege = { save_scope_as = recipient } + } + + cost = { + influence = { + value = 0 + if = { + limit = { exists = scope:target } + add = scope:target.admin_title_troop_command_cost_value + } + } + } + + is_available = { + government_has_mechanic = administrative + NOT = { government_allows = merit } # Merit based governments use celestial_request_military_aid_interaction instead + is_governor = yes + trigger_if = { + limit = { is_ai = yes } + NOR = { # Don't ask for more troops if you have borrowed some already + government_has_flag = government_is_celestial # Celestial use celestial_request_military_aid_interaction instead + any_maa_regiment = { + is_title_maa_regiment = yes + regiment_owning_title ?= { holder = root } + } + } + } + top_liege != this + } + + is_shown = { + scope:actor = { + liege = scope:recipient + } + scope:recipient = { + government_has_mechanic = administrative + NOT = { government_allows = merit } # Merit based governments use celestial_request_military_aid_interaction instead + is_independent_ruler = yes + } + } + + is_valid_showing_failures_only = { + custom_tooltip = { + text = admin_troops_not_available_desc + scope:recipient = { + OR = { + any_vassal = { + any_maa_regiment = { + is_title_maa_regiment = yes + } + any_held_title = { + any_owned_title_maa_regiment = { regiment_owning_title = prev } + } + } + any_maa_regiment = { + is_title_maa_regiment = yes + regiment_owning_title = { holder = scope:recipient } + } + } + } + } + + scope:actor = { + is_at_war_with_liege = no + } + + trigger_if = { + limit = { + scope:actor = { is_ai = yes } + } + NOT = { + scope:recipient = { has_variable = admin_request_troop_cooldown } + } + } + } + + has_valid_target_showing_failures_only = { + scope:target ?= { + tier >= scope:recipient.main_administrative_tier + is_noble_family_title = no + exists = holder + holder.top_liege = scope:recipient + holder != scope:actor + any_title_maa_regiment = { + exists = this + } + } + } + can_be_picked_title = { + custom_tooltip = { + text = admin_troops_target_title_is_primary_title_tt + scope:recipient = { + primary_title != scope:target + } + } + } + can_send = { + custom_tooltip = { + text = admin_troops_target_title_controls_maa_desc + scope:target = { + any_owned_title_maa_regiment = { regiment_controlling_title = scope:target } + } + } + } + + on_send = { + } + + # Hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + NOT = { + scope:recipient = { has_hook = scope:actor } + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + # Dominant Family + send_option = { + is_shown = { + scope:actor = { + house ?= { is_dominant_family = yes } + } + } + flag = dominant_family + localization = OPTION_DOMINANT_FAMILY + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + send_options_exclusive = no + + on_accept = { + if = { + limit = { + scope:hook = yes + scope:actor = { has_usable_hook = scope:recipient } + } + scope:actor = { + use_hook = scope:recipient + } + } + if = { + limit = { scope:dominant_family = yes } + scope:actor = { + change_influence = medium_influence_loss + } + } + scope:actor = { + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:recipient + modifier = grateful_opinion + opinion = 10 + } + } + hidden_effect = { + send_interface_message = { + type = msg_admin_provincial_army_request_accepted + title = msg_admin_provincial_army_request_accepted.title + left_icon = scope:recipient + right_icon = scope:target + show_as_tooltip = { + scope:target = { + transfer_owned_maa_control = scope:actor.primary_title + } + } + } + } + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + scope:recipient = { + if = { + limit = { + is_ai = yes + } + custom_tooltip = request_emperor_title_troops_approve_desc + } + + # Set up AI cooldown to prevent spam + if = { + limit = { + NOT = { has_variable = admin_request_troop_cooldown } + } + set_variable = { + name = admin_request_troop_cooldown + years = 2 + } + } + } + scope:target = { + transfer_owned_maa_control = scope:actor.primary_title + + # Set up a timer to allow the owner to take back the troops when duration runs out + set_variable = { + name = title_troops_lent_out + years = admin_troops_reclaim_cost_cooldown_value + } + } + } + + on_decline = { + scope:actor = { + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -20 + } + } + hidden_effect = { + send_interface_message = { + type = msg_admin_provincial_army_request_denied + title = msg_admin_provincial_army_request_denied.title + desc = msg_admin_provincial_army_request_denied.desc + left_icon = scope:recipient + right_icon = scope:target + } + } + } + scope:recipient = { + if = { + limit = { + is_ai = yes + } + custom_tooltip = request_emperor_title_troops_deny_desc + } + if = { + limit = { scope:dominant_family = yes } + change_influence = medium_influence_loss + } + + # Set up AI cooldown to prevent spam + if = { + limit = { + NOT = { has_variable = admin_request_troop_cooldown } + } + set_variable = { # If declined, we make the cooldown a bit longer to prevent the AI from asking again too soon + name = admin_request_troop_cooldown + years = 5 + } + } + else = { # Just in case - If we have a cooldown already, refresh it + remove_variable = admin_request_troop_cooldown + set_variable = { + name = admin_request_troop_cooldown + years = 5 + } + } + } + } + + ai_will_do = { + base = 0 + + # Some governors are more likely to ask than others + modifier = { + add = 50 + scope:actor = { + vassal_contract_has_flag = admin_theme_frontier + } + } + modifier = { + add = 25 + scope:actor = { + vassal_contract_has_flag = admin_theme_naval + } + } + ai_value_modifier = { + who = scope:actor + ai_greed = 0.25 + ai_boldness = 0.5 + } + modifier = { + add = 20 + is_at_war = yes + } + + # Don't ask for the liege's troops if you can help it + modifier = { + add = -10 + scope:target ?= { + holder = scope:recipient + } + } + modifier = { + add = -30 + scope:recipient = { primary_title = scope:target } + } + + # Don't bother the liege if they are at war + modifier = { + add = -100 + scope:recipient = { is_at_war = yes } + } + + # Consider which title we would like to request troops from + modifier = { # Don't ask for troops owned by your own house if we can help it + add = -20 + scope:target = { holder.house ?= root.house } + } + modifier = { # Larger armies are more enticing, so ask for troops from a military theme + add = 10 + scope:target.holder = { vassal_contract_has_flag = admin_theme_military } + } + modifier = { # Smaller armies are not as exciting, so don't ask for troops from a civilian theme + add = -5 + scope:target.holder = { vassal_contract_has_flag = admin_theme_civilian } + } + modifier = { # Don't request troops that may join your wars + add = 10 + scope:target.holder = { + NOT = { is_allied_to = root } + } + } + + # Some governors never asks for troops + modifier = { + factor = 0 + scope:actor = { + OR = { + vassal_contract_has_flag = admin_theme_balanced + vassal_contract_has_flag = admin_theme_civilian + } + } + } + } + + ai_accept = { + base = -20 + + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + desc = AI_SIMPLE_OPINION_REASON + } + modifier = { + add = -20 + scope:recipient = { + has_trait = paranoid + } + desc = INTERACTION_PARANOID + } + modifier = { + add = 10 + scope:recipient = { + has_trait = trusting + } + desc = INTERACTION_TRUSTING + } + modifier = { + scope:hook = yes + add = 50 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:dominant_family = yes + add = 100 + desc = your_house_is_dominant_reason + } + modifier = { + scope:actor = { + is_at_war = no + } + add = -20 + desc = IS_NOT_AT_WAR_REASON + } + modifier = { + scope:actor = { + vassal_contract_has_flag = admin_theme_military + } + add = 20 + desc = IS_A_MILITARY_THEME + } + modifier = { + scope:actor = { + vassal_contract_has_flag = admin_theme_frontier + } + add = 30 + desc = IS_A_FRONTIER_THEME + } + modifier = { + scope:actor = { + vassal_contract_has_flag = admin_theme_naval + } + add = 25 + desc = IS_A_NAVAL_THEME + } + modifier = { + scope:recipient = { + is_at_war = no + } + scope:target = { + holder = scope:recipient + } + add = -50 + desc = TARGETS_OWN_TROOPS_REASON + } + # Family attribute bonus + modifier = { + scope:actor.house ?= { + has_house_aspiration_parameter = increased_request_troops_acceptance_3 + } + add = increased_request_troops_acceptance_3_value + desc = family_attribute_desc_with_value + } + modifier = { + scope:actor.house ?= { + has_house_aspiration_parameter = increased_request_troops_acceptance_2 + } + add = increased_request_troops_acceptance_2_value + desc = family_attribute_desc_with_value + } + modifier = { + scope:actor.house ?= { + has_house_aspiration_parameter = increased_request_troops_acceptance_1 + } + add = increased_request_troops_acceptance_1_value + desc = family_attribute_desc_with_value + } + # War reasons + modifier = { # Asking for the liege's troops when he is at war + scope:recipient = { + is_at_war = yes + } + scope:target = { + holder = scope:recipient + } + add = -200 + desc = TARGET_IS_AT_WAR_REASON + } + modifier = { # Asking for a governor's troops when they are at war + scope:target = { + holder = { is_at_war = yes } + holder != scope:recipient + } + add = -50 + desc = TARGET_IS_AT_WAR_REASON + } + modifier = { + scope:actor = { + any_held_title = { + any_controlled_title_maa_regiment = { + regiment_owning_title = { + holder != scope:actor + } + } + } + } + add = { + value = 0 + scope:actor = { + every_held_title = { + every_controlled_title_maa_regiment = { + limit = { + regiment_owning_title = { + holder != scope:actor + } + } + add = { + value = maa_size + multiply = -10 + } + } + } + } + } + desc = CONTROLS_EXTRA_TROOPS_REASON + } + } +} + +request_title_troops_back_interaction = { + desc = request_title_troops_back_interaction_desc + + hidden = yes + popup_on_receive = yes + + greeting = positive + notification_text = REQUEST_TITLE_TROOPS_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + #ai_targets = { ai_recipients = liege } + #ai_target_quick_trigger = { adult = yes } + #ai_frequency = 0 + + + cooldown_against_recipient = { years = 1 } + + target_type = title + target_filter = actor_de_jure_titles + + redirect = { + } + + cost = { + influence = { + value = { + add = { + value = define:NAdministrative|BASE_REASSIGN_COST + } + desc = BASE + } + if = { + limit = { + exists = scope:target + scope:target = { + NOT = { has_variable = title_troops_lent_out } + any_owned_title_maa_regiment = { + regiment_controlling_title = { + holder != scope:actor.top_liege + } + } + } + } + subtract = { + value = { + value = define:NAdministrative|BASE_REASSIGN_COST + multiply = 0.8 + } + desc = admin_troops_borrowed_years_desc + } + } + } + } + + is_available = { + is_ai = no # The AI should not request their troops back ahead of time + top_liege != this + government_has_mechanic = administrative + } + + is_shown = { + scope:recipient = { + government_has_mechanic = administrative + this = scope:actor + } + } + + is_valid_showing_failures_only = { + scope:recipient = { + custom_tooltip = { + text = admin_troops_already_at_home_desc + any_held_title = { + any_owned_title_maa_regiment = { + regiment_controlling_title = { + holder != scope:actor + } + } + } + } + } + } + + has_valid_target_showing_failures_only = { + scope:target = { + any_owned_title_maa_regiment = { + regiment_controlling_title = { + this != scope:target + } + } + } + } + + can_send = { + custom_tooltip = { + text = admin_troops_controlled_by_liege_desc + scope:target = { + any_owned_title_maa_regiment = { + regiment_controlling_title = { + holder != scope:actor.top_liege + } + } + } + } + } + + on_send = { + } + + auto_accept = yes + + on_accept = { + scope:target = { + custom_tooltip = { + text = admin_troops_transfer_troops_back_desc + every_owned_title_maa_regiment = { + limit = { + regiment_controlling_title = { + this != scope:target + } + } + transfer_title_maa = regiment_owning_title + } + } + + # Clear cost timer if present + if = { + limit = { + has_variable = title_troops_lent_out + } + remove_variable = title_troops_lent_out + } + } + scope:actor = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + } + + on_decline = { + } + + #ai_potential = { + # always = no + #} + # + #ai_will_do = { + # base = 0 + #} + + ai_accept = { + base = 100 + } +} + +# Request Raid Estate Remit +request_raid_remit_interaction = { + icon = icon_request_raid_remit + category = interaction_category_hostile + filter_tags = { admin_liege } + interface_priority = 90 + + desc = request_raid_remit_interaction_desc + notification_text = request_raid_remit_interaction_notification + use_diplomatic_range = yes + + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + cooldown_against_recipient = { years = 5 } + + is_available = { + domicile ?= { + domicile_is_estate_trigger = yes + } + trigger_if = { + limit = { is_ai = yes } + is_house_head = yes + house ?= { + any_house_member = { + count <= 5 + is_alive = yes + } + } + } + top_liege != this + } + + is_shown = { + scope:secondary_recipient ?= { + domicile ?= { + domicile_is_estate_trigger = yes + } + house != scope:recipient.house + top_liege ?= scope:actor.top_liege + house != scope:actor.house + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_adult = yes + custom_tooltip = { + text = is_house_head_of_noble_family_tt + any_held_title = { is_noble_family_title = yes } + house.house_head ?= this + } + custom_tooltip = { + text = raid_estate_already_remit_tt + NOT = { exists = var:raid_estate_permission } + } + trigger_if = { + limit = { + government_has_flag = government_is_celestial + exists = var:movement_power + } + custom_tooltip = { + text = actor_not_extremely_high_movement_power + var:movement_power >= extremely_high_movement_power_value + } + } + NOT = { is_at_war_with = scope:recipient } + } + scope:recipient.house.house_head ?= { + custom_tooltip = { + text = is_house_head_of_noble_family_tt + any_held_title = { is_noble_family_title = yes } + } + custom_tooltip = { + text = raid_estate_estate_tt + domicile ?= { + domicile_is_estate_trigger = yes + } + } + } + } + + populate_recipient_list = { + scope:actor.top_liege = { + every_noble_family = { + limit = { + NOR = { + holder = scope:actor + holder = scope:actor.top_liege + } + } + holder = { add_to_list = characters } + } + } + } + + redirect = { + scope:recipient.house.house_head ?= { save_scope_as = secondary_recipient } + scope:actor.top_liege = { save_scope_as = recipient } + } + + send_option = { + is_valid = { scope:actor.gold >= scope:actor.minor_gold_value } + flag = gold + localization = GENERIC_SPEND_GOLD + } + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + NOT = { + scope:recipient = { has_hook = scope:actor } + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_accept = { + if = { + limit = { scope:gold = yes } + show_as_tooltip = { + scope:actor = { + pay_short_term_gold = { + target = scope:recipient + gold = scope:actor.minor_gold_value + } + } + } + } + scope:recipient = { custom_tooltip = request_raid_remit_interaction_effect_tt } + custom_tooltip = request_raid_remit_interaction_duration_tt + hidden_effect = { + scope:actor = { trigger_event = ep3_interactions_events.0421 } + } + scope:actor = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = request_raid_remit_effect_toast + left_icon = scope:recipient + right_icon = scope:actor + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_bad + title = request_raid_remit_effect_toast + left_icon = scope:recipient + right_icon = scope:actor + if = { + limit = { scope:actor = { is_ai = yes } } + reverse_add_opinion = { + modifier = angry_opinion + opinion = -20 + target = scope:actor + } + } + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = respect_opinion + opinion = -10 + target = scope:actor + } + } + } + } + } + } + } + + cost = { + prestige = { + if = { + limit = { + scope:actor = { NOT = { government_has_flag = government_has_influence } } + } + add = scope:actor.massive_influence_value + # Being a Powerful or Dominant Family reduces the cost significantly + scope:actor.house = { + if = { + limit = { is_dominant_family = yes } + add = { + value = massive_influence_value + multiply = -0.75 + desc = is_dominant_family_desc + } + } + else_if = { + limit = { is_powerful_family = yes } + add = { + value = massive_influence_value + multiply = -0.5 + desc = is_powerful_family_desc + } + } + } + } + } + influence = { + if = { + limit = { + scope:actor = { government_has_flag = government_has_influence } + } + add = scope:actor.massive_influence_value + # Being a Powerful or Dominant Family reduces the cost significantly + scope:actor.house = { + if = { + limit = { is_dominant_family = yes } + add = { + value = massive_influence_value + multiply = -0.75 + desc = is_dominant_family_desc + } + } + else_if = { + limit = { is_powerful_family = yes } + add = { + value = massive_influence_value + multiply = -0.5 + desc = is_powerful_family_desc + } + } + } + } + } + } + + ai_targets = { + ai_recipients = peer_vassals + ai_recipients = scripted_relations + max = 10 + } + + ai_accept = { + base = -30 + modifier = { + scope:hook = yes + add = 40 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:gold = yes + add = 25 + desc = SCHEME_WITH_GIFT_SIGNIFICANT + } + modifier = { # Target house is powerful + add = -10 + desc = MY_HOUSE_IS_POWERFUL + scope:secondary_recipient.house ?= { is_powerful_family = yes } + } + modifier = { # Target house is dominant + add = -25 + desc = MY_HOUSE_IS_DOMINANT + scope:secondary_recipient.house ?= { is_dominant_family = yes } + } + modifier = { + scope:actor.house = { is_powerful_family = yes } + add = 10 + desc = YOUR_FAMILY_IS_POWERFUL + } + modifier = { + scope:actor.house = { is_dominant_family = yes } + add = 25 + desc = YOUR_FAMILY_IS_DOMINANT + } + modifier = { + scope:recipient.primary_spouse ?= { house ?= scope:secondary_recipient.house } + add = -10 + desc = MY_SPOUSES_HOUSE + } + modifier = { + any_child = { house = scope:secondary_recipient.house } + add = -10 + desc = MY_CHILDS_HOUSE + } + modifier = { + is_close_family_of = scope:secondary_recipient + add = -10 + desc = TARGET_IS_MY_CLOSE_FAMILY + } + opinion_modifier = { + opinion_target = scope:actor + multiplier = 0.5 + } + opinion_modifier = { + opinion_target = scope:secondary_recipient + multiplier = -0.5 + } + modifier = { + has_relation_rival = scope:secondary_recipient + add = 10 + desc = THEY_ARE_MY_RIVAL + } + modifier = { + add = -10 + desc = THEY_ARE_MY_FRIEND + scope:secondary_recipient = { has_relation_friend = scope:recipient } + } + modifier = { # You're my friend :) + add = 10 + desc = youre_my_friend_tt + has_relation_friend = scope:actor + } + modifier = { # You're my rival >:( + add = -10 + desc = ai_opinion.reason.relation.rival + has_relation_rival = scope:actor + } + modifier = { # You're my guardian + add = 10 + desc = youre_my_guardian_tt + has_relation_guardian = scope:actor + } + ai_value_modifier = { + ai_boldness = -0.2 + ai_honor = -0.2 + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 120 + kingdom = 60 + empire = 60 + hegemony = 0 + } + + ai_will_do = { + base = -25 + opinion_modifier = { # Opinion + opinion_target = scope:recipient + multiplier = -0.5 + } + modifier = { # My rival + add = 25 + scope:actor = { has_relation_rival = scope:recipient } + } + modifier = { # My friend + add = -25 + scope:actor = { has_relation_friend = scope:recipient } + } + modifier = { + scope:actor = { + house_has_feud_relation_with_trigger = { TARGET = scope:recipient } + } + add = 15 + } + + # Avoid fellow movement members if possible + modifier = { + is_in_same_movement_as = { TARGET = scope:recipient } + add = { + value = -10 + if = { + limit = { + is_in_pro_hegemon_or_hegemon_movement = yes + } + multiply = 1.5 + } + } + } + } +} + +# Request to become co-emperor +request_co_emperor_interaction = { + category = interaction_category_vassal + icon = icon_declare_me_co_emperor + + desc = request_co_emperor_interaction_desc + notification_text = DECLARE_ME_CO_EMPEROR_PROPOSAL + + interface_priority = 5 + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + # AI + ai_targets = { ai_recipients = liege } + ai_frequency_by_tier = { + barony = 0 + county = 120 + duchy = 60 + kingdom = 60 + empire = 0 + hegemony = 0 + } + ai_target_quick_trigger = { adult = yes } + + cooldown_against_recipient = { years = 10 } + + redirect = { + scope:recipient = { save_scope_as = secondary_recipient } + } + + cost = { + influence = { + add = { + add = { + value = scope:actor.monumental_influence_value + multiply = 2 + } + desc = BASE + } + # Being a Powerful or Dominant Family reduces the cost significantly + scope:actor.house = { + if = { + limit = { is_dominant_family = yes } + multiply = { + value = 0.25 + desc = is_dominant_family_desc + } + } + else_if = { + limit = { is_powerful_family = yes } + multiply = { + value = 0.5 + desc = is_powerful_family_desc + } + } + } + if = { + limit = { scope:influence = yes } + add = { + add = scope:actor.request_co_emperor_interaction_influence_cost_value + desc = SPEND_INFLUENCE + } + } + } + + gold = { + if = { + limit = { scope:gold = yes } + add = { + add = scope:recipient.request_co_emperor_interaction_gold_cost_value + desc = SCHEME_AGENT_GOLD + } + } + } + } + + is_available = { + government_has_mechanic = administrative + trigger_if = { + limit = { is_ai = yes } + NOR = { + has_trait = content + has_trait = humble + } + } + top_liege != this + } + + is_shown = { + scope:recipient = { + this = scope:actor.top_liege + may_appoint_co_emperors_trigger = yes + } + } + + is_valid_showing_failures_only = { + scope:actor = { + valid_co_emperor_candidate_trigger = { LIEGE = scope:recipient } + NOT = { is_at_war_with = scope:recipient } + } + scope:recipient = { + is_at_war = no + has_active_diarchy = no + trigger_if = { + limit = { exists = designated_diarch } + time_after_diarch_designated = { years >= 10 } + } + } + } + + send_options_exclusive = no + #Spend influence + send_option = { + flag = influence + is_valid = { scope:actor.influence >= request_co_emperor_interaction_influence_cost_value } + localization = SPEND_INFLUENCE + } + #Promise gold. + send_option = { + flag = gold + is_valid = { scope:actor.gold >= scope:recipient.request_co_emperor_interaction_gold_cost_value } + localization = SCHEME_AGENT_GOLD + } + #Use hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + on_accept = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = declare_me_co_emperor_interaction.tt.success + left_icon = scope:recipient + scope:recipient = { + custom_tooltip = { + text = declare_me_co_emperor_interaction.tt.effect + try_start_diarchy = co_emperorship + set_diarch = scope:actor + } + if = { + limit = { + scope:actor = { + is_child_of = scope:recipient + } + } + + designated_heir ?= { + if = { + limit = { this != scope:actor } + custom_tooltip = appoint_co_emperor_interaction.tt.overwrite_designated_heir + # Nab them for use further on. + save_scope_as = old_heir + } + } + hidden_effect = { set_designated_heir = scope:actor } + } + } + } + if = { + limit = { + scope:hook = yes + has_usable_hook = scope:recipient + } + # Use the hook up. + use_hook = scope:recipient + reverse_add_opinion = { + target = scope:recipient + modifier = suspicion_opinion + opinion = -20 + } + } + if = { + limit = { scope:gold = yes } + show_as_tooltip = { + pay_short_term_gold = { + target = scope:recipient + gold = scope:recipient.request_co_emperor_interaction_gold_cost_value + } + } + hidden_effect = { + scope:recipient = { add_gold = request_co_emperor_interaction_gold_cost_value } + } + } + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + if = { + limit = { scope:influence = yes } + scope:recipient = { change_influence = scope:actor.request_co_emperor_interaction_influence_cost_value } + } + # And remember who appointed them on scope:recipient. + scope:actor = { + set_variable = { + name = co_emp_appointer + value = scope:recipient + } + } + + # Your designated heir is _very_ pissed. + if = { + limit = { + exists = scope:old_heir + } + diarch_overwrites_old_designated_heir_apply_opinions_effect = { + LIEGE = scope:recipient + CO_RULER = scope:actor + } + } + } + + on_decline = { + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = declare_me_co_emperor_interaction.tt.failure + left_icon = scope:recipient + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:recipient + modifier = insult_opinion + opinion = -40 + } + } + change_strife_opinion = medium_strife_gain + } + } + } + + ai_will_do = { + # Most AI think this is audacious. + base = 0 + + # Weight for personality. + ## Both modifier. + ai_value_modifier = { + # Bold, energetic characters fancy the gig. + ai_boldness = 0.5 + ai_energy = 0.5 + } + ## And traits! + ### These are balanced differently to the other interactions, so it's deliberate that they're not using the @values here. + ### +++ Ambitious. + modifier = { + add = 15 + has_trait = ambitious + } + ### ++ Arrogant. + modifier = { + add = 10 + has_trait = arrogant + } + ### + Diligent. + modifier = { + add = 5 + has_trait = diligent + } + ### + Loyal. + modifier = { + add = 5 + has_trait = loyal + } + ### - Humble. + modifier = { + add = -5 + has_trait = humble + } + ### --- Content. + modifier = { + add = -15 + has_trait = content + } + ### --- Lazy. + modifier = { + add = -15 + has_trait = lazy + } + # Weight by proximity to the ruler: close family, spouses, etc. + modifier = { + add = 25 + OR = { + any_close_or_extended_family_member = { this = scope:recipient } + any_spouse = { this = scope:recipient } + } + } + # Councillors have ambitions. + modifier = { + add = 25 + is_councillor = yes + } + # Weight for opinion of current regent. + modifier = { + add = { + scope:recipient = { + # Designated diarchs. + if = { + limit = { + designated_diarch ?= { + save_temporary_scope_as = diarch_successor_temp + scope:actor = { + save_temporary_opinion_value_as = { + name = actor_opinion_temp + target = scope:diarch_successor_temp + } + } + } + } + add = scope:actor_opinion_temp + # Invert to get the true total. + multiply = -1 + } + # Expected diarchs. + else_if = { + limit = { + diarchy_successor ?= { + save_temporary_scope_as = diarch_successor_temp + scope:actor = { + save_temporary_opinion_value_as = { + name = actor_opinion_temp + target = scope:diarch_successor_temp + } + } + } + } + add = scope:actor_opinion_temp + # Invert to get the true total. + multiply = -1 + } + } + } + always = yes + } + # The AI will only use a Hook if they couldn't otherwise do this + modifier = { + scope:hook = yes + add = -1 + } + # Dominant family have ambitions. + modifier = { + add = 25 + is_house_head = yes + house ?= { is_dominant_family = yes } + } + # Pretenders. + modifier = { + add = 25 + NOT = { is_close_family_of = scope:recipient } + has_claim_on = scope:recipient.primary_title + } + # Designated Heir + modifier = { + add = 25 + scope:recipient.designated_heir ?= this + } + # Flag management. + ## Hook used + modifier = { + add = 1 + scope:hook = yes + } + ## Influence traded. + modifier = { + add = 3 + scope:influence = yes + } + ## Gold traded. + modifier = { + add = 2 + scope:gold = yes + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + scope:recipient = { is_ai = yes } + } + } + + ai_accept = { + # Try to make it 0 for most interactions + base = -150 + # Opinion of scope:actor. + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 0.5 + } + # Personality. + ai_value_modifier = { + # Meek characters are more likely to accept this. + ai_boldness = -0.5 + # Characters with low energy just want to avoid all this planning. + ai_energy = -0.25 + } + # Familial closeness. + ## Close family get a decent boost. + modifier = { + add = 30 + desc = declare_me_regent_interaction.tt.actor_is.close_family + is_close_family_of = scope:actor + # Make sure this isn't cancelled out by the incumbent sharing the relation. + diarchy_successor = { + NOT = { is_close_family_of = scope:recipient } + } + } + ## Extended family get a minor boost. + modifier = { + add = 20 + desc = declare_me_regent_interaction.tt.actor_is.extended_family + is_extended_family_of = scope:actor + # Make sure this isn't cancelled out by the incumbent sharing the relation. + diarchy_successor = { + NOT = { is_extended_family_of = scope:recipient } + } + } + ## House members get a slight boost. + modifier = { + add = 10 + desc = declare_me_regent_interaction.tt.actor_is.house_member + house = scope:actor.house + NOT = { is_close_or_extended_family_of = scope:actor } + # Make sure this isn't cancelled out by the incumbent sharing the relation. + diarchy_successor = { + house != scope:recipient.house + } + } + ## Dominant family + modifier = { + scope:actor.house = { + is_dominant_family = yes + this != scope:recipient.house + } + add = 10 + desc = YOUR_FAMILY_IS_DOMINANT + } + ## Powerful family + modifier = { + scope:actor.house = { + is_powerful_family = yes + is_dominant_family = no + this != scope:recipient.house + } + add = 5 + desc = YOUR_FAMILY_IS_POWERFUL + } + ## Powerful family + modifier = { + scope:recipient.designated_heir ?= scope:actor + add = 25 + desc = YOU_ARE_MY_DESIGNATED_HEIR + } + # Relationships. + ## Positive. + modifier = { + add = 25 + desc = declare_me_regent_interaction.tt.actor_is.positive_relationship + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:actor } + # We don't factor for this in the designated/expected diarch 'cause the matrix of overlap'd be hellish. + } + ## Negative. + modifier = { + add = -25 + desc = declare_me_regent_interaction.tt.actor_is.negative_relationship + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:actor } + # We don't factor for this in the designated/expected diarch 'cause the matrix of overlap'd be hellish. + } + # Succession score is a direct factor. + modifier = { + add = { + value = "scope:actor.appointment_candidate_score(scope:recipient.primary_title)" + divide = 4 + min = 0 + max = 100 + } + desc = declare_me_regent_interaction.tt.actor_is.succession_score + } + # Send options. + ## Hook used + modifier = { + add = 50 + desc = SCHEME_WEAK_HOOK_USED + scope:hook = yes + } + ## Influence traded. + modifier = { + add = 50 + desc = INFLUENCE_REASON + scope:influence = yes + } + ## Gold traded. + modifier = { + add = 50 + desc = GOLD_REASON + scope:gold = yes + } + } +} + +# Request a character to fight a war on your behalf - AKA Summon to War/summon_to_war +frontier_influence_war_interaction = { + category = interaction_category_diplomacy + interface_priority = 80 + icon = icon_coax_to_war + desc = frontier_influence_war_interaction_desc + + filter_tags = { admin_governor } + + is_highlighted = { + scope:recipient = { + is_at_war = no + is_adult = yes + custom_tooltip = { + text = admin_theme_type_trigger + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = admin_theme_naval + vassal_contract_has_flag = celestial_province_protectorate + } + } + } + } + + target_type = title + target_filter = secondary_recipient_de_jure_titles + can_be_picked_title = { + scope:target = { + is_title_created = yes + tier = tier_duchy + custom_tooltip = { + text = neighbor_with_recipient_trigger + scope:recipient = { + trigger_if = { + limit = { vassal_contract_has_flag = admin_theme_naval } + any_character_to_title_neighboring_and_across_water_duchy = { + this = scope:target + } + } + trigger_else = { + any_character_to_title_neighboring_duchy = { + this = scope:target + } + } + } + } + } + } + + populate_recipient_list = { + scope:recipient = { + if = { + limit = { + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = celestial_province_protectorate + } + } + every_character_to_title_neighboring_duchy = { + limit = { + holder ?= { top_liege != scope:actor.top_liege } + } + holder ?= { add_to_list = characters } + } + } + else_if = { + limit = { vassal_contract_has_flag = admin_theme_naval } + every_character_to_title_neighboring_and_across_water_duchy = { + limit = { + holder ?= { top_liege != scope:actor.top_liege } + } + holder ?= { add_to_list = characters } + } + } + } + } + + redirect = { + scope:recipient = { + if = { + limit = { + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = celestial_province_protectorate + } + } + random_character_to_title_neighboring_duchy = { + limit = { + holder ?= { top_liege != scope:actor.top_liege } + } + holder = { save_scope_as = secondary_recipient } + } + } + else_if = { + limit = { vassal_contract_has_flag = admin_theme_naval } + random_character_to_title_neighboring_and_across_water_duchy = { + limit = { + holder ?= { top_liege != scope:actor.top_liege } + } + holder = { save_scope_as = secondary_recipient } + } + } + } + } + + has_valid_target = { + scope:target ?= { + is_title_created = yes + tier = tier_duchy + holder.top_liege != scope:actor + } + } + + ai_min_reply_days = 3 + ai_max_reply_days = 9 + popup_on_receive = yes + ai_maybe = yes + can_send_despite_rejection = yes + + greeting = positive + notification_text = REQUEST_DUCHY_INFLUENCE_WAR_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + cooldown_against_recipient = { years = 10 } + + is_available = { + government_has_mechanic = administrative + top_liege ?= this + NOT = { government_has_flag = government_is_landless_adventurer } + } + + is_shown = { + scope:recipient = { + government_has_mechanic = administrative + NOT = { government_has_flag = government_is_landless_adventurer } + custom_tooltip = { + text = admin_theme_type_trigger + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = admin_theme_naval + vassal_contract_has_flag = celestial_province_protectorate + } + } + top_liege ?= scope:actor.top_liege + } + } + + is_valid_showing_failures_only = { + scope:actor != scope:recipient + scope:recipient = { + is_at_war = no + is_adult = yes + custom_tooltip = { + text = admin_theme_type_trigger + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = admin_theme_naval + vassal_contract_has_flag = celestial_province_protectorate + } + } + + custom_tooltip = { + text = admin_vassal_war_no_target_desc + trigger_if = { + limit = { + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = celestial_province_protectorate + } + } + any_character_to_title_neighboring_duchy = { + holder ?= { top_liege != scope:actor.top_liege } + } + } + trigger_if= { + limit = { vassal_contract_has_flag = admin_theme_naval } + any_character_to_title_neighboring_and_across_water_duchy = { + holder ?= { top_liege != scope:actor.top_liege } + } + } + } + } + } + + send_options_exclusive = no + send_option = { + flag = title_maa + localization = send_option_title_troops + is_valid = { + scope:actor = { + is_at_war = no + custom_tooltip = { + text = all_title_maa_must_not_be_raised_tt + primary_title = { + NOT = { + any_controlled_title_maa_regiment = { + is_raised = yes + } + } + } + } + } + } + } + send_option = { + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + on_accept = { + if = { + limit = { scope:title_maa = yes } + scope:actor.primary_title = { + transfer_owned_maa_control = scope:recipient.primary_title + } + } + scope:recipient = { + start_war = { + cb = influence_war_cb + target = scope:secondary_recipient + claimant = scope:recipient.top_liege + target_title = scope:target + } + custom_tooltip = frontier_influence_war_interaction_target_title_tt + } + scope:actor = { + trigger_event = ep3_interactions_events.0210 + } + } + + on_decline = { + scope:recipient = { + change_influence = major_influence_loss + } + scope:actor = { + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = refused_summons_to_war_opinion + target = scope:recipient + } + } + trigger_event = ep3_interactions_events.0211 + } + } + + cost = { + prestige = { + # BASE COSTS + add = { + value = massive_prestige_value + desc = BASE + } + # DOMINANT FAMILY DISCOUNTS + if = { + limit = { scope:actor.house ?= { is_dominant_family = yes } } + multiply = { + value = 0.75 + desc = DOMINANT_FAMILY_DISCOUNT + } + } + # DOMICILE BUILDING DISCOUNTS + } + } + + ai_targets = { + ai_recipients = vassals + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + } + } + + ai_accept = { + base = 0 + modifier = { # My house is powerful + add = -10 + desc = MY_HOUSE_IS_POWERFUL + house ?= { is_powerful_family = yes } + } + modifier = { # My house is dominant + add = -25 + desc = MY_HOUSE_IS_DOMINANT + house ?= { is_dominant_family = yes } + } + modifier = { + scope:actor.house = { is_powerful_family = yes } + add = 10 + desc = YOUR_FAMILY_IS_POWERFUL + } + modifier = { + scope:actor.house = { is_dominant_family = yes } + add = 25 + desc = YOUR_FAMILY_IS_DOMINANT + } + opinion_modifier = { + opinion_target = scope:actor + multiplier = 0.5 + } + modifier = { # You're my friend :) + add = 10 + desc = youre_my_friend_tt + has_relation_friend = scope:actor + } + modifier = { # You're my guardian + add = 10 + desc = youre_my_guardian_tt + has_relation_guardian = scope:actor + } + modifier = { + exists = scope:actor.house + exists = scope:recipient.house + house.house_head.top_liege ?= scope:actor.house.house_head.top_liege + add = { + value = scope:actor.house.house_power_score + subtract = scope:recipient.house.house_power_score + } + desc = RELATIVE_FAMILY_RATING + } + modifier = { + exists = scope:actor.house + exists = house + scope:recipient.dynasty.dynasty_prestige_level != scope:actor.dynasty.dynasty_prestige_level + add = { + value = scope:actor.dynasty.dynasty_prestige_level + subtract = scope:recipient.dynasty.dynasty_prestige_level + multiply = 10 + } + desc = RELATIVE_FAMILY_RENOWN + } + modifier = { + faith = { + faith_hostility_level = { + target = scope:actor.faith + value >= faith_astray_level + } + } + add = { + value = "faith.faith_hostility_level(scope:actor.faith)" + multiply = -10 + } + desc = FAITH_HOSTILITY_LEVEL + } + modifier = { + exists = scope:actor.top_liege.primary_title.state_rite + rite = { + rite_hostility_level = { + target = scope:actor.top_liege.primary_title.state_rite + value >= faith_astray_level + } + } + add = { + value = "rite.rite_hostility_level(scope:actor.top_liege.primary_title.state_rite)" + multiply = -5 + } + desc = FAITH_HOSTILITY_LEVEL_STATE_FAITH + } + modifier = { + culture != scope:actor.culture + "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" < 50 + add = { + value = 50 + subtract = "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" + multiply = -0.25 + round = yes + } + desc = CULTURAL_ACCEPTANCE + } + modifier = { + culture != scope:actor.culture + "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" >= 50 + add = { + value = "scope:recipient.culture.cultural_acceptance(scope:actor.culture)" + subtract = 50 + multiply = 0.25 + round = yes + } + desc = CULTURAL_ACCEPTANCE + } + modifier = { + add = scope:recipient.current_military_strength + desc = RECIPIENT_MILITARY_STRENGTH + } + modifier = { + add = scope:actor.current_military_strength + scope:title_maa = yes + desc = PROMISED_TITLE_MAA + } + modifier = { + add = { + value = scope:secondary_recipient.top_liege.current_military_strength + multiply = -1 + } + desc = SECONDARY_RECIPIENT_MILITARY_STRENGTH + } + modifier = { # Must not be at war already + is_at_war = yes + add = -1000 + desc = ALREADY_AT_WAR + } + } + + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 120 + empire = 120 + hegemony = 120 + } + + ai_will_do = { + base = 50 + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:hook = yes + add = -1 + } + modifier = { # My house needs more members + add = 100 + scope:actor.house = { + any_house_member = { + count < 3 + save_temporary_scope_as = house_member_temp + NOT = { + scope:actor.top_liege.faith = { has_dominant_ruling_gender = scope:house_member_temp } + } + } + } + } + opinion_modifier = { # Opinion + opinion_target = scope:recipient + multiplier = 0.5 + } + modifier = { # My rival + add = -25 + scope:actor = { has_relation_rival = scope:recipient } + } + modifier = { # My friend + add = 25 + scope:actor = { has_relation_friend = scope:recipient } + } + modifier = { # My ward + add = 25 + scope:actor = { has_relation_guardian = scope:recipient } + } + modifier = { # I care about bloodlines and dynasties and whatnot + add = -25 + scope:actor = { + OR = { + has_trait = arrogant + has_trait = callous + } + } + } + modifier = { # I will not adopt filthy filthy heretics + factor = 0 + ai_zeal >= medium_positive_ai_value + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_astray_level + } + } + } + modifier = { # I'll not make them start a war they'll surely lose + factor = 0 + scope:recipient.current_military_strength < { + value = scope:secondary_recipient.current_military_strength + multiply = 0.75 + } + } + } +} + +# House Head requests to landed family member - AKA Request as House Head +house_head_request_interaction = { + icon = house_head_request_interaction + category = interaction_category_friendly + common_interaction = no + desc = house_head_request_interaction_desc + interface_priority = 10 + + ai_maybe = yes + ai_min_reply_days = 4 + ai_max_reply_days = 9 + can_send_despite_rejection = yes + popup_on_receive = yes + + greeting = positive + notification_text = HOUSE_HEAD_REQUEST_PROPOSAL + + pre_answer_yes_key = ACCEPT + pre_answer_no_key = DECLINE + + ai_targets = { ai_recipients = liege } + ai_targets = { + ai_recipients = vassals + ai_recipients = peer_vassals + max = 10 + } + ai_targets = { + ai_recipients = family + max = 20 + } + ai_target_quick_trigger = { adult = yes } + ai_frequency_by_tier = { + barony = 0 + county = 48 + duchy = 36 + kingdom = 12 + empire = 12 + hegemony = 12 + } + + cooldown_against_recipient = { years = 10 } + cooldown = { years = 2 } + + redirect = { + } + + cost = { # If the cost changes, remember to update the on_send to give correct refund in the event + } + + is_available = { + government_has_mechanic = administrative + this = house.house_head + trigger_if = { + limit = { is_ai = yes } + is_house_head = yes + } + } + + is_shown = { + scope:recipient != scope:actor + scope:recipient = { + government_has_mechanic = administrative + house ?= scope:actor.house + } + } + + is_valid_showing_failures_only = { + scope:actor = { + NOT = { is_at_war_with = scope:recipient } + } + scope:recipient = { + is_ruler = yes + is_adult = yes + } + } + + send_options_exclusive = yes + send_option = { + flag = gold + localization = HH_ASK_FOR_GOLD + } + send_option = { + flag = hostile_schemes + localization = ASK_FOR_HOSTILE_SCHEMES_HELP + } + send_option = { + flag = personal_schemes + localization = ASK_FOR_PERSONAL_SCHEMES_HELP + } + send_option = { + flag = political_schemes + localization = ASK_FOR_POLITICAL_SCHEMES_HELP + } + send_option = { + is_valid = { + custom_tooltip = { + text = hh_recipient_has_valid_artifact + scope:recipient = { + any_character_artifact = { + save_temporary_scope_as = target_artifact + OR = { + scope:actor.house = { has_house_artifact_claim = scope:target_artifact } + scope:actor = { has_personal_artifact_claim = scope:target_artifact } + } + } + } + } + } + is_shown = { + scope:actor.domicile ?= { has_domicile_parameter = house_head_can_ask_for_artifacts } + } + flag = artifact + localization = ASK_FOR_ARTIFACT + } + send_option = { + is_valid = { + custom_tooltip = { + text = hh_recipient_has_valid_knight + scope:recipient = { + number_of_knights > 0 + any_knight = { + is_acclaimed = no + is_landed = no + } + } + } + } + is_shown = { + scope:actor.domicile ?= { has_domicile_parameter = house_head_can_ask_for_knight } + } + flag = knight + localization = ASK_FOR_KNIGHT + } + send_option = { + is_valid = { + trigger_if = { + limit = { + scope:actor = { + NOT = { + any_maa_regiment = { is_personal_maa_regiment = yes } + } + } + } + custom_tooltip = { + text = hh_has_personal_maa + scope:actor = { + any_maa_regiment = { is_personal_maa_regiment = yes } + } + } + } + trigger_else = { + custom_tooltip = { + text = hh_has_personal_maa_size + scope:actor = { + any_maa_regiment = { + is_personal_maa_regiment = yes + can_upgrade_maa = yes + } + } + } + } + custom_tooltip = { + text = hh_recipient_has_personal_maa + scope:recipient = { + any_maa_regiment = { + is_personal_maa_regiment = yes + } + } + } + } + is_shown = { + scope:actor.domicile ?= { has_domicile_parameter = house_head_can_ask_for_maa } + } + flag = maa + localization = ASK_FOR_MAA + } + send_option = { + is_shown = { + scope:actor.domicile ?= { has_domicile_parameter = house_head_can_ask_for_building_support } + } + flag = building + localization = ASK_FOR_BUILDING + } + send_option = { + is_valid = { + custom_tooltip = { + text = hh_recipient_has_valid_courtier + scope:recipient = { + any_courtier_or_guest = { + ep3_interesting_courtier_to_ask_trigger = yes + } + } + } + } + flag = courtier + localization = ASK_FOR_COURTIER + } + + on_send = { + } + + on_accept = { + if = { + limit = { + scope:gold = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + + scope:recipient = { + pay_short_term_gold = { + target = scope:actor + gold = medium_gold_value + } + } + } + } + } + else_if = { + limit = { + scope:hostile_schemes = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + + custom_tooltip = { + text = hostile_schemes_help_request_tt + scope:actor = { + add_to_variable_list = { + name = supporting_hostile_schemes + target = scope:recipient + years = 10 + } + } + } + scope:recipient = { + add_character_modifier = { + modifier = hostile_schemes_distracted_modifier + years = 5 + } + } + } + } + } + else_if = { + limit = { + scope:personal_schemes = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + + custom_tooltip = { + text = personal_schemes_help_request_tt + scope:actor = { + add_to_variable_list = { + name = supporting_personal_schemes + target = scope:recipient + years = 10 + } + } + } + scope:recipient = { + add_character_modifier = { + modifier = personal_schemes_distracted_modifier + years = 5 + } + } + } + } + } + else_if = { + limit = { + scope:political_schemes = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + + custom_tooltip = { + text = political_schemes_help_request_tt + scope:actor = { + add_to_variable_list = { + name = supporting_political_schemes + target = scope:recipient + years = 10 + } + } + } + scope:recipient = { + add_character_modifier = { + modifier = political_schemes_distracted_modifier + years = 5 + } + } + } + } + } + else_if = { + limit = { + scope:artifact = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + right_icon = scope:target_artifact + + scope:recipient = { + random_character_artifact = { + limit = { + save_temporary_scope_as = target_artifact + OR = { + scope:actor.house = { has_house_artifact_claim = scope:target_artifact } + scope:actor = { has_personal_artifact_claim = scope:target_artifact } + } + } + save_scope_as = target_artifact + set_owner = scope:actor + } + } + } + } + } + else_if = { + limit = { + scope:knight = yes + } + scope:recipient = { + ordered_knight = { + limit = { + is_acclaimed = no + is_landed = no + } + order_by = prowess + save_scope_as = knight + } + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + right_icon = scope:knight + + scope:actor = { add_courtier = scope:knight } + } + } + } + else_if = { + limit = { + scope:maa = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + + scope:recipient = { + ordered_maa_regiment = { + limit = { + is_personal_maa_regiment = yes + } + save_scope_as = maa_regiment_decrease + } + scope:maa_regiment_decrease = { + change_maa_regiment_size = -1 + } + } + scope:actor = { + ordered_maa_regiment = { + limit = { + is_personal_maa_regiment = yes + can_upgrade_maa = yes + } + save_scope_as = maa_regiment_increase + } + scope:maa_regiment_increase = { + change_maa_regiment_size = { + size = 1 + reinforce = yes + } + } + } + } + } + } + else_if = { + limit = { + scope:building = yes + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + + scope:actor = { + add_to_variable_list = { + name = supporting_building + target = scope:recipient + years = 10 + } + add_character_modifier = { + modifier = estate_supporting_buildings_modifier + years = 10 + } + } + scope:recipient = { + add_prestige = medium_prestige_loss + } + } + } + } + else_if = { + limit = { + scope:courtier = yes + } + scope:recipient = { + random_courtier_or_guest = { + limit = { + ep3_interesting_courtier_to_ask_trigger = yes + } + save_scope_as = courtier + } + } + scope:actor = { + send_interface_message = { + type = event_toast_effect_good + title = house_head_request_accepted + left_icon = scope:recipient + right_icon = scope:courtier + + add_courtier = scope:courtier + } + } + } + } + + on_decline = { + scope:actor = { + send_interface_message = { + type = event_toast_effect_bad + title = house_head_request_denied + left_icon = scope:recipient + + scope:recipient = { + change_influence = major_influence_loss + } + } + } + + scope:actor = { + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:recipient + modifier = disrespect_opinion + opinion = -30 + } + } + } + } + + ai_will_do = { + base = 50 + } + + ai_accept = { + base = 100 + modifier = { + add = 25 + desc = CLOSE_FAMILY_REASON + scope:recipient = { + is_close_family_of = scope:actor + } + } + + modifier = { + add = 25 + desc = WE_ARE_FRIENDS + scope:recipient = { + has_relation_friend = scope:actor + } + } + + modifier = { + add = 50 + desc = WE_ARE_BEST_FRIENDS + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + + modifier = { + add = 10 + desc = WE_ARE_LOVERS + scope:recipient = { + has_relation_lover = scope:actor + } + } + + modifier = { + add = -100 + desc = WE_ARE_RIVALS + scope:recipient = { + has_relation_rival = scope:actor + } + } + + modifier = { + add = -500 + desc = WE_ARE_NEMESES + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + opinion_modifier = { + opinion_target = scope:actor + multiplier = 0.5 + } + modifier = { + # can't afford to be difficult + scope:recipient = { + influence <= major_influence_value + } + add = 30 + desc = INFLUENCE_USED + } + # Don't bankrupt the AI + modifier = { + scope:gold = yes + scope:recipient.gold <= medium_gold_value + add = -75 + desc = GOLD_NEGATIVE_REASON + } + # Personality + modifier = { + scope:recipient = { + has_trait = loyal + } + desc = INTERACTION_LOYAL + add = 20 + } + modifier = { + scope:recipient = { + has_trait = disloyal + } + desc = INTERACTION_DISLOYAL + add = -20 + } + } +} + +# Request Clergy Support / request_clergy_support +ep3_hof_ask_for_influence_interaction = { + icon = icon_influence_01 + category = interaction_category_religion + + desc = ep3_hof_ask_for_influence_interaction_desc + notification_text = ASK_FOR_INFLUENCE_TEXT + + ai_targets = { + ai_recipients = head_of_faith + ai_recipients = realm_priest_superior + ai_recipients = superior + ai_recipients = realm_priest_top_superior + ai_recipients = councillors + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 144 + duchy = 24 + kingdom = 24 + empire = 24 + hegemony = 24 + } + + redirect = { + scope:actor = { + spiritual_hof_or_realm_priest_superior_recipient_redirect_effect = yes + } + } + + cooldown_against_recipient = { years = 10 } + + is_available = { + government_has_mechanic = administrative + trigger_if = { + limit = { + is_ai = yes + } + piety >= massive_piety_value + exists = faith.religious_head + exists = house + NOT = { has_trait = excommunicated } + } + is_playable_character = yes + faith ?= { + OR = { + has_doctrine = doctrine_spiritual_head + has_doctrine_parameter = has_clerical_regions + } + } + is_lowborn = no + } + + is_shown = { + scope:recipient != scope:puppet_or_actor + scope:puppet_or_actor ?= { + broader_clergy_show_hof_or_superior_interactions_trigger = yes + } + } + + is_valid_showing_failures_only = { + scope:actor = { + spiritual_hof_or_realm_priest_superior_recipient_trigger = yes + piety >= massive_piety_value + custom_description = { + text = hof_ask_for_gold_excommunicated + NOT = { has_trait = excommunicated } + } + NOT = { is_at_war_with = scope:recipient } + custom_tooltip = { + text = HOF_INTERACTION_UNREFORMED_FAITH + NOT = { + faith = { has_doctrine_parameter = unreformed } + } + } + custom_tooltip = { + text = HOF_INTERACTION_STATE_FAITH + top_liege = { + government_allows = state_faith + exists = primary_title.state_rite + } + rite = { + this = scope:actor.top_liege.primary_title.state_rite + } + } + custom_tooltip = { + text = HOF_INTERACTION_HAS_HOUSE_MODIFIER + house ?= { + NOR = { + has_house_modifier = ep3_requested_faith_support_modifier + has_house_modifier = ep3_requested_faith_support_modifier_small + } + } + } + custom_tooltip = { + text = HOF_INTERACTION_IS_HOUSE_HEAD + house ?= { + house_head = scope:actor + } + } + } + custom_tooltip = { + text = recipient_supports_3_houses_tt + NOT = { + scope:recipient = { + has_variable_list = cleric_houses_support + variable_list_size = { + name = cleric_houses_support + value >= 3 + } + } + } + } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + } + } + + send_option = { + is_shown = { + scope:actor != scope:recipient + } + is_valid = { + scope:actor = { + has_usable_hook = scope:recipient + } + } + flag = hook + localization = GENERIC_SPEND_A_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + ai_min_reply_days = 1 + ai_max_reply_days = 5 + + on_accept = { + ep3_hof_ask_for_influence_interaction_effect = yes + + scope:actor = { + trigger_event = ep3_interactions_events.0620 + } + } + + on_decline = { + show_as_tooltip = { + scope:actor = { clerical_interaction_refusal_major_effect = yes } + } + scope:actor = { + trigger_event = ep3_interactions_events.0621 + } + } + + ai_accept = { + base = -50 + + opinion_modifier = { + opinion_target = scope:actor + who = scope:recipient + multiplier = 0.5 + } + + modifier = { + scope:recipient = { + OR = { + ai_greed > 0 + ai_greed < 0 + } + } + add = { + value = scope:recipient.ai_greed + multiply = 0.5 + } + desc = AI_GREED_REASON + } + modifier = { + scope:recipient = { + OR = { + ai_honor > 0 + ai_honor < 0 + } + } + add = { + value = scope:recipient.ai_honor + multiply = -0.5 + } + desc = AI_HONOR_REASON + } + + #Doesn't like the emperor... if you're not the emperor + modifier = { + add = 5 + scope:actor.top_liege = { + NOR = { + this = scope:actor + this = scope:recipient + } + reverse_opinion = { + target = scope:recipient + value < 0 + } + reverse_opinion = { + target = scope:recipient + value > -40 + } + } + desc = HOF_OPINION_OF_EMPEROR + } + modifier = { + add = 10 + scope:actor.top_liege = { + NOR = { + this = scope:actor + this = scope:recipient + } + reverse_opinion = { + target = scope:recipient + value <= -40 + } + reverse_opinion = { + target = scope:recipient + value > -80 + } + } + desc = HOF_OPINION_OF_EMPEROR + } + modifier = { + add = 20 + scope:actor.top_liege = { + NOR = { + this = scope:actor + this = scope:recipient + } + reverse_opinion = { + target = scope:recipient + value <= -80 + } + } + desc = HOF_OPINION_OF_EMPEROR + } + #Likes emperor... and you're not emperor + modifier = { + add = -5 + scope:actor.top_liege = { + NOR = { + this = scope:actor + this = scope:recipient + } + reverse_opinion = { + target = scope:recipient + value >= 40 + } + reverse_opinion = { + target = scope:recipient + value < 80 + } + } + desc = HOF_OPINION_OF_EMPEROR + } + modifier = { + add = -10 + scope:actor.top_liege = { + NOR = { + this = scope:actor + this = scope:recipient + } + reverse_opinion = { + target = scope:recipient + value >= 80 + } + } + desc = HOF_OPINION_OF_EMPEROR + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:actor = { + knows_language_of_culture = scope:recipient.culture + } + } + } + + modifier = { # Attacking a co-religionist + add = -50 + desc = I_AM_ATTACKING_A_CORELIGIONIST + scope:actor = { + is_at_war = yes + any_character_war = { + primary_attacker = scope:actor + primary_defender.faith = scope:actor.faith + primary_defender = { + NOT = { + has_trait = excommunicated + } + } + } + } + } + + modifier = { # Offensive holy war/excommunication war + add = 30 + desc = I_AM_WAGING_AN_OFFENSIVE_HOLY_OR_EXCOMMUNICATION_WAR + scope:actor = { + is_at_war = yes + any_character_war = { + is_attacker = scope:actor + OR = { + using_non_ghw_holy_war_cb_trigger = yes + using_cb = excommunication_war + } + } + } + } + + modifier = { # Defensive Holy War + add = 50 + desc = I_AM_DEFENDING_AGAINST_A_HOLY_WAR + scope:actor = { + is_at_war = yes + any_character_war = { + is_defender = scope:actor + using_non_ghw_holy_war_cb_trigger = yes + } + } + } + + modifier = { # I am influential already + add = -10 + desc = I_AM_INFLUENTIAL + scope:actor = { + influence_level >= 4 + NOT = { + influence_level >= 6 + } + } + } + + modifier = { # I am very influential already + add = -20 + desc = I_AM_INFLUENTIAL + scope:actor = { + influence_level >= 6 + } + } + + modifier = { # I am Adulterer/Fornicator + add = -25 + desc = I_AM_ADULTERER + scope:actor = { + OR = { + AND = { + has_trait = fornicator + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:fornicator GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = adulterer + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:adulterer GENDER_CHARACTER = scope:actor } + } + } + } + } + + modifier = { # I am a Murderer + add = -50 + desc = I_AM_MURDERER + scope:actor = { + has_trait = murderer + } + } + + modifier = { # I am Incestous + add = -50 + desc = I_AM_INCESTOUS + scope:actor = { + NOT = { scope:recipient = { rite = { rite_has_doctrine = doctrine_consanguinity_unrestricted } } } + has_trait = incestuous + } + } + + modifier = { # I am a Kinslayer + add = -50 + desc = I_AM_A_KINSLAYER + scope:actor = { + OR = { + AND = { + has_trait = kinslayer_1 + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:kinslayer_1 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = kinslayer_2 + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:kinslayer_2 GENDER_CHARACTER = scope:actor } + } + AND = { + has_trait = kinslayer_3 + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:kinslayer_3 GENDER_CHARACTER = scope:actor } + } + } + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_SAVIOR + add = 15 + scope:actor = { + has_trait = savior + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_DIVINE_BLOOD + add = 5 + scope:actor = { + has_trait = divine_blood + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_PARAGON + add = 15 + scope:actor = { + has_trait = paragon + } + } + modifier = { + desc = RELIGIOUS_HEAD_INTERACTION_CONSECRATED_BLOOD + add = 5 + scope:actor = { + has_trait = consecrated_blood + } + } + + modifier = { # You are of the same dynasty as the Head of Faith + add = 5 + desc = YOU_ARE_MY_DYNASTY_MEMBER + scope:recipient = { + is_lowborn = no + dynasty = scope:actor.dynasty + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.dynasty = scope:secondary_recipient.dynasty + } + } + } + + modifier = { # You are of the same house as the Head of Faith + add = 10 + desc = YOU_ARE_MY_HOUSE_MEMBER + scope:recipient = { + is_lowborn = no + house = scope:actor.house + NOR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + is_child_of = scope:actor + scope:recipient.house = scope:secondary_recipient.house + } + } + } + + modifier = { # Related to the Head of Faith + add = 10 + desc = YOU_ARE_MY_RELATIVE + scope:recipient = { + OR = { + is_close_or_extended_family_of = scope:actor + is_cousin_of = scope:actor + } + NOT = { is_child_of = scope:actor } + } + } + + modifier = { # Parent of the Head of Faith + add = 25 + desc = YOU_ARE_MY_PARENT + scope:recipient = { + is_child_of = scope:actor + } + } + + modifier = { # Friend of the Head of Faith + add = 25 + desc = WE_ARE_FRIENDS + scope:recipient = { + has_relation_friend = scope:actor + } + } + + modifier = { # Best Friend of the Head of Faith + add = 50 + desc = WE_ARE_BEST_FRIENDS + scope:recipient = { + has_relation_best_friend = scope:actor + } + } + + modifier = { # Lover of the Head of Faith + add = 10 + desc = WE_ARE_LOVERS + scope:recipient = { + has_relation_lover = scope:actor + } + } + + modifier = { # Rival of the Head of Faith + add = -100 + desc = WE_ARE_RIVALS + scope:recipient = { + has_relation_rival = scope:actor + } + } + + modifier = { # Nemesis of the Head of Faith + add = -500 + desc = WE_ARE_NEMESES + scope:recipient = { + has_relation_nemesis = scope:actor + } + } + + modifier = { + add = { + add = 10 + multiply = scope:actor.num_virtuous_traits + } + scope:actor.num_virtuous_traits > 0 + desc = I_AM_VIRTUOUS + } + + modifier = { + add = { + add = 5 + multiply = scope:actor.piety_level + } + scope:actor.piety_level > 1 + desc = I_AM_PIOUS + } + + modifier = { + add = { + add = -10 + multiply = scope:actor.num_sinful_traits + } + scope:actor.num_sinful_traits > 0 + desc = I_AM_SINFUL + } + + # Admin family attribute bonus + modifier = { + add = { + value = 0 + if = { + limit = { + scope:actor.house ?= { has_house_aspiration_parameter = increased_clerical_influence_acceptance_3 } + } + add = increased_clerical_influence_acceptance_3_value + } + else_if = { + limit = { + scope:actor.house ?= { has_house_aspiration_parameter = increased_clerical_influence_acceptance_2 } + } + add = increased_clerical_influence_acceptance_2_value + } + else = { + add = increased_clerical_influence_acceptance_1_value + } + } + scope:actor.house ?= { + OR = { + has_house_aspiration_parameter = increased_clerical_influence_acceptance_1 + has_house_aspiration_parameter = increased_clerical_influence_acceptance_2 + has_house_aspiration_parameter = increased_clerical_influence_acceptance_3 + } + } + desc = you_have_faithful_nobles_attribute_with_value_desc + } + secular_to_ecclesiastical_pam_factors_acceptance_modifier = yes + + modifier = { + add = -30 + scope:recipient = { + has_variable_list = cleric_houses_support + variable_list_size = { + name = cleric_houses_support + value < 2 + } + } + desc = supports_other_house_reason + } + modifier = { + add = -75 + scope:recipient = { + has_variable_list = cleric_houses_support + variable_list_size = { + name = cleric_houses_support + value >= 2 + } + } + desc = supports_other_houses_reason + } + modifier = { + scope:actor.house ?= { + is_powerful_family = yes + } + add = 25 + desc = YOUR_FAMILY_IS_POWERFUL + } + modifier = { + scope:actor.house ?= { + is_dominant_family = yes + } + add = 50 + desc = YOUR_FAMILY_IS_DOMINANT + } + } + + ai_will_do = { + base = 0 + + modifier = { # The AI will only use a Hook if they couldn't otherwise do this + scope:hook = yes + add = -1 + } + + modifier = { # I am low on influence + add = 300 + scope:actor = { + influence <= minor_influence_value + } + } + + modifier = { # Piety to burn, and no reason to keep it. + add = 100 + scope:actor = { + piety > massive_piety_value + NOR = { + has_character_modifier = vow_of_poverty_modifier + has_trait = content + has_trait = humble + } + } + } + modifier = { # Or when greedy + add = { + value = scope:actor.ai_greed + multiply = 0.5 + } + scope:actor = { + ai_greed > 0 + } + } + modifier = { # Or when energy + add = { + value = scope:actor.ai_energy + multiply = 0.5 + } + scope:actor = { + ai_energy > 0 + } + } + + modifier = { # I am an up and comer who really needs help + add = 100 + scope:actor = { + influence_level <= 1 + } + } + + modifier = { + add = 100 + scope:actor = { + ai_has_warlike_personality = yes + } + } + + modifier = { + add = 50 + scope:actor = { + ai_has_cautious_personality = no + } + } + modifier = { + add = -25 + scope:recipient = { + has_variable_list = cleric_houses_support + variable_list_size = { + name = cleric_houses_support + value < 2 + } + } + } + modifier = { + add = -75 + scope:recipient = { + has_variable_list = cleric_houses_support + variable_list_size = { + name = cleric_houses_support + value >= 2 + } + } + } + } +} + +# Ask non-participating governor to join ongoing Faction War +ep3_join_faction_war_interaction = { + icon = join_faction_war_interaction + category = interaction_category_diplomacy + common_interaction = yes + + desc = ep3_join_faction_war_interaction_desc + + cooldown_against_recipient = { years = 10 } + + greeting = positive + notification_text = JOIN_FACTION_WAR_NOTIFICATION_TEXT + + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_available = { + is_at_war = yes + government_has_mechanic = administrative + has_ep3_dlc_trigger = yes + } + + is_shown = { + scope:actor = { + NOR = { + this = scope:recipient + is_at_war_with = scope:recipient + } + } + scope:recipient = { + government_has_mechanic = administrative + scope:actor.liege ?= liege + } + scope:actor.joined_faction ?= { + faction_is_at_war = yes + faction_war ?= { is_attacker = scope:actor } + faction_target != scope:recipient + } + } + + redirect = { + # Save secondary_recipient for UI and ai chance + scope:actor.joined_faction.faction_target ?= { save_scope_as = secondary_recipient } + } + + cost = { influence = 150 } + + is_valid_showing_failures_only = { + scope:recipient = { + is_imprisoned = no + NOT = { is_at_war_with = liege } + } + scope:actor.joined_faction ?= { + faction_war = { + custom_tooltip = { + text = ep3_join_faction_war_interaction_ally_tt + NOT = { + primary_defender = { is_allied_to = scope:recipient } + } + } + } + } + } + + # Offer gold + send_option = { + is_valid = { scope:actor.gold > scope:actor.medium_gold_value } + flag = gold + localization = GENERIC_SPEND_GOLD + } + # Use hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + can_send = { + scope:actor = { is_ai = no } # player only + custom_tooltip = { + text = ep3_join_faction_war_interaction_ongoing_tt + scope:actor.joined_faction ?= { + faction_is_at_war = yes + faction_war ?= { is_attacker = scope:actor } + } + } + custom_tooltip = { + text = ep3_join_faction_war_interaction_faction_tt + scope:recipient = { + trigger_if = { + limit = { exists = joined_faction } + NOR = { + joined_faction.faction_leader = this + joined_faction.special_character ?= this + } + } + } + } + scope:recipient = { + custom_tooltip = { + text = ep3_join_faction_war_interaction_offer_tt + NOT = { has_character_flag = under_offer_join_faction_war_flag } + } + } + } + + on_send = { + scope:recipient = { + add_character_flag = { + flag = under_offer_join_faction_war_flag + months = 1 + } + } + } + + on_accept = { + scope:actor = { trigger_event = ep3_interactions_events.0800 } + show_as_tooltip = { ep3_join_faction_war_effect = yes } + scope:recipient = { remove_character_flag = under_offer_join_faction_war_flag } + } + + on_decline = { + scope:actor = { trigger_event = ep3_interactions_events.0801 } + scope:recipient = { remove_character_flag = under_offer_join_faction_war_flag } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + ai_accept = { + base = -25 + modifier = { + scope:hook = yes + add = 40 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:gold = yes + add = { + value = 10 + add = { + value = scope:recipient.ai_greed + multiply = 0.25 + min = 0 + } + } + desc = SCHEME_WITH_GIFT_SIGNIFICANT + } + modifier = { # Target is less likely to accept if at war + scope:recipient = { is_at_war = yes } + add = -200 + desc = RECIPIENT_IS_AT_WAR_REASON + } + common_faction_modifiers = { + FACTION_TARGET = scope:secondary_recipient + OPINION_MULTIPLIER = -1.5 + MAX_OPINION = 150 + POWER = 0 + THRESHOLD = 80 + } + admin_faction_modifiers = { + FACTION_TARGET = scope:secondary_recipient + FACTION_TYPE = claimant_faction + } + modifier = { + exists = scope:actor.joined_faction.special_character + add = "scope:recipient.opinion(scope:actor.joined_faction.special_character)" + desc = CLAIMANT_OPINION_REASON + } + modifier = { # Refuse call against Heir + add = -1000 + scope:recipient.player_heir ?= scope:secondary_recipient + desc = WONT_FIGHT_HEIR_REASON + } + modifier = { # Refuse call against Spouse + add = -1000 + is_spouse_of = scope:secondary_recipient + desc = WONT_FIGHT_SPOUSE_REASON + } + modifier = { # Reluctant to join against Friends + add = -50 + has_relation_friend = scope:secondary_recipient + desc = WONT_FIGHT_FRIEND_REASON + } + modifier = { # Reluctant to join against Best Friends + add = -100 + has_relation_best_friend = scope:secondary_recipient + desc = WONT_FIGHT_BEST_FRIEND_REASON + } + modifier = { # Reluctant to join against Lovers + add = -100 + has_relation_lover = scope:secondary_recipient + desc = WONT_FIGHT_LOVER_REASON + } + modifier = { # Reluctant to join against Soulmate + add = -200 + has_relation_soulmate = scope:secondary_recipient + desc = WONT_FIGHT_SOULMATE_REASON + } + modifier = { # Refuse call for hostages' safety + any_home_court_hostage = { + warden = { + OR = { + is_at_war_with = scope:actor + any_ally = { is_at_war_with = scope:actor } + } + } + } + add = { + value = 0 + every_home_court_hostage = { + limit = { + warden = { + OR = { + is_at_war_with = scope:actor + any_ally = { is_at_war_with = scope:actor } + } + } + } + subtract = call_to_arms_hostage_value + } + multiply = 0.25 + } + desc = HOSTAGE_ENEMY_CALL_TO_ARMS_REASON + } + opinion_modifier = { # Opinion Factor + who = scope:recipient + opinion_target = scope:actor + multiplier = 1.0 + desc = AI_OPINION_REASON + } + } + + ai_will_do = { base = 0 } +} + +# Ask governor to switch sides in ongoing Faction War +ep3_switch_faction_war_sides_interaction = { + icon = switch_faction_war_sides_interaction + category = interaction_category_diplomacy + common_interaction = yes + + desc = { + triggered_desc = { + trigger = { + scope:recipient != scope:secondary_recipient + } + desc = ep3_switch_faction_war_sides_interaction_desc + } + } + + cooldown_against_recipient = { years = 10 } + + greeting = positive + notification_text = SWITCH_FACTION_WAR_SIDES_NOTIFICATION_TEXT + + ai_min_reply_days = 4 + ai_max_reply_days = 9 + + is_available = { + government_has_mechanic = administrative + has_ep3_dlc_trigger = yes + } + + is_shown = { + scope:actor = { + is_at_war_with = scope:recipient + this != scope:recipient + } + scope:recipient = { + government_has_mechanic = administrative + OR = { + is_vassal_of = scope:actor + scope:actor.liege ?= liege + } + } + scope:actor = { + any_character_war = { + # Recipient involved in war + is_participant = scope:recipient + # Is a Faction war + save_temporary_scope_as = faction_war_temp + primary_attacker.joined_faction.faction_war ?= scope:faction_war_temp + # Actor and recipient on opposing sides + trigger_if = { + limit = { is_defender = scope:recipient } + is_attacker = scope:actor + } + trigger_else = { is_defender = scope:actor } + } + } + } + + redirect = { + scope:actor = { + # Actor is involved in a faction war with recipient on the other side + random_character_war = { + limit = { ep3_switch_faction_war_sides_war_trigger = yes } + # Save secondary_recipient for UI and ai chance + if = { + limit = { is_defender = scope:actor } + primary_attacker = { save_scope_as = secondary_recipient } + } + else = { + primary_defender = { save_scope_as = secondary_recipient } + } + } + } + } + + cost = { influence = 300 } + + is_valid_showing_failures_only = { + scope:recipient = { + is_imprisoned = no + is_at_war = yes + } + custom_tooltip = { + text = ep3_switch_faction_war_sides_interaction_primary_or_ally_or_claimant_tt + scope:actor = { + any_character_war = { ep3_switch_faction_war_sides_war_trigger = yes } + } + } + } + + # Offer gold + send_option = { + is_valid = { scope:actor.gold > scope:actor.medium_gold_value } + flag = gold + localization = GENERIC_SPEND_GOLD + } + # Use hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + NOT = { + scope:recipient = { is_imprisoned_by = scope:actor } + } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + can_send = { + scope:actor = { is_ai = no } # player only + custom_tooltip = { + text = ep3_switch_faction_war_sides_interaction_tt + scope:actor = { + any_character_war = { ep3_switch_faction_war_sides_war_trigger = yes } + } + } + scope:recipient = { + custom_tooltip = { + text = ep3_switch_faction_war_sides_interaction_offer_tt + NOT = { has_character_flag = under_offer_switch_faction_war_sides_flag } + } + } + custom_tooltip = { + text = ep3_switch_faction_war_sides_cooldown_tt + NOT = { exists = scope:recipient.var:switched_faction_war_sides } + } + } + + on_send = { + scope:recipient = { + add_character_flag = { + flag = under_offer_switch_faction_war_sides_flag + months = 1 + } + } + } + + on_accept = { + scope:actor = { trigger_event = ep3_interactions_events.0810 } + show_as_tooltip = { ep3_switch_faction_war_sides_effect = yes } + scope:recipient = { + set_variable = { + name = switched_faction_war_sides + value = scope:secondary_recipient + years = 10 + } + remove_character_flag = under_offer_join_faction_war_flag + } + } + + on_decline = { + scope:actor = { trigger_event = ep3_interactions_events.0811 } + scope:recipient = { remove_character_flag = under_offer_join_faction_war_flag } + } + + auto_accept = { + custom_description = { + text = "spending_hook" + subject = scope:actor + object = scope:recipient + scope:hook = yes + scope:actor = { has_strong_hook = scope:recipient } + } + } + + ai_accept = { + base = -50 + modifier = { + scope:hook = yes + add = 40 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:gold = yes + add = { + value = 10 + add = { + value = scope:recipient.ai_greed + multiply = 0.25 + min = 0 + } + } + desc = SCHEME_WITH_GIFT_SIGNIFICANT + } + modifier = { + add = { + value = 0 + scope:actor = { + every_character_war = { + limit = { + # Recipient involved in war + is_participant = scope:recipient + # Is a Faction war + save_temporary_scope_as = faction_war_temp + primary_attacker.joined_faction.faction_war ?= scope:faction_war_temp + # Actor and recipient on opposing sides + trigger_if = { + limit = { is_defender = scope:recipient } + is_attacker = scope:actor + # Recipient must not be an ally of the opposing war leader + NOT = { + primary_defender = { is_allied_to = scope:recipient } + } + } + trigger_else = { + is_defender = scope:actor + # Recipient must not be an ally of the opposing war leader + NOT = { + primary_attacker = { is_allied_to = scope:recipient } + } + } + # Recipient must not be a war leader + NOT = { is_war_leader = scope:recipient } + } + if = { + limit = { is_defender = scope:actor } + add = { + value = ep3_invite_to_faction_war_strength_compare_defender_value + divide = ep3_invite_to_faction_war_strength_compare_attacker_value + if = { + limit = { ep3_invite_to_faction_war_strength_compare_defender_value > ep3_invite_to_faction_war_strength_compare_attacker_value } + multiply = 10 + } + else = { multiply = -200 } + max = 50 + min = -50 + } + } + else = { + add = { + value = ep3_invite_to_faction_war_strength_compare_attacker_value + divide = ep3_invite_to_faction_war_strength_compare_defender_value + if = { + limit = { ep3_invite_to_faction_war_strength_compare_attacker_value > ep3_invite_to_faction_war_strength_compare_defender_value } + multiply = 10 + } + else = { multiply = -200 } + max = 50 + min = -50 + } + } + } + } + } + desc = WAR_STRENGTH_BALANCE_REASON + } + modifier = { + add = { + value = 0 + scope:actor = { + every_character_war = { + limit = { + # Recipient involved in war + is_participant = scope:recipient + # Is a Faction war + save_temporary_scope_as = faction_war_temp + primary_attacker.joined_faction.faction_war ?= scope:faction_war_temp + # Actor and recipient on opposing sides + trigger_if = { + limit = { is_defender = scope:recipient } + is_attacker = scope:actor + # Recipient must not be an ally of the opposing war leader + NOT = { + primary_defender = { is_allied_to = scope:recipient } + } + } + trigger_else = { + is_defender = scope:actor + # Recipient must not be an ally of the opposing war leader + NOT = { + primary_attacker = { is_allied_to = scope:recipient } + } + } + # Recipient must not be a war leader + NOT = { is_war_leader = scope:recipient } + } + if = { + limit = { is_defender = scope:actor } + add = { + value = 0 + if = { + limit = { defender_war_score > attacker_war_score } + add = defender_war_score + divide = 2 + } + else = { + add = attacker_war_score + multiply = -0.5 + } + max = 50 + min = -50 + } + } + else = { + add = { + value = 0 + if = { + limit = { attacker_war_score > defender_war_score } + add = attacker_war_score + divide = 2 + } + else = { + add = defender_war_score + multiply = -0.5 + } + max = 50 + min = -50 + } + } + } + } + } + desc = WAR_SCORE_REASON + } + opinion_modifier = { + opinion_target = scope:actor + multiplier = 0.5 + } + opinion_modifier = { + trigger = { + exists = scope:secondary_recipient + } + opinion_target = scope:secondary_recipient + multiplier = -0.5 + } + modifier = { # Refuse call against Heir + add = -1000 + exists = scope:secondary_recipient + scope:recipient.player_heir ?= scope:secondary_recipient + desc = WONT_FIGHT_HEIR_REASON + } + modifier = { # Refuse call against Spouse + add = -1000 + exists = scope:secondary_recipient + is_spouse_of = scope:secondary_recipient + desc = WONT_FIGHT_SPOUSE_REASON + } + modifier = { # Reluctant to join against Friends + add = -50 + exists = scope:secondary_recipient + has_relation_friend = scope:secondary_recipient + desc = WONT_FIGHT_FRIEND_REASON + } + modifier = { # Reluctant to join against Best Friends + add = -100 + exists = scope:secondary_recipient + has_relation_best_friend = scope:secondary_recipient + desc = WONT_FIGHT_BEST_FRIEND_REASON + } + modifier = { # Reluctant to join against Lovers + add = -100 + exists = scope:secondary_recipient + has_relation_lover = scope:secondary_recipient + desc = WONT_FIGHT_LOVER_REASON + } + modifier = { # Reluctant to join against Soulmate + add = -200 + exists = scope:secondary_recipient + has_relation_soulmate = scope:secondary_recipient + desc = WONT_FIGHT_SOULMATE_REASON + } + } + + ai_will_do = { base = 0 } +} + +# Request Permission to Wage War +ep3_governor_request_war_permission_interaction = { + icon = invasion + category = interaction_category_vassal + filter_tags = { admin_liege } + + #basically never used according to telemetry + interface_priority = 0 + + desc = ep3_governor_request_war_permission_interaction_desc + + cooldown_against_recipient = { years = 10 } + + greeting = positive + notification_text = request_war_permission_notification_text + + ai_targets = { + ai_recipients = liege + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 240 + duchy = 60 + kingdom = 60 + empire = 60 + hegemony = 60 + } + ai_min_reply_days = 2 + ai_max_reply_days = 5 + + is_available = { + government_has_mechanic = administrative + top_liege ?= { + has_realm_law_flag = admin_vassal_wars_permission_only + } + OR = { + vassal_contract_has_flag = admin_theme_frontier + vassal_contract_has_flag = admin_theme_naval + } + trigger_if = { + limit = { is_ai = yes } + is_adult = yes + liege ?= { is_at_war = no } # Don't ask if your liege is at war + } + } + + is_shown = { + scope:actor.liege = scope:recipient + } + + is_valid_showing_failures_only = { + scope:recipient = { NOT = { has_strong_hook = scope:actor } } + scope:actor = { + is_at_war = no + custom_tooltip = { + text = admin_has_war_permission_already_desc + NOT = { has_variable = admin_permission_to_declare_war } + } + top_liege = { + custom_tooltip = { + text = admin_all_vassal_wars_banned + NOT = { has_realm_law_flag = admin_vassal_wars_banned } + } + } + } + } + + #Spend influence + send_option = { + flag = influence + is_valid = { + scope:actor.influence >= { value = massive_influence_value multiply = 2 } + scope:actor = { is_ai = no } # The AI shouldn't spend influence for this + } + localization = SPEND_INFLUENCE + } + #Use hook + send_option = { + is_valid = { + scope:actor = { has_usable_hook = scope:recipient } + } + flag = hook + localization = SCHEME_HOOK + } + should_use_extra_icon = { + scope:actor = { has_usable_hook = scope:recipient } + } + extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" + + send_options_exclusive = no + + on_accept = { + scope:actor = { + # Add permission + custom_tooltip = { + text = admin_gain_war_permission_desc + set_variable = admin_permission_to_declare_war + } + + # And send a toast as confirmation + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = admin_gained_war_permission_title + left_icon = scope:recipient + custom_tooltip = admin_gained_war_permission_desc + } + } + + # If options are used, spend the corresponding cost + if = { + limit = { scope:influence = yes } + change_influence = { + value = massive_influence_loss + multiply = 2 + } + scope:recipient = { # Liege gets the spent influence + change_influence = { + value = massive_influence_gain + multiply = 2 + } + } + } + if = { + limit = { + scope:hook = yes + has_hook = scope:recipient + } + use_hook = scope:recipient + } + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:recipient + CATALYST = catalyst_hegemon_influenced_by_interaction + } + } + } + + on_decline = { + scope:actor = { + # Add penalties + change_influence = minor_influence_loss + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -20 + } + + # And send a toast to inform + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_bad + title = admin_declined_war_permission_title + left_icon = scope:recipient + custom_tooltip = admin_declined_war_permission_desc + + show_as_tooltip = { change_influence = minor_influence_loss } + } + } + } + } + + ai_accept = { + base = -50 + + # Opinion Factor + opinion_modifier = { + who = scope:recipient + opinion_target = scope:actor + multiplier = 1 + desc = AI_SIMPLE_OPINION_REASON + } + + # Send options + modifier = { + scope:hook = yes + add = 100 + desc = SCHEME_WEAK_HOOK_USED + } + modifier = { + scope:influence = yes + add = { + value = 20 + multiply = scope:actor.influence_level + min = 5 + } + desc = INFLUENCE_REASON + } + + # Relations + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = -100 + desc = AI_YOUR_RIVAL + } + modifier = { + scope:recipient = { + is_close_family_of = scope:actor + } + add = 20 + desc = CLOSE_FAMILY_REASON + } + modifier = { + scope:recipient = { + is_extended_family_of = scope:actor + } + add = 10 + desc = EXTENDED_FAMILY_REASON + } + modifier = { + scope:actor = { + has_relation_friend = scope:recipient + } + add = 20 + desc = WE_ARE_FRIENDS + } + + # Family status + modifier = { # You are a powerful family + scope:actor.house ?= { + is_powerful_family = yes + } + add = 15 + desc = YOUR_FAMILY_IS_POWERFUL + } + modifier = { # You are a dominant family + scope:actor.house ?= { + is_dominant_family = yes + } + add = 30 + desc = YOUR_FAMILY_IS_DOMINANT + } + } + + ai_will_do = { + base = 10 + modifier = { + scope:actor = { + OR = { + has_trait = ambitious + has_trait = brave + has_trait = greedy + has_trait = wrathful + } + } + add = 20 + } + modifier = { + scope:actor = { + has_vassal_stance = glory_hound + } + add = 10 + } + modifier = { # Attempt to be opportunistic if you border weak realms + scope:actor = { + any_top_realm_border_county = { + any_neighboring_county = { + holder.top_liege = { + this != scope:actor.top_liege + current_military_strength < { value = scope:actor.current_military_strength multiply = 0.4 } + } + } + } + } + add = 25 + } + } +} + +# Order Mass Arrests +ep3_mass_arrests_interaction = { + icon = icon_scheme_abduct + category = interaction_category_hostile + filter_tags = { admin_house_head } + + interface_priority = 0 + + desc = ep3_mass_arrests_interaction_desc + + cooldown = { years = 5 } + cooldown_against_recipient = { years = 15 } + + ai_targets = { + ai_recipients = vassals + max = 10 + } + ai_target_quick_trigger = { + adult = yes + } + ai_frequency_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 72 + empire = 36 + hegemony = 36 + } + + is_available = { + government_has_mechanic = administrative + dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_5 } + trigger_if = { + limit = { is_ai = yes } + is_adult = yes + } + top_liege ?= this + has_ep3_dlc_trigger = yes + } + + is_shown = { + scope:recipient = { + liege ?= scope:actor + any_held_title = { + is_noble_family_title = yes + } + } + } + + is_valid_showing_failures_only = { + scope:actor = { + is_in_activity = no + is_imprisoned = no + } + scope:recipient = { + house = { is_dominant_family = no } + NOT = { has_strong_hook = scope:actor } + custom_tooltip = { + text = estate_is_in_capital_desc + domicile ?= { + domicile_location = scope:actor.capital_province + } + } + } + } + + auto_accept = yes + + on_accept = { + scope:recipient.house = { + house_head = { + add_character_flag = { + flag = mass_arrests_house_power_malus + years = 10 + } + # For follow-up event + save_scope_as = imprisoned_house_head + } + custom_tooltip = house_loses_power_rating + every_house_member = { + custom = every_house_member_tt + change_influence = major_influence_loss + custom_tooltip = { + text = imprisoned_by_you + scope:actor = { + imprison = { + target = prev + type = house_arrest + } + } + } + add_opinion = { + modifier = imprisoned_me + years = 10 + target = scope:actor + } + } + } + scope:actor = { + add_tyranny = massive_tyranny_gain + add_legitimacy = medium_legitimacy_loss + + # Fire follow-up + trigger_event = { + id = ep3_decisions_event.3201 + } + } + } + + ai_will_do = { + base = 0 + modifier = { + scope:actor = { + has_relation_rival = scope:recipient + } + add = 20 + desc = AI_YOUR_RIVAL + } + } +}