﻿multie_select_language_effect = {
	set_variable = { name = multie_lang_$LANG_NR$ value = scope:selected_culture }

	add_to_variable_list = {
		name = multie_selected_languages
		target = scope:selected_culture
	}
	
	multie_populate_speakers_list_effect = { LANG_NR = $LANG_NR$ LANGUAGE = scope:selected_culture }
}

multie_deselect_language_effect = {
	remove_variable = multie_lang_$LANG_NR$
	
	remove_list_variable = {
		name = multie_selected_languages
		target = scope:selected_culture
	}

	clear_variable_list = speakers_lang_$LANG_NR$
}

multie_populate_speakers_list_effect = {
	every_courtier = {
		limit = {
			OR = {
				knows_language_of_culture = $LANGUAGE$
				culture = {
					has_same_culture_language = $LANGUAGE$
				}
			}
			is_adult = yes
			is_physically_able = yes
		}

		add_to_temporary_list = speakers_unsorted_$LANG_NR$
	}

	ordered_in_list = {
		list = speakers_unsorted_$LANG_NR$
		order_by = learning
		max = 100
		check_range_bounds = no
		
		PREV = {
			add_to_variable_list = {
				name = speakers_lang_$LANG_NR$
				target = PREV
			}
		}
	}
}

multie_list_available_languages_effect = {
	clear_variable_list = multie_languages_in_court
	save_scope_as = ruler

	every_culture_global = {
		limit = {
			save_temporary_scope_as = culture_to_consider
			scope:ruler = {
				any_courtier = {
					OR = {
						knows_language_of_culture = scope:culture_to_consider
						culture = {
							has_same_culture_language = scope:culture_to_consider
						}
					}
					is_adult = yes
					is_physically_able = yes
				}
				NOT = {
					any_in_list = {
						variable = multie_selected_languages
						has_same_culture_language = scope:culture_to_consider
					}
				}
			}
		}
		if = {
			limit = {
				save_temporary_scope_as = culture_to_consider
				NOT = {
					any_in_list = {
						list = multie_languages_in_court_unsorted
						has_same_culture_language = scope:culture_to_consider
					}
				}
			}
			add_to_list = multie_languages_in_court_unsorted
		}
	}

	ordered_in_list = {
		list = multie_languages_in_court_unsorted
		order_by = {
			save_temporary_scope_as = culture_temp
			value = 1
			PREV = {
				every_courtier = {
					limit = {
						OR = {
							knows_language_of_culture = scope:culture_temp
							culture = {
								has_same_culture_language = scope:culture_temp
							}
						}
						is_adult = yes
						is_physically_able = yes
					}
					add = 1
				}
			}
		}
		max = 100
		check_range_bounds = no
		
		scope:ruler = {
			add_to_variable_list = {
				name = multie_languages_in_court
				target = PREV
			}
		}
	}
}

multie_clear_variables_effect = {
	remove_variable = multie_lang_1
	clear_variable_list = speakers_lang_1
	remove_variable = multie_lang_2
	clear_variable_list = speakers_lang_2
	remove_variable = multie_lang_3
	clear_variable_list = speakers_lang_3
	clear_variable_list = multie_languages_in_court
	clear_variable_list = multie_selected_languages
}

multie_selection_to_story_effect = {
	random_owned_story = {
		limit = {
			story_type = multie_story
		}
		save_scope_as = story
	}
	if = {
		limit = { not = { exists = scope:story } }
		create_story = {
			type = multie_story
			save_scope_as = story
		}
	}

	scope:story = {
		if = {
			limit = { exists = PREV.var:multie_lang_1 }
			set_variable = {
				name = lang_1
				value = PREV.var:multie_lang_1
			}
		} else = {
			remove_variable = lang_1
		}
		if = {
			limit = { exists = PREV.var:multie_lang_2 }
			set_variable = {
				name = lang_2
				value = PREV.var:multie_lang_2
			}
		} else = {
			remove_variable = lang_2
		}
		if = {
			limit = { exists = PREV.var:multie_lang_3 }
			set_variable = {
				name = lang_3
				value = PREV.var:multie_lang_3
			}
		} else = {
			remove_variable = lang_3
		}
		set_variable = {
			name = edu_mode
			value = PREV.var:multie_edu_mode
		}
	}
}

