﻿#Scripted effects relating to childhood

#####################################################################
# EFFECT LIST
#####################################################################
# !!! Remember to add all new effects with a short description here !!!

#get_guardian_event_target_effect
#save_good_character_effect
	#Save a relation scope for the child, use the arguments:
	#RELATION = friend
	#RELATION = crush
	#RELATION = bully
	#RELATION = victim

######################################################################
# EFFECTS
######################################################################


#Get a child's Guardian, or alternatively a suitable stand-in, since the event relies on an adult being present
get_guardian_scope_effect = {
	if = {
		limit = {
			any_relation = {
				type = guardian
				always = yes
			}
		}
		random_relation = {
			type = guardian
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			exists = court_owner.court_position:court_tutor_court_position
		}
		court_owner.court_position:court_tutor_court_position ?= {
			save_scope_as = guardian
		}
	}
	else_if = {
		limit = {
			NOT = { exists = scope:guardian }
			exists = court_owner.court_position:court_guru_court_position
		}
		court_owner.court_position:court_guru_court_position ?= {
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			is_ruler = yes
			any_parent = {
				is_available_ai_adult = yes
				is_in_the_same_court_as = root
			}
		}
		random_parent = {
			limit = {
				is_available_ai_adult = yes
				is_in_the_same_court_as = root
			}
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			is_ruler = yes
			any_courtier_or_guest = {
				is_available_ai_adult = yes
			}
		}
		random_courtier_or_guest = {
			limit = {
				is_available_ai_adult = yes
			}
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			any_parent = {
				is_ai = yes
				is_available = yes
			}
		}
		random_parent = {
			limit = {
				is_in_the_same_court_as = root
				is_ai = yes
				is_available = yes
			}
			alternative_limit = {
				is_ai = yes
				is_available = yes
			}
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			any_sibling = {
				is_available_ai_adult = yes
			}
		}
		random_sibling = {
			limit = {
				is_available_ai_adult = yes
				is_in_the_same_court_as = root
			}
			alternative_limit = {
				is_available_ai_adult = yes		
			}
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			liege ?= {
				any_courtier_or_guest = {
					is_available_ai_adult = yes
				}
			}
		}
		liege = {
			random_courtier_or_guest = {
				limit = {
					is_available_ai_adult = yes
				}
				save_scope_as = guardian
			}
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			liege ?= {
				is_available_ai_adult = yes
			}
		}
		liege = {
			save_scope_as = guardian
		}
	}
	if = { #Close to last resort
		limit = {
			NOT = { exists = scope:guardian }
			any_ruler = {
				is_ai = yes
				culture = root.culture
				faith = root.faith
				is_available = yes
			}
		}
		random_ruler = {
			limit = {
				is_ai = yes
				culture = root.culture
				faith = root.faith
				is_available = yes
			}
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			any_ruler = {
				is_ai = yes
				is_available = yes
				OR = {
					culture = root.culture
					faith = root.faith
				}
			}
		}
		debug_log = "Resorted to last resort when finding guardian for child"
		debug_log_scopes = yes
		random_ruler = {
			limit = {
				is_ai = yes
				is_available = yes
				OR = {
					culture = root.culture
					faith = root.faith
				}
			}
			save_scope_as = guardian
		}
	}
	if = {
		limit = {
			NOT = { exists = scope:guardian }
			any_ruler = {
				is_ai = yes
				is_available = yes
			}
		}
		debug_log = "Resorted to absolute last resort when finding guardian for child"
		debug_log_scopes = yes
		random_ruler = {
			limit = {
				is_ai = yes
				is_available = yes
			}
			save_scope_as = guardian
		}
	}
}


#Save a relation scope for the child, use the arguments:
	#RELATION =
	#SCOPE =
