# 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 = 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 = { is_independent_ruler = no government_allows = 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 = { is_independent_ruler = no government_allows = 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 = { scope:target = { tier >= tier_duchy exists = holder is_noble_family_title = no holder = { top_liege = scope:recipient OR = { has_realm_law = acclamation_succession_law has_realm_law = appointment_succession_law } } } } is_shown = { scope:actor = { is_ai = no government_allows = administrative } trigger_if = { limit = { exists = scope:secondary_recipient } scope:secondary_recipient = { is_independent_ruler = no government_allows = administrative top_liege = scope:actor.top_liege } } } is_valid_showing_failures_only = { } 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 } } } } } } } redirect = { scope:recipient = { if = { limit = { NOT = { 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 } } } 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 } } 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]" } } } } 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 = { 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 } } } # 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 = { NOT = { 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 = { scope:target = { tier >= tier_duchy exists = holder is_noble_family_title = no holder = { top_liege = scope:recipient has_realm_law_flag = appointment_type_succession } } } is_shown = { scope:actor = { is_ai = yes government_allows = administrative } scope:secondary_recipient = { is_independent_ruler = no government_allows = 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 } 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 } } 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 } } 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 } } } # 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 = { NOT = { 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 is used by AI in code, don't change the frequency ai_frequency = 0 ai_will_do = { base = 5 # No one promoting... ripe for the taking modifier = { scope:target = { holder = { has_realm_law_flag = appointment_type_succession } NOT = { any_title_heir = { "appointment_candidate_accumulated_score(scope:target)" > 0 } } NOT = { current_heir = { exists = house exists = scope:actor.house house = scope:actor.house } } } 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:actor = { opinion = { target = scope:secondary_recipient value >= medium_positive_opinion } } factor = 1.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_allows = 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 promote rivals modifier = { scope:actor = { has_relation_rival = scope:secondary_recipient } factor = 0 } # Don't promote a candidate if your house is first in line modifier = { scope:target = { any_title_heir = { exists = house exists = scope:actor.house house = scope:actor.house scope:target = { place_in_line_of_succession = { target = prev value = 1 } } } } factor = 0 } # Don't promote your candidate if they are first in line modifier = { scope:target = { any_title_heir = { this = scope:secondary_recipient scope:target = { place_in_line_of_succession = { target = prev value = 1 } } } } factor = 0 } # Don't promote lowborn or characters of a different house modifier = { NOT = { exists = scope:secondary_recipient.house } factor = 0 } modifier = { exists = scope:secondary_recipient.house exists = scope:actor.house NOT = { scope:actor.house = scope:secondary_recipient.house } factor = 0 } modifier = { # For now scope:actor.top_liege = { has_realm_law = male_preference_law } scope:secondary_recipient = { is_female = yes } factor = 0 } modifier = { # For now scope:actor.top_liege = { has_realm_law = female_preference_law } scope:secondary_recipient = { is_male = yes } factor = 0 } # Don't outcompete someone you like modifier = { scope:target = { any_title_heir = { scope:target = { place_in_line_of_succession = { target = prev value <= 3 } } scope:actor = { has_any_good_relationship_with_character_trigger = { CHARACTER = prev } } } } 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 exists = holder holder = { top_liege = scope:recipient has_realm_law_flag = appointment_type_succession } } } is_shown = { scope:actor = { government_allows = administrative } scope:secondary_recipient = { is_independent_ruler = no government_allows = 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 } } 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 } } } # 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 } } } } } } ai_targets = { ai_recipients = scripted_relations max = 10 } ai_frequency = 24 ai_potential = { influence > major_influence_value government_allows = administrative ai_honor <= 25 } 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 } } } # Request support from another character request_appointment_support = { category = interaction_category_succession common_interaction = no interface_priority = 175 filter_tags = { admin_house_head } custom_character_sort = { governor_efficiency candidate_score } desc = request_appointment_support_desc 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_allows = 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_allows = 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 >= tier_duchy exists = holder 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_shown = { scope:actor = { government_allows = administrative } scope:recipient = { this != scope:actor government_allows = administrative top_liege = scope:actor.top_liege } } is_valid_showing_failures_only = { scope:actor = { house = { any_house_member = { government_allows = administrative any_valid_title_to_grant_trigger = { CANDIDATE = this TOP_LIEGE = scope:actor.top_liege } count >= 1 } } 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 NOT = { scope:recipient = scope:secondary_recipient } } } 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 = { 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 = appointment_score_medium_value } } 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 = appointment_score_minor_value } 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 = appointment_score_medium_value } 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 = appointment_score_major_value } 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 # 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 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 = { is_independent_ruler = yes NOT = { 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 NOT = { 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 } exists = house 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 NOT = { 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_potential = { government_allows = administrative house ?= { OR = { is_powerful_family = yes is_dominant_family = yes } } } ai_frequency = 48 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 = 12 desc = demand_admin_interaction_desc is_shown = { scope:actor = { government_allows = administrative } scope:recipient = { target_is_liege_or_above = scope:actor is_ai = yes is_ruler = yes NOT = { government_allows = administrative } } trigger_if = { limit = { scope:actor = { is_ai = yes } } scope:recipient = { highest_held_title_tier >= tier_county } } } cooldown_against_recipient = { years = 10 } is_valid_showing_failures_only = { scope:recipient = { is_busy_in_events_localised = yes } scope:recipient = { NOT = { has_strong_hook = scope:actor } } scope:recipient = { is_at_war = no } 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 = head_of_faith_unable_to_change_government_desc NOT = { scope:recipient = { faith.religious_head ?= this } } } } # Offer hereditary boost send_option = { is_valid = { 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 } } on_decline = { scope:recipient = { custom_tooltip = demand_admin_interaction_vassal_refuses } } ai_potential = { government_allows = administrative is_adult = yes } ai_will_do = { base = 100 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 demand_admin_acceptance_modifier = yes } } #Contest the appointment of another character to a title you have a claim on 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 #icon = TODO_CD_EP3: TIT-55514 redirect = { 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_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_allows = administrative } scope:intermediary ?= { government_allows = 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 > tier_county any_held_title = { tier >= tier_duchy 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 >= tier_duchy scope:actor = { has_claim_on = scope:target } } } } 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 } } 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 } 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 = { limit = { is_noble_family_title = no tier >= tier_county 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 } } 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_amkingtier_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 = 12 ai_potential = { is_landless_administrative = yes liege = { has_realm_law_flag = title_revocation_allowed } } 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 } } } # 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 = 36 cooldown_against_recipient = { years = 25 } cost = { influence = admin_council_cost_value } is_shown = { NOT = { scope:recipient = scope:actor } scope:actor = { liege ?= scope:recipient } #Admin only scope:actor = { government_allows = administrative } scope:recipient = { government_allows = administrative } 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 } NOT = { is_councillor = yes } NAND = { has_council_position = councillor_court_chaplain faith = { OR = { has_doctrine = doctrine_clerical_succession_temporal_fixed_appointment has_doctrine = doctrine_clerical_succession_spiritual_fixed_appointment } } } } } 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 } } } stress_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_potential = { is_independent_ruler = no is_councillor = no liege ?= { NOT = { has_character_flag = refused_council_request } is_at_war = no } } 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 = { NOT = { 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 interface_priority = 60 # actor character giving the title # recipient character receiving the title is_shown = { NOT = { scope:actor = scope:recipient } scope:recipient = { target_is_liege_or_above = scope:actor highest_held_title_tier >= tier_duchy government_allows = administrative } scope:actor = { government_allows = administrative is_independent_ruler = yes highest_held_title_tier >= tier_empire } } 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 is_busy_in_events_localised = yes } custom_tooltip = { text = have_no_valid_county_to_assign_trigger scope:actor = { any_held_title = { count >= 1 tier = tier_county NOT = { this = scope:actor.primary_title.title_capital_county } duchy ?= { NOT = { this = scope:actor.primary_title.title_capital_county.duchy } } } } } } can_be_picked_title = { scope:target = { is_leased_out = no tier = tier_county custom_tooltip = { NOT = { this = scope:actor.primary_title.title_capital_county } text = not_can_be_picked_capital } custom_tooltip = { duchy ?= { NOT = { this = scope:actor.primary_title.title_capital_county.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. NOT = { 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 = { 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 = { limit = { exists = scope:actor.dynasty scope:actor.dynasty = { has_dynasty_perk = ep1_culture_legacy_3 } scope:recipient = { is_playable_character = no NOT = { 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 = 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 = 36 desc = castrate_child_interaction_desc is_shown = { has_ep3_dlc_trigger = yes scope:actor = { culture = { has_cultural_parameter = family_castration } NAND = { is_ai = yes any_close_family_member = { is_ai = no } } } 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_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_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 } } } ai_potential = { is_adult = yes } # 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_shown = { # Only admin gov care about this scope:actor = { government_allows = administrative } scope:recipient = { government_allows = administrative } # Only if you actually have any eunuchs in your court scope:actor = { any_courtier = { is_eunuch_trigger = yes } } # Cannot exchange eunuchs with self NOT = { scope:recipient = scope:actor } # Only significant rulers scope:actor.highest_held_title_tier > tier_barony # 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 } is_valid_showing_failures_only = { # Must be available scope:recipient = { is_busy_in_events_localised = yes } trigger_if = { limit = { exists = scope:secondary_recipient } scope:secondary_recipient = { is_busy_in_events_localised = yes } } 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 } 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 } } 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 = 36 ai_potential = { highest_held_title_tier >= tier_county } 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 can_be_picked_artifact = { scope:actor = { any_artifact = { this = scope:target } #block the artifact from the laamp escort contract NOT = { any_scheme = { var:escorted_artifact ?= scope:target } } } } is_shown = { scope:recipient = scope:actor scope:actor = { domicile ?= { has_domicile_building_or_higher = cabinet_of_curiosities_01 } } } is_valid_showing_failures_only = { # needs to have an artifact to give away scope:actor = { has_any_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 = 84 ai_potential = { has_any_unequipped_artifact = yes any_character_artifact = { count >= 5 is_equipped = no } } 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 = 36 desc = acknowledge_governor_interaction_desc is_shown = { NOT = { scope:actor = scope:recipient } scope:recipient = { target_is_liege_or_above = scope:actor highest_held_title_tier >= tier_duchy government_allows = administrative } scope:actor = { government_allows = administrative is_independent_ruler = yes highest_held_title_tier >= tier_empire } } 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_potential = { government_allows = administrative highest_held_title_tier >= tier_empire } 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 } } } # Affect Governor's performance boost_efficiency_interaction = { category = interaction_category_vassal filter_tags = { admin_governor } icon = icon_boost_efficiency interface_priority = 19 popup_on_receive = yes ai_targets = { ai_recipients = peer_vassals max = 15 } ai_targets = { ai_recipients = vassals max = 15 } ai_frequency = 36 desc = boost_efficiency_interaction_desc is_shown = { scope:actor = { government_allows = administrative } scope:recipient = { government_allows = administrative NOT = { 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 } } 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 = minor_influence_value if = { limit = { scope:influence_boost = yes } add = scope:recipient.medium_influence_value } } gold = { value = 0 if = { limit = { scope:gold_boost = yes } add = scope:recipient.medium_gold_value } } } 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_potential = { government_allows = administrative top_liege = { any_vassal = { is_governor = yes NOT = { this = root } } } } 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 = { # Avoid boosting rivals scope:actor = { has_relation_rival = scope:recipient } add = -25 } modifier = { # Avoid making potential house gains harder scope:recipient = { any_held_title = { tier >= 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 } 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 = 36 desc = damage_efficiency_interaction_desc is_shown = { scope:actor = { government_allows = administrative } scope:recipient = { is_governor = yes NOT = { 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 } } 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 = minor_influence_gain if = { limit = { scope:influence_damage = yes } add = scope:recipient.medium_influence_gain } } gold = { value = 0 if = { limit = { scope:gold_damage = yes } add = scope:recipient.medium_gold_value } } } 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_potential = { government_allows = administrative top_liege = { any_vassal = { is_governor = yes NOT = { this = root } } } } 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 = { # Damage rivals scope:actor = { has_relation_rival = scope:recipient } add = 15 } modifier = { # Damage when house stands to gain scope:recipient = { any_held_title = { tier >= 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 } opinion_modifier = { # Opinion Factor - boost for characters they dislike who = scope:actor opinion_target = scope:recipient multiplier = -0.25 } } } # 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_shown = { scope:actor = { is_independent_ruler = yes government_allows = administrative } scope:recipient = { NOT = { 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 NOT = { this = 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 = { tier = tier_kingdom is_landless_type_title = no is_noble_family_title = no } } add = { every_held_title = { limit = { tier = tier_kingdom 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 = { tier = tier_duchy is_landless_type_title = no is_noble_family_title = no } } add = { every_held_title = { limit = { tier = tier_duchy 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 } } } } } } on_accept = { scope:recipient = { if = { limit = { exists = house 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 = { NOT = { this = scope:actor.house } } every_house_member = { custom = custom.every_house_member_secondary_recipient limit = { is_ai = yes NOT = { 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 exists = current_heir 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 exists = current_heir 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 } } } 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 = 6 ai_potential = { influence > massive_influence_value is_at_war = no # Don't spend influence when at war in case troops are needed } 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 NOT = { this = scope:actor } } } } add = 10 } opinion_modifier = { # Opinion Factor who = scope:actor opinion_target = scope:recipient multiplier = -0.25 } } } # Demand Emperor fires Governor - AKA Compel Resignation/compel_resignation force_governor_removal_interaction = { category = interaction_category_succession filter_tags = { admin_governor } 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:actor = { is_independent_ruler = no exists = top_liege top_liege = { government_allows = administrative } } scope:secondary_recipient ?= { is_governor = yes } OR = { scope:secondary_recipient ?= { is_vassal_of = scope:recipient } scope:secondary_recipient ?= scope:recipient } scope:secondary_recipient != scope:actor scope:secondary_recipient != scope:recipient } is_valid_showing_failures_only = { scope:actor = { NOR = { is_at_war_with = scope:recipient is_at_war_with = scope:secondary_recipient } top_liege = { any_vassal = { is_governor = yes NOT = { this = scope:actor } } } } scope:secondary_recipient = { NOT = { is_at_war_with = scope:recipient } } } 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 = { house ?= { is_dominant_family = no } any_held_title = { is_landless_type_title = no is_noble_family_title = no } exists = house is_governor = yes NOR = { this = scope:actor this = scope:recipient } } redirect = { if = { limit = { scope:recipient != scope:actor.top_liege } scope:recipient = { save_scope_as = secondary_recipient } } scope:actor.top_liege ?= { save_scope_as = recipient } } populate_recipient_list = { scope:actor.top_liege = { every_vassal = { limit = { exists = house is_governor = yes NOR = { this = scope:actor this = scope:recipient } } add_to_list = characters } } } cost = { influence = { value = 0 if = { limit = { exists = scope:secondary_recipient } scope:secondary_recipient ?= { if = { limit = { any_held_title = { tier = tier_duchy is_landless_type_title = no is_noble_family_title = no } } add = { value = 0 every_held_title = { limit = { tier = tier_duchy 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 = { tier = tier_kingdom is_landless_type_title = no is_noble_family_title = no } } add = { value = 0 every_held_title = { limit = { tier = tier_kingdom 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 } } } } } } 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 } 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 } 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 = 60 ai_potential = { influence > massive_influence_value is_independent_ruler = no government_allows = 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 NOT = { 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 NOT = { 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 } } 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 } } } # Force Step Down 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 = tier_duchy is_noble_family_title = no } } has_valid_target_showing_failures_only = { scope:target = { tier = tier_duchy 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 = 180 is_shown = { scope:actor = { government_allows = administrative is_independent_ruler = no this != scope:recipient } scope:recipient = { government_allows = administrative is_governor = yes } } 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 } } 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_valid = { scope:actor.influence >= massive_influence_value } localization = SPEND_INFLUENCE } send_option = { flag = gold is_valid = { scope:actor.gold >= scope:actor.massive_gold_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 = { # Save the number of held governorships scope:recipient = { save_scope_value_as = { name = recipient_number_of_governorships value = { value = 0 every_held_title = { limit = { tier >= tier_duchy is_noble_family_title = no } add = 1 } } } } if = { limit = { scope:hook = yes } use_hook = scope:recipient } if = { limit = { scope:influence = yes } change_influence = { value = massive_influence_loss multiply = 2 multiply = scope:recipient_number_of_governorships } } if = { limit = { scope:gold = yes } pay_short_term_gold = { target = scope:recipient gold = { value = massive_gold_value multiply = scope:recipient_number_of_governorships } } } 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 } 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 } } } } 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 } } } } } } 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 } # 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_potential = { NOT = { any_scheme = { is_scheme_category = political } } government_allows = administrative is_independent_ruler = no highest_held_title_tier >= tier_duchy } 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 house = { any_house_member = { scope:recipient.primary_title = { place_in_line_of_succession = { target = prev value <= 3 } } } } add = 100 } #Personality modifier = { has_trait = vengeful add = 10 } modifier = { has_trait = deceitful add = 10 } modifier = { has_trait = honest add = -10 } # House & Family modifier = { is_close_family_of = scope:recipient add = -500 } modifier = { house = scope:recipient.house add = -500 } #Feuds modifier = { house.house_head ?= { any_owned_story = { story_type = story_cycle_house_feud has_variable = house_feud_house var:house_feud_house = scope:recipient.house } } add = 75 } # Relationships modifier = { add = 25 has_any_mild_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } } modifier = { add = 50 has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } } modifier = { add = 100 has_any_worst_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } } modifier = { add = -50 has_any_mild_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } } modifier = { add = -100 has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } } modifier = { factor = 0 has_any_best_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } } } } # Request a governorship from your liege request_governorship_interaction = { category = interaction_category_vassal icon = icon_request_governorship desc = request_governorship_interaction_desc common_interaction = yes filter_tags = { admin_liege } 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 = 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 = 36 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 NOT = { holder = scope:recipient } } multiply = { value = 0.5 desc = candidacy_request_desc } } } } } is_shown = { scope:recipient != scope:actor scope:recipient = scope:actor.top_liege scope:actor = { government_allows = administrative is_governor = no } } is_valid_showing_failures_only = { scope:actor = { is_adult = yes is_landed = no NOT = { is_at_war_with = scope:recipient } } } target_type = title target_filter = secondary_recipient_de_jure_titles can_be_picked_title = { scope:target = { custom_tooltip = { text = request_governorship_interaction_tier_tt OR = { tier = tier_duchy tier = tier_kingdom } } trigger_if = { limit = { is_title_created = no } custom_tooltip = { text = request_governorship_interaction_created_tt any_de_jure_county = { holder = scope:recipient } } } trigger_else = { custom_tooltip = { text = request_governorship_interaction_holder_tt holder.top_liege = scope:actor.top_liege } } custom_tooltip = { text = request_governorship_interaction_liege_duchy_tt NOT = { any_de_jure_county = { this = scope:recipient.capital_county } } } trigger_if = { limit = { scope:target.holder ?= scope:recipient } custom_tooltip = { text = request_governorship_interaction_county_tt any_de_jure_county = { holder = scope:recipient } } } } } has_valid_target_showing_failures_only = { scope:target.tier = tier_duchy trigger_if = { limit = { exists = scope:target.holder } scope:target.holder ?= { government_allows = administrative } } } can_send = { scope:actor = { is_landed = no } } 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 NOT = { 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_house_head_opinion add_opinion = { target = scope:actor modifier = requested_house_heired_governorship } } every_in_list = { list = governorship_direct_opinion add_opinion = { target = scope:actor modifier = requested_heired_governorship } } } } } } } 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 } } ai_potential = { is_governor = no } 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_LIEGE_OPINION_REASON } modifier = { exists = scope:target.current_heir NOR = { scope:target.current_heir = scope:recipient scope:target.current_heir = scope:actor trigger_if = { limit = { exists = scope:target.current_heir.house.house_head } scope:target.current_heir != scope:target.current_heir.house.house_head } } add = { value = "scope:recipient.opinion(scope:target.current_heir)" divide = 2 round = yes } desc = AI_LIEGE_OPINION_HEIR_REASON } modifier = { exists = scope:target.current_heir scope:target.current_heir.house.house_head ?= 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_LIEGE_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_LIEGE_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.capital_county.duchy any_title_to_title_neighboring_and_across_water_duchy = { this = scope:recipient.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 = { save_temporary_scope_as = kingdom } } trigger_else = { scope:target.kingdom = { save_temporary_scope_as = kingdom } } scope:kingdom = { NOR = { this = scope:recipient.capital_county.kingdom any_title_to_title_neighboring_and_across_water_kingdom = { this = scope:recipient.capital_county.kingdom } } } 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_shown = { NOT = { scope:actor = scope:recipient } scope:actor = { culture = { has_cultural_parameter = allows_noble_family_adoption } house.house_head ?= { any_held_title = { is_noble_family_title = yes } } } scope:recipient = { # Don't get imprisoned and so on is_available = yes NOR = { # They don't already belong to your house house ?= scope:actor.house # Don't adopt your own grandkids any_ancestor = { this = scope:actor } } } scope:actor = { is_house_head = yes } } 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 = { age >= 10 trigger_if = { limit = { exists = house.house_head } custom_tooltip = { text = adopt_interaction_noble_family_is_not_house_head_tt NOT = { scope:recipient.house.house_head = scope:recipient } } } is_ruler = no } } 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.house scope:recipient = { send_interface_toast = { type = event_toast_effect_bad title = noble_family_adoption_effect_toast left_icon = scope:recipient right_icon = scope:actor.house 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_potential = { is_house_head = yes house ?= { any_house_member = { count <= 5 is_alive = yes } } } 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 = { scope:actor = { exists = house } scope:recipient = { exists = house } exists = scope:actor.house.house_head.top_liege 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 = { exists = house 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_faith faith = { faith_hostility_level = { target = scope:actor.top_liege.primary_title.state_faith value >= faith_astray_level } } add = { value = "faith.faith_hostility_level(scope:actor.top_liege.primary_title.state_faith)" 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 = 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 = 36 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_shown = { scope:actor = { government_allows = administrative is_independent_ruler = no is_governor = yes } scope:recipient = { government_allows = administrative 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 } } } } } } 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_potential = { is_governor = yes } 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 = 24 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_shown = { scope:actor = { government_allows = administrative is_independent_ruler = no is_governor = yes } scope:recipient = { government_allows = administrative this = scope:actor.liege } } 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 >= tier_duchy is_noble_family_title = no exists = holder holder.top_liege = scope:recipient NOT = { holder = scope:actor } any_title_maa_regiment = { exists = this } } scope:recipient = { primary_title ?= { NOT = { this = 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 } } } } } 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_potential = { is_governor = yes # Only governors may ask for troops NOT = { # Don't ask for more troops if you have borrowed some already any_maa_regiment = { is_title_maa_regiment = yes regiment_owning_title = { holder = root } } } } 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 } 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 } NOT = { 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 = { NOT = { holder = scope:actor } } } } } add = { value = 0 scope:actor = { every_held_title = { every_controlled_title_maa_regiment = { limit = { regiment_owning_title = { NOT = { 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 = 24 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 = { NOT = { holder = scope:actor.top_liege } } } } } subtract = { value = { value = define:NAdministrative|BASE_REASSIGN_COST multiply = 0.8 } desc = admin_troops_borrowed_years_desc } } } } is_shown = { scope:actor = { government_allows = administrative is_independent_ruler = no is_ai = no # The AI should not request their troops back ahead of time } scope:recipient = { government_allows = 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 = { NOT = { holder = scope:actor } } } } } } } has_valid_target_showing_failures_only = { scope:target = { any_owned_title_maa_regiment = { regiment_controlling_title = { NOT = { this = scope:target } } } } } can_send = { custom_tooltip = { text = admin_troops_controlled_by_liege_desc scope:target = { any_owned_title_maa_regiment = { regiment_controlling_title = { NOT = { 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 = { NOT = { 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 } } } 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 use_diplomatic_range = yes ai_min_reply_days = 4 ai_max_reply_days = 9 cooldown_against_recipient = { years = 5 } is_shown = { scope:actor = { is_independent_ruler = no government_allows = administrative } scope:secondary_recipient ?= { NOT = { house = scope:recipient.house } top_liege = scope:actor.top_liege NOT = { house = scope:actor.house } government_allows = administrative any_held_title = { is_noble_family_title = yes } } } is_valid_showing_failures_only = { scope:actor = { is_adult = yes custom_tooltip = { text = raid_estate_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 } } } scope:recipient.house.house_head ?= { custom_tooltip = { text = raid_estate_noble_family_target_tt any_held_title = { is_noble_family_title = yes } } custom_tooltip = { text = raid_estate_estate_tt domicile ?= { is_domicile_type = estate } } } scope:actor = { NOT = { is_at_war_with = scope:recipient } } } 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 } 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 } } } 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 = { 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_potential = { is_house_head = yes house ?= { any_house_member = { count <= 5 is_alive = yes } } } 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 = 120 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 = { existing_feud_against_target_trigger = { TARGET = scope:recipient } add = 15 } } } # 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 = 60 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_shown = { scope:actor = { government_allows = administrative is_independent_ruler = no } 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 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 } } } } 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_potential = { NOR = { has_trait = humble has_trait = content } } 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 = { NOT = { house = scope:recipient.house } } } ## Dominant family modifier = { scope:actor.house = { is_dominant_family = yes NOT = { 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 NOT = { 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 } } } } target_type = title target_filter = secondary_recipient_de_jure_titles can_be_picked_title = { scope:target = { is_title_created = yes tier = tier_duchy } } populate_recipient_list = { scope:recipient = { if = { limit = { vassal_contract_has_flag = admin_theme_frontier } 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 = { vassal_contract_has_flag = admin_theme_frontier } random_character_to_title_neighboring_duchy = { limit = { exists = holder 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 = { exists = holder 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_shown = { scope:actor = { is_independent_ruler = yes government_allows = administrative NOT = { government_has_flag = government_is_landless_adventurer } } scope:recipient = { government_allows = 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 } } 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 } } custom_tooltip = { text = admin_vassal_war_no_target_desc trigger_if = { limit = { vassal_contract_has_flag = admin_theme_frontier } any_character_to_title_neighboring_duchy = { exists = holder 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 = { exists = holder 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_potential = { government_allows = administrative is_independent_ruler = yes } 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 = { scope:actor = { exists = house } scope:recipient = { exists = house } exists = scope:actor.house.house_head.top_liege 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_faith faith = { faith_hostility_level = { target = scope:actor.top_liege.primary_title.state_faith value >= faith_astray_level } } add = { value = "faith.faith_hostility_level(scope:actor.top_liege.primary_title.state_faith)" 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 = 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 = family ai_recipients = peer_vassals ai_recipients = vassals ai_recipients = liege } ai_target_quick_trigger = { adult = yes } ai_frequency = 36 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_shown = { NOT = { scope:recipient = scope:actor } scope:actor = { government_allows = administrative this = house.house_head } scope:recipient = { government_allows = administrative house = scope:actor.house } } is_valid_showing_failures_only = { scope:actor = { NOT = { is_at_war_with = scope:recipient } } scope:recipient = { is_landed = 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_building_or_higher = cabinet_of_curiosities_01 } } 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 = { OR = { scope:actor.domicile ?= { has_domicile_building_or_higher = guardhouse_01 } scope:actor.domicile ?= { has_domicile_building_or_higher = barracks_01 } } } 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 = { OR = { scope:actor.domicile ?= { has_domicile_building_or_higher = guardhouse_03 } scope:actor.domicile ?= { has_domicile_building_or_higher = barracks_01 } scope:actor.domicile ?= { has_domicile_building_or_higher = watchtower_04 } } } flag = maa localization = ASK_FOR_MAA } send_option = { is_shown = { OR = { scope:actor.domicile ?= { has_domicile_building_or_higher = storage_01 } scope:actor.domicile ?= { has_domicile_building_or_higher = storage_warehouse_03 } } } 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_potential = { is_house_head = yes } 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 ai_targets = { ai_recipients = head_of_faith } ai_target_quick_trigger = { adult = yes } ai_frequency = 24 cooldown_against_recipient = { years = 10 } is_shown = { NOT = { scope:recipient = scope:actor } scope:actor.faith = { religious_head = scope:recipient has_doctrine = doctrine_spiritual_head } scope:actor = { is_playable_character = yes government_allows = administrative is_lowborn = no } } is_valid_showing_failures_only = { scope:actor = { piety >= massive_piety_value custom_description = { text = "hof_ask_for_gold_excommunicated" NOT = { has_trait = excommunicated } } NOT = { is_at_war_with = scope:recipient } custom_description = { text = "hof_interaction_unreformed_faith" NOT = { faith = { has_doctrine_parameter = unreformed } } } custom_description = { text = "hof_interaction_state_faith" top_liege = { government_allows = state_faith exists = primary_title.state_faith } faith = { this = scope:actor.top_liege.primary_title.state_faith } } custom_description = { text = "hof_interaction_has_house_modifier" exists = house house = { NOT = { has_house_modifier = ep3_requested_faith_support_modifier } } } custom_description = { text = "hof_interaction_is_house_head" exists = house house = { house_head = scope:actor } } } scope:recipient = { is_busy_in_events_localised = yes } } auto_accept = { custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:hook = yes } } send_option = { is_shown = { NOT = { 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 = { scope:actor = { trigger_event = ep3_interactions_events.0621 } } ai_potential = { is_playable_character = yes piety >= massive_piety_value NOT = { has_trait = excommunicated } highest_held_title_tier > tier_barony exists = faith.religious_head exists = house } ai_accept = { base = -50 opinion_modifier = { opinion_target = scope:actor who = scope:recipient multiplier = 0.5 } #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 = { # HoF wants the influence for themselves! add = -10 desc = THEY_ARE_GREEDY scope:recipient = { ai_greed >= high_positive_greed } } 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_faith_trigger = { FAITH = faith TRAIT = fornicator GENDER_CHARACTER = scope:actor } } AND = { has_trait = adulterer trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith 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 = { faith = { 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_faith_trigger = { FAITH = faith TRAIT = kinslayer_1 GENDER_CHARACTER = scope:actor } } AND = { has_trait = kinslayer_2 trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = kinslayer_2 GENDER_CHARACTER = scope:actor } } AND = { has_trait = kinslayer_3 trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith 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 } } 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 } } } } # 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_shown = { scope:actor = { has_ep3_dlc_trigger = yes is_at_war = yes NOR = { this = scope:recipient is_at_war_with = scope:recipient } government_allows = administrative } scope:recipient = { government_allows = 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 } modifier = { # Reluctant to join against Best Friends add = -100 has_relation_best_friend = scope:secondary_recipient desc = WONT_FIGHT_BEST_FRIEND } modifier = { # Reluctant to join against Lovers add = -100 has_relation_lover = scope:secondary_recipient desc = WONT_FIGHT_LOVER } modifier = { # Reluctant to join against Soulmate add = -200 has_relation_soulmate = scope:secondary_recipient desc = WONT_FIGHT_SOULMATE } 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 = { NOT = { 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_shown = { scope:actor = { has_ep3_dlc_trigger = yes is_at_war_with = scope:recipient government_allows = administrative NOT = { this = scope:recipient } } scope:recipient = { government_allows = 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 } 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 } modifier = { # Reluctant to join against Lovers add = -100 exists = scope:secondary_recipient has_relation_lover = scope:secondary_recipient desc = WONT_FIGHT_LOVER } modifier = { # Reluctant to join against Soulmate add = -200 exists = scope:secondary_recipient has_relation_soulmate = scope:secondary_recipient desc = WONT_FIGHT_SOULMATE } } 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 = 60 ai_min_reply_days = 2 ai_max_reply_days = 5 is_shown = { scope:actor = { government_allows = administrative liege = scope:recipient OR = { vassal_contract_has_flag = admin_theme_frontier vassal_contract_has_flag = admin_theme_naval } } scope:recipient = { government_allows = administrative is_independent_ruler = yes has_realm_law_flag = admin_vassal_wars_permission_only } } is_valid_showing_failures_only = { scope:recipient = { is_busy_in_events_localised = yes } 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 } } } 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_potential = { government_allows = administrative is_adult = yes liege = { is_at_war = no } # Don't ask if your liege is at war } 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 = { NOT = { 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 = 36 is_shown = { has_ep3_dlc_trigger = yes scope:actor = { is_independent_ruler = yes government_allows = administrative dynasty ?= { has_dynasty_perk = ep3_administrative_legacy_5 } } scope:recipient = { liege ?= scope:actor any_held_title = { is_noble_family_title = yes } } } is_valid_showing_failures_only = { scope:actor = { NOT = { exists = involved_activity } 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_potential = { government_allows = administrative is_adult = yes } ai_will_do = { base = 0 modifier = { scope:actor = { has_relation_rival = scope:recipient } add = 20 desc = AI_YOUR_RIVAL } } }