multie_story_to_selection_effect = {
	random_owned_story = {
		limit = {
			story_type = multie_story
		}
		save_scope_as = story
	}
	if = {
		limit = { exists = scope:story }

		if = {
			limit = { exists = scope:story.var:lang_1 }

			set_variable = {
				name = multie_lang_1
				value = scope:story.var:lang_1
			}
			add_to_variable_list = {
				name = multie_selected_languages
				target = scope:story.var:lang_1
			}

			multie_populate_speakers_list_effect = { LANG_NR = 1 LANGUAGE = scope:story.var:lang_1 }
		}
		if = {
			limit = { exists = scope:story.var:lang_2 }

			set_variable = {
				name = multie_lang_2
				value = scope:story.var:lang_2
			}
			add_to_variable_list = {
				name = multie_selected_languages
				target = scope:story.var:lang_2
			}

			multie_populate_speakers_list_effect = { LANG_NR = 2 LANGUAGE = scope:story.var:lang_2 }
		}
		if = {
			limit = { exists = scope:story.var:lang_3 }

			set_variable = {
				name = multie_lang_3
				value = scope:story.var:lang_3
			}
			add_to_variable_list = {
				name = multie_selected_languages
				target = scope:story.var:lang_3
			}

			multie_populate_speakers_list_effect = { LANG_NR = 3 LANGUAGE = scope:story.var:lang_3 }
		}
		if = {
			limit = { exists = scope:story.var:edu_mode }
			set_variable = {
				name = multie_edu_mode
				value = scope:story.var:edu_mode
			}
		} else = {
			set_variable = {
				name = multie_edu_mode
				value = flag:passive
			}
		}
	} else = {
		set_variable = {
			name = multie_edu_mode
			value = flag:passive
		}
	}
}

