N3OW/N3OW/common/scripted_effects/00_lifestyle_focus_effects.txt
2025-10-30 12:41:45 +00:00

1066 lines
23 KiB
Text

#Effects used in Lifestyle Focus events
#####################################################################
# EFFECT LIST
#####################################################################
# !!! Remember to add all new effects with a short description here !!!
#LIFESTYLE FRIEND EFFECTS
# save_potential_lifestyle_friend_effect
#SECONDARY LIFESTYLE EFFECTS
# reveler_lifestyle_rank_up_check_effect
# hunter_lifestyle_rank_up_check_effect
# hunter_progress_point_gain_effect
# physician_lifestyle_rank_up_effect
# mystic_lifestyle_rank_up_effect
# ai_mystic_lifestyle_rank_up_effect
######################################################################
#######################
# LIFESTYLE FRIEND EFFECTS
#######################
#Needs FOCUS and SCOPE_NAME
potential_lifestyle_friend_saving_effect = {
hidden_effect = {
save_temporary_scope_as = friend_checker
save_temporary_scope_value_as = {
name = friend_saving_focus
value = flag:$FOCUS$
}
#PLAYERS
if = {
limit = { is_ai = no }
#Add major characters to list
get_characters_of_major_interest_effect = { LISTNAME = lifestyle_friend_list }
#Step 1: Add characters of minor interest
if = {
limit = {
any_in_list = {
list = lifestyle_friend_list
potential_lifestyle_friend_availability_trigger = { CHARACTER = scope:friend_checker FOCUS = $FOCUS$ }
count = 0
}
}
get_characters_of_minor_interest_effect = { LISTNAME = lifestyle_friend_list }
}
#Step 2: Randomize if we now have someone suitable
if = {
limit = {
any_in_list = {
list = lifestyle_friend_list
potential_lifestyle_friend_availability_trigger = { CHARACTER = scope:friend_checker FOCUS = $FOCUS$ }
}
}
#Randomize!
random_in_list = {
list = lifestyle_friend_list
limit = { potential_lifestyle_friend_availability_trigger = { CHARACTER = scope:friend_checker FOCUS = $FOCUS$ } }
weight = {
base = 1
modifier = {
add = $FOCUS$_friend_points
}
modifier = {
has_relation_potential_friend = scope:friend_checker
add = 10
}
opinion_modifier = {
opinion_target = scope:friend_checker
multiplier = 0.2
}
}
if = {
limit = { is_ruler = yes }
set_focus = $FOCUS$
}
save_scope_as = $SCOPE_NAME$
}
}
#Step 3: Ok, there still was none. Try to force someone to switch focus
else = {
random_in_list = {
list = lifestyle_friend_list
limit = {
is_ruler = yes
opinion = {
target = scope:friend_checker
value >= 0
}
this != root
trigger_if = {
limit = {
scope:friend_saving_focus = flag:diplomacy_foreign_affairs_focus
scope:friend_saving_focus = flag:diplomacy_majesty_focus
scope:friend_saving_focus = flag:diplomacy_family_focus
}
diplomacy >= decent_skill_rating
}
trigger_else_if = {
limit = {
scope:friend_saving_focus = flag:martial_strategy_focus
scope:friend_saving_focus = flag:martial_authority_focus
}
martial >= decent_skill_rating
}
trigger_else_if = {
limit = {
scope:friend_saving_focus = flag:martial_chivalry_focus
}
prowess >= decent_skill_rating
}
trigger_else_if = {
limit = {
scope:friend_saving_focus = flag:stewardship_wealth_focus
scope:friend_saving_focus = flag:stewardship_domain_focus
scope:friend_saving_focus = flag:stewardship_duty_focus
}
stewardship >= decent_skill_rating
}
trigger_else_if = {
limit = {
scope:friend_saving_focus = flag:intrigue_skulduggery_focus
scope:friend_saving_focus = flag:intrigue_temptation_focus
scope:friend_saving_focus = flag:intrigue_intimidation_focus
}
intrigue >= decent_skill_rating
}
trigger_else_if = {
limit = {
scope:friend_saving_focus = flag:learning_medicine_focus
scope:friend_saving_focus = flag:learning_scholarship_focus
scope:friend_saving_focus = flag:learning_theology_focus
}
learning >= decent_skill_rating
}
# making the default behavior explicit if no other trigger_(else_)ifs are valid
trigger_else = {
always = yes
}
}
weight = {
base = 1
modifier = {
has_relation_potential_friend = scope:friend_checker
add = 10
}
opinion_modifier = {
opinion_target = scope:friend_checker
multiplier = 0.2
}
}
set_focus = $FOCUS$
save_scope_as = $SCOPE_NAME$
}
}
}
#AI
else = {
every_vassal = {
limit = { potential_lifestyle_friend_availability_trigger = { CHARACTER = scope:friend_checker FOCUS = $FOCUS$ } }
add_to_temporary_list = lifestyle_friend_list
}
every_liege_or_above = {
limit = { potential_lifestyle_friend_availability_trigger = { CHARACTER = scope:friend_checker FOCUS = $FOCUS$ } }
add_to_temporary_list = lifestyle_friend_list
}
every_courtier = {
limit = { potential_lifestyle_friend_availability_trigger = { CHARACTER = scope:friend_checker FOCUS = $FOCUS$ } }
add_to_temporary_list = lifestyle_friend_list
}
random_in_list = {
list = lifestyle_friend_list
save_scope_as = $SCOPE_NAME$
}
}
#FALLBACK GENERATION
if = {
limit = { NOT = { exists = scope:$SCOPE_NAME$ } }
if = {
limit = { exists = scope:friend_checker.capital_province }
create_character = {
location = scope:friend_checker.capital_province
template = $FOCUS$_friend_template
save_scope_as = $SCOPE_NAME$
after_creation = {
add_character_flag = created
}
}
}
else = {
create_character = {
location = scope:friend_checker.location
template = $FOCUS$_friend_template
save_scope_as = $SCOPE_NAME$
after_creation = {
add_character_flag = created
}
}
}
scope:$SCOPE_NAME$ = { visit_court_of = scope:friend_checker }
}
}
}
########################
# SECONDARY LIFESTYLE EFFECTS
########################
#Reveler (gained by feasts)
reveler_points_gain_effect = {
if = {
limit = { NOT = { has_variable = reveler_lifestyle_progress } }
set_variable = {
name = reveler_lifestyle_progress
value = $CHANGE$
}
}
else = {
change_variable = {
name = reveler_lifestyle_progress
add = $CHANGE$
}
}
#Random chance of additional increase to increase unpredictability
random = {
chance = 50
change_variable = {
name = reveler_lifestyle_progress
add = $RANDOM_CHANGE$
}
}
#Extra Random chance with the Festivities Tradition
if = {
limit = {
culture = { has_cultural_parameter = reveler_traits_more_common }
}
random = {
chance = 75
change_variable = {
name = reveler_lifestyle_progress
add = 1
}
}
}
}
reveler_lifestyle_rank_up_check_effect = {
if = {
limit = {
NOT = { has_trait = lifestyle_reveler }
}
random = {
chance = 15
modifier = {
add = -10
faith = { trait_is_sin = lifestyle_reveler }
}
modifier = {
add = -10
has_trait = temperate
}
modifier = {
add = -10
has_trait = inappetetic
}
modifier = {
add = 10
culture = { has_cultural_parameter = reveler_traits_more_valued }
}
modifier = {
add = 5
has_trait = gluttonous
}
modifier = {
add = 5
has_trait = drunkard
}
modifier = {
add = 5
has_trait = comfort_eater
}
modifier = {
add = 15
exists = var:reveler_lifestyle_progress
var:reveler_lifestyle_progress >= reveler_rank_up_3_threshold
}
modifier = {
add = 15
exists = var:reveler_lifestyle_progress
var:reveler_lifestyle_progress >= reveler_rank_up_2_threshold
}
modifier = {
add = 15
exists = var:reveler_lifestyle_progress
var:reveler_lifestyle_progress >= reveler_rank_up_1_threshold
}
trigger_event = feast.0050
show_as_tooltip = {
add_trait = lifestyle_reveler
}
}
}
else = {
if = {
limit = {
NOT = { has_trait = lifestyle_reveler }
exists = var:reveler_lifestyle_progress
var:reveler_lifestyle_progress >= reveler_rank_up_3_threshold
}
add_trait_xp = {
trait = lifestyle_reveler
value = 10
}
}
else_if = {
limit = {
exists = var:reveler_lifestyle_progress
var:reveler_lifestyle_progress >= reveler_rank_up_2_threshold
}
add_trait_xp = {
trait = lifestyle_reveler
value = 5
}
}
else_if = {
limit = {
exists = var:reveler_lifestyle_progress
var:reveler_lifestyle_progress >= reveler_rank_up_1_threshold
}
add_trait_xp = {
trait = lifestyle_reveler
value = 3
}
}
else = {
add_trait_xp = {
trait = lifestyle_reveler
value = 1
}
}
set_variable = {
name = reveler_lifestyle_progress
value = 0
}
}
}
#Hunter (gained by hunting)
hunter_progress_point_gain_effect = {
if = {
limit = { is_alive = yes }
if = {
limit = {
NOT = { exists = var:hunter_lifestyle_progress }
}
set_variable = {
name = hunter_lifestyle_progress
value = $CHANGE$
}
}
else = {
change_variable = {
name = hunter_lifestyle_progress
add = $CHANGE$
}
}
save_scope_value_as = {
name = hunt_base_increase
value = $CHANGE$
}
# Tooltips
if = {
limit = { scope:hunt_base_increase <= 1 }
custom_tooltip = hunt_progress_towards_trait_1_tt
}
else_if = {
limit = { scope:hunt_base_increase = 2 }
custom_tooltip = hunt_progress_towards_trait_2_tt
}
else = { custom_tooltip = hunt_progress_towards_trait_3_tt }
#Random chance of additional point to increase unpredictability
hidden_effect = {
random = {
chance = 50
change_variable = {
name = hunter_lifestyle_progress
add = $RANDOM_CHANGE$
}
}
}
#Extra Random chance with the Hunters Tradition
if = {
limit = {
culture = { has_cultural_parameter = hunting_traits_more_common }
involved_activity = {
NOT = {
has_activity_option = { category = special_type option = hunt_type_falconry }
}
}
}
random = {
chance = 75
change_variable = {
name = hunter_lifestyle_progress
add = 1
}
}
}
else_if = {
limit = {
culture = { has_cultural_parameter = falconer_traits_more_common }
involved_activity = {
has_activity_option = { category = special_type option = hunt_type_falconry }
}
}
random = {
chance = 75
change_variable = {
name = hunter_lifestyle_progress
add = 1
}
}
}
}
}
hunter_lifestyle_rank_up_check_effect = {
save_scope_value_as = {
name = falconry
value = $FALCONRY$
}
if = {
limit = {
is_alive = yes
NOT = { has_trait = lifestyle_hunter }
exists = var:hunter_lifestyle_progress
}
add_trait = lifestyle_hunter
}
else_if = { # To show host trait gain for guests
limit = {
is_alive = yes
exists = var:hunter_lifestyle_progress
NOT = { has_character_flag = host_existing_hunter }
}
add_trait_force_tooltip = lifestyle_hunter
}
if = {
limit = {
is_alive = yes
exists = var:hunter_lifestyle_progress
has_trait = lifestyle_hunter
scope:falconry = yes
}
send_interface_toast = {
title = hunter_xp_gain_message
if = {
limit = { var:hunter_lifestyle_progress >= hunter_rank_up_3_threshold }
add_trait_xp = {
trait = lifestyle_hunter
track = falconer
value = 15
}
}
else_if = {
limit = { var:hunter_lifestyle_progress >= hunter_rank_up_2_threshold }
add_trait_xp = {
trait = lifestyle_hunter
track = falconer
value = 10
}
}
else_if = {
limit = { var:hunter_lifestyle_progress >= hunter_rank_up_1_threshold }
add_trait_xp = {
trait = lifestyle_hunter
track = falconer
value = 5
}
}
else = {
add_trait_xp = {
trait = lifestyle_hunter
track = falconer
value = 3
}
}
}
}
else_if = {
limit = {
is_alive = yes
exists = var:hunter_lifestyle_progress
has_trait = lifestyle_hunter
}
send_interface_toast = {
title = hunter_xp_gain_message
if = {
limit = { var:hunter_lifestyle_progress >= hunter_rank_up_3_threshold }
add_trait_xp = {
trait = lifestyle_hunter
track = hunter
value = 15
}
}
else_if = {
limit = { var:hunter_lifestyle_progress >= hunter_rank_up_2_threshold }
add_trait_xp = {
trait = lifestyle_hunter
track = hunter
value = 10
}
}
else_if = {
limit = { var:hunter_lifestyle_progress >= hunter_rank_up_1_threshold }
add_trait_xp = {
trait = lifestyle_hunter
track = hunter
value = 5
}
}
else = {
add_trait_xp = {
trait = lifestyle_hunter
track = hunter
value = 3
}
}
}
}
set_variable = {
name = hunter_lifestyle_progress
value = 0
}
}
#Physician (for AI, gained through treatment events)
physician_lifestyle_rank_up_effect = {
if = {
limit = {
NOT = { has_trait = lifestyle_physician }
}
add_trait = lifestyle_physician
}
else_if = {
limit = {
has_trait_xp = {
trait = lifestyle_physician
value < 100
}
}
add_trait_xp = {
trait = lifestyle_physician
value = 10
}
}
}
#Blademaster (for AI, gained through knight events)
blademaster_lifestyle_rank_up_effect = {
if = {
limit = {
NOT = { has_trait = lifestyle_blademaster }
}
add_trait = lifestyle_blademaster
}
else_if = {
limit = {
has_trait_xp = {
trait = lifestyle_blademaster
value < 100
}
}
add_trait_xp = {
trait = lifestyle_blademaster
value = 10
}
}
}
# Mystic
mystic_lifestyle_rank_up_effect = {
if = {
limit = {
NOT = { has_trait = lifestyle_mystic }
}
add_trait = lifestyle_mystic
}
else = {
add_trait_xp = {
trait = lifestyle_mystic
value = 10
}
}
}
mystic_lifestyle_point_gain_effect = {
# Expects VALUE
# Tooltip stuff first:
show_as_tooltip = {
if = {
limit = { # No further rank ups if you're already at max
NAND = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
}
exists = var:mystic_lifestyle_progress # This assumes you can never progress the lifestyle on the first point gain
}
# Show rank-up tooltip if relevant
if = {
limit = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
}
set_local_variable = {
name = mystic_check_tooltip_value
value = mystic_second_rank_up_threshold
}
}
else = {
set_local_variable = {
name = mystic_check_tooltip_value
value = mystic_first_rank_up_threshold
}
}
change_local_variable = {
name = mystic_check_tooltip_value
subtract = $VALUE$
}
if = {
limit = {
trigger_if = { # If Mystic 2, use the higher threshold
limit = {
AND = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 50
}
has_trait_xp = {
trait = lifestyle_mystic
value < 100
}
}
}
var:mystic_lifestyle_progress >= local_var:mystic_check_tooltip_value
}
trigger_else = {
var:mystic_lifestyle_progress >= mystic_first_rank_up_threshold
}
}
mystic_lifestyle_rank_up_effect = yes
}
}
}
# Actually run the lifestyle experience/rank-up gain effect:
hidden_effect = {
if = {
limit = { # No further rank ups if you're already at max
NAND = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
}
}
if = {
limit = {
NOT = { exists = var:mystic_lifestyle_progress }
}
set_variable = {
name = mystic_lifestyle_progress
value = $VALUE$
}
}
else = {
change_variable = {
name = mystic_lifestyle_progress
add = $VALUE$
}
}
# Rank up if relevant
if = {
limit = {
trigger_if = { # If Mystic 2, use the higher threshold
limit = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 50
}
}
var:mystic_lifestyle_progress >= mystic_second_rank_up_threshold
}
trigger_else = {
var:mystic_lifestyle_progress >= mystic_first_rank_up_threshold
}
}
mystic_lifestyle_rank_up_effect = yes
# Remove the variable if you reach max rank
if = {
limit = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
}
remove_variable = mystic_lifestyle_progress
}
# Set the variable back to 0 if you've ranked up
else = {
set_variable = {
name = mystic_lifestyle_progress
value = 0
}
}
}
}
}
}
mystical_communion_outcome_effect = {
# Limited to 2 effect lines due to showing up in a toast
add_learning_lifestyle_xp = major_lifestyle_xp
add_character_modifier = {
modifier = divine_guidance_modifier
years = 5
}
if = {
limit = {
has_trait = lifestyle_mystic
}
add_trait_xp = {
trait = lifestyle_mystic
value = lifestyle_mystic_xp_gain_minor_value
}
}
}
#Mystic (for AI, gained through treatment events)
ai_mystic_lifestyle_rank_up_effect = {
if = {
limit = {
NOT = { has_trait = lifestyle_mystic }
}
add_trait = lifestyle_mystic
}
else = {
add_trait_xp = {
trait = lifestyle_mystic
value = 10
}
}
}
# Remove all perk-unlocked traits when resetting
remove_all_perk_lifestyle_traits_effect = {
if = {
limit = {
has_trait = diplomat
}
remove_trait = diplomat
}
if = {
limit = {
has_trait = family_first
}
remove_trait = family_first
}
if = {
limit = {
has_trait = august
}
remove_trait = august
}
if = {
limit = {
has_trait = strategist
}
remove_trait = strategist
}
if = {
limit = {
has_trait = overseer
}
remove_trait = overseer
}
if = {
limit = {
has_trait = gallant
}
remove_trait = gallant
}
if = {
limit = {
has_trait = architect
}
remove_trait = architect
}
if = {
limit = {
has_trait = administrator
}
remove_trait = administrator
}
if = {
limit = {
has_trait = avaricious
}
remove_trait = avaricious
}
if = {
limit = {
has_trait = schemer
}
remove_trait = schemer
}
if = {
limit = {
has_trait = seducer
}
remove_trait = seducer
}
if = {
limit = {
has_trait = torturer
}
remove_trait = torturer
}
if = {
limit = {
has_trait = whole_of_body
}
remove_trait = whole_of_body
}
if = {
limit = {
has_trait = scholar
}
remove_trait = scholar
}
if = {
limit = {
has_trait = theologian
}
remove_trait = theologian
}
if = {
limit = {
has_trait = lifestyle_surveyor
}
remove_trait = lifestyle_surveyor
}
if = {
limit = {
has_trait = lifestyle_wayfarer
}
remove_trait = lifestyle_wayfarer
}
if = {
limit = {
has_trait = lifestyle_voyager
}
remove_trait = lifestyle_voyager
}
hidden_effect = {
set_absolute_country_control = no
}
}
#If you don't have a lifestyle focus, this will yield xp in a random lifestyle
##Takes the amount of _lifestyle_xp you want to hand out as an argument, from the scripted values
add_focused_lifestyle_xp_effect = {
if = {
limit = { has_lifestyle = diplomacy_lifestyle }
add_diplomacy_lifestyle_xp = $AMOUNT$_lifestyle_xp
}
else_if = {
limit = { has_lifestyle = martial_lifestyle }
add_martial_lifestyle_xp = $AMOUNT$_lifestyle_xp
}
else_if = {
limit = { has_lifestyle = stewardship_lifestyle }
add_stewardship_lifestyle_xp = $AMOUNT$_lifestyle_xp
}
else_if = {
limit = { has_lifestyle = intrigue_lifestyle }
add_intrigue_lifestyle_xp = $AMOUNT$_lifestyle_xp
}
else_if = {
limit = { has_lifestyle = learning_lifestyle }
add_learning_lifestyle_xp = $AMOUNT$_lifestyle_xp
}
else_if = {
limit = { has_lifestyle = wanderer_lifestyle }
add_wanderer_lifestyle_xp = $AMOUNT$_lifestyle_xp
}
else = {
random_list = {
10 = { add_diplomacy_lifestyle_xp = $AMOUNT$_lifestyle_xp }
10 = { add_martial_lifestyle_xp = $AMOUNT$_lifestyle_xp }
10 = { add_stewardship_lifestyle_xp = $AMOUNT$_lifestyle_xp }
10 = { add_intrigue_lifestyle_xp = $AMOUNT$_lifestyle_xp }
10 = { add_learning_lifestyle_xp = $AMOUNT$_lifestyle_xp }
# Excludes wanderer since it's picked less often
}
}
}
ai_chance_to_switch_to_travel_focus_effect = {
if = {
limit = {
is_ai = yes
is_adult = yes
is_at_war = no
is_landed = yes
has_bp3_dlc_trigger = yes
gold >= minor_gold_value
highest_held_title_tier >= tier_county
has_completed_one_tree_in_current_lifestyle_trigger = yes
NOR = {
has_focus = wanderer_internal_affairs_focus
has_focus = wanderer_journey_focus
has_focus = wanderer_destination_focus
has_trait = reclusive
is_incapable = yes
has_character_modifier = isolating_modifier
}
}
random = {
chance = {
value = 5
if = {
limit = {
has_completed_current_lifestyle_trigger = yes # No good reason to stick with your lifestyle
}
add = 75
}
if = {
limit = {
has_trait_xp = {
trait = lifestyle_traveler
track = travel
value >= 25
}
}
add = 20
}
if = {
limit = {
has_trait_xp = {
trait = lifestyle_traveler
track = travel
value >= 50
}
}
add = 20
}
if = { # Busy doing.. other things
limit = {
has_focus = intrigue_temptation_focus
}
add = -20
}
if = { # Wants to get away
limit = {
has_trait = shy
}
add = {
value = root.perk_points_assigned
multiply = 3
}
}
if = { # Very stressed
limit = {
stress >= 150
}
add = {
value = root.perk_points_assigned
multiply = 3
}
}
if = { # Has an adventurous sort of personality
limit = {
ai_sociability >= 50
ai_boldness >= 0
}
add = {
value = root.perk_points_assigned
multiply = 3
}
}
}
random_list = {
1 = { # Stewards and realm-focused character
modifier = {
add = 99
OR = {
ai_has_economical_boom_personality = yes
has_focus_stewardship = yes
has_trait = greedy
}
}
set_focus = wanderer_internal_affairs_focus
}
1 = { # Stressed or asocial characters
modifier = {
add = 99
OR = {
stress >= 50
ai_sociability <= -25
}
NOT = {
has_trait = impatient
}
}
modifier = {
add = 100
stress >= 150
NOT = {
has_trait = impatient
}
}
set_focus = wanderer_journey_focus
}
1 = { # Learning focused self-improvement characters
modifier = {
add = 99
OR = {
has_focus_learning = yes
has_trait = impatient
has_trait = ambitious
}
}
set_focus = wanderer_destination_focus
}
}
}
}
}