N3OW/events/courtier_guest_management_events/courtier_guest_management_events.txt

1390 lines
33 KiB
Text
Raw Normal View History

2026-03-03 23:27:11 +00:00
namespace = courtier_guest_management
#COURTIERS/GUESTS LEAVING
# 0001 - Courtier is planning to leave
# 0102 - Courtier with claim is wanting to leave
# 0500 - Guests leaves
# 0999 - Maintenance - Force move to pool
#GUESTS ARRIVING
# 1001 - Guest arriving, message if they're great
#POOL CHARACTERS
# 2001 - "Develops" the character and gives those without location a location
# 2002 - Pool repopulation
#COURTIERS AND GUESTS DOING STUFF
# 3001 - Sets relationships and other secrets
############################
# COURTIERS/GUESTS LEAVING #
############################
#Courtier is planning to leave
courtier_guest_management.0001 = {
hidden = yes
trigger = {
any_in_list = {
list = characters
is_child_of = scope:liege
}
}
immediate = {
#Send message about child about to leave
every_in_list = {
list = characters
limit = { is_child_of = scope:liege }
save_scope_as = child
scope:liege = {
send_interface_message = {
type = character_preparing_to_leave
title = courtier_guest_management.0001.t
desc = courtier_guest_management.desc
left_icon = scope:child
}
}
}
}
}
# this = claimed title scope
# CLAIMANT = claimant
# RULER = ruler for claimant
scripted_trigger useful_courtier_claim_can_declare_for = {
neighboring_useful_courtier_or_guest_claim_trigger = { RULER = $RULER$ }
save_temporary_scope_as = claim_title
$RULER$ = {
can_declare_war = {
defender = scope:claim_title.holder
claimant = $CLAIMANT$
casus_belli = claim_cb
target_titles = { scope:claim_title }
}
}
}
#Courtier is leaving
courtier_guest_management.0101 = {
hidden = yes
immediate = {
#Liege gets "last chance to make them stay"-event for claimants
if = {
limit = {
scope:liege = { is_ai = no }
any_in_list = {
list = characters
save_temporary_scope_as = check_character
any_claim = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:check_character
RULER = scope:liege
}
}
}
}
random_in_list = {
list = characters
limit = {
save_temporary_scope_as = check_character
any_claim = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:check_character
RULER = scope:liege
}
tier = tier_kingdom
}
}
alternative_limit = {
save_temporary_scope_as = check_character
any_claim = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:check_character
RULER = scope:liege
}
tier = tier_duchy
}
}
alternative_limit = {
save_temporary_scope_as = check_character
any_claim = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:check_character
RULER = scope:liege
}
tier = tier_county
}
}
save_scope_as = courtier
scope:liege = { trigger_event = courtier_guest_management.0102 }
}
}
else = {
move_to_pool_effect = yes
}
}
}
#Courtier with claim is wanting to leave
courtier_guest_management.0102 = { #by Mathilda Bjarnehed
type = character_event
title = courtier_guest_management.0102.t
desc = courtier_guest_management.0102.desc
left_portrait = scope:courtier
right_portrait = scope:courtier_claim
theme = crown
override_background = {
reference = courtyard
}
trigger = {
scope:courtier = {
any_claim = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:courtier
RULER = scope:liege
}
}
is_pool_character = no
}
}
immediate = {
#For text
scope:courtier = {
random_claim = {
limit = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:courtier
RULER = scope:liege
}
tier = tier_empire
}
alternative_limit = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:courtier
RULER = scope:liege
}
tier = tier_kingdom
}
alternative_limit = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:courtier
RULER = scope:liege
}
tier = tier_duchy
}
alternative_limit = {
useful_courtier_claim_can_declare_for = {
CLAIMANT = scope:courtier
RULER = scope:liege
}
tier = tier_county
}
save_scope_as = courtier_claim
}
}
capital_province = { barony = { save_scope_as = capital } }
}
#Yes, I promise
option = {
name = courtier_guest_management.0102.a
show_as_tooltip = {
random_list = {
desc = courtier_guest_management.0102.a.rl.desc
1 = {
show_chance = no
desc = courtier_guest_management.0102.a.stay
custom_tooltip = courtier_guest_management.0102.a.stay.tt
}
1 = {
show_chance = no
desc = courtier_guest_management.0102.a.leave
scope:courtier = { select_and_move_to_pool_effect = yes }
}
}
}
hidden_effect = {
scope:courtier = {
add_character_flag = {
flag = courtier_staying_for_claim
years = 1
}
trigger_event = {
id = courtier_guest_management.0103
years = 1
}
}
}
}
#No, I cannot
option = {
name = courtier_guest_management.0102.b
scope:courtier = { select_and_move_to_pool_effect = yes }
}
}
#Did liege fulfill their promise to courtier claimant?
courtier_guest_management.0103 = {
hidden = yes
trigger = {
exists = scope:liege
is_courtier_of = scope:liege
NOT = {
scope:liege = {
any_character_war = {
casus_belli = {
any_target_title = {
scope:courtier = { has_claim_on = prev }
}
}
}
}
}
}
immediate = {
select_and_move_to_pool_effect = yes
}
}
#Guest leaves
courtier_guest_management.0500 = {
hidden = yes
immediate = {
if = { # Warning if they take your kids with them
limit = {
NOT = { has_character_flag = guest_has_given_warning_about_leaving }
#To double check that they actually can leave
is_pool_guest_of = scope:host
scope:host = { is_ai = no }
any_traveling_family_member = {
count = all
guest_allowed_to_leave_trigger = yes
}
OR = {
AND = {
OR = {
has_trait = bastard
has_trait = wild_oat
}
any_parent = { this = scope:host }
}
any_traveling_family_member = {
OR = {
has_trait = bastard
has_trait = wild_oat
}
any_parent = { this = scope:host }
}
scope:host = {
any_known_secret = {
OR = {
secret_type = secret_disputed_heritage
secret_type = secret_unmarried_illegitimate_child
}
OR = {
secret_target = {
this = root
is_adult = no
}
secret_target = {
save_temporary_scope_as = target_check
root = {
any_traveling_family_member = {
this = scope:target_check
is_adult = no
}
}
}
}
}
}
}
}
scope:host = {
send_interface_message = {
type = character_preparing_to_leave
title = courtier_guest_management.0500.t
desc = courtier_guest_management.0500.desc
left_icon = root
}
}
add_character_flag = {
flag = guest_has_given_warning_about_leaving
days = 35
}
trigger_event = {
id = courtier_guest_management.0500
days = { 25 30 } #You get about a month to decide if you wanna keep them around!
}
}
else = {
if = {
limit = {
has_character_flag = guest_has_given_warning_about_leaving
}
remove_character_flag = guest_has_given_warning_about_leaving
# Now a month out of date, so lets update it
select_pool_to_move_to_effect = yes
}
move_to_pool_effect = yes
}
}
}
# Maintenance - Force move to pool
courtier_guest_management.0999 = {
hidden = yes
immediate = {
select_and_move_to_pool_effect = yes
}
}
###################
# GUESTS ARRIVING #
###################
#Guest arriving, message if they're great
scripted_trigger courtier_guest_management_1001_exceptional_claimant_trigger = {
any_claim = { neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host } }
}
scripted_trigger courtier_guest_management_1001_exceptional_marriage_candidate_trigger = {
save_temporary_scope_as = marriage_candidate
guest_marriage_candidate_trigger = yes
age > 14
OR = {
num_of_good_genetic_traits = 3
AND = {
num_of_good_genetic_traits = 2
OR = {
has_trait = beauty_good_3
has_trait = intellect_good_3
has_trait = physique_good_3
}
}
scope:host = {
can_marry_character_trigger = { CHARACTER = scope:marriage_candidate }
marriage_between_characters_unlocks_alliance_of_min_tier_trigger = {
MY_CHARACTER = scope:host
THEIR_CHARACTER = scope:marriage_candidate
TIER = scope:host.highest_held_title_tier
}
}
dynasty ?= { dynasty_prestige_level >= high_dynasty_prestige_level }
has_useful_potential_spouse_claim_trigger = { RULER = scope:host }
calc_true_if = {
amount >= 2
num_of_good_genetic_traits = 2
AND = {
num_of_good_genetic_traits = 1
OR = {
has_trait = beauty_good_2
has_trait = intellect_good_2
has_trait = physique_good_2
}
}
dynasty ?= { dynasty_prestige_level > medium_dynasty_prestige_level }
}
calc_true_if = {
amount >= 3
dynasty ?= { dynasty_prestige_level > low_dynasty_prestige_level }
num_of_good_genetic_traits = 1
diplomacy >= high_skill_rating
martial >= high_skill_rating
stewardship >= high_skill_rating
intrigue >= high_skill_rating
learning >= high_skill_rating
}
}
NOR = {
num_of_bad_genetic_traits > 1
is_lowborn = yes
}
}
scripted_trigger courtier_guest_management_1001_exceptional_commander_trigger = {
guest_commander_candidate_trigger = { HOST = scope:host }
number_of_commander_traits >= 1
martial >= very_high_skill_rating
}
scripted_trigger courtier_guest_management_1001_exceptional_vassal_trigger = {
guest_vassal_candidate_trigger = yes
opinion = {
target = scope:host
value >= medium_positive_opinion
}
calc_true_if = {
amount >= 2
OR = {
has_trait = content
has_trait = trusting
has_trait = humble
}
martial >= high_skill_rating
stewardship >= high_skill_rating
}
}
scripted_trigger courtier_guest_management_1001_exceptional_knight_trigger = {
guest_knight_candidate_trigger = { HOST = root }
prowess >= very_high_skill_rating
}
scripted_trigger courtier_guest_management_1001_exceptional_physician_trigger = {
guest_physician_candidate_trigger = yes
OR = {
has_trait = lifestyle_mystic
has_trait = lifestyle_physician
has_trait = lifestyle_herbalist
}
learning >= high_skill_rating
}
courtier_guest_management.1001 = {
hidden = yes
immediate = {
scope:guest = {
every_traveling_family_member = {
add_to_temporary_list = guest_arrival_list
}
}
# To update Adventure Inspiration to make sure that the target destination isn't in the realm they just arrived to. If it is we remove it and make them pick a new destination!
every_in_list = {
list = guest_arrival_list
limit = {
inspiration ?= { has_inspiration_type = adventure_inspiration }
exists = var:adventure_destination #They know where they want to go
}
get_adventure_inspiration_start_location = { ADVENTURER = this }
if = {
limit = {
scope:host = {
any_sub_realm_county = {
this = scope:location.county
}
}
}
remove_variable = adventure_destination
if = {
limit = {
adventure_inspiration_average_skill_value >= high_inspiration_skill
}
set_adventure_location_effect = {
BASE_SCOPE = this
NO_DESTINATION = yes
}
}
else = {
set_adventure_location_effect = {
BASE_SCOPE = this
NO_DESTINATION = no
}
}
}
}
###DEVELOPMENT EFFECT###
#Because the characters spend so little time in the pool, we also run it now
every_in_list = { # Very performance-intensive, so we restrict it as much as possible at this step.
list = guest_arrival_list
limit = {
is_adult = yes
is_lowborn = no
is_physically_able = yes
}
pool_character_development_effect = yes
if = {
limit = {
gold >= 1000
}
purge_excess_wanderer_riches_effect = yes
}
}
###EXCEPTIONAL GUEST TOAST###
if = {
limit = { scope:host = { is_ai = no } } #This is just interface messages, AI doesn't care
every_in_list = {
list = guest_arrival_list
limit = {
courtier_guest_management_1001_exceptional_claimant_trigger = yes
}
save_scope_as = exceptional_guest
#CLAIMANT MESSAGE
if = {
limit = { courtier_guest_management_1001_exceptional_claimant_trigger = yes }
random_claim = {
limit = {
neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host }
tier = tier_kingdom
scope:host.highest_held_title_tier > tier_kingdom
}
alternative_limit = {
neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host }
tier = tier_duchy
scope:host.highest_held_title_tier > tier_duchy
}
alternative_limit = {
neighboring_useful_courtier_or_guest_claim_trigger = { RULER = scope:host }
tier = tier_county
scope:host.highest_held_title_tier > tier_county
}
save_scope_as = guest_claim
}
scope:host = {
send_interface_toast = {
type = msg_notable_guest
left_icon = scope:exceptional_guest
right_icon = scope:guest_claim
title = courtier_guest_management.1001.t
desc = courtier_guest_management.1001.claimant.desc
}
}
}
}
}
}
}
###################
# POOL CHARACTERS #
###################
#This events gives pool characters relations, skills, traits and secrets. If they lack a location, they're given a location.
courtier_guest_management.2001 = {
hidden = yes
trigger = {
is_pool_character = yes # Can cease to be in the pool between it queuing and executing
}
immediate = {
#Am I lost in the void?
if = {
limit = { NOT = { exists = location } }
#Oops, no good! Go someplace. (family is also moved with this effect)
fallback_move_to_pool_effect = yes
}
#Don't I have the "last_visited_ruler" variable? (= it ran out or I'm from some weird source that doesn't set var)
if = {
limit = { NOT = { exists = var:last_visited_ruler } }
if = { # If character is prune-able, prune.
limit = {
pool_character_is_pruneable_trigger = yes
}
if = {
limit = {
culture = {
has_cultural_tradition = tradition_diasporic
}
is_adult = yes
is_lowborn = no
age < 45
2026-03-03 23:27:11 +00:00
}
random_list = {
10 = {
2026-03-03 23:27:11 +00:00
save_scope_as = minority_leader
if = {
limit = {
player_heir ?= {
this != root
is_adult = yes
}
}
player_heir = {
save_scope_as = laamp_heir
save_scope_as = laamp_inheritor
custom_tooltip = become_landless_minority_decision_title_scope_tt
}
}
else_if = {
limit = { top_liege != this }
liege = {
save_scope_as = laamp_liege
save_scope_as = laamp_inheritor
custom_tooltip = become_landless_minority_decision_title_scope_tt
}
}
else = {
custom_tooltip = become_landless_minority_decision_title_created_tt
if = {
limit = {
NOT = { exists = scope:laamp_inheritor }
}
hidden_effect_new_object = {
create_character = {
template = laamp_inheritor_template
culture = root.culture
faith = root.faith
dynasty = generate
location = root.capital_province
after_creation = {
save_scope_as = laamp_inheritor
add_character_flag = new_laamp_inheritor
}
}
}
}
}
create_landless_minority_title_tooltip_effect = yes
show_as_tooltip = {
add_prestige = medium_prestige_gain
add_character_modifier = {
modifier = ep3_voluntary_laamp_character_modifier
years = 5
}
}
primary_title = { save_scope_as = old_primary_title }
capital_province = { save_scope_as = old_capital_province }
if = {
limit = { top_liege != this }
liege = { save_scope_as = old_liege }
}
# Transfer landed titles
every_held_title = {
title_tier > barony
limit = {
OR = {
is_landless_type_title = no
is_nomad_title = yes
}
}
add_to_list = target_titles
}
create_title_and_vassal_change = {
type = conquest
save_scope_as = change
add_claim_on_loss = no
}
hidden_effect = {
every_in_list = {
list = target_titles
change_title_holder_include_vassals = {
holder = scope:laamp_inheritor
change = scope:change
}
}
resolve_title_and_vassal_change = scope:change
}
# Create Adventurer
create_landless_minority_title_effect = {
REASON = flag:voluntary
FLAVOR_CHAR = scope:laamp_inheritor
}
scope:laamp_inheritor = {
# Tooltip for player
custom_tooltip = become_landless_adventurer_decision_title_scope_tt
# Create a loving family so inheritance isn't so borked
if = {
limit = { has_character_flag = new_laamp_inheritor }
trigger_event = game_rule.1001
remove_character_flag = new_laamp_inheritor
}
}
hidden_effect = {
every_held_title = {
limit = {
is_noble_family_title = yes
}
root = { destroy_title = prev }
}
}
2026-03-03 23:27:11 +00:00
# Debug tracking
if = {
limit = {
is_ai = yes
debug_only = yes
}
if = {
limit = { exists = global_var:ai_voluntary_laamp_count }
change_global_variable = {
name = ai_voluntary_laamp_count
add = 1
}
}
else = {
set_global_variable = {
name = ai_voluntary_laamp_count
value = 1
}
}
debug_log = "AI became adventurer voluntarily"
debug_log_scopes = yes
}
stress_impact = {
craven = minor_stress_impact_gain
content = minor_stress_impact_gain
lazy = minor_stress_impact_gain
}
}
60 = {
2026-03-03 23:27:11 +00:00
}
30 = {
2026-03-03 23:27:11 +00:00
death = { death_reason = death_accident }
}
}
}
else_if = {
limit = { age < 65 }
death = { death_reason = death_accident }
}
else = {
death = { death_reason = death_old_age }
}
}
else = { # Otherwise, go somewhere else.
fallback_move_to_pool_effect = yes
}
}
if = {
limit = { is_alive = yes } #Because we might just have killed you and then 🎵nothing else matters🎵
#Develop
random = { # Very performance-intensive, so we restrict it as much as possible at this step.
chance = 50
if = {
limit = {
static_group_filter = {
group = random_dev_blocker
match = 0.8
}
is_adult = yes
is_lowborn = no
is_physically_able = yes
}
pool_character_development_effect = yes
}
}
if = {
limit = {
gold >= 1000
}
purge_excess_wanderer_riches_effect = yes
}
#Is my pool full? Then move
if = {
limit = {
location = {
exists = province_owner
local_pool_is_full_trigger = yes
}
}
location.province_owner = {
random_neighboring_and_across_water_top_liege_realm_owner = {
limit = {
capital_province ?= { local_pool_is_full_trigger = no }
}
capital_province = { save_scope_as = destination }
}
}
if = {
limit = { exists = scope:destination }
every_traveling_family_member = {
limit = { NOT = { is_in_pool_at = scope:destination } }
move_to_pool_at = scope:destination
}
}
else = {
fallback_move_to_pool_effect = yes
}
}
}
}
}
####################################
# COURTIERS AND GUESTS DOING STUFF #
####################################
scripted_trigger courtier_guest_management_3001_best_friend_trigger = {
opinion = {
target = scope:current_character
value >= high_positive_opinion
}
reverse_opinion = {
target = scope:current_character
value >= high_positive_opinion
}
}
scripted_trigger courtier_guest_management_3001_soulmate_trigger = {
opinion = {
target = scope:current_character
value >= high_positive_opinion
}
reverse_opinion = {
target = scope:current_character
value >= high_positive_opinion
}
}
scripted_trigger courtier_guest_management_3001_nemesis_trigger = {
opinion = {
target = scope:current_character
value <= high_negative_opinion
}
reverse_opinion = {
target = scope:current_character
value <= high_negative_opinion
}
}
scripted_trigger courtier_guest_management_3001_interesting_trigger = {
OR = {
is_lowborn = no
has_trait = intellect_good
has_trait = physique_good
has_trait = beauty_good
diplomacy >= high_skill_rating
martial >= high_skill_rating
stewardship >= high_skill_rating
intrigue >= high_skill_rating
learning >= high_skill_rating
is_witch_trigger = yes
is_deviant_trigger = yes
}
}
courtier_guest_management.3001 = {
hidden = yes
immediate = {
every_courtier_or_guest = {
limit = {
age >= childhood_education_start_age
NOT = { has_trait = incapable }
}
add_to_list = courtiers_and_guests
}
#Am I a player? Extra fun stuff
if = {
limit = { is_ai = no }
save_scope_as = root_scope
random_list = {
2 = { #Seduce
modifier = {
OR = {
has_trait = lustful
has_trait = seducer
has_focus = intrigue_temptation_focus
}
add = 3
}
random_in_list = {
list = courtiers_and_guests
limit = {
save_temporary_scope_as = instigating_courtier
are_characters_sensible_lovers_trigger = { INSTIGATING_LOVER = scope:instigating_courtier TARGET_OF_LOVE = scope:root_scope }
can_start_scheme = {
type = seduce
target_character = root
}
}
weight = {
base = 100
opinion_modifier = {
opinion_target = root
multiplier = 5
}
compatibility_modifier = {
compatibility_target = root
multiplier = 20
}
ai_value_modifier = {
ai_sociability = 1
}
modifier = {
has_relation_potential_lover = root
add = 500
}
modifier = {
add = {
value = attraction
divide = high_positive_attraction
multiply = 50
}
}
modifier = {
has_trait = lustful
factor = 1.5
}
}
start_scheme = {
type = seduce
target_character = root
}
}
}
2 = { #Romance
modifier = {
OR = {
has_trait = gallant
has_focus = martial_chivalry_focus
}
add = 3
}
random_in_list = {
list = courtiers_and_guests
limit = {
save_temporary_scope_as = instigating_courtier
are_characters_sensible_and_appropriate_open_lovers_trigger = { INSTIGATING_LOVER = scope:instigating_courtier TARGET_OF_LOVE = scope:root_scope }
can_start_scheme = {
type = courting
target_character = root
}
}
weight = {
base = 100
opinion_modifier = {
opinion_target = root
multiplier = 5
}
compatibility_modifier = {
compatibility_target = root
multiplier = 20
}
modifier = {
has_relation_potential_lover = root
add = 500
}
modifier = {
is_knight = yes
add = 200
}
ai_value_modifier = {
ai_honor = 2
ai_sociability = 1
}
}
start_scheme = {
type = courting
target_character = root
}
}
}
96 = { } #Nothing
}
}
# Every courtier gets a chance to do something (relations also include guests)
every_in_list = {
list = courtiers_and_guests
limit = { NOT = { is_in_list = already_updated } } #If another character set a relation with you, you don't get to run your own update. (However, we don't want to block you from being selected by other characters if you are the best alternative.)
save_scope_as = current_character
random = {
chance = 5
modifier = { #More should happen in player's court!
root = { is_ai = no }
is_courtier_of = root
add = 15
}
random_list = {
### RELATIONS ###
# Friend
100 = {
ai_value_modifier = {
ai_compassion = 0.8
ai_sociability = 2
}
trigger = {
any_relation = {
type = friend
count <= 2
}
}
random_in_list = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:current_character }
}
list = courtiers_and_guests
weight = {
base = 100
compatibility_modifier = {
who = this
compatibility_target = scope:current_character
multiplier = 20
}
modifier = {
has_relation_potential_friend = scope:current_character
add = 500
}
}
add_to_list = already_updated
set_random_friendship_reason = { TARGET = scope:current_character }
}
}
# Lover
50 = {
ai_value_modifier = {
ai_sociability = 1.5
}
modifier = {
has_trait = lustful
add = 150
}
modifier = {
OR = {
any_relation = { type = soulmate always = yes }
is_married = yes
}
ai_honor >= 0
add = -150
}
modifier = {
add = {
value = attraction
divide = high_positive_attraction
multiply = 50
}
}
trigger = {
is_married = no
is_concubine = no
might_cheat_on_every_partner_trigger = yes
NOR = {
has_trait = chaste
has_trait = celibate
has_sexuality = asexual
}
trigger_if = {
limit = {
is_courtier = yes
is_close_or_extended_family_of = liege
}
OR = {
has_trait = lustful
is_deviant_trigger = yes
}
}
any_relation = {
type = lover
count < 1
}
}
random_in_list = {
limit = {
is_married = no
is_concubine = no
might_cheat_on_every_partner_trigger = yes
NOR = {
has_trait = chaste
has_trait = celibate
has_sexuality = asexual
}
any_relation = {
type = lover
count < 1
}
trigger_if = {
limit = {
is_courtier = yes
is_close_or_extended_family_of = liege
}
scope:current_character = { is_lowborn = no }
OR = {
is_deviant_trigger = yes
has_trait = lustful
trait_compatibility = {
target = scope:current_character
value >= high_positive_trait_compatibility
}
}
}
this != scope:current_character
can_set_relation_lover_trigger = { CHARACTER = scope:current_character }
is_attracted_to_gender_of = scope:current_character
scope:current_character = { is_attracted_to_gender_of = prev }
age <= scope:current_character.age_plus_5
age >= scope:current_character.age_minus_10
trait_compatibility = {
target = scope:current_character
value >= low_positive_trait_compatibility
}
save_temporary_scope_as = incest_check
accepts_incest_with_each_other_trigger = {
CHARACTER_1 = scope:incest_check
CHARACTER_2 = scope:current_character
}
}
list = courtiers_and_guests
weight = {
base = 100
compatibility_modifier = {
who = this
compatibility_target = scope:current_character
multiplier = 20
}
modifier = {
has_relation_potential_lover = scope:current_character
add = 500
}
modifier = {
add = {
value = attraction
divide = high_positive_attraction
multiply = 50
}
}
modifier = {
has_trait = lustful
factor = 2
}
}
add_to_list = already_updated
set_random_lover_reason = { TARGET = scope:current_character }
}
}
# Rival
50 = {
ai_value_modifier = {
ai_compassion = -1
ai_vengefulness = 2
}
trigger = {
any_relation = {
type = rival
count <= 1
}
ai_vengefulness >= low_negative_ai_value
}
random_in_list = {
limit = {
can_set_relation_rival_trigger = { CHARACTER = scope:current_character }
}
list = courtiers_and_guests
weight = {
base = 100
opinion_modifier = {
trigger = { root = { is_ai = no } }
who = this
opinion_target = scope:current_character
multiplier = -5
}
opinion_modifier = {
trigger = { root = { is_ai = no } }
who = scope:current_character
opinion_target = this
multiplier = -5
}
compatibility_modifier = {
who = this
compatibility_target = scope:current_character
multiplier = -20
}
modifier = {
has_relation_potential_rival = scope:current_character
add = 500
}
}
add_to_list = already_updated
set_random_rivalry_reason = {
TARGET = scope:current_character
RELATION = rival
}
}
}
# Best friend
50 = {
trigger = {
any_relation = {
type = friend
courtier_guest_management_3001_best_friend_trigger = yes
can_set_relation_best_friend_trigger = { CHARACTER = scope:current_character }
}
}
random_relation = {
type = friend
limit = {
courtier_guest_management_3001_best_friend_trigger = yes
can_set_relation_best_friend_trigger = { CHARACTER = scope:current_character }
}
add_to_list = already_updated
set_relation_best_friend = { reason = best_friend_bonded_at_court copy_reason = friend target = scope:current_character involved_character = root.liege }
}
}
# Soulmate
25 = {
trigger = {
any_relation = {
type = lover
courtier_guest_management_3001_soulmate_trigger = yes
can_set_relation_soulmate_trigger = { CHARACTER = scope:current_character }
}
}
random_relation = {
type = lover
limit = {
courtier_guest_management_3001_soulmate_trigger = yes
can_set_relation_soulmate_trigger = { CHARACTER = scope:current_character }
}
add_to_list = already_updated
set_relation_soulmate = { reason = soulmate_love_at_court copy_reason = lover target = scope:current_character }
}
}
# Nemesis
25 = {
trigger = {
any_relation = {
type = rival
courtier_guest_management_3001_nemesis_trigger = yes
can_set_relation_nemesis_trigger = { CHARACTER = scope:current_character }
}
}
random_relation = {
type = rival
limit = {
courtier_guest_management_3001_nemesis_trigger = yes
can_set_relation_nemesis_trigger = { CHARACTER = scope:current_character }
}
add_to_list = already_updated
set_relation_nemesis = {
reason = nemesis_at_court
copy_reason = rival
target = scope:current_character
}
}
}
### SECRETS ###
30 = {
trigger = {
NOT = { any_secret = { always = yes } }
is_adult = yes
}
courtier_guest_pool_character_secret_giving_effect = yes
}
}
}
}
}
}
############################
# WANDERER INTO ADVENTURER #
############################
courtier_guest_management.4001 = {
hidden = yes
trigger = {
has_ep3_dlc_trigger = yes
is_pool_character = yes # Can cease to be in the pool between it queuing and executing
ai_can_valid_to_create_laamp_trigger = yes
is_valid_for_laampdom = yes
OR = {
has_character_flag = easteregg
has_trait = historical_character
culture = {
has_cultural_parameter = much_more_likely_to_be_laamps
}
AND = {
is_lowborn = no
culture = {
has_cultural_parameter = more_likely_to_be_laamps
}
}
any_claim = { tier >= tier_kingdom }
}
pool_character_is_pruneable_trigger = no # Avoid having uninteresting characters become Adventurers
is_ai = yes
NOT = {
any_heir_title = { }
}
}
immediate = {
random = {
chance = 0
modifier = { add = ep3_laamp_chance_score_value }
#Counteract bonus in above value somewhat
modifier = {
culture = { has_cultural_parameter = more_likely_to_be_laamps }
add = -75
}
modifier = {
has_trait = historical_character
add = 150
}
create_landless_adventurer_title_effect = {
REASON = flag:wanderer
FLAVOR_CHAR = root
}
trigger_event = ep3_laamps.0003
if = { # Debug AI tracking
limit = { debug_only = yes }
if = {
limit = { exists = global_var:ai_wanderer_laamp_count }
change_global_variable = {
name = ai_wanderer_laamp_count
add = 1
}
}
else = {
set_global_variable = {
name = ai_wanderer_laamp_count
value = 1
}
}
debug_log = "AI became adventurer due to cultural tradition"
debug_log_scopes = yes
}
}
}
}