multie_determine_if_lang_learned = {
	if = { #If it was their native language, obviously they managed to learn it.
		limit = {
			OR = {
				knows_language_of_culture = scope:lang_$LANG_NR$
				culture = {
					has_same_culture_language = scope:lang_$LANG_NR$
				}
			}
		}
		save_scope_value_as = { name = lang_$LANG_NR$_learned value = yes }
	} else = {
		# We'll be using a list of contributing factors to the likelihood of child learning language. 
		# Some factors get added more than once (weighing them). The average of the list
		# is then taken, and if it crosses a threshold the language will be learned

		#First, exposure (only relevant for passive learners)
		if = {
			limit = { 
				scope:story.var:edu_mode = flag:passive
			}
			save_scope_value_as = { #Decide if they were sufficiently exposed to skilled speakers
				name = learning_factor_$LANG_NR$
				value = {
					value = 0
					host = {
						every_courtier = {
							limit = {
								OR = {
									knows_language_of_culture = scope:lang_$LANG_NR$
									culture = {
										has_same_culture_language = scope:lang_$LANG_NR$
									}
								}
								is_adult = yes
								is_physically_able = yes
							}
							add = learning
							multiply = 1.2 #This consistently multiplies the total, because having many different speakers is better
						}
					}

					#Bonus for some relations; they have the learning value added again
					every_relation = {
						type = guardian
						type = friend
						limit = {
							exists = location
							location = PREV.location
							OR = {
								knows_language_of_culture = scope:lang_$LANG_NR$
								culture = {
									has_same_culture_language = scope:lang_$LANG_NR$
								}
							}
						}
						add = learning
					}

					#Score of 25 produces factor of 100
					multiply = 4
				}
			}
			#Reduce effective exposure for secondary/tertiary language
			switch = {
				trigger = flag:$LANG_NR$
				flag:2 = { 
					save_scope_value_as = {
						name = learning_factor_$LANG_NR$
						value = {
							value = scope:learning_factor_$LANG_NR$
							multiply = 0.9
						}
					}
				}
				flag:3 = { 
					save_scope_value_as = {
						name = learning_factor_$LANG_NR$
						value = {
							value = scope:learning_factor_$LANG_NR$
							multiply = 0.8
						}
					}
				}
			}

			scope:learning_factor_$LANG_NR$ = {
				add_to_list = multie_factors_$LANG_NR$
			}
			#Add twice; it's twice as important as kid talent (when exposure is relevant)
			save_scope_value_as = {
				name = learning_factor_$LANG_NR$_again
				value = scope:learning_factor_$LANG_NR$
			}
			scope:learning_factor_$LANG_NR$_again = {
				add_to_list = multie_factors_$LANG_NR$
			}
		}

		#Now kid skills - counts under either mode
		
		# Measured learning skill distribution at age 6:
		#             ======
		#             XXXXXX
		#             XXXXXX   
		#             XXXXXX
		#             XXXXXX======
		#             XXXXXXXXXXXX
		#       XXXXXXXXXXXXXXXXXX
		#       XXXXXXXXXXXXXXXXXXXXXXXX______
		#       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
		#       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
		# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX======
		# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX======______
		#    0     1     2     3     4     5     6     7     8     9
		save_scope_value_as = {
			name = kid_learning_factor_$LANG_NR$
			value = {
				value = 0
				if = { limit = { learning = 0 } add = 50 }
				else_if = { limit = { learning = 1 } add = 55 }
				else_if = { limit = { learning = 2 } add = 60 }
				else_if = { limit = { learning = 3 } add = 70 }
				else_if = { limit = { learning = 4 } add = 100 }
				else_if = { limit = { learning = 5 } add = 120 }
				else_if = { limit = { learning = 6 } add = 140 }
				else_if = { limit = { learning = 7 } add = 160 }
				else = { add = 200 }
			}
		}
		#Reduce effective skill for secondary/tertiary language (more effort on their part to pick it up)
		switch = {
			trigger = flag:$LANG_NR$
			flag:2 = { 
				save_scope_value_as = {
					name = kid_learning_factor_$LANG_NR$
					value = {
						value = scope:kid_learning_factor_$LANG_NR$
						multiply = 0.8
					}
				}
			}
			flag:3 = { 
				save_scope_value_as = {
					name = kid_learning_factor_$LANG_NR$
					value = {
						value = scope:kid_learning_factor_$LANG_NR$
						multiply = 0.6
					}
				}
			}
		}

		scope:kid_learning_factor_$LANG_NR$ = {
			add_to_list = multie_factors_$LANG_NR$
		}

		#Court tutor impact (for active learners)
		if = {
			limit = {
				scope:story.var:edu_mode = flag:active
				has_ep1_court_positions_dlc_trigger = yes #Let's not penalise those who don't own RoCo
			}
			if = {
				limit = {
					host = {
						employs_court_position = court_tutor_court_position
					}
				}
				host = {
					random_court_position_holder = {
						type = court_tutor_court_position
						save_scope_as = court_tutor
					}
				}

				save_scope_value_as = {
					name = tutor_aptitude_factor_$LANG_NR$
					value = {
						#3 is average, higher is good, lower is bad
						value = scope:court_tutor.aptitude:court_tutor_court_position
						subtract = 3
						multiply = 100
						add = 50
					}
				}
			} else = {
				save_scope_value_as = { #Having no court tutor is pretty bad
					name = tutor_aptitude_factor_$LANG_NR$
					value = 40
				}
			}
			scope:tutor_aptitude_factor_$LANG_NR$ = {
				add_to_list = multie_factors_$LANG_NR$
			}
		}

		#Time to tally up the values in the list, determine the average
		save_scope_value_as = {
			name = multie_average_factor_$LANG_NR$
			value = {
				every_in_list = { list = multie_factors_$LANG_NR$ add = this }
				divide = { every_in_list = { list = multie_factors_$LANG_NR$ add = 1 } }
			}
		}

		#Random, the chance being the average factor
		random = {
			chance = scope:multie_average_factor_$LANG_NR$
			save_scope_value_as = { name = lang_$LANG_NR$_learned value = yes }
		}
		if = {
			limit = { not = { exists = scope:lang_$LANG_NR$_learned } }
			save_scope_value_as = { name = lang_$LANG_NR$_learned value = no }
		}
	}
}

multie_learn_learned_languages = {
	if = {
		limit = {
			exists = scope:lang_1
			scope:lang_1_learned = yes
			NOT = {
				knows_language_of_culture = scope:lang_1
			}
		}
		learn_language_of_culture = scope:lang_1
	}
	if = {
		limit = {
			exists = scope:lang_2
			scope:lang_2_learned = yes
			NOT = {
				knows_language_of_culture = scope:lang_2
			}
		}
		learn_language_of_culture = scope:lang_2
	}
	if = {
		limit = {
			exists = scope:lang_3
			scope:lang_3_learned = yes
			NOT = {
				knows_language_of_culture = scope:lang_3
			}
		}
		learn_language_of_culture = scope:lang_3
	}
}