save_good_character_effect = {
	#Make sure that this list prioritizes other child vassals/heirs when the child being bullied is a player or player heir.
	save_temporary_scope_value_as = {
		name = $SCOPE$_relation
		value = yes
	}
	if = {
		limit = {
			NOT = { exists = scope:$RELATION$ }
			is_playable_character = yes
		}
		every_vassal = {
			if = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_child = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_warden_hostage = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
		}
	}
	if = {
		limit = {
			is_playable_character = yes
			NOT = { exists = scope:$RELATION$ }
		}
		every_courtier = {
			limit = {
				save_good_$RELATION$_character_trigger_check = yes
			}
			add_to_list = good_child_relation_character
		}
	}
	if = {
		limit = {
			is_playable_character = yes
			NOT = { exists = scope:$RELATION$ }
			exists = liege
			this != liege
		}
		liege = {
			if = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_vassal = {
				if = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
				every_child = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
				every_warden_hostage = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
			}
			every_child = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_warden_hostage = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
		}
	}
	if = {
		limit = {
			is_playable_character = no
			NOT = { exists = scope:$RELATION$ }
			exists = liege
			this != liege
		}
		liege = {
			if = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_vassal = {
				if = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
				every_child = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
				every_warden_hostage = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
			}
			every_child = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_warden_hostage = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_courtier_or_guest = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
		}
	}

	if = {
		limit = {
			NOT = { exists = scope:$RELATION$ }
			exists = host
			this != host
		}
		host = {
			if = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_vassal = {
				if = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
				every_child = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
				every_warden_hostage = {
					limit = {
						save_good_$RELATION$_character_trigger_check = yes
					}
					add_to_list = good_child_relation_character
				}
			}
			every_child = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_warden_hostage = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
			every_courtier_or_guest = {
				limit = {
					save_good_$RELATION$_character_trigger_check = yes
				}
				add_to_list = good_child_relation_character
			}
		}
	}

	if = {
		limit = {
			NOT = { exists = scope:$RELATION$ }
		}
		#To actually pick the relation
		random_in_list = {
			list = good_child_relation_character
			limit = {
				is_vassal_of = root
			}
			alternative_limit = {
				is_courtier_of = root
			}
			alternative_limit = {
				exists = liege
				is_primary_heir_of = liege
			}
			alternative_limit = {
				exists = liege
				is_heir_of = liege
			}
			alternative_limit = {
				always = yes
			}
			weight = {
				base = 1
				modifier = {
					add = 2
					is_powerful_vassal_of = root
				}
				modifier = {
					add = 1
					exists = root.liege
					is_vassal_of = root.liege
				}
				modifier = {
					add = 1
					exists = root.liege
					any_parent = {
						is_vassal_of = root.liege
					}
				}
				modifier = {
					add = 4
					age >= root.age_dif_child_down
					age <= root.age_dif_child_up
				}
				modifier = {
					add = -0.5
					exists = scope:crush_relation
					root = { has_sexuality = none }
					OR = {
						AND = {
							is_female = yes
							root = { is_female = yes }
						}
						AND = {
							is_male = yes
							root = { is_male = yes }
						}
					}
				}
			}
			save_scope_as = $SCOPE$
		}
	}
}

send_event_about_player_heir_childhood_personality_effect = {
	every_heir_title = {
		limit = {
			holder ?= {
				is_ai = no
				player_heir ?= scope:personality_child
				NOT = { is_in_list = childhood_personality_event }
			}
			is_title_created = yes #Since partition succession may result in uncreated titles having heirs but not holders.
		}
		holder = {
			add_to_list = childhood_personality_event
		}
	}

	every_in_list = {
		list = childhood_personality_event
		trigger_event = child_personality.$ID$
	}
}

