#Interactions relating to vassals grant_vassal_interaction = { category = interaction_category_vassal common_interaction = yes interface = transfer_vassal icon = icon_vassal special_interaction = grant_vassal_interaction populate_actor_list = { scope:actor = { every_vassal = { add_to_list = characters } } } desc = grant_vassal_interaction_desc prompt = GRANT_VASSAL_SELECT_VASSAL_TO_TRANSFER greeting = positive notification_text = GRANT_VASSAL_PROPOSAL pre_answer_yes_key = ACCEPT pre_answer_no_key = DECLINE is_shown = { scope:recipient != scope:actor OR = { AND = { exists = scope:recipient.liege scope:recipient.liege = scope:actor } AND = { exists = scope:actor.liege scope:actor.liege = scope:recipient } AND = { scope:actor.faith.religious_head = scope:recipient scope:recipient = { top_liege = this } } } scope:recipient.highest_held_title_tier > tier_barony } is_valid_showing_failures_only = { scope:recipient = { is_landed = yes # Landless rulers should not have Vassals # Gallivanters won't accept additional responsibilities. NOT = { has_trait = gallivanter } } NOT = { scope:actor = { is_at_war_with = scope:recipient } } trigger_if = { limit = { exists = scope:secondary_actor } NOT = { scope:secondary_actor = { is_at_war_with = scope:recipient } } scope:recipient.primary_title.tier > scope:secondary_actor.primary_title.tier } trigger_if = { limit = { scope:actor = { is_ai = yes } exists = scope:secondary_actor } trigger_if = { limit = { NOT = { scope:recipient.primary_title = { any_in_de_jure_hierarchy = { holder = scope:secondary_actor } } } } scope:recipient.vassal_count < scope:recipient.vassal_limit # Avoid creating vassals with unsustainable situations } scope:secondary_actor = { NOT = { has_character_flag = ai_should_not_transfer } } } trigger_if = { limit = { scope:recipient.highest_held_title_tier <= tier_county } scope:recipient = { highest_held_title_tier > tier_county } } trigger_else = { scope:actor = { custom_description = { text = "basic_valid_vassal_to_tranfer" object = scope:recipient any_vassal = { NOT = { highest_held_title_tier = tier_barony } scope:recipient.highest_held_title_tier > highest_held_title_tier } } } } # Prevent Admin AI transferring admin vassals under non-admin vassals NAND = { scope:actor ?= { is_ai = yes government_allows = administrative } scope:recipient ?= { NOT = { government_allows = administrative } } scope:secondary_actor ?= { government_allows = administrative } } # Ritsuryo cannot transfer Soryo to Ritsuryo custom_tooltip = { text = ritsuryo_to_soryo_invalid_to_transfer NAND = { scope:actor ?= { has_government = japan_administrative_government } scope:recipient ?= { has_government = japan_administrative_government } scope:secondary_actor ?= { has_government = japan_feudal_government } } } custom_tooltip = { text = cannot_transfer_bloc_leader_as_vassal_tt NOT = { scope:secondary_actor ?= { exists = house.house_confederation.leading_house house.house_confederation.leading_house ?= house is_house_head = yes } } } } can_be_picked = { scope:recipient != root highest_held_title_tier > tier_barony highest_held_title_tier < scope:recipient.highest_held_title_tier trigger_if = { limit = { scope:actor.liege = scope:recipient } custom_tooltip = { text = is_de_jure_liege_of_target NOT = { primary_title = { any_this_title_or_de_jure_above = { holder = scope:actor } } } } } # You can't give your diarch away as a vassal. custom_description = { text = cannot_grant_own_diarch_as_vassal subject = scope:actor.diarch NOT = { root ?= scope:actor.diarch } } # Not at war with the vassal being transferred (blocks explicit transfer of war enemies, which invalidates the war). custom_description = { text = "basic_is_at_war_with_vassal" subject = root object = scope:actor NOT = { root = { is_at_war_with = scope:actor } } } # Not at war with a vassal under the vassal being transferred (blocks implicit transfers of war enemies). custom_description = { text = "basic_is_at_war_with_sub_vassal" subject = root object = scope:actor NOT = { any_vassal_or_below = { is_at_war_with = root } } } # EP3 Admin - You cannot give away noble families custom_description = { text = admin_cannot_grant_vassal_noble_family subject = root trigger_if = { limit = { government_allows = administrative } any_held_title = { is_noble_family_title = no } } } } auto_accept = { scope:recipient = { custom_description = { text = wants_more_vassals is_ai = yes } } } on_accept = { scope:actor = { send_interface_toast = { type = event_toast_effect_good title = grant_vassal_interaction_notification right_icon = scope:recipient left_icon = scope:secondary_actor # If we're granting a vassal to our liege, gain a truce with our former vassal (we can't immediately reconquer them, and they can't attack us either). if = { limit = { scope:actor = { is_vassal_of = scope:recipient } } add_truce_both_ways = { character = scope:secondary_actor days = 3650 name = TRUCE_GRANT_INDEPENDENCE } } # Transfer the vassal over to their new liege. create_title_and_vassal_change = { type = granted save_scope_as = change add_claim_on_loss = no } scope:secondary_actor = { change_liege = { liege = scope:recipient change = scope:change } } resolve_title_and_vassal_change = scope:change # Gain an opinion bonus with the person we gave a vassal to. scope:recipient = { add_opinion = { target = scope:actor modifier = granted_vassal } } } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = miniscule_unity_gain DESC = clan_unity_grant_vassal.desc REVERSE_NON_HOUSE_TARGET = yes } hidden_effect = { # Struggle catalyst if = { limit = { fp3_struggle_involves_one_supporter_and_one_detractor = { FIRST = scope:actor SECOND = scope:recipient } scope:actor = { any_character_struggle = { involvement = involved phase_has_catalyst = catalyst_grants_vassal_to_de_jure_liege_supporter_detractor is_secondary_character_involvement_involved_trigger = { CHAR = scope:recipient } } } scope:recipient.primary_title = { any_this_title_or_de_jure_above = { holder = scope:secondary_actor } } } scope:actor = { every_character_struggle = { involvement = involved activate_struggle_catalyst = { catalyst = catalyst_grants_vassal_to_de_jure_liege_supporter_detractor character = scope:actor } log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_grants_vassal_to_de_jure_liege_supporter_detractor } } } } if = { limit = { scope:recipient = { government_has_flag = government_is_nomadic } } while = { limit = { scope:secondary_actor ?= { any_held_title = { vassal_grant_de_jure_shift_trigger = yes } } } scope:secondary_actor ?= { random_held_title = { limit = { vassal_grant_de_jure_shift_trigger = yes } set_de_jure_liege_title = scope:recipient.primary_title } } } } } } on_decline = { scope:actor = { trigger_event = char_interaction.0211 } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:recipient TARGET = scope:actor VALUE = miniscule_unity_loss DESC = clan_unity_grant_vassal_decline.desc REVERSE_NON_HOUSE_TARGET = no } } # AI handled entirely though code } retract_vassal_interaction = { category = interaction_category_vassal special_interaction = retract_vassal_interaction interface = transfer_vassal ai_maybe = yes ai_min_reply_days = 4 ai_max_reply_days = 9 popup_on_receive = yes pause_on_receive = yes icon = icon_liege interface_priority = 109 #after revoke title desc = retract_vassal_interaction_desc on_decline_summary = general_rebellion_decline_summary prompt = RETRACT_VASSAL_SELECT_VASSAL_TO_RETRACT notification_text = RETRACT_VASSAL_PROPOSAL populate_recipient_list = { scope:recipient = { every_vassal = { add_to_list = characters } } } is_shown = { scope:recipient != scope:actor scope:recipient = { highest_held_title_tier > tier_barony liege = scope:actor } } is_valid_showing_failures_only = { vassal_retraction_standard_valid_showing_failures_only_trigger = yes # Make sure this exactly matches "can_be_picked" section below scope:recipient = { custom_description = { text = "basic_vassal_to_retract" any_vassal = { highest_held_title_tier > tier_barony } } } # Plus make sure there's a legal right to retract. scope:actor = { trigger_if = { limit = { government_has_flag = government_is_tribal } custom_description = { text = "has_law_allowing_vassal_retraction_tribal" has_realm_law_flag = vassal_retraction_allowed } } trigger_else_if = { limit = { government_has_flag = government_is_administrative } custom_description = { text = "has_law_allowing_vassal_retraction_admin" has_realm_law_flag = vassal_retraction_allowed } } trigger_else = { custom_description = { text = "has_law_allowing_vassal_retraction_crown" has_realm_law_flag = vassal_retraction_allowed } } } scope:recipient = { NOT = { has_strong_hook = scope:actor } } custom_tooltip = { text = cannot_take_overt_hostile_actions_against_diarch.tt NOT = { scope:recipient ?= scope:actor.diarch } } } can_send = { scope:actor = { custom_description = { text = "character_interactions_hostile_actions_disabled_delay" NOT = { has_character_flag = flag_hostile_actions_disabled_delay } } } } can_be_picked = { highest_held_title_tier > tier_barony } cost = { # Usually, this action is free, but during certain diarchies, we want it to cost. prestige = liege_diarchy_surcharge_interaction_retract_vassal_interaction_value } on_send = { scope:actor = { add_character_flag = { flag = flag_hostile_actions_disabled_delay days = 10 } } hidden_effect = { scope:secondary_recipient = { add_character_flag = { flag = ai_should_not_transfer years = 3 } } } } on_accept = { retract_vassal_interaction_effect = yes if = { limit = { scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay } } scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay } } scope:actor = { trigger_event = char_interaction.0220 } } on_decline = { scope:actor = { vassal_revocation_tyranny_effect = yes } war_for_retraction_effect = yes scope:recipient = { add_opinion = { target = scope:actor modifier = retracted_vassal } } if = { limit = { scope:actor = { has_realm_law_flag = vassal_refusal_is_treason } } scope:actor = { add_opinion = { target = scope:recipient modifier = treasonous_retract_refusal } } } if = { limit = { scope:actor = { has_character_flag = flag_hostile_actions_disabled_delay } } scope:actor = { remove_character_flag = flag_hostile_actions_disabled_delay } } } auto_accept = { OR = { scope:recipient = { is_imprisoned_by = scope:actor } custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:hook = yes scope:actor = { has_strong_hook = scope:recipient } } } } 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_accept = { base = 0 # Try to make it 0 for most interactions modifier = { has_game_rule = hard_difficulty scope:actor = { is_ai = no } add = -50 desc = FACTION_REASON_DIFFICULTY_HARD } modifier = { has_game_rule = very_hard_difficulty scope:actor = { is_ai = no } add = -100 desc = FACTION_REASON_DIFFICULTY_VERY_HARD } modifier = { has_game_rule = hard_difficulty scope:actor = { is_ai = yes } add = 50 } modifier = { has_game_rule = very_hard_difficulty scope:actor = { is_ai = yes } add = 100 } modifier = { scope:hook = yes add = 40 desc = SCHEME_WEAK_HOOK_USED } opinion_modifier = { # Opinion Factor who = scope:recipient opinion_target = scope:actor multiplier = 1.0 desc = AI_OPINION_REASON } modifier = { add = 25 scope:actor = { has_realm_law_flag = vassal_refusal_is_treason } desc = AI_REFUSAL_IS_TREASON } modifier = { add = 20 scope:recipient = { has_trait = trusting } desc = TAKE_THE_VOWS_TRUSTING } modifier = { add = 20 scope:recipient = { has_trait = content } desc = INTERACTION_CONTENT } modifier = { add = 20 scope:actor.current_military_strength > scope:recipient.current_military_strength scope:recipient = { has_trait = craven } desc = INTERACTION_CRAVEN } ai_value_modifier = { who = scope:recipient ai_greed = { if = { limit = { scope:recipient = { NOT = { ai_greed = 0 } } } value = -0.25 } } ai_honor = { if = { limit = { scope:recipient = { #If AI is honorable and the law compels to obey the liege, AI will be more likely to obey. ai_honor > 0 } scope:actor = { has_realm_law_flag = vassal_refusal_is_treason } } value = 0.75 } } } modifier = { exists = scope:actor.primary_title.title_capital_county scope:secondary_recipient = { OR = { any_sub_realm_county = { this = scope:actor.primary_title.title_capital_county } any_sub_realm_duchy = { this = scope:actor.primary_title.title_capital_county.de_jure_liege } } } add = 50 desc = AI_VASSAL_HOLDS_REALM_CAPITAL } modifier = { exists = scope:actor.primary_title.title_capital_county scope:secondary_recipient = { NOR = { any_sub_realm_county = { this = scope:actor.primary_title.title_capital_county } any_sub_realm_duchy = { this = scope:actor.primary_title.title_capital_county.de_jure_liege } } primary_title.tier = tier_county any_sub_realm_county = { de_jure_liege = scope:actor.primary_title.title_capital_county.de_jure_liege } } add = 30 desc = AI_VASSAL_IS_IN_CAPITAL_DUCHY } modifier = { #Sub-Vassal is NOT De jure of current Vassal. add = 25 NOT = { scope:recipient = { any_held_title = { is_de_jure_liege_or_above_target = scope:secondary_recipient.primary_title } } } desc = AI_REFUSAL_IS_NOT_DE_JURE_LIEGE } modifier = { #Sub-Vassal is De jure of liege title. add = 15 scope:actor = { any_held_title = { this = scope:secondary_recipient.primary_title.de_jure_liege } } desc = AI_REFUSAL_IS_DE_JURE_LIEGE } modifier = { add = intimidated_halved_reason_value scope:recipient = { has_dread_level_towards = { target = scope:actor level = 1 } } desc = INTIMIDATED_REASON } modifier = { add = cowed_halved_reason_value scope:recipient = { has_dread_level_towards = { target = scope:actor level = 2 } } desc = COWED_REASON } modifier = { #Comparative military strength. desc = offer_vassalization_interaction_aibehavior_power_tt add = { value = 1 subtract = { value = scope:recipient.current_military_strength divide = { value = scope:actor.current_military_strength min = 1 } } multiply = 100 } } modifier = { #Different faith, no pluralism. desc = AI_REFUSAL_SPLITTING_SAME_FAITH_VASSALS trigger = { scope:actor.faith = scope:secondary_recipient.faith #Will not care as much if the vassal being retracted is of a different faith. scope:actor = { NOR = { #Of two different faiths AND the potential vassal's faith is not pluralistic. faith = scope:recipient.faith faith = { has_doctrine = doctrine_pluralism_pluralistic } } } } add = { value = -25 if = { limit = { scope:actor.faith = { faith_hostility_level = { target = scope:recipient.faith value >= faith_hostile_level } } } add = -10 } if = { limit = { scope:actor.faith = { faith_hostility_level = { target = scope:recipient.faith value >= faith_evil_level } } } add = -25 } } } modifier = { # AI Mongols, tyranny wars just delay the inevitable fun! scope:actor = { is_ai = yes OR = { has_trait = greatest_of_khans has_character_modifier = the_great_khan_modifier } } scope:recipient = { is_ai = yes } add = 500 } modifier = { add = -25 scope:recipient = { culture = { has_cultural_parameter = vassals_more_likely_to_refuse_demands } } desc = VASSALS_REFUSAL_indomitable_azatani } } #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 can_send_despite_rejection = yes # AI ai_targets = { ai_recipients = vassals } ai_frequency_by_tier = { barony = 0 county = 0 duchy = 12 kingdom = 12 empire = 12 hegemony = 12 } ai_potential = { has_realm_law_flag = title_revocation_allowed primary_title.tier > tier_county } ai_will_do = { base = -1000 # We want to avoid tyranny unless we've got a good reason # And even if we can avoid tyranny we don't want to retract just because we can, so this only gets us to -10 # Certain characters will retract despite tyranny, if their rationality is sufficiently low modifier = { scope:actor = { OR = { has_revoke_title_reason = scope:recipient AND = { ai_rationality <= very_high_negative_ai_value OR = { has_trait = lunatic has_trait = possessed has_trait = arbitrary } } } } add = 990 } # Always retract preferred capital if you hold the duchy, or the duchy is uncreated modifier = { years_from_game_start >= 3 OR = { scope:actor = { is_at_war = no gold > 0 } scope:recipient = { is_imprisoned_by = scope:actor } } scope:actor = { # The HRE doesn't need endless civil wars NOT = { primary_title = title:e_hre } } exists = scope:actor.primary_title.title_capital_county OR = { scope:actor = { any_held_title = { this = scope:actor.primary_title.title_capital_county.de_jure_liege } } scope:actor.primary_title.title_capital_county.de_jure_liege = { is_title_created = no } } scope:secondary_recipient = { any_sub_realm_county = { this = scope:actor.primary_title.title_capital_county } } NAND = { # Don't retract player vassals tyrannically scope:recipient = { is_ai = no } scope:actor = { NOT = { has_revoke_title_reason = scope:recipient } } } add = 1100 } # If below domain limit, try to revoke counties in your capital duchy despite tyranny, sometimes modifier = { years_from_game_start >= 3 scope:actor = { is_at_war = no } scope:actor = { # The HRE doesn't need endless civil wars NOT = { primary_title = title:e_hre } } scope:actor.domain_size < scope:actor.domain_limit scope:actor.primary_title.tier >= tier_kingdom trigger_if = { limit = { scope:actor = { domain_size > 3 } } scope:actor = { NOR = { has_trait = generous has_trait = just } } } exists = scope:actor.primary_title.title_capital_county OR = { scope:actor.primary_title.title_capital_county.holder = scope:actor # You have your de jure capital already NOT = { scope:actor.primary_title.title_capital_county.holder.top_liege = scope:actor.top_liege # Or your De Jure capital isn't in your realm } } scope:secondary_recipient = { primary_title.tier = tier_county any_sub_realm_county = { de_jure_liege = scope:actor.primary_title.title_capital_county.de_jure_liege # Under the same Duchy as your capital } } OR = { # And the capital duchy, if it exists at all AND = { exists = scope:actor.primary_title.title_capital_county.de_jure_liege.holder scope:actor.primary_title.title_capital_county.de_jure_liege.holder = scope:actor } AND = { exists = scope:actor.primary_title.title_capital_county.de_jure_liege.holder scope:actor.primary_title.title_capital_county.de_jure_liege.holder.top_liege != scope:actor.top_liege } scope:actor.primary_title.title_capital_county.de_jure_liege = { is_title_created = no } } scope:recipient = { # Not from players is_ai = yes } OR = { # Tyranny tolernance is based on rationality AND = { scope:actor.ai_rationality < 0 scope:actor.tyranny <= 15 # Don't go crazy with tyranny, just a bit is fine } AND = { scope:actor.ai_rationality >= 0 scope:actor.ai_rationality < 50 scope:actor.tyranny <= 5 # Don't go crazy with tyranny, just a bit is fine } AND = { scope:actor.ai_rationality >= 50 scope:actor.tyranny <= 0 # Don't go crazy with tyranny, just a bit is fine } AND = { scope:actor.ai_rationality >= 0 scope:recipient = { is_imprisoned_by = scope:actor } scope:actor = { has_revoke_title_reason = scope:recipient } } AND = { scope:actor.ai_rationality < 0 scope:recipient = { is_imprisoned_by = scope:actor } } } # To do this, the target must be weak or willing in some way OR = { scope:actor.current_military_strength > scope:recipient.current_military_strength # Must be stronger scope:recipient = { is_imprisoned_by = scope:actor } } scope:recipient = { OR = { has_trait = craven has_trait = content has_trait = trusting has_dread_level_towards = { target = scope:actor level >= 1 } opinion = { target = scope:actor value >= 40 } is_imprisoned_by = scope:actor scope:actor = { has_revoke_title_reason = scope:recipient } } } add = 1100 } # Always retract preferred capital duchy modifier = { exists = scope:actor.primary_title.title_capital_county scope:secondary_recipient = { any_sub_realm_duchy = { this = scope:actor.primary_title.title_capital_county.de_jure_liege } } NAND = { # Don't retract player vassals tyranically scope:recipient = { is_ai = no } scope:actor = { NOT = { has_revoke_title_reason = scope:recipient } } } add = 1000 } # Retract vassal we're dejure liege of if below domain limit modifier = { scope:actor = { vassal_limit_available > 0 } scope:secondary_recipient.primary_title.de_jure_liege.holder = scope:actor add = 500 } # Retract non-De Jure vassals from Megadukes (only if a revoke reason is present, so we don't end up in massive tyranny war spirals) modifier = { scope:actor = { has_revoke_title_reason = scope:recipient } scope:recipient = { primary_title.tier = tier_duchy any_sub_realm_county = { count > 30 } } scope:secondary_recipient.primary_title.de_jure_liege.holder != scope:recipient add = 500 } # Do not revoke titles from certain characters modifier = { scope:actor = { OR = { has_relation_friend = scope:recipient has_relation_best_friend = scope:recipient has_relation_lover = scope:recipient has_relation_soulmate = scope:recipient is_heir_of = scope:recipient } } add = -2000 } # Do not revoke titles when the chance of success if exceedingly low modifier = { NOT = { scope:recipient = { is_imprisoned_by = scope:actor } } scope:actor = { OR = { gold < minimum_ai_gold_value_for_tyranny_wars AND = { scope:actor.current_military_strength < scope:recipient.current_military_strength gold < comfortable_ai_gold_value_for_tyranny_wars } } } add = -2000 } modifier = { # The AI will only use a Hook if they couldn't otherwise do this scope:hook = yes add = -1 } modifier = { # The AI shouldn't ruin the player's fun add = -2000 scope:recipient = { has_character_flag = is_party_baron } } modifier = { # Avoid triggering Tyranny wars mid-war factor = 0 scope:actor = { is_at_war = yes } scope:recipient = { NOT = { is_imprisoned_by = scope:actor } } } modifier = { # Avoid triggering Tyranny wars mid-grand activity factor = 0 scope:actor = { has_ongoing_grand_activity_trigger = yes } NOR = { scope:recipient = { is_imprisoned_by = scope:actor } scope:recipient = { highest_held_title_tier = tier_barony } } } } } start_independence_faction_interaction = { icon = independence category = interaction_category_vassal desc = start_independence_faction_interaction_desc is_shown = { scope:actor != scope:recipient scope:actor = { highest_held_title_tier > tier_barony liege = scope:recipient is_a_faction_member = no } scope:recipient = { is_landed_or_landless_administrative = no NOT = { any_targeting_faction = { faction_type = independence_faction } } } } is_valid_showing_failures_only = { scope:actor = { can_create_faction = { target = scope:recipient type = independence_faction } } } on_accept = { scope:actor = { send_interface_toast = { type = event_toast_effect_neutral title = start_independence_faction_interaction_notification left_icon = scope:actor right_icon = scope:recipient create_faction = { type = independence_faction target = scope:recipient } if = { limit = { is_de_jure_vassal_of_liege_trigger = yes } stress_impact = { just = medium_stress_impact_gain } } } } } auto_accept = yes } join_independence_faction_interaction = { icon = independence category = interaction_category_vassal desc = join_independence_faction_interaction_desc is_shown = { scope:actor != scope:recipient scope:actor.liege = scope:recipient scope:actor = { is_landed_or_landless_administrative = no is_a_faction_member = no highest_held_title_tier > tier_barony } scope:recipient = { highest_held_title_tier > tier_barony any_targeting_faction = { faction_type = independence_faction } } } is_valid_showing_failures_only = { scope:recipient = { custom_description = { text = "basic_independence_faction_at_war" object = scope:recipient any_targeting_faction = { faction_type = independence_faction faction_is_at_war = no } } } scope:actor = { can_join_or_create_faction_against = { who = scope:recipient faction = independence_faction } } } on_accept = { scope:recipient = { random_targeting_faction = { faction_type = independence_faction save_scope_as = faction_target } } scope:actor = { send_interface_toast = { type = event_toast_effect_neutral title = join_independence_faction_interaction_notification left_icon = scope:actor right_icon = scope:recipient join_faction = scope:faction_target if = { limit = { is_de_jure_vassal_of_liege_trigger = yes } stress_impact = { just = minor_stress_impact_gain } } } } } auto_accept = yes } create_claimant_faction_against_interaction = { icon = vassal_claim_liege_title_interaction category = interaction_category_vassal interface_priority = 270 use_diplomatic_range = no needs_recipient_to_open = no desc = create_claimant_faction_against_interaction_desc special_interaction = create_claimant_faction_against_interaction interface = create_claimant_faction_against is_shown = { scope:actor = { NOT = { scope:secondary_actor ?= this } scope:secondary_actor ?= liege custom_description = { text = "faction_can_join_create_in_another_faction" is_a_faction_member = no } highest_held_title_tier > tier_barony } } is_valid_showing_failures_only = { NOT = { scope:actor = { has_truce = scope:secondary_actor } } scope:secondary_actor = { trigger_if = { limit = { NOT = { any_held_title = { any_claimant = {} } } } custom_description = { text = "basic_claimant_found" always = no } } trigger_else = { custom_description = { text = "basic_capable_claimant_found" any_held_title = { any_claimant = { NOT = { has_trait = incapable } } } } } trigger_if = { limit = { exists = scope:landed_title } custom_description = { text = "claimant_faction_already_exists" subject = scope:landed_title object = scope:recipient NOT = { any_targeting_faction = { faction_type = claimant_faction special_character = scope:recipient special_title = scope:landed_title } } } } } scope:actor = { can_join_or_create_faction_against = { who = scope:secondary_actor faction = claimant_faction check_in_a_faction = no # already checked in is_shown. Via the faction interface we'd see this twice if it fails (TIT-11380) } } trigger_if = { limit = { exists = scope:recipient } scope:recipient = { NOT = { is_at_war_with = scope:actor } NOT = { has_trait = incapable } } } scope:secondary_actor = { NOT = { has_strong_hook = scope:actor } } # Admin vassals can only start and join a claimant faction if the target is independent trigger_if = { limit = { scope:actor = { government_allows = administrative } } trigger_if = { limit = { scope:secondary_actor = { government_allows = administrative } } scope:secondary_actor = { is_independent_ruler = yes } } } # Under Byzantine law, a ruler must be unblemished trigger_if = { limit = { scope:landed_title.holder.culture ?= { has_cultural_parameter = physical_disfigurement_blocks_inheritance } } scope:recipient ?= { custom_description = { text = "byzantine_claimant_is_disfigured" object = scope:recipient valid_for_byz_succession_trigger = yes } } } # Ceremonial Liege trigger_if = { limit = { exists = scope:landed_title scope:actor.top_liege.primary_title.var:administrative_ui_special_title ?= scope:landed_title } scope:recipient = { tgp_is_in_ceremonial_house_trigger = yes trigger_if = { limit = { scope:landed_title = { holder.faith = { has_doctrine = doctrine_gender_male_dominated } any_claimant = { is_male = yes } } } is_male = yes } trigger_else_if = { limit = { scope:landed_title = { holder.faith = { has_doctrine = doctrine_gender_female_dominated } any_claimant = { is_female = yes } } } is_female = yes } trigger_else = { always = yes } } } # TGP - Use Coup against Kampaku instead trigger_if = { limit = { scope:recipient ?= { tgp_realm_has_ceremonial_liege_trigger = yes } } custom_tooltip = { text = cannot_create_claimant_faction_against_kampaku_tooltip scope:recipient ?= { # TGP - Use Coup against Kampaku instead tgp_is_ceremonial_regent_trigger = no } } } # Ministers cannot be claimants unless we are targeting h_china trigger_if = { limit = { exists = scope:recipient exists = scope:landed_title scope:recipient = { OR = { has_title = title:e_minister_chancellor has_title = title:e_minister_censor has_title = title:e_minister_grand_marshal has_title = title:e_minister_of_personnel has_title = title:e_minister_of_revenue has_title = title:e_minister_of_rites has_title = title:e_minister_of_war has_title = title:e_minister_of_justice has_title = title:e_minister_of_works } } } scope:recipient = { custom_description = { text = target_is_a_minister_desc subject = this scope:landed_title = { this = title:h_china } } } } } can_send = { NOT = { scope:recipient ?= { has_title = title:e_japan } } } on_send = { scope:actor = { set_variable = { name = claiming_title value = scope:landed_title } if = { limit = { can_create_faction = { type = claimant_faction target = scope:secondary_actor } } create_faction = { type = claimant_faction target = scope:secondary_actor } joined_faction = { set_special_character = scope:recipient set_special_title = scope:landed_title } scope:recipient = { add_to_variable_list = { name = claimant_factions target = scope:actor.joined_faction } } if = { limit = { this != scope:recipient } save_scope_as = faction_invite_from joined_faction = { save_scope_as = faction } scope:secondary_actor = { save_scope_as = faction_target } scope:recipient = { trigger_event = faction_invitation.0001 } } } remove_variable = claiming_title } } auto_accept = yes } invite_to_council_position_interaction = { category = interaction_category_vassal popup_on_receive = yes pause_on_receive = yes hidden = yes special_interaction = invite_to_council_interaction notification_text = { first_valid = { triggered_desc = { trigger = { scope:recipient = { is_councillor_of = scope:actor } } desc = liege_offer_council_position_exchange } triggered_desc = { trigger = { scope:actor = { opinion = { value >= 30 target = scope:recipient } } } desc = liege_offer_council_position_liked } triggered_desc = { trigger = { scope:actor = { opinion = { value <= -30 target = scope:recipient } } } desc = liege_offer_council_position_disliked } triggered_desc = { trigger = { scope:recipient = { is_powerful_vassal_of = scope:actor } } desc = liege_offer_council_position_powerful } triggered_desc = { trigger = { scope:recipient = { OR = { diplomacy > high_skill_rating martial > high_skill_rating stewardship > high_skill_rating intrigue > high_skill_rating learning > high_skill_rating } } } desc = liege_offer_council_position_skilled } desc = liege_offer_council_position_fallback } } is_valid_showing_failures_only = { ALL_FALSE = { scope:recipient.council_task = scope:target scope:actor = { is_at_war_with = scope:recipient } } trigger_if = { limit = { exists = scope:target.councillor } scope:target = { can_fire_position = yes } NOT = { scope:target.councillor = { is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = scope:actor } } } } } on_accept = { # Assign the councillor to their new responsibilities. scope:actor = { assign_council_task = { target = scope:recipient council_task = scope:target } } # If the new councillor is a player, inform their liege that they have accepted the offer. if = { limit = { scope:recipient = { is_ai = no } } scope:actor = { trigger_event = { id = council_interaction.0001 days = 1 } } } # If we're a clan this interaction affects unity #if = { # limit = { scope:actor = { NOT = { has_character_flag = fp3_consulted_house } } } # add_clan_unity_interaction_effect = { # CHARACTER = scope:actor # TARGET = scope:recipient # VALUE = miniscule_unity_gain # DESC = clan_unity_council_position.desc # REVERSE_NON_HOUSE_TARGET = yes # } #} } on_decline = { # If the requested councillor is a player, inform their liege that they have declined the offer. if = { limit = { scope:recipient = { is_ai = no } } scope:actor = { trigger_event = { id = council_interaction.0002 days = 1 } } } } auto_accept = { custom_description = { text = auto_accept_interaction_ai object = scope:recipient scope:recipient = { is_ai = yes } } } } force_onto_council = { category = interaction_category_vassal interface_priority = 120 icon = council desc = force_onto_council_desc notification_text = { first_valid = { triggered_desc = { trigger = { scope:actor = { has_strong_hook = scope:recipient } } desc = force_onto_council.notification.strong_hook } desc = force_onto_council.notification.fallback } } special_interaction = force_onto_council_interaction interface = council_task_interaction should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } } extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" is_shown = { scope:recipient != scope:actor scope:actor = { liege = scope:recipient NOT = { is_councillor = yes } # Merit based realms cannot force themselves onto the council - they should compete with merit and score instead NOT = { government_allows = merit } } trigger_if = { limit = { exists = scope:target.councillor } scope:target = { can_fire_position = yes } } } is_valid_showing_failures_only = { scope:actor = { custom_description = { text = "has_usable_hook_or_council_rights_through_vassal_contract" subject = scope:actor OR = { has_usable_hook = scope:recipient vassal_contract_has_flag = can_demand_council_seat vassal_contract_has_flag = can_demand_kurultai_seat } } is_adult = yes NOT = { is_at_war_with = scope:recipient } 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 = { if = { limit = { NOR = { vassal_contract_has_flag = can_demand_council_seat vassal_contract_has_flag = can_demand_kurultai_seat } } save_scope_value_as = { name = used_hook value = yes } } block_firing_councillor_effect = { COURT_OWNER = scope:recipient } #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 } } stress_impact = { content = minor_stress_impact_gain } } scope:recipient = { assign_council_task = { target = scope:actor council_task = scope:council_task } 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 if = { limit = { exists = scope:used_hook } show_as_tooltip = { scope:actor = { use_hook = scope:recipient } } } custom_tooltip = force_onto_council.recipient.tt.duration } } } #Done in the end so that all tooltips will show correct information scope:actor = { if = { limit = { exists = scope:used_hook } use_hook = scope:recipient } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = medium_unity_loss DESC = clan_unity_forced_unto_council.desc REVERSE_NON_HOUSE_TARGET = no } } ai_set_target = { scope:actor = { random_list = { 10 = { trigger = { exists = scope:recipient.council_task:councillor_chancellor can_be_chancellor_trigger = { COURT_OWNER = scope:recipient } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } } } 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 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } } } 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 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } } } 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 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } } } 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 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_kurultai_seat } } } modifier = { factor = learning } modifier = { trigger = { highest_skill = learning } factor = 10 } scope:recipient.council_task:councillor_court_chaplain = { save_scope_as = target } } # Kurultai Demanded 10 = { trigger = { exists = scope:recipient.council_task:councillor_kurultai_1 can_be_kurultai_trigger = { COURT_OWNER = scope:actor.liege_or_court_owner CP1 = councillor_kurultai_2 CP2 = councillor_kurultai_3 CP3 = councillor_kurultai_4 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_council_seat } } } modifier = { factor = martial } modifier = { trigger = { highest_skill = martial } factor = 10 } scope:recipient.council_task:councillor_kurultai_1 = { save_scope_as = target } } # Repeated so they don't always demand the same position 10 = { trigger = { exists = scope:recipient.council_task:councillor_kurultai_2 can_be_kurultai_trigger = { COURT_OWNER = scope:actor.liege_or_court_owner CP1 = councillor_kurultai_1 CP2 = councillor_kurultai_3 CP3 = councillor_kurultai_4 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_council_seat } } } modifier = { factor = martial } modifier = { trigger = { highest_skill = martial } factor = 10 } scope:recipient.council_task:councillor_kurultai_2 = { save_scope_as = target } } 10 = { trigger = { exists = scope:recipient.council_task:councillor_kurultai_3 can_be_kurultai_trigger = { COURT_OWNER = scope:actor.liege_or_court_owner CP1 = councillor_kurultai_1 CP2 = councillor_kurultai_2 CP3 = councillor_kurultai_4 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_council_seat } } } modifier = { factor = martial } modifier = { trigger = { highest_skill = martial } factor = 10 } scope:recipient.council_task:councillor_kurultai_3 = { save_scope_as = target } } 10 = { trigger = { exists = scope:recipient.council_task:councillor_kurultai_4 can_be_kurultai_trigger = { COURT_OWNER = scope:actor.liege_or_court_owner CP1 = councillor_kurultai_1 CP2 = councillor_kurultai_2 CP3 = councillor_kurultai_3 } scope:recipient = { NOT = { vassal_contract_has_flag = can_demand_council_seat } } } modifier = { factor = martial } modifier = { trigger = { highest_skill = martial } factor = 10 } scope:recipient.council_task:councillor_kurultai_4 = { save_scope_as = target } } } } } ai_potential = { top_liege != this is_councillor = no } ai_targets = { ai_recipients = liege } ai_frequency_by_tier = { barony = 0 county = 48 duchy = 36 kingdom = 24 empire = 24 hegemony = 0 } auto_accept = yes force_notification = yes ai_will_do = { base = 100 modifier = { factor = 0 scope:actor = { ai_greed <= medium_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 } } } modifier = { factor = 0 is_councillor = yes } } } stop_attacker_vassal_war_interaction = { category = interaction_category_vassal interface = interfere_in_war special_interaction = interfere_in_war_interaction ai_accept_negotiation = yes popup_on_receive = yes pause_on_receive = yes icon = icon_retreat send_name = "stop_attacker_vassal_war_interaction" ai_maybe = yes prompt = STOP_VASSAL_WAR_ATTACKER desc = { desc = stop_vassal_war_negotiation triggered_desc = { trigger = { scope:actor = { has_usable_hook = scope:recipient } } desc = stop_vassal_war_use_hook } desc = might_ask_for_something_in_return_warning_double_line_break } on_decline_summary = stop_attacker_vassal_war_decline_summary is_shown = { scope:recipient != scope:actor scope:recipient = { liege ?= scope:actor highest_held_title_tier > tier_barony any_character_war = { primary_attacker = scope:recipient save_temporary_scope_as = target_war } } scope:actor = { NOT = { is_participant_in_war = scope:target_war } } } is_valid_showing_failures_only = { custom_description = { text = cannot_stop_war_when_already_fighting object = scope:recipient scope:recipient = { NOT = { any_war_enemy = { this = scope:actor } } } } custom_description = { text = cannot_stop_war_timer object = scope:recipient NOT = { scope:recipient = { has_opinion_modifier = { target = scope:actor modifier = attempt_to_force_end_war_opinion } } } } NOT = { scope:recipient = { has_strong_hook = scope:actor } } } can_be_picked = { scope:target.primary_attacker = scope:recipient } on_accept = { scope:recipient = { add_opinion = { modifier = attempt_to_force_end_war_opinion target = scope:actor } } hidden_effect = { scope:recipient = { trigger_event = vassal_interaction.0001 #Starts "negotiations" } } show_as_tooltip = { scope:target ?= { end_war = white_peace } } # If we're a clan this interaction affects unity - But we only show it in the tooltip, actual effect is applied in the respective follow-up events show_as_tooltip = { if = { limit = { # If we are asking a non-house member to stop attacking a house member, gain unity exists = scope:recipient.house exists = scope:actor.house scope:recipient.house != scope:actor.house } add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:target.primary_defender VALUE = medium_unity_gain DESC = clan_unity_aided_in_war.desc REVERSE_NON_HOUSE_TARGET = no } } else_if = { limit = { # If we are asking a house member to stop attacking a non-house member, lose unity exists = scope:actor.house exists = scope:target.primary_defender.house scope:target.primary_defender.house != scope:actor.house } add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = medium_unity_loss DESC = clan_unity_stopped_vassal_war.desc REVERSE_NON_HOUSE_TARGET = no } } } } on_decline = { show_as_tooltip = { scope:recipient = { add_opinion = { modifier = attempt_to_force_end_war_opinion target = scope:actor } } scope:actor = { add_prestige = minor_prestige_loss } } } auto_accept = yes } stop_defender_vassal_war_interaction = { category = interaction_category_vassal interface = interfere_in_war special_interaction = interfere_in_war_interaction ai_accept_negotiation = yes popup_on_receive = yes pause_on_receive = yes send_name = "SEND_DEMAND" icon = icon_retreat ai_maybe = yes prompt = STOP_VASSAL_WAR_DEFENDER desc = { desc = stop_vassal_war_negotiation triggered_desc = { trigger = { scope:actor = { has_usable_hook = scope:recipient } } desc = stop_vassal_war_use_hook } desc = might_ask_for_something_in_return_warning_double_line_break } on_decline_summary = stop_attacker_vassal_war_decline_summary is_shown = { scope:recipient != scope:actor scope:recipient = { liege ?= scope:actor highest_held_title_tier > tier_barony any_character_war = { primary_defender = scope:recipient save_temporary_scope_as = target_war } } scope:actor = { NOT = { is_participant_in_war = scope:target_war } } } is_valid_showing_failures_only = { custom_description = { text = cannot_stop_war_when_already_fighting object = scope:recipient NOT = { scope:recipient = { any_war_enemy = { this = scope:actor } } } } custom_description = { text = cannot_stop_war_timer object = scope:recipient NOT = { scope:recipient = { has_opinion_modifier = { target = scope:actor modifier = attempt_to_force_surrender_opinion } } } } NOT = { scope:recipient = { has_strong_hook = scope:actor } } } can_be_picked = { scope:target.primary_defender = scope:recipient } on_accept = { scope:recipient = { add_opinion = { modifier = attempt_to_force_surrender_opinion target = scope:actor } } hidden_effect = { scope:recipient = { trigger_event = vassal_interaction.0011 #Starts "negotiations" } } # If we're a clan this interaction affects unity - But we only show it in the tooltip, actual effect is applied in the respective follow-up events show_as_tooltip = { if = { limit = { # If recipient is a house member and the attacker is not, lose unity exists = scope:actor.house exists = scope:target.primary_attacker.house scope:target.primary_attacker.house != scope:actor.house } add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = medium_unity_loss DESC = clan_unity_stop_defender_vassal_war.desc REVERSE_NON_HOUSE_TARGET = no } } else_if = { limit = { # If recipient is a non-house member and the attacker is, gain unity exists = scope:actor.house exists = scope:recipient.house scope:recipient.house != scope:actor.house } add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:target.primary_attacker VALUE = medium_unity_gain DESC = clan_unity_aided_in_war.desc REVERSE_NON_HOUSE_TARGET = no } } } } auto_accept = yes } ask_for_pardon_interaction = { category = interaction_category_vassal icon = scroll_scales filter_tags = { celestial_ministry } desc = { first_valid = { triggered_desc = { trigger = { scope:actor != scope:recipient.liege } desc = ask_for_pardon_interaction_minister_desc } desc = ask_for_pardon_interaction_desc } } notification_text = ASK_FOR_PARDON_NOTIFICATION is_shown = { ask_for_pardon_available_trigger = { ACTOR = scope:actor } OR = { scope:actor.top_liege = scope:recipient scope:recipient = { top_liege = scope:actor.top_liege has_title = title:e_minister_of_justice } } } is_valid_showing_failures_only = { scope:actor = { NOT = { is_at_war_with = scope:recipient } NOT = { is_imprisoned_by = scope:recipient }#Then you use the regular ransom interactions } } highlighted_reason = { triggered_desc = { trigger = { scope:recipient = { has_title = title:e_minister_of_justice } } desc = HIGHLIGHTED_MINISTER_WILLING_TO_PARDON } } is_highlighted = { OR = { has_usable_hook = scope:recipient AND = { scope:recipient = { has_title = title:e_minister_of_justice } scope:recipient = { is_character_interaction_potentially_accepted = { recipient = scope:recipient interaction = ask_for_pardon_interaction } } } } } ai_accept = { base = -50 #How bad is it, really? modifier = { scope:recipient = { has_banish_reason = scope:actor NOR = { #These are worse has_execute_reason = scope:actor has_revoke_title_reason = scope:actor } } desc = AI_BANISHMENT_REASON_MODIFIER add = -20 } modifier = { scope:recipient = { has_revoke_title_reason = scope:actor NOT = { #This is worse are worse has_execute_reason = scope:actor } } desc = AI_REVOKE_TITLE_REASON_MODIFIER add = -30 } modifier = { scope:recipient = { has_execute_reason = scope:actor } desc = AI_EXECUTE_REASON_MODIFIER add = -40 } #Willing to forgive opinion_modifier = { who = scope:recipient opinion_target = scope:actor multiplier = 1 desc = AI_OPINION_REASON } } auto_accept = { custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:hook = yes } } ai_min_reply_days = 1 ai_max_reply_days = 5 on_accept = { ask_for_pardon_interaction_effect = yes scope:actor = { trigger_event = vassal_interaction.0030 } scope:recipient = { if = { limit = { culture = { has_cultural_parameter = pardoning_gives_prestige } } add_prestige = minor_prestige_gain } add_merit_if_relevant_effect = { MERIT = minor_merit_value } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_gain DESC = clan_unity_pardon_granted.desc REVERSE_NON_HOUSE_TARGET = no } hidden_effect = { # Struggle catalysts if = { limit = { fp3_struggle_involves_one_supporter_and_one_detractor = { FIRST = scope:actor SECOND = scope:recipient } scope:recipient = { any_character_struggle = { involvement = involved phase_has_catalyst = catalyst_grants_pardon_supporter_detractor is_secondary_character_involvement_involved_trigger = { CHAR = scope:actor } } } } scope:recipient = { every_character_struggle = { involvement = involved activate_struggle_catalyst = { catalyst = catalyst_grants_pardon_supporter_detractor character = scope:recipient } log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_grants_pardon_supporter_detractor } } } } } } on_auto_accept = { scope:recipient = { trigger_event = char_interaction.0240 } } on_decline = { scope:recipient = { send_interface_toast = { type = event_toast_effect_bad title = ask_for_pardon_interaction_decline_toast left_icon = scope:actor custom_tooltip = ask_for_pardon_interaction_accept_decline } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:recipient TARGET = scope:actor VALUE = minor_unity_loss DESC = clan_unity_refused_pardon.desc REVERSE_NON_HOUSE_TARGET = no } } #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_targets = { ai_recipients = liege } ai_frequency_by_tier = { barony = 0 county = 24 duchy = 12 kingdom = 12 empire = 12 hegemony = 0 } ai_will_do = { base = 0 modifier = { add = 100 scope:actor = { has_usable_hook = scope:recipient } } modifier = { add = 100 scope:hook = yes } } } pardon_interaction = { category = interaction_category_friendly icon = scroll_scales desc = { first_valid = { triggered_desc = { trigger = { scope:actor != scope:recipient.liege } desc = pardon_interaction_minister_desc } desc = pardon_interaction_desc } triggered_desc = { trigger = { scope:actor = { culture = { has_cultural_parameter = pardoning_gives_prestige } } } desc = pardon_interaction_has_jirga_desc } } is_shown = { scope:actor = { OR = { has_imprisonment_reason = scope:recipient AND = { has_title = title:e_minister_of_justice scope:recipient = { any_liege_or_above = { has_imprisonment_reason = scope:recipient } } } } } scope:recipient = { OR = { scope:actor = { has_title = title:e_minister_of_justice top_liege = scope:recipient.top_liege } target_is_liege_or_above = scope:actor } } } cost = { influence = { value = 0 if = { limit = { scope:actor = { has_title = title:e_minister_of_justice NOT = { has_imprisonment_reason = scope:recipient } } } add = { value = 25 if = { limit = { scope:actor.top_liege = { has_realm_law = celestial_bureaucracy_0 } } add = 75 } else_if = { limit = { scope:actor.top_liege = { has_realm_law = celestial_bureaucracy_1 } } add = 50 } else_if = { limit = { scope:actor.top_liege = { has_realm_law = celestial_bureaucracy_2 } } add = 25 } } } } treasury = { value = 0 if = { limit = { scope:actor = { has_title = title:e_minister_of_justice has_treasury = yes NOT = { has_imprisonment_reason = scope:recipient } } } add = scope:actor.minor_treasury_value } } } auto_accept = yes is_highlighted = { scope:recipient = { is_imprisoned = no } scope:actor = { has_title = title:e_minister_of_justice } } on_accept = { if = { limit = { scope:actor = { has_title = title:e_minister_of_justice } } scope:actor = { add_merit_if_relevant_effect = { MERIT = minor_merit_value } if = { limit = { government_has_flag = government_has_influence } change_influence = { value = minor_influence_gain multiply = scope:recipient.highest_held_title_tier } } } scope:recipient = { send_interface_toast = { type = event_toast_effect_neutral title = pardon_interaction_toast_title desc = pardon_interaction_toast_minister right_icon = scope:actor if = { limit = { OR = { scope:recipient.liege = { has_extra_criminal_reason_against_trigger = { CRIMINAL = scope:recipient } } is_close_or_extended_family_of = scope:actor } } scope:actor = { change_strife_opinion = massive_strife_gain situation:dynastic_cycle = { trigger_situation_catalyst = { catalyst = catalyst_minister_pardoned_dangerous_criminal character = scope:actor } } } } consume_all_criminal_reasons_effect = { LIEGE = scope:recipient.liege CRIMINAL = scope:recipient } } } hidden_effect = { scope:recipient.liege = { send_interface_toast = { type = event_toast_effect_neutral title = pardon_interaction_toast_title desc = pardon_interaction_toast_minister_liege right_icon = scope:actor left_icon = scope:recipient show_as_tooltip = { if = { limit = { OR = { has_extra_criminal_reason_against_trigger = { CRIMINAL = scope:recipient } scope:recipient = { is_close_or_extended_family_of = scope:actor } } } scope:actor = { change_strife_opinion = massive_strife_gain situation:dynastic_cycle = { trigger_situation_catalyst = { catalyst = catalyst_minister_pardoned_dangerous_criminal character = scope:actor } } } } consume_all_criminal_reasons_effect = { LIEGE = scope:recipient.liege CRIMINAL = scope:recipient } } } } } } else = { scope:recipient = { send_interface_toast = { type = event_toast_effect_neutral title = pardon_interaction_toast_title desc = pardon_interaction_toast right_icon = scope:actor consume_all_criminal_reasons_effect = { LIEGE = scope:actor CRIMINAL = scope:recipient } } } } scope:actor = { stress_impact = { forgiving = medium_stress_loss } } scope:actor = { if = { limit = { culture = { has_cultural_parameter = pardoning_gives_prestige } } add_prestige = minor_prestige_gain } hidden_effect = { # Struggle catalysts if = { limit = { fp3_struggle_involves_one_supporter_and_one_detractor = { FIRST = scope:actor SECOND = scope:recipient } scope:recipient = { any_character_struggle = { involvement = involved phase_has_catalyst = catalyst_grants_pardon_supporter_detractor is_secondary_character_involvement_involved_trigger = { CHAR = scope:actor } } } } every_character_struggle = { involvement = involved activate_struggle_catalyst = { catalyst = catalyst_grants_pardon_supporter_detractor character = scope:recipient } log_debug_variable_for_persian_struggle_effect = { VAR = concession_catalyst_grants_pardon_supporter_detractor } } } } } scope:recipient = { if = { limit = { scope:actor = { culture = { has_cultural_parameter = pardoning_gives_loyalty } } } add_opinion = { modifier = loyal_servant target = scope:actor } scope:actor = { if = { limit = { can_add_hook = { target = scope:recipient type = loyalty_hook } } add_hook = { type = loyalty_hook target = scope:recipient } } } } else = { add_opinion = { target = scope:actor modifier = grateful_opinion opinion = 15 } } } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = minor_unity_gain DESC = clan_unity_forgiveness.desc REVERSE_NON_HOUSE_TARGET = no } } ai_potential = { OR = { ai_vengefulness <= 0 culture = { has_cultural_parameter = pardoning_gives_loyalty } } } ai_targets = { ai_recipients = vassals } ai_targets = { ai_recipients = courtiers chance = 0.25 } ai_frequency_by_tier = { barony = 0 county = 144 duchy = 72 kingdom = 36 empire = 36 hegemony = 36 } ai_will_do = { base = 0 modifier = { add = 100 scope:recipient = { OR = { has_relation_friend = scope:actor has_relation_best_friend = scope:actor has_relation_lover = scope:actor has_relation_soulmate = scope:actor is_primary_heir_of = scope:actor } } } modifier = { add = 25 scope:actor = { scope:actor.ai_vengefulness <= 0 culture = { has_cultural_parameter = pardoning_gives_loyalty } } } modifier = { add = { value = ai_vengefulness multiply = -1 } scope:actor.ai_vengefulness <= -25 } } } vassal_claim_liege_title_interaction = { category = interaction_category_vassal interface_priority = 269 # after Start Claimant Faction desc = vassal_claim_liege_title_interaction_desc target_type = title target_filter = recipient_domain_titles ignores_pending_interaction_block = yes icon = vassal_claim_liege_title_interaction cost = { prestige = { value = { add = monumental_prestige_value if = { limit = { scope:actor.prestige_level > scope:recipient.prestige_level } subtract = { value = major_prestige_value multiply = { value = scope:actor.prestige_level subtract = scope:recipient.prestige_level } desc = higher_prestige_level_than_liege } } else_if = { limit = { scope:actor.prestige_level < scope:recipient.prestige_level } add = { value = major_prestige_value multiply = { value = scope:recipient.prestige_level subtract = scope:actor.prestige_level } desc = lower_prestige_level_than_liege } } min = 0 } } } is_shown = { scope:recipient != scope:actor scope:actor = { is_physically_able_adult = yes } scope:recipient = scope:actor.liege scope:recipient = { is_playable_character = yes any_held_title = { title_tier >= duchy NOR = { has_title_law = noble_family_succession_law has_title_law = landless_adventurer_succession_law has_title_law = mandala_succession_law } scope:actor = { NOT = { has_claim_on = prev } } } } } is_highlighted = { scope:actor.prestige >= vassal_claim_liege_title_interaction_highlight_value } can_be_picked = { trigger_if = { limit = { scope:actor = { any_character_struggle = { involvement = involved has_struggle_phase_parameter = powerful_vassal_can_claim_liege_titles } } } scope:actor = { is_powerful_vassal_of = scope:recipient } } trigger_if = { limit = { scope:actor = { legitimacy_level = 5 } } scope:target = { tier >= tier_duchy custom_description = { text = has_15_percent_of_a_dejure_title any_in_de_jure_hierarchy = { filter = { tier = tier_county } continue = { tier > tier_county } OR = { holder = scope:actor holder = { target_is_liege_or_above = scope:actor } } percent >= 0.15 } } } } trigger_if = { limit = { scope:actor = { legitimacy_level = 4 } } scope:target = { tier >= tier_duchy custom_description = { text = has_21_percent_of_a_dejure_title any_in_de_jure_hierarchy = { filter = { tier = tier_county } continue = { tier > tier_county } OR = { holder = scope:actor holder = { target_is_liege_or_above = scope:actor } } percent >= 0.21 } } } } trigger_if = { limit = { scope:actor = { legitimacy_level = 3 } } scope:target = { tier >= tier_duchy custom_description = { text = has_31_percent_of_a_dejure_title any_in_de_jure_hierarchy = { filter = { tier = tier_county } continue = { tier > tier_county } OR = { holder = scope:actor holder = { target_is_liege_or_above = scope:actor } } percent >= 0.31 } } } } trigger_if = { limit = { scope:actor = { legitimacy_level = 2 } } scope:target = { tier >= tier_duchy custom_description = { text = has_41_percent_of_a_dejure_title any_in_de_jure_hierarchy = { filter = { tier = tier_county } continue = { tier > tier_county } OR = { holder = scope:actor holder = { target_is_liege_or_above = scope:actor } } percent >= 0.41 } } } } trigger_if = { limit = { scope:actor = { OR = { legitimacy_level = 1 legitimacy_level = 0 has_legitimacy = no #if you don't have legitimacy at all we fall back to the default } } } scope:target = { tier >= tier_duchy custom_description = { text = has_51_percent_of_a_dejure_title any_in_de_jure_hierarchy = { filter = { tier = tier_county } continue = { tier > tier_county } OR = { holder = scope:actor holder = { target_is_liege_or_above = scope:actor } } percent >= 0.51 } } } } custom_description = { NOT = { scope:actor = { has_claim_on = scope:target } } text = "already_have_a_claim_on_this_title" } trigger_if = { limit = { scope:target = { tier = tier_duchy } } custom_description = { text = not_family_or_adventurer_title scope:target = { NOR = { has_title_law = noble_family_succession_law has_title_law = landless_adventurer_succession_law has_title_law = mandala_succession_law } } } } } has_valid_target_showing_failures_only = { scope:target = { tier >= tier_duchy } } is_valid_showing_failures_only = { custom_description = { scope:recipient = { any_held_title = { title_tier >= county NOT = { any_claimant = { this = scope:actor } } } } object = scope:recipient text = "already_have_claims_on_all_titles" } scope:recipient = { NOT = { has_strong_hook = scope:actor } } NOT = { scope:actor = { is_allied_to = scope:recipient } } } on_auto_accept = { scope:target = { random_in_de_jure_hierarchy = { limit = { tier = tier_county OR = { holder = scope:actor holder = { target_is_liege_or_above = scope:actor } } } title_province = { save_scope_as = county_in_title } } } scope:recipient = { trigger_event = vassal_interaction.0040 } } on_accept = { scope:actor = { send_interface_toast = { type = event_toast_effect_good title = buy_claim_interaction.message left_icon = scope:actor right_icon = scope:recipient vassal_claim_liege_title_interaction_effect = yes } claim_title_achievement_effect = yes } # If we're a clan this interaction affects unity add_clan_unity_interaction_effect = { CHARACTER = scope:actor TARGET = scope:recipient VALUE = major_unity_loss DESC = clan_unity_title_claim.desc REVERSE_NON_HOUSE_TARGET = no } } auto_accept = yes ai_targets = { ai_recipients = liege } ai_frequency_by_tier = { barony = 0 county = 48 duchy = 24 kingdom = 24 empire = 24 hegemony = 0 } ai_potential = { domain_size > 1 NOR = { has_trait = content has_trait = craven } } ai_will_do = { base = 25 ai_value_modifier = { who = scope:actor ai_greed = 1 ai_boldness = 0.5 ai_honor = -0.5 } modifier = { add = scope:actor.ai_zeal scope:actor = { ai_zeal > 0 } scope:actor.faith != scope:recipient.faith } modifier = { add = 25 scope:actor = { is_powerful_vassal_of = scope:recipient } } modifier = { add = 50 scope:actor = { opinion = { target = scope:recipient value <= 0 } } } modifier = { add = 25 scope:recipient = { OR = { has_relation_rival = scope:actor has_relation_nemesis = scope:actor } } } modifier = { add = -15 scope:recipient = { has_relation_lover = scope:actor } } # Agenda impact modifier = { scope:actor = { any_character_struggle = { involvement = involved is_struggle_type = iberian_struggle } } add = { value = 0 if = { limit = { scope:actor = { any_character_struggle = { phase_has_catalyst = catalyst_gain_claim_on_title_fp2 } has_character_flag = agenda_towards_escalation } } add = 200 } else_if = { limit = { scope:actor = { any_character_struggle = { phase_has_catalyst = catalyst_gain_claim_on_title_fp2 } } } add = -100 } } } modifier = { scope:actor = { any_character_struggle = { involvement = involved is_struggle_type = persian_struggle } } add = { value = 0 if = { limit = { scope:actor = { any_character_struggle = { phase_has_catalyst = catalyst_gain_claim_on_title_fp3 } has_trait = fp3_struggle_detractor } } add = 200 } else_if = { limit = { scope:actor = { any_character_struggle = { phase_has_catalyst = catalyst_gain_claim_on_title_fp3 } } } add = -100 } } } modifier = { factor = 0.25 scope:actor = { ai_greed < 100 opinion = { target = scope:recipient value >= 50 } } } modifier = { factor = 0 scope:actor = { ai_greed < 100 opinion = { target = scope:recipient value >= 75 } } } modifier = { add = -25 scope:actor = { has_dread_level_towards = { target = scope:recipient level = 1 } } } modifier = { factor = 0 scope:actor = { has_dread_level_towards = { target = scope:recipient level = 2 } } } modifier = { factor = 0 scope:recipient = { OR = { has_relation_friend = scope:actor has_relation_best_friend = scope:actor has_relation_soulmate = scope:actor } } } } } give_vassal_directive_interaction = { category = interaction_category_vassal icon = icon_scheme_challenge_status interface_priority = 60 desc = give_vassal_directive_interaction_desc auto_accept = yes is_shown = { scope:recipient = { trigger_if = { limit = { scope:actor = { government_allows = administrative } } is_vassal_or_below_of = scope:actor } trigger_else = { is_vassal_of = scope:actor } is_landed = yes NOT = { government_has_flag = government_is_true_herder } highest_held_title_tier >= tier_county is_ai = yes } } is_valid = { vassal_follows_directive_trigger = { VASSAL = scope:recipient LIEGE = scope:actor } } is_valid_showing_failures_only = { vassal_follows_directive_valid_trigger = { VASSAL = scope:recipient LIEGE = scope:actor } scope:recipient = { is_physically_able = yes } } send_option = { flag = improve_development is_shown = { scope:recipient = { government_allows = administrative } } is_valid = { scope:recipient = { highest_held_title_tier >= tier_duchy } } } send_option = { flag = train_commanders is_shown = { scope:recipient = { government_allows = administrative } } is_valid = { } } send_option = { flag = build_maa is_shown = { scope:recipient = { government_allows = administrative } } is_valid = { } } send_option = { flag = convert_faith is_shown = { scope:recipient = { NOT = { government_has_flag = government_is_nomadic } } } is_valid = { scope:recipient = { custom_tooltip = { text = subrealm_has_county_of_other_faith any_sub_realm_county = { faith != scope:recipient.faith } } } } } send_option = { flag = convert_culture is_shown = { scope:recipient = { NOT = { government_has_flag = government_is_nomadic } } } is_valid = { scope:recipient = { custom_tooltip = { text = subrealm_has_county_of_other_culture any_sub_realm_county = { culture != scope:recipient.culture } } } } } send_option = { flag = improve_cultural_acceptance is_shown = { scope:recipient = { NOT = { government_has_flag = government_is_nomadic } } } is_valid = { scope:recipient = { highest_held_title_tier >= tier_duchy custom_tooltip = { text = subrealm_has_county_of_other_culture any_sub_realm_county = { culture != scope:recipient.culture } } } } } send_option = { flag = building_focus_fortification is_shown = { scope:recipient = { NOT = { government_has_flag = government_is_nomadic } } } is_valid = { } } send_option = { flag = building_focus_military is_shown = { scope:recipient = { NOT = { government_has_flag = government_is_nomadic } } } is_valid = { } } send_option = { flag = building_focus_economy is_shown = { scope:recipient = { NOT = { government_has_flag = government_is_nomadic } } } is_valid = { } } send_option = { flag = manage_fertility is_shown = { scope:recipient = { government_has_flag = government_is_nomadic } } is_valid = { } } send_option = { flag = explore_cultures is_shown = { scope:recipient = { government_has_flag = government_is_nomadic } } is_valid = { scope:recipient = { custom_tooltip = { text = subrealm_has_county_of_other_culture any_sub_realm_county = { NOT = { culture = scope:recipient.culture } } } } } } send_option = { flag = raid_innovation_intent is_shown = { scope:recipient = { government_has_flag = government_is_nomadic } } is_valid = { custom_tooltip = { text = has_any_directive scope:recipient = { NOT = { has_character_flag = vassal_directive_raid_innovation_intent } } } } } send_option = { flag = raid_herd_intent is_shown = { scope:recipient = { government_has_flag = government_is_nomadic } } is_valid = { } } send_option = { flag = remove_directive is_shown = { } is_valid = { custom_tooltip = { text = has_any_directive scope:recipient = { OR = { has_character_flag = vassal_directive_improve_development has_character_flag = vassal_directive_train_commanders has_character_flag = vassal_directive_build_maa has_character_flag = vassal_directive_convert_faith has_character_flag = vassal_directive_convert_culture has_character_flag = vassal_directive_improve_cultural_acceptance has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy has_character_flag = vassal_directive_manage_fertility has_character_flag = vassal_directive_explore_cultures has_character_flag = vassal_directive_raid_innovation_intent has_character_flag = vassal_directive_raid_herd_intent } } } } } on_accept = { scope:recipient = { if = { limit = { OR = { has_character_flag = vassal_directive_improve_development has_character_flag = vassal_directive_train_commanders has_character_flag = vassal_directive_build_maa has_character_flag = vassal_directive_convert_faith has_character_flag = vassal_directive_convert_culture has_character_flag = vassal_directive_improve_cultural_acceptance has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_building_focus_economy has_character_flag = vassal_directive_manage_fertility has_character_flag = vassal_directive_explore_cultures has_character_flag = vassal_directive_raid_innovation_intent has_character_flag = vassal_directive_raid_herd_intent } } custom_tooltip = { text = vassal_directive_remove_directive remove_vassal_directives = yes } } switch = { trigger = yes scope:improve_development ?= { custom_tooltip = { text = vassal_directive_improve_development remove_vassal_directives = yes add_character_flag = vassal_directive_improve_development } } scope:train_commanders ?= { custom_tooltip = { text = vassal_directive_train_commanders remove_vassal_directives = yes add_character_flag = vassal_directive_train_commanders } } scope:build_maa ?= { custom_tooltip = { text = vassal_directive_build_maa remove_vassal_directives = yes add_character_flag = vassal_directive_build_maa } } scope:convert_faith ?= { custom_tooltip = { text = vassal_directive_convert_faith remove_vassal_directives = yes add_character_flag = vassal_directive_convert_faith } } scope:convert_culture ?= { custom_tooltip = { text = vassal_directive_convert_culture remove_vassal_directives = yes add_character_flag = vassal_directive_convert_culture } } scope:improve_cultural_acceptance ?= { custom_tooltip = { text = vassal_directive_improve_cultural_acceptance remove_vassal_directives = yes add_character_flag = vassal_directive_improve_cultural_acceptance } } scope:building_focus_fortification ?= { custom_tooltip = { text = vassal_directive_building_focus_fortification remove_vassal_directives = yes add_character_flag = vassal_directive_building_focus_fortification } } scope:building_focus_military ?= { custom_tooltip = { text = vassal_directive_building_focus_military remove_vassal_directives = yes add_character_flag = vassal_directive_building_focus_military } } scope:building_focus_economy ?= { custom_tooltip = { text = vassal_directive_building_focus_economy remove_vassal_directives = yes add_character_flag = vassal_directive_building_focus_economy } } scope:manage_fertility ?= { custom_tooltip = { text = vassal_directive_manage_fertility remove_vassal_directives = yes add_character_flag = vassal_directive_manage_fertility } } scope:explore_cultures ?= { custom_tooltip = { text = vassal_directive_explore_cultures remove_vassal_directives = yes add_character_flag = vassal_directive_explore_cultures } } scope:raid_innovation_intent ?= { custom_tooltip = { text = vassal_directive_raid_innovation_intent remove_vassal_directives = yes add_character_flag = vassal_directive_raid_innovation_intent } } scope:raid_herd_intent ?= { custom_tooltip = { text = vassal_directive_raid_herd_intent remove_vassal_directives = yes add_character_flag = vassal_directive_raid_herd_intent } } scope:remove_directive ?= { custom_tooltip = { text = vassal_directive_remove_directive remove_vassal_directives = yes } } } } } ai_potential = { government_allows = administrative } ai_targets = { ai_recipients = vassals } ai_frequency_by_tier = { barony = 0 county = 0 duchy = 0 kingdom = 12 empire = 1 hegemony = 1 } ai_will_do = { base = 0 modifier = { add = 100 scope:improve_development ?= yes scope:recipient = { NOR = { has_character_flag = vassal_directive_building_focus_economy has_character_flag = vassal_directive_improve_development } OR = { vassal_contract_has_flag = admin_theme_civilian vassal_contract_has_flag = admin_theme_balanced } } } modifier = { add = 100 scope:building_focus_economy ?= yes scope:recipient = { NOR = { has_character_flag = vassal_directive_building_focus_economy has_character_flag = vassal_directive_improve_development } OR = { vassal_contract_has_flag = admin_theme_civilian vassal_contract_has_flag = admin_theme_balanced } } } modifier = { add = 100 scope:building_focus_fortification ?= yes scope:recipient = { NOR = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_build_maa } vassal_contract_has_flag = admin_theme_frontier } } modifier = { add = 100 scope:build_maa ?= yes scope:recipient = { NOR = { has_character_flag = vassal_directive_building_focus_fortification has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_build_maa } OR = { vassal_contract_has_flag = admin_theme_military vassal_contract_has_flag = admin_theme_frontier } } } modifier = { add = 100 scope:building_focus_military ?= yes scope:recipient = { NOR = { has_character_flag = vassal_directive_building_focus_military has_character_flag = vassal_directive_build_maa } OR = { vassal_contract_has_flag = admin_theme_military vassal_contract_has_flag = admin_theme_naval } } } } } request_court_position = { category = interaction_category_vassal interface_priority = 120 icon = seneschal_court_position desc = request_court_position_desc special_interaction = request_court_position interface = court_task_interaction target_type = court_position_type should_use_extra_icon = { scope:actor = { has_usable_hook = scope:recipient } } extra_icon = "gfx/interface/icons/character_interactions/hook_icon.dds" is_shown = { NOT = { scope:recipient = scope:actor } scope:actor.liege ?= scope:recipient } is_valid_showing_failures_only = { scope:actor = { tgp_is_ceremonial_liege_trigger = no } } on_accept = { scope:recipient = { appoint_court_position = { recipient = scope:actor court_position = scope:target } } scope:actor = { if = { limit = { always = scope:claim_hook } use_hook = scope:recipient } } } auto_accept = { custom_description = { text = "spending_hook" subject = scope:actor object = scope:recipient scope:claim_hook = yes scope:actor = { has_strong_hook = scope:recipient } } } send_option = { is_shown = { NOT = { scope:actor = scope:recipient } } is_valid = { scope:actor = { has_usable_hook = scope:recipient } } flag = claim_hook localization = GENERIC_SPEND_A_HOOK } send_options_exclusive = no ai_accept = { base = -75 modifier = { scope:claim_hook ?= yes add = 100 desc = SCHEME_WEAK_HOOK_USED } opinion_modifier = { # More likely if Recipient likes Actor who = scope:recipient opinion_target = scope:actor multiplier = 0.5 desc = AI_OPINION_REASON } } force_notification = yes } grant_court_position = { category = interaction_category_vassal interface_priority = 120 icon = seneschal_court_position desc = grant_court_position_desc special_interaction = grant_court_position interface = court_task_interaction target_type = court_position_type is_shown = { NOT = { scope:recipient = scope:actor } scope:recipient = { liege ?= scope:actor tgp_is_ceremonial_liege_trigger = no } } is_valid_showing_failures_only = { scope:recipient = { NOT = { is_imprisoned_by = scope:actor } is_adult = yes } } on_accept = { scope:actor = { appoint_court_position = { recipient = scope:recipient court_position = scope:target } } } auto_accept = yes }