multie_learn_all_selected_languages = {
	if = {
		limit = {
			exists = scope:lang_1
			NOT = {
				knows_language_of_culture = scope:lang_1
			}
		}
		learn_language_of_culture = scope:lang_1
	}
	if = {
		limit = {
			exists = scope:lang_2
			NOT = {
				knows_language_of_culture = scope:lang_2
			}
		}
		learn_language_of_culture = scope:lang_2
	}
	if = {
		limit = {
			exists = scope:lang_3
			NOT = {
				knows_language_of_culture = scope:lang_3
			}
		}
		learn_language_of_culture = scope:lang_3
	}
}

multie_list_to_numbered_entries = {
	every_in_list = {
		list = $LIST$
		if = {
			limit = {
				NOT = { exists = scope:$PREFIX$1 }
			}
			save_scope_as = $PREFIX$1
		} else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$2 }
			}
			save_scope_as = $PREFIX$2
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$3 }
			}
			save_scope_as = $PREFIX$3
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$4 }
			}
			save_scope_as = $PREFIX$4
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$5 }
			}
			save_scope_as = $PREFIX$5
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$6 }
			}
			save_scope_as = $PREFIX$6
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$7 }
			}
			save_scope_as = $PREFIX$7
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$8 }
			}
			save_scope_as = $PREFIX$8
		}  else_if = {
			limit = {
				NOT = { exists = scope:$PREFIX$9 }
			}
			save_scope_as = $PREFIX$9
		} else = {
			save_scope_as = $PREFIX$10
		}
	}
}

multie_notify_host_effect = {
	save_scope_as = kid
	host = {
		send_interface_message = {
			type = multie_upbringing_msg
			desc = {
				triggered_desc = {
					trigger = {
						exists = scope:known_lang_3
					}
					desc = multie_notify_host.known.3
				}
				triggered_desc = {
					trigger = {
						exists = scope:known_lang_2
						NOT = { exists = scope:known_lang_3 }
					}
					desc = multie_notify_host.known.2
				}
				triggered_desc = {
					trigger = {
						NOT = { exists = scope:known_lang_2 }
					}
					desc = multie_notify_host.known.1
				}
			
				triggered_desc = {
					trigger = {
						exists = scope:failed_lang_3
						scope:story.var:edu_mode = flag:passive
					}
					desc = multie_notify_host.failed.3
				}
				triggered_desc = {
					trigger = {
						exists = scope:failed_lang_2
						scope:story.var:edu_mode = flag:passive
						NOT = { exists = scope:failed_lang_3 }
					}
					desc = multie_notify_host.failed.2
				}
				triggered_desc = {
					trigger = {
						exists = scope:failed_lang_1
						scope:story.var:edu_mode = flag:passive
						NOT = { exists = scope:failed_lang_2 }
					}
					desc = multie_notify_host.failed.1
				}
			
				triggered_desc = {
					trigger = {
						exists = scope:failed_lang_3
						scope:story.var:edu_mode = flag:active
					}
					desc = multie_notify_host.failed.active.3
				}
				triggered_desc = {
					trigger = {
						exists = scope:failed_lang_2
						scope:story.var:edu_mode = flag:active
						NOT = { exists = scope:failed_lang_3 }
					}
					desc = multie_notify_host.failed.active.2
				}
				triggered_desc = {
					trigger = {
						exists = scope:failed_lang_1
						scope:story.var:edu_mode = flag:active
						NOT = { exists = scope:failed_lang_2 }
					}
					desc = multie_notify_host.failed.active.1
				}
				
			}
			left_icon = scope:kid
			scope:kid = {
				if = {
					limit = {
						scope:story.var:edu_mode = flag:active
					}
					show_as_tooltip = {
						add_stress = {
							value = 0
							every_in_list = {
								list = known_languages
								add = minor_stress_gain
							}
						}
						add_stress = {
							value = 0
							every_in_list = {
								list = languages_failed_to_learn
								add = major_stress_gain
							}
						}
					}
				}
			}
		}
	}
}

