N3OW/common/scripted_triggers/00_courtier_guest_management_triggers.txt
2026-03-09 03:51:24 +00:00

849 lines
20 KiB
Text

###TRIGGER LIST###
#GUEST/COURTIER LEAVING/ARRIVING TRIGGERS:
#any_child_not_in_traveling_family_trigger
#any_consort_not_in_traveling_family_trigger
#courtier_allowed_to_leave_trigger
#guest_allowed_to_leave_trigger
#guest_allowed_to_arrive_trigger
#GUEST/COURTIER USEFULNESS:
#courtier_or_guest_claim_trigger
#useful_courtier_or_guest_claim_trigger
#has_useful_potential_spouse_claim_trigger
#guest_knight_candidate_trigger
#guest_commander_candidate_trigger
#guest_vassal_candidate_trigger
#guest_physician_candidate_trigger
#guest_male_female_balance_trigger
#child_available_for_guest_marriage_trigger
#guest_marriage_candidate_trigger
#POOL CHARACTER TRIGGERS:
#pool_character_is_pruneable_trigger
####GUEST/COURTIER LEAVING/ARRIVING TRIGGERS###
same_location_and_court_status_as = { # Same location and both are in court / are guests / are pool characters
exists = location
exists = $CHARACTER$.location
location = $CHARACTER$.location
OR = {
is_in_the_same_court_as = $CHARACTER$
trigger_if = {
limit = { $CHARACTER$ = { is_pool_guest = yes } }
is_pool_guest = yes
}
trigger_if = {
limit = { $CHARACTER$ = { is_pool_character = yes } }
is_pool_character = yes
}
}
}
any_child_not_in_traveling_family_trigger = {
save_temporary_scope_as = traveler
exists = location
any_child = {
is_adult = no
same_location_and_court_status_as = { CHARACTER = scope:traveler }
save_temporary_scope_as = checking_child
scope:traveler = {
NOT = {
any_traveling_family_member = { this = scope:checking_child }
}
}
}
}
any_consort_not_in_traveling_family_trigger = {
save_temporary_scope_as = traveler
exists = location
any_spouse = {
exists = location
same_location_and_court_status_as = { CHARACTER = scope:traveler }
save_temporary_scope_as = checking_consort
scope:traveler = {
NOT = {
any_traveling_family_member = { this = scope:checking_consort }
}
}
}
}
courtier_allowed_to_leave_trigger = {
save_temporary_scope_as = leaving_courtier
NOR = {
# Not blocked by script
has_character_flag = blocked_from_leaving
is_councillor_of = scope:liege
is_consort_of = scope:liege
scope:liege = {
player_heir_position = {
target = scope:leaving_courtier
value <= 2 #Not 1st, 2nd or 3rd player heir (0,1,2)
}
}
has_any_court_position = yes
has_relation_lover = scope:liege
is_knight_of = scope:liege
is_tax_collector_of = scope:liege
any_relation = {
type = ward
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
any_relation = {
type = guardian
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
any_relation = {
type = mentor
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
any_relation = {
type = student
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
#Keep daughters/sons for marriages
AND = {
OR = {
is_child_of = scope:liege
is_grandchild_of = scope:liege
is_great_grandchild_of = scope:liege
}
NOT = { has_trait = bastard }
trigger_if = { #Daughters
limit = { is_female = yes }
scope:liege = {
OR = {
has_realm_law = male_only_law
has_realm_law = male_preference_law
}
}
}
trigger_else = { #Sons
scope:liege = {
OR = {
has_realm_law = female_only_law
has_realm_law = female_preference_law
}
}
}
}
#No children of liege can leave court while children
AND = {
OR = {
is_child_of = scope:liege
is_grandchild_of = scope:liege
is_great_grandchild_of = scope:liege
}
is_adult = no
}
#Claimant won't leave while claim is pressed...
scope:liege = { pressing_claim_of_character_trigger = { CHARACTER = scope:leaving_courtier } }
#Would be leaving without a child or consort
any_child_not_in_traveling_family_trigger = yes
any_consort_not_in_traveling_family_trigger = yes
#...Or while they have a promise for a claim getting pressed
has_character_flag = courtier_staying_for_claim
#...Or if they're involved in an ongoing event
has_variable = stewardship_duty_1062_employer
#...Or if someone is trying to elope with them
any_targeting_scheme = {
scheme_type = elope
}
#Non-dominant spouses don't wander off
AND = {
is_married = yes
any_spouse = {
OR = {
liege ?= scope:leaving_courtier.liege
AND = {
exists = host
exists = scope:leaving_courtier.host
liege = scope:leaving_courtier.host
}
is_in_the_same_court_as = scope:leaving_courtier
}
}
trigger_if = {
limit = { is_female = yes }
scope:liege = {
OR = {
has_realm_law = male_only_law
has_realm_law = male_preference_law
}
}
}
trigger_else = {
scope:liege = {
OR = {
has_realm_law = female_only_law
has_realm_law = female_preference_law
}
}
}
}
# Diarchs don't leave their court.
is_diarch = yes
is_designated_diarch = yes
#Shieldmaidens stay till dismissed.
has_trait = shieldmaiden
# Children taught a lesson won't leave
has_character_modifier = mellowed_spirit
# Courtiers with sponsored inspirations won't leave on their own.
inspiration ?= { exists = inspiration_sponsor }
scope:liege = { government_has_flag = government_is_landless_adventurer }
is_obedient_to = scope:liege
AND = {
scope:liege.primary_title = title:h_china
OR = {
is_child_of = scope:liege
is_grandchild_of = scope:liege
is_great_grandchild_of = scope:liege
}
}
}
}
guest_allowed_to_leave_trigger = {
NOR = {
# Not blocked by script
has_character_flag = blocked_from_leaving
#Agent in a local scheme
scope:host = {
any_courtier = {
any_targeting_scheme = {
any_scheme_agent_character = {
this = scope:guest
}
}
}
}
scope:host = {
any_targeting_scheme = {
any_scheme_agent_character = {
this = scope:guest
}
}
}
any_child = { # No child can be a known child of the host
is_adult = no
any_parent = { this = scope:host }
}
# Diarchs don't leave their court.
is_diarch = yes
is_designated_diarch = yes
#Would be leaving without spouse or underage child
any_child_not_in_traveling_family_trigger = yes
any_consort_not_in_traveling_family_trigger = yes
#Is waiting for inspiration funding
exists = inspiration
}
}
guest_allowed_to_arrive_trigger = {
trigger_if = {
limit = { exists = var:last_visited_ruler }
NOT = { var:last_visited_ruler = $HOST$ }
}
trigger_if = { # Make sure that they're not trying to go back to where they are right now
limit = { exists = host }
NOT = { host = $HOST$ }
}
NOT = { has_trait_with_flag = epidemic_disease }
NOT = { has_relation_rival = $HOST$ }
#Compatible faiths
faith = {
save_temporary_scope_as = potential_guest_faith
faith_hostility_level = {
target = $HOST$.faith
value < faith_evil_level
}
}
$HOST$.faith = {
faith_hostility_level = {
target = scope:potential_guest_faith
value < faith_evil_level
}
}
#Isn't too good for host
NAND = {
OR = {
any_claim = { tier = tier_empire }
any_close_family_member = { highest_held_title_tier = tier_empire }
}
$HOST$ = { highest_held_title_tier <= tier_county }
}
} #Note: this trigger used to contain opinion triggers but then some awful rulers could never get guests because everyone hates them
#This is a localized trigger for checking that a character do not have a spouse that's employed or has some other circumstance blocking them from being recruited to a court
can_recruit_character_to_court_trigger = {
$RECRUITER$ = { save_temporary_scope_as = recruiter }
$RECRUITEE$ = { save_temporary_scope_as = recruitee }
scope:recruitee = {
bp2_valid_for_standard_interactions_trigger = yes
trigger_if = {
limit = { is_adult = no }
custom_description = {
text = is_not_wandering_child
subject = scope:recruitee
OR = {
is_close_or_extended_family_of = scope:recruiter
scope:recruiter = {
any_spouse = {
any_child = { this = scope:recruitee }
}
}
trigger_if = {
limit = {
scope:recruiter.culture = { has_cultural_parameter = wider_adoption }
scope:recruitee.culture = { has_cultural_parameter = wider_adoption }
}
NOT = {
any_parent = {
is_alive = yes
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = liege }
}
}
}
}
}
}
NOR = {
is_imprisoned = yes
is_theocratic_lessee = yes
is_diarch = yes
trigger_if = {
limit = {
exists = host
host = { is_ai = no }
NOT = { is_player_heir_of = scope:recruiter }
}
is_player_heir_of = host
}
trigger_if = {
limit = {
exists = host
host = { is_ai = yes }
NOT = { is_player_heir_of = scope:recruiter }
}
is_primary_heir_of = host
}
trigger_if = {
limit = { exists = host }
is_consort_of = host
}
trigger_if = {
limit = { exists = host }
host = {
pressing_claim_of_character_trigger = { CHARACTER = scope:recruitee }
}
}
trigger_if = {
limit = { exists = host }
#Are they employed?
is_councillor_of = scope:recruitee.host
is_knight_of = scope:recruitee.host
any_relation = {
type = ward
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = guardian
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = mentor
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = student
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_court_position_employer = { this = scope:recruitee.host }
}
trigger_if = {
limit = {
scope:recruiter = { has_government = landless_adventurer_government }
}
custom_tooltip = {
text = can_recruit_character_to_court_trigger.tt.laamps_invitation_restrictions
NOR = {
is_player_heir_of = scope:recruiter
has_relation_soulmate = scope:recruiter
has_relation_best_friend = scope:recruiter
is_consort_of = scope:recruiter
AND = {
is_pool_character = yes
OR = {
has_relation_friend = scope:recruiter
has_relation_lover = scope:recruiter
is_close_family_of = scope:recruiter
}
}
}
}
}
#Do they have the "wrong" marriage type and the spouse is employed?
custom_description = {
text = is_married_matrilineally_and_spouse_is_dominant_partner
subject = scope:recruitee
any_spouse = {
is_female = yes
matrilinear_marriage = yes
host ?= scope:recruitee.host
save_temporary_scope_as = spouse
OR = { #Is employed in some way
is_councillor_of = scope:recruitee.host
is_knight_of = scope:recruitee.host
any_relation = {
type = ward
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = guardian
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = mentor
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = student
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
scope:spouse = {
any_court_position_employer = { this = scope:recruitee.host }
}
}
}
}
custom_description = {
text = is_married_patrilineally_and_spouse_is_dominant_partner
subject = scope:recruitee
any_spouse = {
is_male = yes
patrilinear_marriage = yes
host ?= scope:recruitee.host
save_temporary_scope_as = spouse
OR = { #Is employed in some way
is_councillor_of = scope:recruitee.host
is_knight_of = scope:recruitee.host
any_relation = {
type = ward
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = guardian
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = mentor
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = student
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
scope:spouse = {
any_court_position_employer = { this = scope:recruitee.host }
}
}
}
}
custom_description = {
text = "is_escaped_prisoner"
subject = scope:recruitee
OR = {
has_opinion_modifier = {
modifier = attempted_imprisonment_opinion
target = scope:recruiter
}
has_opinion_modifier = {
modifier = treasonous_imprison_refusal
target = scope:recruiter
}
AND = {
exists = var:escaped_imprisonment_from
var:escaped_imprisonment_from = scope:recruiter
}
}
}
}
}
}
###GUEST/COURTIER USEFULNESS TRIGGERS###
courtier_or_guest_claim_trigger = {
exists = holder
NOT = {
holder = {
OR = {
this = $RULER$
target_is_liege_or_above = $RULER$
}
}
}
}
useful_courtier_or_guest_claim_trigger = {
courtier_or_guest_claim_trigger = { RULER = $RULER$ }
tier < $RULER$.highest_held_title_tier
$RULER$ = { is_landed = yes }
OR = { #For distance check
exists = title_province
exists = holder.capital_province
}
#The higher tier the ruler has, the longer distance is acceptable
#We prefer to measure against the title's province, but if there is none, check its holder
trigger_if = {
limit = { $RULER$ = { highest_held_title_tier = tier_empire } }
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_almost_massive } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_almost_massive } }
}
}
trigger_else_if = {
limit = { $RULER$ = { highest_held_title_tier = tier_kingdom } }
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_huge } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_huge } }
}
}
trigger_else_if = {
limit = { $RULER$ = { highest_held_title_tier = tier_duchy } }
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_large } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_large } }
}
}
trigger_else = {
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_medium } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_medium } }
}
}
}
neighboring_useful_courtier_or_guest_claim_trigger = {
courtier_or_guest_claim_trigger = { RULER = $RULER$ }
tier < $RULER$.highest_held_title_tier
exists = $RULER$.capital_province
holder = {
any_sub_realm_county = {
is_neighbor_to_realm = $RULER$
}
}
}
has_useful_potential_spouse_claim_trigger = {
any_claim = {
pressed = yes
exists = holder
NOT = {
holder = {
OR = {
this = $RULER$
target_is_liege_or_above = $RULER$
}
}
}
}
}
guest_knight_candidate_trigger = {
can_be_knight_trigger = { ARMY_OWNER = $HOST$ }
age < 60
age >= 25
prowess > medium_skill_rating
}
guest_commander_candidate_trigger = {
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $HOST$ }
age < 60
age >= 25
martial > medium_skill_rating
}
guest_vassal_candidate_good_traits_trigger = {
OR = { #Gives +opinion of liege
has_trait = content
has_trait = trusting
has_trait = humble
}
}
guest_vassal_candidate_bad_traits_trigger = {
OR = { #Gives -opinion of liege
has_trait = ambitious
has_trait = arrogant
has_trait = impatient
}
}
guest_vassal_candidate_trigger = {
age < 60
faith = scope:host.faith
culture = scope:host.culture
faith = {
has_dominant_ruling_gender = prev
}
guest_vassal_candidate_bad_traits_trigger = no
save_temporary_scope_as = vassal_candidate
is_eunuch_trigger = no
NOR = { #So they don't leave your realm through inheritance
any_heir_title = {
scope:guest = { is_primary_heir_of = scope:vassal_candidate }
}
any_child = { is_playable_character = yes }
has_trait = devoted
has_trait = order_member
}
}
guest_physician_candidate_trigger = {
age < 70
learning >= decent_skill_rating
}
guest_male_female_balance_trigger = { #are you interesting enough to get "upbalanced" to make up for lack of available positions due to your gender?
is_adult = yes
age <= 65
is_lowborn = no
}
child_available_for_guest_marriage_trigger = {
is_married = no
is_betrothed = no
age >= 10
OR = {
is_vassal_of = scope:host
is_courtier_of = scope:host
}
}
guest_marriage_candidate_trigger = {
save_temporary_scope_as = marriage_candidate
OR = {
is_male = yes
age <= 40
}
OR = {
AND = {
is_married = no
can_marry_character_trigger = { CHARACTER = scope:host }
}
scope:host = {
any_child = {
child_available_for_guest_marriage_trigger = yes
can_marry_character_trigger = { CHARACTER = scope:marriage_candidate }
}
}
}
}
###POOL TRIGGERS###
is_visitable_relation_trigger = {
capital_province ?= { local_pool_is_full_trigger = no }
NOR = {
this = $CHARACTER$.host
has_relation_rival = $CHARACTER$
}
$CHARACTER$ = {
NOT = {
var:last_visited_ruler ?= prev
}
}
}
###########################
# POOL CHARACTER TRIGGERS #
###########################
pool_character_is_pruneable_trigger = {
save_temporary_scope_as = pool_prune_check
is_adult = yes
NOR = {
has_trait = heresiarch
has_trait = populist_leader
has_trait = adventurer_follower
has_trait = adventurer
has_trait = historical_character
has_character_flag = ai_will_not_convert
is_married = yes
any_claim = { }
any_child = { is_adult = no }
any_relation = {
type = lover
is_ruler = yes
}
any_relation = {
type = friend
is_ruler = yes
}
any_close_or_extended_family_member = { is_ruler = yes }
#Belongs to a dynasty with more than 1 member
any_relation = {
type = rival
is_ai = no
}
has_character_flag = easteregg
}
trigger_if = {
limit = {
is_lowborn = no
}
NOR = {
diplomacy >= high_skill_rating
martial >= high_skill_rating
stewardship >= high_skill_rating
intrigue >= high_skill_rating
learning >= high_skill_rating
prowess >= high_skill_rating
dynasty ?= { any_dynasty_member = { this != scope:pool_prune_check } }
any_relation = {
type = rival
is_ruler = yes
}
culture = {
has_cultural_tradition = tradition_diasporic
}
}
}
}
local_pool_is_full_trigger = {
number_of_characters_in_pool >= full_pool_size
}
guest_poet_candidate_trigger = {
age < 80
age >= 16
diplomacy > medium_skill_rating
}
is_courtier_or_knight_of_root = {
OR = {
is_courtier_of = root
is_knight_of = root
}
}
guest_herder_candidate_trigger = {
government_has_flag = government_is_true_herder
has_trait = lifestyle_seasoned_pastor
trigger_if = {
limit = { root.faith = { has_doctrine = doctrine_gender_male_dominated } }
is_male = yes
}
trigger_if = {
limit = { root.faith = { has_doctrine = doctrine_gender_female_dominated } }
is_female = yes
}
age < 45
age >= 25
}