N3OW/common/character_interactions/00_perk_interactions.txt
2025-02-19 22:32:34 +00:00

1449 lines
30 KiB
Text

###################
# Claim Throne
# by Petter Vilberg
###################
claim_throne_interaction = {
icon = icon_scheme_claim_throne
category = interaction_category_hostile
ai_targets = {
ai_recipients = liege
}
auto_accept = yes
use_diplomatic_range = no
ignores_pending_interaction_block = yes
scheme = claim_throne
desc = claim_throne_interaction_desc
is_shown = {
exists = scope:actor.liege
scope:recipient = scope:actor.liege
scope:actor = {
is_landless_adventurer = no
highest_held_title_tier > tier_barony
OR = {
has_perk = meritocracy_perk
AND = {
is_diarch_of_target = scope:recipient
scope:recipient = {
NOT = { has_diarchy_parameter = can_be_instantly_dismissed }
}
}
AND = {
is_powerful_vassal_of = scope:recipient
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_claim_throne_for_powerful_vassals
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:recipient
}
}
}
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_claim_throne_for_all
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:recipient
}
}
}
AND = {
exists = title:d_sunni.holder
is_vassal_of = title:d_sunni.holder
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_claim_throne_for_caliph_vassals
}
}
}
}
NOT = { scope:recipient = scope:actor }
}
is_valid_showing_failures_only = {
scope:actor = {
is_physically_able_adult = yes
can_start_scheme = {
target_character = scope:recipient
type = claim_throne
}
}
}
# Scheme Starter Packages
options_heading = schemes.t.agent_packages
send_options_exclusive = yes
## Balanced agents.
send_option = {
flag = agent_focus_balance
current_description = claim_throne_interaction.tt.agent_focus_balance
}
## Focused on Success Chance.
send_option = {
flag = agent_focus_success
current_description = claim_throne_interaction.tt.agent_focus_success
}
## Focused on Speed.
send_option = {
flag = agent_focus_speed
current_description = claim_throne_interaction.tt.agent_focus_speed
}
## Focused on Secrecy.
send_option = {
flag = agent_focus_secrecy
current_description = claim_throne_interaction.tt.agent_focus_secrecy
}
on_accept = {
scope:actor = {
stress_impact = {
content = medium_stress_impact_gain
just = medium_stress_impact_gain
}
send_interface_toast = {
type = event_toast_effect_good
title = claim_throne_interaction_toast
left_icon = scope:actor
right_icon = scope:recipient
# Success.
if = {
limit = { scope:agent_focus_success ?= yes }
begin_scheme_with_agents_effect = {
SCHEME_TYPE = claim_throne
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Success.
AGENT_1 = agent_diplomat
AGENT_2 = agent_diplomat
AGENT_3 = agent_scribe
# Speed.
AGENT_4 = agent_cleric
# Secrecy.
AGENT_5 = agent_justiciar
}
}
# Speed.
else_if = {
limit = { scope:agent_focus_speed ?= yes }
begin_scheme_with_agents_effect = {
SCHEME_TYPE = claim_throne
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Speed.
AGENT_1 = agent_cleric
AGENT_2 = agent_socialite
AGENT_3 = agent_gabbler
# Success.
AGENT_4 = agent_diplomat
# Secrecy.
AGENT_5 = agent_justiciar
}
}
# Secrecy.
else_if = {
limit = { scope:agent_focus_secrecy ?= yes }
begin_scheme_with_agents_effect = {
SCHEME_TYPE = claim_throne
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Secrecy.
AGENT_1 = agent_justiciar
AGENT_2 = agent_justiciar
AGENT_3 = agent_decoy
# Success.
AGENT_4 = agent_diplomat
# Speed.
AGENT_5 = agent_cleric
}
}
# Balanced.
else = {
begin_scheme_with_agents_effect = {
SCHEME_TYPE = claim_throne
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Success.
AGENT_1 = agent_diplomat
AGENT_2 = agent_scribe
# Speed.
AGENT_3 = agent_cleric
AGENT_4 = agent_socialite
# Secrecy.
AGENT_5 = agent_decoy
}
}
show_as_tooltip = {
stress_impact = {
content = medium_stress_impact_gain
just = medium_stress_impact_gain
}
}
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_throne_claim.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
ai_potential = {
is_adult = yes
highest_held_title_tier > tier_barony
ai_greed >= medium_positive_ai_value
learning >= medium_skill_rating
intrigue >= mediocre_skill_rating
trigger_if = {
limit = {
liege = { save_temporary_scope_as = struggle_liege }
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_claim_throne_for_all
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:struggle_liege
}
}
}
is_powerful_vassal = yes
}
NOR = {
has_trait = content
opinion = {
target = liege
value >= high_positive_opinion
}
any_scheme = {
OR = {
scheme_type = murder
scheme_type = abduct
scheme_type = claim_throne
scheme_type = fabricate_hook
scheme_type = steal_back_artifact
}
}
}
}
ai_frequency = 36
ai_will_do = {
base = 100
# 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
}
has_trait = fp3_struggle_supporter
}
scope:recipient = {
has_trait = fp3_struggle_detractor
}
}
add = 100
}
else_if = {
limit = {
scope:actor = {
any_character_struggle = {
phase_has_catalyst = catalyst_gain_claim_on_title_fp3
}
}
}
add = -100
}
}
}
# Unity modifiers
evaluate_action_decreasing_house_unity = {
VALUE = 100
}
start_hostile_scheme_ai_base_modifiers = yes # At the end so Cowed can block it completely
}
}
###################
# Fabricate Hook
# by Petter Vilberg
###################
fabricate_hook_interaction = {
icon = icon_scheme_fabricate_hook
category = interaction_category_hostile
auto_accept = yes
ignores_pending_interaction_block = yes
scheme = fabricate_hook
desc = fabricate_hook_interaction_desc
is_shown = {
scope:actor = {
OR = {
has_perk = truth_is_relative_perk
AND = {
has_trait = vengeful
has_relation_rival = scope:recipient
}
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_fabricate_hooks_for_all
is_secondary_character_involvement_either_trigger = {
CHAR = scope:recipient
}
}
}
AND = {
government_has_flag = government_is_clan
is_in_same_clan_as_trigger = { CHARACTER = scope:recipient }
house = { has_house_unity_stage = competitive }
}
}
}
NOT = { scope:recipient = scope:actor }
}
is_valid = {
NOT = { scope:actor = { has_hook = scope:recipient } }
OR = {
scope:actor = {
OR = {
has_perk = truth_is_relative_perk # To display that it's available because of the Perk
AND = {
has_trait = vengeful
has_relation_rival = scope:recipient
}
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_fabricate_hooks_for_all
is_secondary_character_involvement_either_trigger = {
CHAR = scope:recipient
}
}
}
AND = {
government_has_flag = government_is_clan
is_in_same_clan_as_trigger = { CHARACTER = scope:recipient }
house = { has_house_unity_stage = competitive }
}
}
}
}
}
is_valid_showing_failures_only = {
scope:actor = {
is_physically_able_adult = yes
can_start_scheme = {
target_character = scope:recipient
type = fabricate_hook
}
}
}
# Scheme Starter Packages
options_heading = schemes.t.agent_packages
send_options_exclusive = yes
## Balanced agents.
send_option = {
flag = agent_focus_balance
current_description = fabricate_hook_interaction.tt.agent_focus_balance
}
## Focused on Success Chance.
send_option = {
flag = agent_focus_success
current_description = fabricate_hook_interaction.tt.agent_focus_success
}
## Focused on Speed.
send_option = {
flag = agent_focus_speed
current_description = fabricate_hook_interaction.tt.agent_focus_speed
}
## Focused on Secrecy.
send_option = {
flag = agent_focus_secrecy
current_description = fabricate_hook_interaction.tt.agent_focus_secrecy
}
on_accept = {
scope:actor = {
stress_impact = {
just = medium_stress_impact_gain
honest = medium_stress_impact_gain
compassionate = minor_stress_impact_gain
}
send_interface_toast = {
type = event_toast_effect_good
title = fabricate_hook_interaction_toast
left_icon = scope:actor
right_icon = scope:recipient
# Success.
if = {
limit = { scope:agent_focus_success ?= yes }
begin_scheme_with_agents_effect = {
SCHEME_TYPE = fabricate_hook
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Success.
AGENT_1 = agent_outcast
AGENT_2 = agent_diplomat
AGENT_3 = agent_thief
# Speed.
AGENT_4 = agent_infiltrator
# Secrecy.
AGENT_5 = agent_lookout
}
}
# Speed.
else_if = {
limit = { scope:agent_focus_speed ?= yes }
begin_scheme_with_agents_effect = {
SCHEME_TYPE = fabricate_hook
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Speed.
AGENT_1 = agent_infiltrator
AGENT_2 = agent_footpad
AGENT_3 = agent_socialite
# Success.
AGENT_4 = agent_outcast
# Secrecy.
AGENT_5 = agent_lookout
}
}
# Secrecy.
else_if = {
limit = { scope:agent_focus_secrecy ?= yes }
begin_scheme_with_agents_effect = {
SCHEME_TYPE = fabricate_hook
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Secrecy.
AGENT_1 = agent_lookout
AGENT_2 = agent_decoy
AGENT_3 = agent_justiciar
# Success.
AGENT_4 = agent_outcast
# Speed.
AGENT_5 = agent_footpad
}
}
# Balanced.
else = {
begin_scheme_with_agents_effect = {
SCHEME_TYPE = fabricate_hook
TARGET_TYPE = target_character
TARGET_SCOPE = scope:recipient
# Success.
AGENT_1 = agent_outcast
AGENT_2 = agent_thief
# Speed.
AGENT_3 = agent_infiltrator
AGENT_4 = agent_footpad
# Secrecy.
AGENT_5 = agent_lookout
}
}
show_as_tooltip = {
stress_impact = {
just = medium_stress_impact_gain
honest = medium_stress_impact_gain
compassionate = minor_stress_impact_gain
}
}
}
}
}
ai_targets = {
ai_recipients = liege
ai_recipients = vassals
}
ai_targets = {
ai_recipients = neighboring_rulers
ai_recipients = peer_vassals
max = 10
}
ai_targets = {
ai_recipients = courtiers
max = 5
}
ai_targets = {
ai_recipients = realm_characters
ai_recipients = top_realm_domicile_owners
max = 30
}
ai_potential = {
is_adult = yes
ai_greed >= low_positive_ai_value
intrigue >= medium_skill_rating
NOR = {
has_trait = content
any_scheme = {
OR = {
scheme_type = murder
scheme_type = abduct
scheme_type = claim_throne
scheme_type = fabricate_hook
scheme_type = steal_back_artifact
}
}
}
}
ai_target_quick_trigger = {
adult = yes
}
ai_frequency = 12
ai_will_do = {
base = 10
modifier = {
add = {
value = 20
if = {
limit = {
exists = scope:recipient.cp:councillor_spymaster
scope:recipient.cp:councillor_spymaster = { intrigue < 10 }
}
add = 50
}
}
scope:recipient = {
is_vassal_of = scope:actor
vassal_contract_has_modifiable_obligations = yes
}
}
modifier = {
add = -50
opinion = {
target = scope:recipient
value >= high_positive_opinion
}
}
modifier = {
add = -40
scope:recipient = {
is_playable_character = yes
NOT = {
is_vassal_of = scope:actor
}
}
}
modifier = {
add = 50
scope:recipient = {
is_playable_character = no
OR = {
liege = scope:actor.liege
liege = {
OR = {
has_relation_rival = scope:actor
has_relation_nemesis = scope:actor
}
}
}
}
}
modifier = {
factor = 0
scope:recipient = {
has_council_position = councillor_spymaster
}
}
start_hostile_scheme_ai_base_modifiers = yes # At the end so Cowed can block it completely
}
}
###################
# Demand Payment
# by Petter Vilberg
###################
demand_payment_interaction = {
category = interaction_category_diplomacy
icon = icon_gold
auto_accept = yes
use_diplomatic_range = yes
desc = demand_payment_interaction_desc
is_shown = {
scope:actor = {
OR = {
has_perk = golden_obligations_perk
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_demand_payments_for_all
is_secondary_character_involvement_either_trigger = {
CHAR = scope:recipient
}
}
}
}
}
scope:recipient = {
is_ai = yes
}
NOT = { scope:recipient = scope:actor }
}
is_valid_showing_failures_only = {
scope:actor = {
is_physically_able_adult = yes
NOT = {
is_at_war_with = scope:recipient
}
}
scope:recipient = {
is_imprisoned = no
}
scope:recipient = {
custom_description = {
text = demand_payment_too_little_gold
gold >= 1
}
}
}
is_valid = {
scope:actor = {
has_usable_hook = scope:recipient
}
}
is_highlighted = {
scope:actor = {
has_usable_hook = scope:recipient
}
}
on_accept = {
if = {
limit = {
scope:recipient.gold < scope:recipient.golden_obligation_value
}
custom_tooltip = demand_payment_too_little_gold_tt
}
scope:actor = {
send_interface_toast = {
title = demand_payment_interaction_message
left_icon = scope:recipient
scope:actor = {
use_hook = scope:recipient
}
scope:recipient = {
if = {
pay_short_term_gold = {
target = scope:actor
gold = golden_obligation_value
}
limit = {
gold > golden_obligation_value
}
}
else = {
pay_short_term_gold = {
target = scope:actor
gold = {
value = scope:recipient.gold
floor = yes
}
}
}
}
}
stress_impact = {
generous = medium_stress_impact_gain
}
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_demand_payment.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
ai_potential = {
NOT = {
has_trait = generous
}
OR = {
ai_greed >= low_positive_ai_value
is_at_war = yes
}
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = hooked_characters
}
ai_frequency = 36
ai_will_do = {
base = 100
# Unity modifiers
evaluate_action_increasing_house_unity = {
VALUE = -100
}
modifier = { #ai won't use the interaction if they'll get nothing out of it
factor = 0
scope:recipient.gold < 8
}
modifier = {
factor = 0
scope:actor = {
OR = {
has_relation_friend = scope:recipient
has_relation_lover = scope:recipient
has_relation_best_friend = scope:recipient
has_relation_soulmate = scope:recipient
}
}
}
}
}
##################
# Buy Claim
# by Petter Vilberg
##################
buy_claim_interaction = {
category = interaction_category_diplomacy
icon = vassal_claim_liege_title_interaction
desc = buy_claim_interaction_desc
target_type = title
target_filter = recipient_domain_titles
ignores_pending_interaction_block = yes
is_shown = {
scope:actor = {
is_landless_adventurer = no
OR = {
has_perk = sanctioned_loopholes_perk
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_buy_claim_for_all
is_secondary_character_involvement_either_trigger = {
CHAR = scope:recipient
}
}
}
}
NOT = { target_is_liege_or_above = scope:recipient }
}
NOT = {
scope:actor = scope:recipient
AND = {
scope:recipient = scope:actor.faith.religious_head
scope:actor.faith = {
NOT = { has_doctrine = doctrine_theocracy_temporal }
}
}
}
scope:recipient = {
is_playable_character = yes
primary_title.tier > tier_barony
NOT = {
target_is_liege_or_above = scope:actor
}
}
}
can_be_picked_title = {
scope:target = {
tier >= tier_county
}
}
is_valid_showing_failures_only = {
trigger_if = { # Can't request on titles you already have a claim on
limit = {
scope:target ?= {
any_claimant = { this = scope:actor }
}
}
custom_description = {
text = buy_claim_has_pressed_claim_already
always = no
}
}
trigger_if = { # Can't request claims on baronies
limit = {
scope:target ?= { tier = tier_barony }
}
custom_description = {
text = buy_claim_has_pressed_claim_already
always = no
}
}
trigger_if = { # Can't buy Kingdom or Empire Claims if you're a King
limit = {
scope:target ?= { tier = tier_kingdom }
scope:actor.highest_held_title_tier >= tier_kingdom
}
custom_description = {
text = buy_claim_no_king_or_emperor_kingdom
always = no
}
}
trigger_if = { # Can't buy Empire Claims if you're an Emperor
limit = {
scope:target ?= { tier = tier_empire }
scope:actor.highest_held_title_tier >= tier_empire
}
custom_description = {
text = buy_claim_no_emperor_empire
always = no
}
}
trigger_if = { # Can't buy claims on head of faith titles
limit = {
scope:target ?= { is_head_of_faith = yes }
}
custom_description = {
text = buy_claim_no_religious_titles
always = no
}
}
trigger_if = { # Can't buy claims on noble families
limit = {
scope:target ?= { is_noble_family_title = yes }
}
custom_description = {
text = buy_claim_no_noble_family_titles
always = no
}
}
trigger_if = { # Can't buy claims on landless adventurer titles
limit = {
scope:target ?= { has_variable = adventurer_creation_reason }
}
custom_description = {
text = buy_claim_no_landless_adventurer_title
always = no
}
}
scope:actor = { # Variable piety cost depending on tier
trigger_if = {
limit = {
exists = scope:target
scope:target = {
tier = tier_county
}
}
piety >= {
value = minor_buy_claim_piety_value
if = {
limit = {
government_allows = administrative
}
multiply = 1.5
}
}
}
trigger_if = {
limit = {
exists = scope:target
scope:target = {
tier = tier_duchy
}
}
piety >= {
value = medium_buy_claim_piety_value
if = {
limit = {
government_allows = administrative
}
multiply = 1.5
}
}
}
trigger_if = {
limit = {
exists = scope:target
scope:target = {
tier = tier_kingdom
}
}
piety >= {
value = major_buy_claim_piety_value
if = {
limit = {
government_allows = administrative
}
multiply = 1.5
}
}
}
trigger_if = {
limit = {
exists = scope:target
scope:target = {
tier = tier_empire
}
}
piety >= {
value = massive_buy_claim_piety_value
if = {
limit = {
government_allows = administrative
}
multiply = 1.5
}
}
}
}
scope:recipient = { is_busy_in_events_localised = yes }
scope:recipient = { NOT = { has_strong_hook = scope:actor } }
}
auto_accept = yes
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
add_piety = {
value = 0
if = {
limit = {
scope:target = {
tier = tier_county
}
}
add = minor_buy_claim_piety_loss
}
if = {
limit = {
scope:target = {
tier = tier_duchy
}
}
add = medium_buy_claim_piety_loss
}
if = {
limit = {
scope:target = {
tier = tier_kingdom
}
}
add = major_buy_claim_piety_loss
}
if = {
limit = {
scope:target = {
tier = tier_empire
}
}
add = massive_buy_claim_piety_loss
}
if = {
limit = {
government_allows = administrative
}
multiply = 1.5
}
}
add_unpressed_claim = scope:target
}
stress_impact = {
just = medium_stress_impact_gain
honest = medium_stress_impact_gain
}
}
scope:recipient = {
add_opinion = {
target = scope:actor
modifier = claimed_my_title_opinion
opinion = -40
}
trigger_event = perk_interaction.0002
}
# If we're a clan this interaction affects unity
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = minor_unity_loss
DESC = clan_unity_bought_claim.desc
REVERSE_NON_HOUSE_TARGET = no
}
}
}
##################
# Challenge Rival
# by Ewan Cowhig Croft
##################
challenge_to_single_combat_interaction = {
icon = icon_combat
interface_priority = 30
common_interaction = yes
category = interaction_category_hostile
ai_maybe = yes
ai_max_reply_days = 0
popup_on_receive = yes
pause_on_receive = yes
desc = challenge_to_single_combat_interaction_desc
greeting = negative
notification_text = REQUEST_TRIAL_BY_COMBAT_TEXT
is_shown = {
# First, check for the perk.
scope:actor = { can_challenge_rival_to_single_combat_trigger = yes }
# Then, look to see if this character is a rival.
scope:actor = { has_relation_rival = scope:recipient }
# Can't duel yourself.
NOT = { scope:actor = scope:recipient }
}
is_valid_showing_failures_only = {
# Calc some stuff that might invalidate elsewhere before the bout is sorted.
rival_single_combat_shown_and_not_invalid_trigger = yes
# Scope:recipient must be able to fight personally.
scope:recipient = { can_start_single_combat_trigger = yes }
# Scope:recipient must not be banned from single combat.
scope:recipient = {
custom_description = {
text = fp1_tbc_recipient_banned_from_combat
can_start_single_combat_banned_checks_trigger = no
}
}
# Neither of the characters can be imprisoned.
scope:actor = { is_imprisoned = no }
scope:recipient = { is_imprisoned = no }
}
can_send = {
scope:actor = {
custom_description = {
text = "character_interactions_hostile_actions_disabled_delay"
NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
}
}
}
cost = { prestige = medium_prestige_value }
cooldown = { years = 5 }
cooldown_against_recipient = { years = 10 }
on_send = {
scope:actor = {
add_character_flag = {
flag = flag_hostile_actions_disabled_delay
days = 10
}
}
}
on_accept = {
# Set up the bout immediately.
## First inform.
scope:actor = {
custom_tooltip = challenge_to_single_combat_interaction.enter_non_lethal_bout.tt
custom_tooltip = challenge_to_single_combat_interaction.victor_gets.tt
custom_tooltip = challenge_to_single_combat_interaction.loser_gets.tt
}
## Finally, begin.
configure_start_single_combat_effect = {
SC_INITIATOR = scope:actor
SC_ATTACKER = scope:actor
SC_DEFENDER = scope:recipient
FATALITY = no
FIXED = no
LOCALE = terrain_scope
OUTPUT_EVENT = perk_interaction.0101
INVALIDATION_EVENT = perk_interaction.0102
}
# If we're a clan this interaction affects unity
if = {
limit = {
scope:actor = {
exists = scope:actor.house
house = { # But only if we have high unity!
OR = {
has_house_unity_stage = harmonious
has_house_unity_stage = friendly
}
}
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:actor
TARGET = scope:recipient
VALUE = medium_unity_loss
DESC = clan_unity_challenge_to_combat.desc
REVERSE_NON_HOUSE_TARGET = no
}
custom_description_no_bullet = { text = active_unity_level_description_tt }
}
}
on_decline = {
# Scope:actor decline processing.
scope:actor = {
# Inform them of the decline & scope:recipient loses some prestige.
send_interface_toast = {
type = event_toast_effect_bad
title = challenge_to_single_combat_interaction.challenge_rejected.t
left_icon = scope:recipient
right_icon = scope:actor
scope:recipient = { add_prestige = medium_prestige_loss }
show_as_tooltip = {
add_prestige = medium_prestige_value
}
}
hidden_effect = {
add_prestige_no_experience = medium_prestige_value
}
# Cooldown is removed.
hidden_effect = { remove_interaction_cooldown = challenge_to_single_combat_interaction }
# Clear up hostile actions flag.
if = {
limit = {
has_character_flag = flag_hostile_actions_disabled_delay
}
remove_character_flag = flag_hostile_actions_disabled_delay
}
}
}
auto_accept = no
ai_accept = {
base = 0 # Try to make it 0 for most interactions
# Relative fightan ability.
modifier = {
desc = CTSC_RELATIVE_PROWESS
scope:actor.prowess < scope:recipient.prowess
add = {
value = scope:recipient.prowess
subtract = scope:actor.prowess
multiply = 2
}
}
modifier = {
desc = CTSC_RELATIVE_PROWESS
scope:recipient.prowess < scope:actor.prowess
add = {
value = scope:actor.prowess
subtract = scope:recipient.prowess
multiply = -2
}
}
# Weight up for personality values.
ai_value_modifier = {
who = scope:recipient
ai_boldness = {
if = {
limit = {
scope:recipient = {
ai_boldness > 0
ai_rationality < 0
}
}
value = 2
}
else_if = {
limit = {
scope:recipient = {
NOT = { ai_boldness = 0 }
}
}
value = 1
}
}
ai_vengefulness = {
if = {
limit = {
scope:recipient = {
NOT = { ai_vengefulness = 0 }
}
}
value = 0.75
}
}
ai_honor = {
if = {
limit = {
scope:recipient = {
ai_honor > 0
}
}
value = 0.5
}
}
}
# Apply tier differences.
## King -> Baron.
modifier = {
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:actor = {
tier_difference = {
target = scope:recipient
value >= 4
}
}
add = 15
}
## Duke -> Baron.
modifier = {
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:actor = {
tier_difference = {
target = scope:recipient
value = 3
}
}
add = 10
}
## Count -> Baron.
modifier = {
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:actor = {
tier_difference = {
target = scope:recipient
value = 2
}
}
add = 5
}
## King <- Baron.
modifier = {
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:actor = {
tier_difference = {
target = scope:recipient
value = -2
}
}
add = -10
}
## Duke <- Baron.
modifier = {
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:actor = {
tier_difference = {
target = scope:recipient
value = -3
}
}
add = -20
}
## Count <- Baron.
modifier = {
desc = AI_REFUSAL_RANK_DIFFERENCE
scope:actor = {
tier_difference = {
target = scope:recipient
value <= -4
}
}
add = -30
}
# Nemesis modifier.
modifier = {
desc = offer_vassalization_interaction_aibehavior_nemesis_tt
trigger = {
scope:recipient = {
has_relation_nemesis = scope:actor
}
}
add = 50
}
# Unity modifiers
evaluate_action_decreasing_house_unity = {
VALUE = 100
}
}
# AI
ai_potential = {
can_challenge_rival_to_single_combat_trigger = yes
NOT = { has_trait = craven }
num_of_relation_rival > 0
is_imprisoned = no
can_start_single_combat_trigger = yes
}
ai_target_quick_trigger = {
adult = yes
}
ai_targets = {
ai_recipients = scripted_relations
}
ai_frequency = 60
ai_will_do = {
base = -50
# Factor for personality (excluding realism).
modifier = {
add = {
value = ai_boldness
multiply = 1
}
}
modifier = { add = ai_vengefulness }
modifier = {
add = {
value = ai_energy
multiply = -0.25
}
}
# Unity modifiers
evaluate_action_decreasing_house_unity = {
VALUE = 100
}
# Don't challenge kinslayer-counting family, unless they're your nemesis.
modifier = {
scope:actor = {
murdering_character_is_kinslaying_in_faith_trigger = {
CHARACTER = scope:recipient
FAITH = scope:actor.faith
}
}
scope:recipient = {
NOT = { has_relation_nemesis = scope:actor }
}
add = -1000
}
# Don't challenge your spouse, unless they're your nemesis.
modifier = {
scope:recipient = {
is_spouse_of = scope:actor
NOT = { has_relation_nemesis = scope:actor }
}
add = -1000
}
# Don't challenge people hopelessly out of your league unless you're really, really not seeing things clearly.
modifier = {
scope:actor = {
prowess_diff = {
target = scope:recipient
value <= -15
}
ai_rationality >= high_negative_ai_value
}
add = -1000
}
}
}