add_suitable_same_realm_children_to_list = {
	if = {
		limit = {
			OR = {
				father ?= {
					is_ai = no
				}
				mother ?= {
					is_ai = no
				}
				host ?= {
					is_ai = no
				}
			}
		}
		if = {
			limit = { exists = location.county.holder.top_liege }
			location.county.holder.top_liege = {
				save_scope_as = top_liege_scope
			}
		}
		else = {
			save_scope_as = top_liege_scope
		}
		scope:top_liege_scope = {
			if = {
				limit = {
					is_ai = yes
					is_available_child = yes
					this != root
					age >= 6
				}
				add_to_list = suitable_same_realm_children
			}
			if = {
				limit = {
					any_courtier_or_guest = {
						is_ai = yes
						is_available_child = yes
						this != root
						age >= 6
					}
				}
				every_courtier_or_guest = {
					limit = {
						is_ai = yes
						is_available_child = yes
						this != root
						age >= 6
					}
					add_to_list = suitable_same_realm_children
				}
			}
			if = {
				limit = {
					any_warden_hostage = {
						is_ai = yes
						is_available_child = yes
						this != root
						age >= 6
					}
				}
				every_warden_hostage = {
					limit = {
						is_ai = yes
						is_available_child = yes
						this != root
						age >= 6
					}
					add_to_list = suitable_same_realm_children
				}
			}
			if = {
				limit = {
					any_vassal_or_below = {
						is_ai = yes
						is_available_child = yes
						this != root
						age >= 6
					}
				}
				every_vassal_or_below = {
					limit = {
						is_ai = yes
						is_available_child = yes
						this != root
						age >= 6
					}
					add_to_list = suitable_same_realm_children
				}
			}
			if = {
				limit = {
					any_vassal_or_below = {
						any_courtier_or_guest = {
							is_ai = yes
							is_available_child = yes
							this != root
							age >= 6
						}
					}
				}
				every_vassal_or_below = {
					limit = {
						any_courtier_or_guest = {
							is_ai = yes
							is_available_child = yes
							this != root
							age >= 6
						}
					}
					every_courtier_or_guest = {
						limit = {
							is_ai = yes
							is_available_child = yes
							this != root
							age >= 6
						}
						add_to_list = suitable_same_realm_children
					}
				}
			}
			if = {
				limit = {
					any_vassal_or_below = {
						any_warden_hostage = {
							is_ai = yes
							is_available_child = yes
							this != root
							age >= 6
						}
					}
				}
				every_vassal_or_below = {
					limit = {
						any_warden_hostage = {
							is_ai = yes
							is_available_child = yes
							this != root
							age >= 6
						}
					}
					every_warden_hostage = {
						limit = {
							is_ai = yes
							is_available_child = yes
							this != root
							age >= 6
						}
						add_to_list = suitable_same_realm_children
					}
				}
			}
		}
	}
	else = {
		if = {
			limit = { exists = location.county.holder }
			location.county.holder = {
				save_scope_as = top_liege_scope
			}
		}
		else = {
			save_scope_as = top_liege_scope
		}

		scope:top_liege_scope = {
			if = {
				limit = {
					is_ai = yes
					is_available_child = yes
					this != root
					age >= 6
				}
				add_to_list = suitable_same_realm_children
			}
			every_courtier = {
				limit = {
					is_ai = yes
					is_available_child = yes
					this != root
					age >= 6
				}
				add_to_list = suitable_same_realm_children
			}
			every_warden_hostage = {
				limit = {
					is_ai = yes
					is_available_child = yes
					this != root
					age >= 6
				}
				add_to_list = suitable_same_realm_children
			}
		}
	}
}

add_similar_age_same_court_children_to_list = {
	location.county.holder = {
		if = {
			limit = {
				is_ai = yes
				save_good_crush_character_trigger_check = yes
			}
			add_to_list = similar_age_same_court_children
		}
		if = {
			limit = {
				any_courtier_or_guest = {
					is_ai = yes
					save_good_crush_character_trigger_check = yes
				}
			}
			every_courtier_or_guest = {
				limit = {
					is_ai = yes
					save_good_crush_character_trigger_check = yes
				}
				add_to_list = similar_age_same_court_children
			}
		}
		if = {
			limit = {
				any_warden_hostage = {
					is_ai = yes
					save_good_crush_character_trigger_check = yes
				}
			}
			every_warden_hostage = {
				limit = {
					is_ai = yes
					save_good_crush_character_trigger_check = yes
				}
				add_to_list = similar_age_same_court_children
			}
		}
	}
}

guardian_or_court_tutor_trigger_event = {
	if = {
		limit = {
			any_relation = {
				type = guardian
			}
		}
		random_relation = {
			type = guardian
			trigger_event = $EVENT$
		}
	}
	else_if = {
		limit = {
			exists = court_owner.court_position:court_guru_court_position
		}
		court_owner.court_position:court_guru_court_position = {
			trigger_event = $EVENT$
		}	
	}
	else = {
		court_owner.court_position:court_tutor_court_position ?= {
			trigger_event = $EVENT$
		}
	}
}