multie_check_lang_speakers_from_story_effect = {
	if = {
		limit = { exists = var:lang_$LANG_NR$ }
		var:lang_$LANG_NR$ = { save_scope_as = lang_$LANG_NR$ }
		save_scope_value_as = { name = lang_$LANG_NR$_has_speakers value = no }
		story_owner = {
			every_courtier = {
				if = {
					limit = {
						OR = {
							knows_language_of_culture = scope:lang_$LANG_NR$
							culture = {
								has_same_culture_language = scope:lang_$LANG_NR$
							}
						}
						is_adult = yes
						is_physically_able = yes
					}
					save_scope_value_as = { name = lang_$LANG_NR$_has_speakers value = yes }
				}
			}
			if = {
				limit = { scope:lang_$LANG_NR$_has_speakers = no }
				set_variable = {
					name = multie_lang_w_no_speakers_$LANG_NR$
					value = scope:lang_$LANG_NR$
				}
			} else_if = {
				limit = { exists = var:multie_lang_w_no_speakers_$LANG_NR$ }
				remove_variable = multie_lang_w_no_speakers_$LANG_NR$
			}
		}
	}
}

multie_select_best_language_effect = {
	ordered_in_list = {
		variable = multie_languages_in_court
		max = 3
		check_range_bounds = no
		limit = {
			NOR = {
				AND = {
					exists = scope:ruler.var:multie_lang_1
					this = scope:ruler.var:multie_lang_1
				}
				AND = {
					exists = scope:ruler.var:multie_lang_2
					this = scope:ruler.var:multie_lang_2
				}
				AND = {
					exists = scope:ruler.var:multie_lang_3
					this = scope:ruler.var:multie_lang_3
				}
			}
		}
		order_by = {
			value = 0
			if = {
				limit = {
					scope:ruler = {
						OR = {
							knows_language_of_culture = PREV
							culture = {
								has_same_culture_language = PREV.culture
							}
						}
					}
				}
				add = 30
			}
			if = {
				limit = {
					save_temporary_scope_as = culture_to_consider
					scope:ruler = { culture = { has_same_culture_language = scope:culture_to_consider } }
				}
				add = 100
			}
			if = {
				limit = {
					scope:ruler = {
						has_royal_court = yes
						has_court_language_of_culture = PREV
					}
				}
				add = 140
			}
			if = {
				limit = {
					save_temporary_scope_as = culture_to_consider
					scope:ruler = {
						exists = liege
						liege = {
							not = { this = scope:ruler }
							culture = { has_same_culture_language = scope:culture_to_consider }
						}
					}
				}
				add = 100
			}
			if = {
				limit = {
					scope:ruler = {
						exists = liege
						liege = {
							not = { this = scope:ruler }
							has_royal_court = yes
							 has_court_language_of_culture = PREV.culture
						}
					}
				}
				add = 120
			}
			add = {
				value = 0
				if = { limit = { save_temporary_scope_as = culture_to_consider } }
				scope:ruler = {
					every_realm_county = {
						limit = {
							culture = { has_same_culture_language = scope:culture_to_consider }
						}
						add = 1
					}
				}
				divide = scope:ruler.sub_realm_size
				multiply = 100
				subtract = 25
			}
			if = {
				limit = {
					save_temporary_scope_as = culture_to_consider
					not = {
						scope:ruler = {
							any_sub_realm_county = {
								culture = { has_same_culture_language = scope:culture_to_consider }
							}
						}
					}
				}
				subtract = 100
			}
			add = {
				value = 0
				scope:ruler = {
					every_courtier = {
						limit = {
							OR = {
								knows_language_of_culture = scope:culture_to_consider
								culture = {
									has_same_culture_language = scope:culture_to_consider
								}
							}
							is_adult = yes
							is_physically_able = yes
						}
						add = 20
					}
				}
				subtract = 80
				max = 50
			}
		}

		if = {
			limit = {
				not = { exists = scope:ruler.var:multie_lang_1 }
			}
			scope:ruler = {
				set_variable = {
					name = multie_lang_1
					value = PREV
				}
			}
		} else_if = {
			limit = {
				not = { exists = scope:ruler.var:multie_lang_2 }
			}
			scope:ruler = {
				set_variable = {
					name = multie_lang_2
					value = PREV
				}
			}
		} else = {
			scope:ruler = {
				set_variable = {
					name = multie_lang_3
					value = PREV
				}
			}
		}
	}
}