N3OW/events/dlc/tgp/tgp_interaction_events.txt
2026-05-23 20:45:31 -04:00

1185 lines
25 KiB
Text

namespace = tgp_interaction_event
# Send Treasury interaction events
tgp_interaction_event.0001 = {
type = letter_event
opening = char_interaction.0010.opening
desc = tgp_interaction_event.0001.desc
sender = scope:recipient
trigger = {
scope:actor = {
is_alive = yes
}
scope:recipient = {
is_alive = yes
}
}
immediate = {
# Let's calculate a reward
random_list = {
10 = { # Give hook
trigger = {
can_add_hook = {
target = scope:recipient
type = favor_hook
}
}
modifier = {
is_liege_or_above_of = scope:recipient
factor = 1.5
}
modifier = { # Non-powerful families are more likely to offer a hook
scope:recipient.house ?= {
is_powerful_family = no
is_dominant_family = no
}
factor = 1.5
}
save_scope_as = treasury_hook
}
10 = { # Become a disciple
trigger = {
scope:recipient = {
NOR = {
# Does not have any of these relations already
any_relation = { type = disciple }
any_relation = { type = elder }
# And is someone who could actually be a disciple
has_trait = ambitious
has_trait = arrogant
}
}
}
modifier = {
scope:recipient = {
has_trait = trusting
}
add = 5
}
modifier = {
scope:recipient = {
has_trait = humble
}
add = 5
}
save_scope_as = treasury_become_disciple
}
10 = { # Give influence
modifier = {
scope:recipient.influence_level > 3
add = 10
}
save_scope_as = treasury_influence
}
}
}
option = {
name = tgp_interaction_event.0001.a
switch = {
trigger = exists
scope:treasury_hook = {
add_hook = {
target = scope:recipient
type = favor_hook
}
}
scope:treasury_become_disciple = {
set_elder_relation_effect = {
ELDER = scope:actor
DISCIPLE = scope:recipient
MERIT = minor_merit_gain
}
}
scope:treasury_influence = {
change_influence = medium_influence_gain
}
}
}
}
# Request Military Aid interaction events
# Recipient receives the request
tgp_interaction_event.0010 = {
type = letter_event
opening = tgp_interaction_event.0010.opening
desc = tgp_interaction_event.0010.desc
sender = scope:actor
trigger = {
scope:actor = { is_alive = yes }
scope:recipient = { is_alive = yes }
scope:joining_governor = { is_alive = yes }
}
option = { # Join the war yourself (if applicable)
name = tgp_interaction_event.0010.a
trigger = {
trigger_if = {
limit = {
this = top_liege
}
is_character_interaction_valid = {
recipient = scope:actor
interaction = join_vassal_war_interaction
}
}
trigger_else = {
vassal_contract_has_flag = celestial_military_appointment
NOR = {
this = scope:actor
any_war_ally = { this = scope:actor }
any_war_enemy = { this = scope:actor }
is_at_war_with = scope:actor
}
}
}
save_scope_as = joining_character
if = {
limit = {
this = top_liege
is_character_interaction_valid = {
recipient = scope:actor
interaction = join_vassal_war_interaction
}
}
custom_tooltip = {
text = join_vassal_war_interaction_desc
open_interaction_window = {
interaction = join_vassal_war_interaction
actor = root
recipient = scope:actor
}
}
}
else = {
scope:actor = {
every_character_war = {
limit = {
is_war_leader = scope:actor
is_attacker = scope:actor
}
add_attacker = scope:joining_character
}
every_character_war = {
limit = {
is_war_leader = scope:actor
is_defender = scope:actor
}
add_defender = scope:joining_character
}
# Send response to actor
trigger_event = tgp_interaction_event.0012
}
}
ai_chance = {
base = 0
}
}
option = { # Have any military governor join the war
name = tgp_interaction_event.0010.b
scope:joining_governor = {
save_scope_as = joining_character
trigger_event = tgp_interaction_event.0011
}
scope:actor = {
every_character_war = {
limit = {
is_war_leader = scope:actor
is_attacker = scope:actor
}
add_attacker = scope:joining_character
}
every_character_war = {
limit = {
is_war_leader = scope:actor
is_defender = scope:actor
}
add_defender = scope:joining_character
}
# Send response to actor
trigger_event = tgp_interaction_event.0012
}
ai_chance = { # The AI always sends someone
base = 100
}
}
option = { # Players have the option to not send anyone, and use celestial_send_military_aid_interaction instead
name = tgp_interaction_event.0010.c
custom_tooltip = {
text = celestial_send_military_aid_interaction
open_interaction_window = {
interaction = celestial_send_military_aid_interaction
actor = root
recipient = scope:actor
}
}
ai_chance = {
base = 0
}
}
}
# Military governor receives an order to join the war
tgp_interaction_event.0011 = {
type = letter_event
opening = tgp_interaction_event.0011.opening
desc = tgp_interaction_event.0011.desc
sender = scope:recipient
immediate = {
show_as_tooltip = {
scope:actor = {
every_character_war = {
limit = {
is_war_leader = scope:actor
is_attacker = scope:actor
}
add_attacker = scope:joining_governor
}
every_character_war = {
limit = {
is_war_leader = scope:actor
is_defender = scope:actor
}
add_defender = scope:joining_governor
}
}
}
}
option = {
name = {
trigger = {
top_liege.cp:councillor_marshal ?= scope:recipient
}
text = tgp_interaction_event.0011.a
}
name = {
trigger = {
NOT = { top_liege.cp:councillor_marshal ?= scope:recipient }
}
text = tgp_interaction_event.0011.b
}
}
}
# Actor receives a response
tgp_interaction_event.0012 = {
type = letter_event
opening = tgp_interaction_event.0011.opening
desc = {
triggered_desc = {
trigger = {
scope:joining_character = scope:recipient
}
desc = tgp_interaction_event.0012.desc_marshal
}
desc = tgp_interaction_event.0012.desc_governor
}
sender = scope:recipient
immediate = {
show_as_tooltip = {
every_character_war = {
limit = {
is_war_leader = scope:actor
is_attacker = scope:actor
}
add_attacker = scope:joining_character
}
every_character_war = {
limit = {
is_war_leader = scope:actor
is_defender = scope:actor
}
add_defender = scope:joining_character
}
}
}
option = {
name = tgp_interaction_event.0012.a
}
}
# Recipient/governor receives news of military governor joining war
tgp_interaction_event.0015 = {
type = letter_event
opening = tgp_interaction_event.0010.opening
desc = tgp_interaction_event.0015.desc
sender = scope:actor
immediate = {
custom_tooltip = celestial_send_military_aid_effect_desc
}
option = {
name = tgp_interaction_event.0012.a
}
}
# Secondary recipient/military governor receives order to join war
tgp_interaction_event.0016 = {
type = letter_event
opening = tgp_interaction_event.0010.opening
desc = tgp_interaction_event.0016.desc
sender = scope:actor
immediate = {
custom_tooltip = celestial_send_military_aid_effect_desc
}
option = {
name = tgp_interaction_event.0016.a
}
}
# Siphon Treasury starting event
tgp_interaction_event.0020 = {
type = character_event
title = tgp_interaction_event.0020.t
desc = tgp_interaction_event.0020.desc
theme = generic_intrigue_scheme
left_portrait = {
character = root
animation = schadenfreude
}
option = {
name = tgp_interaction_event.0020.a
custom_tooltip = siphon_destination_gold_tt
scope:scheme = {
set_variable = {
name = siphon_destination
value = flag:gold
}
}
ai_chance = {
base = 0
modifier = {
gold <= treasury
add = 100
}
}
}
option = {
name = tgp_interaction_event.0020.b
custom_tooltip = siphon_destination_treasury_tt
scope:scheme = {
set_variable = {
name = siphon_destination
value = flag:treasury
}
}
ai_chance = {
base = 0
modifier = {
gold > treasury
add = 100
}
}
}
}
# Break with Elder notification event
tgp_interaction_event.0030 = {
type = letter_event
opening = tgp_interaction_event.0010.opening
desc = {
desc = tgp_interaction_event.0030.desc
triggered_desc = {
trigger = { exists = scope:new_elder }
desc = tgp_interaction_event.0030.desc_new_elder
}
}
sender = scope:actor
immediate = {
show_as_tooltip = {
scope:actor = {
remove_relation_elder = scope:recipient
if = {
limit = {
exists = scope:new_elder
}
set_relation_elder = scope:new_elder
root = {
set_relation_grudge = scope:new_elder
}
}
}
}
}
option = {
name = {
trigger = {
exists = scope:new_elder
}
text = tgp_interaction_event.0030.a_new_elder
}
name = tgp_interaction_event.0030.a
}
}
# Find Elder notification event
tgp_interaction_event.0031 = {
type = letter_event
opening = tgp_interaction_event.0031.opening
desc = tgp_interaction_event.0031.desc
sender = scope:actor
immediate = {
}
option = {
name = tgp_interaction_event.0031.a
scope:actor = { trigger_event = tgp_interaction_event.00311 }
show_as_tooltip = {
scope:actor = {
set_elder_relation_effect = {
ELDER = scope:secondary_recipient
DISCIPLE = scope:actor
MERIT = minor_merit_gain
}
}
}
ai_will_select = {
value = scope:secondary_recipient.find_elder_acceptance_value
}
}
option = {
name = tgp_interaction_event.0031.b
scope:actor = {
send_interface_toast = {
type = event_toast_effect_bad
title = tgp_interaction_event.0031.b.tt
left_icon = scope:secondary_recipient
add_opinion = {
target = scope:secondary_recipient
modifier = refused_to_be_elder_opinion
opinion = -10
}
}
}
ai_will_select = {
value = scope:secondary_recipient.find_elder_acceptance_value
multiply = -1
}
}
}
scripted_effect tgp_dynastic_cycle_add_to_elders_movement_effect = {
custom_tooltip = tgp_dynastic_cycle_add_to_elders_movement_effect_tt
if = {
limit = {
scope:secondary_recipient = {
top_participant_group:dynastic_cycle ?= {
participant_group_type = expansion_movement
}
}
}
set_variable = {
name = movement_member
value = flag:expansion
}
}
else_if = {
limit = {
scope:secondary_recipient = {
top_participant_group:dynastic_cycle ?= {
participant_group_type = advancement_movement
}
}
}
set_variable = {
name = movement_member
value = flag:advancement
}
}
else_if = {
limit = {
scope:secondary_recipient = {
top_participant_group:dynastic_cycle ?= {
participant_group_type = pro_hegemon_movement
}
}
}
set_variable = {
name = movement_member
value = flag:pro_hegemon
}
}
else_if = {
limit = {
scope:secondary_recipient = {
top_participant_group:dynastic_cycle ?= {
participant_group_type = conservative_movement
}
}
}
set_variable = {
name = movement_member
value = flag:conservative
}
}
}
tgp_interaction_event.00311 = {
type = letter_event
opening = tgp_interaction_event.00311.opening
desc = {
desc = tgp_interaction_event.00311.desc.intro
first_valid = {
triggered_desc = {
trigger = {
exists = scope:elder_movement
}
desc = tgp_interaction_event.00311.desc.movement
}
desc = tgp_interaction_event.00311.desc.no_movement
}
}
sender = scope:secondary_recipient
immediate = {
scope:actor = {
set_elder_relation_effect = {
ELDER = scope:secondary_recipient
DISCIPLE = scope:actor
MERIT = minor_merit_gain
}
}
if = {
limit = {
situation:dynastic_cycle ?= {
any_situation_participant = {
this = scope:actor
}
any_situation_participant = {
this = scope:secondary_recipient
}
}
scope:secondary_recipient = {
NOT = {
top_participant_group:dynastic_cycle = { participant_group_type = undecided_movement }
}
}
scope:actor = {
NOT = { is_in_same_movement_as = { TARGET = scope:secondary_recipient } }
}
}
scope:secondary_recipient = {
top_participant_group:dynastic_cycle ?= { save_scope_as = elder_movement }
}
top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement }
}
}
option = { # I'll join
name = tgp_interaction_event.00311.a
trigger = { exists = scope:elder_movement }
tgp_dynastic_cycle_add_to_elders_movement_effect = yes
ai_chance = {
base = 100
}
}
option = { # Nah
name = tgp_interaction_event.00311.b
trigger = { exists = scope:elder_movement }
change_influence = major_influence_loss
scope:secondary_recipient = {
add_opinion = {
target = root
opinion = -20
modifier = disappointed_opinion
}
}
ai_chance = {
base = 100
modifier = { # AI will always join the movement if possible
exists = scope:elder_movement
factor = 0
}
}
}
option = { # Not in China
name = tgp_interaction_event.00311.c
trigger = {
NOT = { exists = scope:elder_movement }
}
ai_chance = {
base = 100
}
}
}
# Break with Disciple notification event
tgp_interaction_event.0032 = {
type = letter_event
opening = tgp_interaction_event.0010.opening
desc = tgp_interaction_event.0032.desc
sender = scope:actor
immediate = {
show_as_tooltip = {
scope:actor = {
remove_relation_disciple = scope:recipient
}
}
}
option = {
name = tgp_interaction_event.0032.a
}
}
# Secretary Director changed his own mandate
tgp_interaction_event.0041 = {
type = letter_event
opening = tgp_interaction_event.0010.opening
desc = tgp_interaction_event.0041.desc
sender = scope:actor
immediate = {
show_as_tooltip = {
switch = {
trigger = yes
scope:placate_movements = {
set_diarchy_mandate = placate_movements
scope:actor = {
set_variable = {
name = diarch_forced_mandate
value = flag:placate_movements
}
}
}
scope:promote_might = {
set_diarchy_mandate = promote_might
scope:actor = {
set_variable = {
name = diarch_forced_mandate
value = flag:promote_might
}
}
}
scope:promote_merit = {
set_diarchy_mandate = promote_merit
scope:actor = {
set_variable = {
name = diarch_forced_mandate
value = flag:promote_merit
}
}
}
}
}
}
option = {
name = tgp_interaction_event.0041.a
scope:actor = {
tgp_activate_catalyst_against_hegemon_effect = {
HEGEMON = root
CATALYST = catalyst_diarch_mandate
}
}
}
}
# Secretary Director trains knights
tgp_interaction_event.0042 = {
type = character_event
title = ep3_contract_event.0091.t
desc = {
desc = ep3_contract_event.0091.desc
first_valid = {
triggered_desc = {
trigger = { scope:helper = root }
desc = {
desc = ep3_contract_event.0091.desc_me
first_valid = {
triggered_desc = {
trigger = { root.prowess < high_skill_rating }
desc = ep3_contract_event.0091.desc_me_high_prowess
}
desc = ep3_contract_event.0091.desc_me_low_prowess
}
}
}
desc = {
desc = ep3_contract_event.0091.desc_helper
first_valid = {
triggered_desc = {
trigger = { scope:helper.prowess < high_skill_rating }
desc = ep3_contract_event.0091.desc_high_prowess
}
desc = ep3_contract_event.0091.desc_low_prowess
}
}
}
desc = ep3_contract_event.0091.desc_outro
}
theme = war
left_portrait = {
character = root
triggered_animation = {
trigger = {
scope:helper = root
root.prowess < high_skill_rating
}
animation = random_weapon_yield
}
triggered_animation = {
trigger = {
scope:helper = root
root.prowess >= high_skill_rating
}
animation = inspect_weapon
}
triggered_animation = {
trigger = {
scope:helper != root
scope:helper.prowess < high_skill_rating
}
animation = stunned
}
triggered_animation = {
trigger = {
scope:helper != root
scope:helper.prowess >= high_skill_rating
}
animation = disappointed
}
}
right_portrait = {
character = scope:knight
triggered_animation = {
trigger = {
scope:helper = root
root.prowess < high_skill_rating
}
animation = random_weapon_celebrate
}
triggered_animation = {
trigger = {
scope:helper = root
root.prowess >= high_skill_rating
}
animation = random_weapon_yield
}
triggered_animation = {
trigger = {
scope:helper != root
scope:helper.prowess < high_skill_rating
}
animation = random_weapon_celebrate
}
triggered_animation = {
trigger = {
scope:helper != root
scope:helper.prowess >= high_skill_rating
}
animation = random_weapon_yield
}
}
lower_left_portrait = {
trigger = { scope:helper != root }
character = scope:helper
}
lower_right_portrait = {
character = scope:task_contract_councillor
}
lower_center_portrait = {
character = scope:task_contract_councillor_liege
}
immediate = {
scope:recipient = {
save_scope_as = task_contract_employer
cp:councillor_marshal ?= {
if = {
limit = {
this != scope:knight
}
save_scope_as = task_contract_councillor
}
}
}
cp:councillor_marshal ?= {
add_to_list = helpers_list
}
# search for anyone that could help you train them
random_court_position_holder = {
type = grand_guardian_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = fire_dragon_engineer_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = chief_qadi_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = garuda_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = court_tutor_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = master_of_horse_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = master_of_hunt_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = bodyguard_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = champion_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = executioner_court_position
add_to_list = helpers_list
}
random_court_position_holder = {
type = master_assassin_court_position
add_to_list = helpers_list
}
random_in_list = {
list = helpers_list
save_scope_as = helper
}
if = {
limit = {
NOT = { exists = scope:helper }
}
save_scope_as = helper
}
scope:helper = {
random_character_trait = {
limit = {
has_trait_category = commander
}
save_scope_as = trait_to_teach
}
}
scope:helper = {
set_signature_weapon_effect = yes
}
scope:knight = {
set_signature_weapon_effect = yes
}
}
# steal the knight
option = {
name = ep3_contract_event.0091.a
trigger = { scope:knight = { is_landed = no } }
duel = {
skill = diplomacy
target = scope:knight
25 = {
desc = ep3_contract_event.0091_won_recruit
modifier = {
add = root.prestige_level
factor = 5
}
send_interface_toast = {
title = ep3_contract_event.0091_won_recruit
left_icon = root
right_icon = scope:knight
add_courtier = scope:knight
change_influence = {
value = scope:knight.prowess
multiply = -4
}
pay_short_term_gold = {
target = scope:recipient
gold = {
value = scope:knight.prowess
multiply = 5
}
}
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
}
}
25 = {
desc = ep3_contract_event.0091_lost_recruit
send_interface_toast = {
title = ep3_contract_event.0091_lost_recruit
left_icon = root
right_icon = scope:knight
}
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = 5
}
}
}
stress_impact = {
impatient = minor_stress_impact_loss
just = minor_stress_impact_gain
honest = minor_stress_impact_gain
callous = minor_stress_impact_loss
deceitful = minor_stress_impact_loss
}
ai_chance = {
base = 10
modifier = {
add = 100
highest_skill = diplomacy
}
}
}
# teach them a trait you know
option = {
name = ep3_contract_event.0091.b
trigger = {
exists = scope:trait_to_teach
scope:knight = {
NOT = { has_trait = scope:trait_to_teach }
}
}
duel = {
skill = martial
target = scope:knight
25 = {
desc = ep3_contract_event.0091_won_trait
modifier = {
add = root.learning
}
send_interface_toast = {
title = ep3_contract_event.0091_won_trait
left_icon = root
right_icon = scope:knight
scope:knight = {
add_trait = scope:trait_to_teach
}
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
}
}
25 = {
desc = ep3_contract_event.0091_lost
send_interface_toast = {
title = ep3_contract_event.0091_lost
left_icon = root
right_icon = scope:knight
}
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = 5
}
}
}
stress_impact = {
brave = minor_stress_impact_loss
craven = minor_stress_impact_gain
humble = minor_stress_impact_gain
arrogant = minor_stress_impact_loss
stubborn = minor_stress_impact_loss
}
ai_chance = {
base = 10
modifier = {
add = 100
highest_skill = martial
}
}
}
# let helper teach them some prowess
option = {
name = ep3_contract_event.0091.c
trigger = {
exists = scope:helper
scope:helper != root
}
scope:helper = {
duel = {
skill = prowess
target = scope:knight
25 = {
desc = ep3_contract_event.0091_won_helper
send_interface_toast = {
title = ep3_contract_event.0091_won_helper
left_icon = root
right_icon = scope:knight
scope:knight = {
add_prowess_skill = {
value = scope:helper.prowess
subtract = scope:knight.prowess
divide = 4
add = {
value = scope:knight.ai_boldness
divide = 10
}
add = {
value = scope:helper.ai_boldness
divide = 10
}
min = 2
max = 5
}
force_character_skill_recalculation = yes
}
}
compare_modifier = {
value = scope:duel_value
multiplier = 1
}
}
25 = {
desc = ep3_contract_event.0091_lost
send_interface_toast = {
title = ep3_contract_event.0091_lost
left_icon = root
right_icon = scope:knight
}
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = 5
}
}
}
}
stress_impact = {
arrogant = minor_stress_impact_gain
ambitious = minor_stress_impact_gain
humble = minor_stress_impact_loss
shy = minor_stress_impact_loss
}
ai_chance = {
base = 10
modifier = {
add = 100
scope:helper.prowess > scope:knight.prowess
}
}
}
# teach them some prowess yourself
option = {
name = ep3_contract_event.0091.d
duel = {
skill = prowess
target = scope:knight
50 = {
desc = ep3_contract_event.0091_won
send_interface_toast = {
title = ep3_contract_event.0091_won
left_icon = root
right_icon = scope:knight
scope:knight = {
add_prowess_skill = {
value = root.prowess
subtract = scope:knight.prowess
divide = 4
add = {
value = scope:knight.ai_boldness
divide = 10
}
add = {
value = root.ai_boldness
divide = 10
}
min = 1
max = 4
}
force_character_skill_recalculation = yes
}
}
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
}
modifier = {
add = {
value = scope:knight.ai_energy
divide = -10
}
}
modifier = {
add = {
value = root.ai_energy
divide = -10
}
}
}
50 = {
desc = ep3_contract_event.0091_lost
send_interface_toast = {
title = ep3_contract_event.0091_lost
left_icon = root
right_icon = scope:knight
}
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = 5
}
modifier = {
add = {
value = scope:knight.ai_energy
divide = 10
}
}
modifier = {
add = {
value = root.ai_energy
divide = 10
}
}
}
}
stress_impact = {
arrogant = minor_stress_impact_loss
ambitious = minor_stress_impact_loss
humble = minor_stress_impact_gain
shy = minor_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
add = 100
prowess > scope:knight.prowess
}
}
}
}