﻿###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
}
