﻿
#Tweak exam advantage variable
imperial_examination_adjust_advantage_variable_effect = {
	if = {
		limit = {
			NOT = { has_variable = has_exam_advantage }
		}
		set_variable = {
			name = has_exam_advantage
			value = 1
		}
	}
	else = {
		change_variable = {
			name = has_exam_advantage
			add = 1
		}
	}
}

imperial_examination_adjust_advantage_variable_neg_effect = {
	if = {
		limit = {
			NOT = { has_variable = has_exam_advantage }
		}
		set_variable = {
			name = has_exam_advantage
			value = 0
		}
	}
	else = {
		change_variable = {
			name = has_exam_advantage
			add = -1
		}
	}
}

#Is run in the imperial_examination_cheat_washing_effect
imperial_examination_update_cheat_washing_effect = {
	if = {
		limit = { has_variable = washed_cheater }
		change_variable = {
			name = washed_cheater
			add = 1
		}
	}
	else = {
		set_variable = {
			name = washed_cheater
			value = 1
		}
	}
}

imperial_examination_cheat_washing_effect = {
	#What a relief.
	stress_impact = { base = major_stress_impact_loss }
	#Gonzo!
	custom_tooltip = imperial_examination.cheat_wash.tt
	remove_variable ?= been_caught_cheating
	remove_variable ?= been_caught_cheating_longterm
	#How many times have we washed out cheat, exactly?
	imperial_examination_update_cheat_washing_effect = yes
}


#Rewards
imperial_examination_disburse_activity_host_rewards = {
	involved_activity = {
		add_activity_log_entry = {
			key = imperial_examination_host_rewards
			score = 100
			tags = { completed }
			show_in_conclusion = yes
			character = scope:host
			location = scope:host.location

			scope:host = {
				#Legend spread
				if = {
					limit = {
						has_dlc_feature = legends
						exists = promoted_legend
						#Lots of entrants
						scope:activity = { activity_has_imperial_exams_trigger = yes }
					}
					promoted_legend ?= {
						change_legend_quality_effect = { VALUE = medium_legend_quality_increase }
					}
				}

				#Influence based on your... setup
				change_influence = {
					value = imperial_examination_influence_base_reward_value
					#Lots of entrants
					if = {
						limit = { scope:activity = { activity_has_imperial_exams_trigger = yes } }
						multiply = 4
					}
					#Smaller amount of entrants
					else_if = {
						limit = { scope:activity = { activity_has_grand_exams_trigger = yes } }
						multiply = 2
					}
				}

				#Legitimacy
				add_legitimacy = {
					value = imperial_examination_legitimacy_base_reward_value
					#Extreme Grade
					if = {
						limit = { scope:activity = { activity_has_extreme_grade_trigger = yes } }
						multiply = 2
					}
					#High Grade is the default, as it were, so no post for that case
					#Mediocre Grade
					else_if = {
						limit = { scope:activity = { activity_has_mediocre_grade_trigger = yes } }
						multiply = 0.8
					}
					#Low Grade
					else = {
						limit = { scope:activity = { activity_has_low_grade_trigger = yes } }
						multiply = 0.5
					}
				}

				#Prestige
				add_prestige = {
					value = imperial_examination_prestige_base_reward_value
					#Extreme Grade
					if = {
						limit = { scope:activity = { activity_has_extreme_grade_trigger = yes } }
						multiply = 4
					}
					#High Grade
					else_if = {
						limit = { scope:activity = { activity_has_high_grade_trigger = yes } }
						multiply = 2
					}
					#Mediocre Grade 
					#Low Grade
					else = {
						limit = { scope:activity = { activity_has_low_grade_trigger = yes } }
						multiply = 0.8
					}
				}
			}
		}
	}
}

local_examination_disburse_activity_host_rewards = {
	involved_activity = {
		add_activity_log_entry = {
			key = imperial_examination_host_rewards
			score = 100
			tags = { completed }
			show_in_conclusion = yes
			character = scope:host
			location = scope:host.location

			scope:host = {
				#Influence based on your... setup
				change_influence = {
					value = local_examination_influence_base_reward_value
					#Lots of entrants
					if = {
						limit = { scope:activity = { activity_has_imperial_exams_trigger = yes } }
						multiply = 4
					}
					#Smaller amount of entrants
					else_if = {
						limit = { scope:activity = { activity_has_grand_exams_trigger = yes } }
						multiply = 2
					}
				}

				if = {
					limit = { has_legitimacy = yes }
					#Legitimacy (for those who have it)
					add_legitimacy = {
						value = local_examination_legitimacy_base_reward_value
						#Extreme Grade
						if = {
							limit = { scope:activity = { activity_has_extreme_grade_trigger = yes } }
							multiply = 2
						}
						#High Grade is the default, as it were, so no post for that case
						#Mediocre Grade
						else_if = {
							limit = { scope:activity = { activity_has_mediocre_grade_trigger = yes } }
							multiply = 0.8
						}
						#Low Grade
						else = {
							limit = { scope:activity = { activity_has_low_grade_trigger = yes } }
							multiply = 0.5
						}
					}
				}
				else = {
					# Merit for the rest
					change_merit = {
						value = local_examination_legitimacy_base_reward_value
						#Extreme Grade
						if = {
							limit = { scope:activity = { activity_has_extreme_grade_trigger = yes } }
							multiply = 2
						}
						#High Grade is the default, as it were, so no post for that case
						#Mediocre Grade
						else_if = {
							limit = { scope:activity = { activity_has_mediocre_grade_trigger = yes } }
							multiply = 0.8
						}
						#Low Grade
						else = {
							limit = { scope:activity = { activity_has_low_grade_trigger = yes } }
							multiply = 0.5
						}
					}
				}

				#Prestige
				add_prestige = {
					value = local_examination_prestige_base_reward_value
					#Extreme Grade
					if = {
						limit = { scope:activity = { activity_has_extreme_grade_trigger = yes } }
						multiply = 4
					}
					#High Grade
					else_if = {
						limit = { scope:activity = { activity_has_high_grade_trigger = yes } }
						multiply = 2
					}
					#Mediocre Grade 
					#Low Grade
					else = {
						limit = { scope:activity = { activity_has_low_grade_trigger = yes } }
						multiply = 0.8
					}
				}
			}
		}
	}
}

imperial_examination_disburse_activity_examiner_rewards = {
	#Add some influence & prestige
	change_influence = imperial_examination_influence_base_reward_value
	add_prestige = imperial_examination_prestige_base_reward_value
	#Change some opinion
	add_opinion = {
		modifier = examiner_opinion
		target = scope:host
		opinion = 25
	}
}

imperial_examination_disburse_activity_entrant_rewards = {
	save_temporary_scope_as = entrant
	#This variable is set to track the loc we show players when notifying them of their family's results.

	#Cheaters
	if = {
		limit = { has_variable = been_caught_cheating_longterm }
		#No influence for cheaters
		change_merit = {
			value = imperial_examination_merit_base_reward_value
			multiply = 0.1
		}
	}
	#Entrants
	else_if = {
		limit = {
			OR = {
				is_in_guest_subset = { name = entrants }
				is_in_guest_subset = { name = palace_entrants }
			}
		}
		#Influence based on your score
		if = {
			limit = { is_ai = no }
			#Record it
			involved_activity = {
				add_activity_log_entry = {
					key = imperial_examination_entrant_rewards
					score = 80
					tags = { completed }
					show_in_conclusion = yes
					character = scope:entrant
					location = scope:entrant.location
					scope:entrant = {
						if = {
							limit = {
								NOT = { has_character_modifier = tgp_passed_provincial_exam_modifier }
							}
							add_character_flag = passed_provincial_exam
							add_character_modifier = {
								modifier = tgp_bypassed_provincial_exam_modifier
							}
						}
						change_influence = imperial_examination_entrant_influence_reward_value
						#Merit based on your score
						change_merit = imperial_examination_entrant_merit_reward_value
						# Gain Prestige if you have the relevant flag
						if = {
							limit = { has_character_flag = examination_prestige_reward }
							remove_character_flag = examination_prestige_reward
							add_prestige = major_prestige_gain
						}
					}
				}
			}
		}
		else = {
			if = {
				limit = {
					NOT = { has_character_modifier = tgp_passed_provincial_exam_modifier }
				}
				add_character_flag = passed_provincial_exam
				add_character_modifier = {
					modifier = tgp_bypassed_provincial_exam_modifier
				}
				if = {
					limit = { is_lowborn = no }
					change_merit = local_examination_merit_base_reward_value
				}
			}
			if = {
				limit = {
					OR = {
						is_lowborn = no
						has_perfect_score_trigger = { SCORE_VAR = imperial_examination_score }
					}
					
				}
				change_influence = imperial_examination_entrant_influence_reward_value
				#Merit based on your score
				change_merit = imperial_examination_entrant_merit_reward_value
				# Gain Prestige if you have the relevant flag
				if = {
					limit = { has_character_flag = examination_prestige_reward }
					remove_character_flag = examination_prestige_reward
					add_prestige = major_prestige_gain
				}
			}
		}
		if = {
			limit = {
				is_in_guest_subset = { name = palace_entrants }
			}
			if = {
				limit = {
					NOT = { has_character_flag = passed_metropolitan_exam }
				}
				add_character_flag = passed_metropolitan_exam
				add_character_modifier = {
					modifier = tgp_passed_metropolitan_exam_modifier
				}
			}
			add_character_flag = passed_palace_exam
			add_character_modifier = {
				modifier = tgp_passed_palace_exam_modifier
			}
			create_character_memory = {
				type = passed_metropolitan_exam_memory
			}
			create_character_memory = {
				type = passed_palace_exam_memory
			}
			# Notify close family members
			every_close_family_member = {
				# House head is notified separately
				limit = { is_house_head = no }
				send_interface_message = {
					type = event_msg_merit_effect_good
					title = palace_exam_close_family_passed
					right_icon = root
					desc = msg_palace_exam_close_family_passed_desc
				}
			}
		}
		else_if = {
			limit = {
				is_in_guest_subset = { name = entrants }
			}
			save_temporary_scope_as = temp_scope
			add_character_flag = passed_metropolitan_exam
			add_character_modifier = {
				modifier = tgp_passed_metropolitan_exam_modifier
			}
			if = {
				limit = {
					# Let's give metropolitan entrants the chance to pass Palace as well.
					is_ai = yes
					is_lowborn = no
					# We don't mess with any player families
					NOT = {
						any_close_or_extended_family_member = { is_ai = no }
					}
				}
				random = {
					chance = 20
					add_character_flag = passed_palace_exam
					add_character_modifier = {
						modifier = tgp_passed_palace_exam_modifier
					}
					change_merit = empire_starting_merit_value
				}
			}
			create_character_memory = {
				type = passed_metropolitan_exam_memory
			}
			# Notify close family members
			every_close_family_member = {
				# House head is notified separately
				limit = { is_house_head = no }
				send_interface_message = {
					type = event_msg_merit_effect_good
					title = metropolitan_exam_close_family_passed
					right_icon = root
					desc = msg_metropolitan_exam_close_family_passed_desc
				}
			}
		}
		#Remove failed_imperial_examination flags for those who have it
		if = {
			limit = {
				has_character_flag = failed_imperial_examination
			}
			remove_character_flag = failed_imperial_examination
		}
	}
	#Failees
	else = {
		if = {
			limit = { is_ai = no }
			#Record it
			involved_activity = {
				add_activity_log_entry = {
					key = imperial_examination_entrant_rewards
					score = 80
					tags = { completed }
					show_in_conclusion = yes
					character = scope:entrant
					location = scope:entrant.location
					scope:entrant = {
						#Dwindling influence & merit for failees
						change_influence = imperial_examination_failee_influence_reward_value
						change_merit = imperial_examination_failee_merit_reward_value
						# Gain Prestige if you have the relevant flag
						if = {
							limit = { has_character_flag = examination_prestige_reward }
							remove_character_flag = examination_prestige_reward
							add_prestige = major_prestige_loss
						}
					}
					failee_chance_to_gain_elder_effect = yes
				}
			}
		}
		else = {
			#Dwindling influence & merit for failees
			change_influence = imperial_examination_failee_influence_reward_value
			change_merit = imperial_examination_failee_merit_reward_value
			involved_activity = {
				failee_chance_to_gain_elder_effect = yes
			}
			# Gain Prestige if you have the relevant flag
			if = {
				limit = { has_character_flag = examination_prestige_reward }
				remove_character_flag = examination_prestige_reward
				add_prestige = major_prestige_loss
			}
		}
		#Set "failed examination" flags
		add_character_flag = failed_imperial_examination
		create_character_memory = {
			type = failed_metropolitan_exam_memory
		}
		# Notify close family members
		every_close_family_member = {
			# House head is notified separately
			limit = { is_house_head = no }
			send_interface_message = {
				type = event_msg_merit_effect_bad
				title = metropolitan_exam_close_family_failed
				right_icon = root
				desc = msg_metropolitan_exam_close_family_failed_desc
			}
		}
	}
	scope:entrant = { add_to_list = exam_entrants }
}

local_examination_disburse_activity_entrant_rewards = {
	save_temporary_scope_as = entrant
	#This variable is set to track the loc we show players when notifying them of their family's results.

	#Cheaters
	if = {
		limit = { has_variable = been_caught_cheating_longterm }
		#No influence for cheaters
		change_merit = {
			value = imperial_examination_merit_base_reward_value
			multiply = 0.1
		}
	}
	#Entrants
	else_if = {
		limit = {
			is_in_guest_subset = { name = entrants }
		}
		#Influence based on your score
		if = {
			limit = { is_ai = no }
			#Record it
			involved_activity = {
				add_activity_log_entry = {
					key = imperial_examination_entrant_rewards
					score = 80
					tags = { completed }
					show_in_conclusion = yes
					character = scope:entrant
					location = scope:entrant.location
					scope:entrant = {
						change_influence = local_examination_entrant_influence_reward_value
						#Merit based on your score
						change_merit = local_examination_merit_base_reward_value
						# Gain Prestige if you have the relevant flag
						if = {
							limit = { has_character_flag = examination_prestige_reward }
							remove_character_flag = examination_prestige_reward
							add_prestige = major_prestige_gain
						}
					}
				}
			}
		}
		else = {
			change_influence = local_examination_entrant_influence_reward_value
			#Merit based on your score
			change_merit = local_examination_merit_base_reward_value
			# Gain Prestige if you have the relevant flag
			if = {
				limit = { has_character_flag = examination_prestige_reward }
				remove_character_flag = examination_prestige_reward
				add_prestige = major_prestige_gain
			}
		}

		#Save flags
		add_character_flag = passed_provincial_exam
		add_character_modifier = {
			modifier = tgp_passed_provincial_exam_modifier
		}
		#Create memory of passing the exam
		create_character_memory = {
			type = passed_provincial_exam_memory
		}
		ordered_memory = {
			order_by = memory_creation_date
			set_variable = { name = location value = memory_owner.location }
		}
		#Send interface_message to relevant chars to notify them
		every_close_family_member = {
			send_interface_message = {
				type = event_msg_merit_effect_good
				title = provincial_exam_close_family_passed
				right_icon = root
				desc = msg_provincial_exam_close_family_passed_desc
			}
		}
	}
	#Failees
	else = {
		if = {
			limit = { is_ai = no }
			#Record it
			involved_activity = {
				add_activity_log_entry = {
					key = imperial_examination_entrant_rewards
					score = 80
					tags = { completed }
					show_in_conclusion = yes
					character = scope:entrant
					location = scope:entrant.location
					scope:entrant = {
						#Dwindling influence & merit for failees
						change_influence = imperial_examination_failee_influence_reward_value
						change_merit = imperial_examination_failee_merit_reward_value
						# Lose Prestige if you have the relevant flag
						if = {
							limit = { has_character_flag = examination_prestige_reward }
							remove_character_flag = examination_prestige_reward
							add_prestige = major_prestige_loss
						}
					}
					failee_chance_to_gain_elder_effect = yes
				}
			}
		}
		else = {
			#Dwindling influence & merit for failees
			change_influence = imperial_examination_failee_influence_reward_value
			change_merit = imperial_examination_failee_merit_reward_value
			involved_activity = {
				failee_chance_to_gain_elder_effect = yes
			}
			# Lose Prestige if you have the relevant flag
			if = {
				limit = { has_character_flag = examination_prestige_reward }
				remove_character_flag = examination_prestige_reward
				add_prestige = major_prestige_loss
			}
		}
		create_character_memory = {
			type = failed_provincial_exam_memory
		}
		ordered_memory = {
			order_by = memory_creation_date
			set_variable = { name = location value = memory_owner.location }
		}
		#Send interface_message to relevant chars to notify them
		every_close_family_member = {
			send_interface_message = {
				type = event_msg_merit_effect_bad
				title = provincial_exam_close_family_failed
				right_icon = root
				desc = msg_provincial_exam_close_family_failed_desc
			}
		}
	}
	# Everyone should get Confucian Education XP
	if = {
		limit = {
			NOT = { has_trait = confucian_education }
		}
		add_trait = confucian_education
	}
	add_trait_xp = {
		trait = confucian_education
		value = {
			value = lifestyle_confucian_education_xp_gain_minor_value
			#High Score
			if = {
				limit = { has_perfect_score_trigger = { SCORE_VAR = imperial_examination_score } }
				multiply = 3
			}
			#Good Score
			else_if = {
				limit = { has_good_score_trigger = { SCORE_VAR = imperial_examination_score } }
				multiply = 1.5
			}
			#Poor Score
			else_if = {
				limit = { has_questionable_score_trigger = { SCORE_VAR = imperial_examination_score } }
				multiply = 0.8
			}			
		}
	}
	scope:entrant = {
		add_to_list = exam_entrants
	}
}

#a chance to set an elder/disciple relation between examiners and failees
failee_chance_to_gain_elder_effect = {
	random = {
		chance = {
			value = 25
			scope:entrant = {
				every_held_title = {
					add = 5
				}
				if = {
					limit = {
						# No Elders for known cheaters
						has_character_flag = been_caught_cheating
					}
					add = -25
				}
			}
		}
		random_guest_subset = {
			name = imperial_examiners
			limit = {
				merit > scope:entrant.merit
			}
			weight = {
				base = 100
				modifier = {
					any_relation = {
						type = disciple
						count > 0
					}
					# even out the distribution of disciples
					add = {
						every_relation = {
							type = disciple
							add = -5
						}
					}
				}
			}
			save_scope_as = elder
			set_elder_relation_effect = {
				ELDER = scope:elder
				DISCIPLE = scope:entrant
				MERIT = minor_merit_gain
			}
			scope:entrant = { add_character_flag = exam_got_elder }
		}
	}
}

imperial_examination_create_appropriate_examiner_effect = {
	scope:activity.activity_location = { save_scope_as = location }
	if = {
		limit = {
			scope:host = {
				involved_activity = { has_activity_type = activity_imperial_examination }
			}
		}
		if = {
			limit = {
				scope:activity = { activity_is_martial_focus_trigger = yes }
			}
			create_character = {
				template = tgp_examiner_martial_template
				location = scope:location
				save_scope_as = new_examiner
			}
		}
		else_if = {
			limit = {
				scope:activity = { activity_is_stewardship_focus_trigger = yes }
			}
			create_character = {
				template = tgp_examiner_stewardship_template
				location = scope:location
				save_scope_as = new_examiner
			}
		}
		else = {
			create_character = {
				template = tgp_examiner_learning_template
				location = scope:location
				save_scope_as = new_examiner
			}
		}
	}
	else = {
		create_character = {
			template = tgp_examiner_learning_template
			location = scope:location
			save_scope_as = new_examiner
		}
	}
}

#Grab any eligible examiners, pre-Activity
imperial_examination_set_up_examiners_effect = {
	scope:activity.activity_location = { save_scope_as = location }
	#Got anyone else we can invite to be an examiner?
	$HOST$ = {
		ordered_courtier = {
			limit = {
				has_trait = confucian_education
				trigger_if = {
					limit = {
						scope:activity = {
							has_activity_type = activity_imperial_examination
						}
					}
					has_character_flag = passed_metropolitan_exam
				}
				trigger_else = {
					has_character_flag = passed_provincial_exam
				}
				is_available_imperial_examiner_trigger = { ATTENDING_CHAR = $HOST$ }
				#It's not one of our dedicated examiners
				save_temporary_scope_as = char_check
				scope:activity = {
					NOT = {
						is_target_in_variable_list = {
							name = imperial_examiners_list
							target = scope:char_check
						}
					}
				}
			}
			order_by = imperial_examination_entry_value
			max = examiners_amount
			check_range_bounds = no #Don't care if this is 0
			save_temporary_scope_as = temp_char
			#Yes we do it this way to pull in people who might not be interested in being Entrants	
			scope:activity = {
				add_to_variable_list = {
					name = imperial_examiners_list
					target = scope:temp_char
				}
			} 
		}
	}
	#Check for available landed rulers visiting the event (AI only)
	if = {
		limit = {
			scope:activity = {
				OR = {
					NOT = { has_variable_list = imperial_examiners_list }
					variable_list_size = {
						name = imperial_examiners_list
						value < examiners_amount
					}
				}
			}
		}
		#List exists
		scope:activity = {
			if = {
				limit = {
					has_variable_list = imperial_examiners_list
					variable_list_size = {
						name = imperial_examiners_list
						value < examiners_amount
					}
				}
				while = {
					limit = {
						variable_list_size = {
							name = imperial_examiners_list
							value < examiners_amount
						}
						any_attending_character = {
							location = scope:activity_location
							this != scope:host
							is_ai = yes
							tgp_gender_can_be_exam_entrant_trigger = yes
							trigger_if = {
								limit = {
									scope:activity = {
										has_activity_type = activity_imperial_examination
									}
								}
								has_character_flag = passed_metropolitan_exam
							}
							trigger_else = {
								has_character_flag = passed_provincial_exam
							}
						}
					}
					random_attending_character = {
						limit = {
							location = scope:activity_location
							is_ai = yes
							this != scope:host
							tgp_gender_can_be_exam_entrant_trigger = yes
							trigger_if = {
								limit = {
									scope:activity = {
										has_activity_type = activity_imperial_examination
									}
								}
								has_character_flag = passed_metropolitan_exam
							}
							trigger_else = {
								has_character_flag = passed_provincial_exam
							}
						}
						save_scope_as = new_examiner
					}
					#Yes we do it this way to pull in people who might not be interested in being Entrants
					add_to_variable_list = {
						name = imperial_examiners_list
						target = scope:new_examiner
					}
				}
			}
			#List doesn't exist
			else = {
				while = {
					count = examiners_amount
					limit = {
						any_attending_character = {
							location = scope:activity.activity_location
							is_ai = yes
							#tgp_gender_can_be_exam_entrant_trigger = yes
							trigger_if = {
								limit = {
									scope:activity = {
										has_activity_type = activity_imperial_examination
									}
								}
								has_character_flag = passed_metropolitan_exam
							}
							trigger_else = {
								has_character_flag = passed_provincial_exam
							}
						}
					}
					random_attending_character = {
						limit = {
							location = scope:activity.activity_location
							is_ai = yes
							#tgp_gender_can_be_exam_entrant_trigger = yes
							trigger_if = {
								limit = {
									scope:activity = {
										has_activity_type = activity_imperial_examination
									}
								}
								has_character_flag = passed_metropolitan_exam
							}
							trigger_else = {
								has_character_flag = passed_provincial_exam
							}
						}
						save_scope_as = new_examiner
					}
					#Yes we do it this way to pull in people who might not be interested in being Entrants
					add_to_variable_list = {
						name = imperial_examiners_list
						target = scope:new_examiner
					}
				}
			}
		}
	}

	#Check for available pool examiners first
	if = {
		limit = {
			scope:activity = {
				OR = {
					NOT = { has_variable_list = imperial_examiners_list }
					variable_list_size = {
						name = imperial_examiners_list
						value < examiners_amount
					}
				}
			}
		}
		#List exists
		if = {
			limit = {
				scope:activity = { 
					has_variable_list = imperial_examiners_list
					variable_list_size = {
						name = imperial_examiners_list
						value < examiners_amount
					}
				}
			}
			while = {
				limit = {
					scope:activity = {
						variable_list_size = {
							name = imperial_examiners_list
							value < examiners_amount
						}
					}
					any_pool_character = {
						province = scope:location
						has_trait = confucian_education
						trigger_if = {
							limit = {
								scope:activity = {
									has_activity_type = activity_imperial_examination
								}
							}
							has_character_flag = passed_metropolitan_exam
						}
						trigger_else = {
							has_character_flag = passed_provincial_exam
						}
						is_available_imperial_examiner_trigger = { ATTENDING_CHAR = $HOST$ }
					}
				}
				random_pool_character = {
					province = scope:location
					limit = {
						has_trait = confucian_education
						trigger_if = {
							limit = {
								scope:activity = {
									has_activity_type = activity_imperial_examination
								}
							}
							has_character_flag = passed_metropolitan_exam
						}
						trigger_else = {
							has_character_flag = passed_provincial_exam
						}
						is_available_imperial_examiner_trigger = { ATTENDING_CHAR = $HOST$ }
					}
					save_scope_as = new_examiner
					#Add as courtier, if possible
					if = {
						limit = {
							NOT = { is_courtier_of = $HOST$ }
						}
						$HOST$ = { add_courtier = scope:new_examiner }
					}
				}	
				#Yes we do it this way to pull in people who might not be interested in being Entrants
				scope:activity = {
					add_to_variable_list = {
						name = imperial_examiners_list
						target = scope:new_examiner
					}
				}
			}
		}
		#List doesn't exist
		else = {
			while = {
				count = examiners_amount
				limit = {
					any_pool_character = {
						province = scope:location
						has_trait = confucian_education
						trigger_if = {
							limit = {
								scope:activity = {
									has_activity_type = activity_imperial_examination
								}
							}
							has_character_flag = passed_metropolitan_exam
						}
						trigger_else = {
							has_character_flag = passed_provincial_exam
						}
						is_available_imperial_examiner_trigger = { ATTENDING_CHAR = $HOST$ }
					}
				}
				random_pool_character = {
					province = scope:location
					limit = {
						has_trait = confucian_education
						trigger_if = {
							limit = {
								scope:activity = {
									has_activity_type = activity_imperial_examination
								}
							}
							has_character_flag = passed_metropolitan_exam
						}
						trigger_else = {
							has_character_flag = passed_provincial_exam
						}
						is_available_imperial_examiner_trigger = { ATTENDING_CHAR = $HOST$ }
					}
					save_scope_as = new_examiner
					#Add as courtier, if possible
					if = {
						limit = {
							NOT = { is_courtier_of = $HOST$ }
						}
						$HOST$ = { add_courtier = scope:new_examiner }
					}
				}
				#Yes we do it this way to pull in people who might not be interested in being Entrants
				scope:activity = {
					add_to_variable_list = {
						name = imperial_examiners_list
						target = scope:new_examiner
					}
				}
			}
		}
	}
	#Then start creating them
	if = {
		limit = {
			scope:activity = {
				OR = {
					NOT = { has_variable_list = imperial_examiners_list }
					variable_list_size = {
						name = imperial_examiners_list
						value < examiners_amount
					}
				}
			}
		}
		#List exists
		if = {
			limit = {
				scope:activity = {
					has_variable_list = imperial_examiners_list
					variable_list_size = {
						name = imperial_examiners_list
						value < examiners_amount
					}
				}
			}
			while = {
				limit = {
					scope:activity = {
						variable_list_size = {
							name = imperial_examiners_list
							value < examiners_amount
						}
					}
				}
				imperial_examination_create_appropriate_examiner_effect = yes
				scope:new_examiner = {
					if = {
						limit = {
							scope:activity = {
								has_activity_type = activity_imperial_examination
							}
						}
						add_character_flag = passed_metropolitan_exam
					}
					else = {
						add_character_flag = passed_provincial_exam
					}				
				}
				$HOST$ = { add_courtier = scope:new_examiner }
				scope:activity = {
					add_to_variable_list = {
						name = imperial_examiners_list
						target = scope:new_examiner
					}
				}
			}
		}
		#List doesn't exist
		else = {
			while = {
				count = examiners_amount
				imperial_examination_create_appropriate_examiner_effect = yes
				scope:new_examiner = {
					if = {
						limit = {
							scope:activity = {
								has_activity_type = activity_imperial_examination
							}
						}
						add_character_flag = passed_metropolitan_exam
					}
					else = {
						add_character_flag = passed_provincial_exam
					}				
				}
				$HOST$ = { add_courtier = scope:new_examiner }
				scope:activity = {
					add_to_variable_list = {
						name = imperial_examiners_list
						target = scope:new_examiner
					}
				}
			}
		}
	}
	#Add 'em to the activity
	every_in_list = {
		variable = imperial_examiners_list
		limit = {
			NOR = { 
				exists = involved_activity
				scope:activity = { 
					any_attending_character = { this = scope:new_examiner }
				}
				any_invited_activity = { this = scope:activity }
			}
		}
		add_to_activity = scope:activity
	}
}

#When the Activity is concluded
imperial_examination_clean_up_variables_effect = {
	#Exams
	remove_variable ?= had_essay_examination
	remove_variable ?= had_classics_examination
	remove_variable ?= had_poetry_examination
	remove_variable ?= had_archery_examination
	remove_variable ?= had_polearm_examination
	remove_variable ?= had_riding_examination
	remove_variable ?= been_caught_cheating
	remove_variable ?= been_caught_cheating_longterm
	remove_variable ?= imperial_examination_score
	remove_variable ?= temporary_exam_score
	remove_variable ?= discovering_examiner
	remove_character_flag ?= exam_cheat_intent
	remove_character_flag ?= exam_perform_intent
	remove_character_flag ?= set_activity_intent
	remove_variable ?= has_perfect_score
	remove_variable ?= has_great_score
	remove_variable ?= has_decent_score
	remove_variable ?= has_questionable_score
	remove_variable ?= your_exam_position
	#Cheats
	remove_variable ?= has_exam_taker
	remove_variable ?= has_bribed_examiner
	remove_variable ?= has_blackmailed_examiner
	remove_variable ?= has_planted_answers
	remove_variable ?= parent_has_bribed_examiner
	#Advantages
	remove_variable ?= has_exam_advantage
	remove_variable ?= has_stayed_up_studying
	remove_variable ?= has_studied_with_friend
	#Palace Flags
	remove_character_flag ?= palace_success
	remove_character_flag ?= palace_great_success
	remove_character_flag ?= palace_critical_success
	remove_character_flag ?= safe_start
}

#Run at the beginning of the Activity
imperial_examination_gather_examiners_effect = {
	scope:activity = {
		every_attending_character = {
			limit = {
				scope:activity = {
					is_target_in_variable_list = {
						name = imperial_examiners_list
						target = prev
					}
				}
			}
			save_temporary_scope_as = temp_char
			scope:temp_char = {
				add_character_flag = imperial_examiner
			}
			scope:activity = {
				add_to_guest_subset = {
					name = imperial_examiners
					target = scope:temp_char
				}
			}
		}
	}
}

imperial_examination_gather_guests_effect = {
	scope:activity = {
		every_attending_character = {
			limit = {
				# You should get as many shots at the Palace Exam as you want.
				has_character_flag = passed_palace_exam
				NOR = {
					this = scope:host
					is_in_guest_subset = { name = imperial_examiners }
					is_in_guest_subset = { name = entrants }
				}
			}
			save_temporary_scope_as = temp_character
			scope:activity = {
				add_to_guest_subset = {
					name = guests
					target = scope:temp_character
				}
			}
		}
	}
}

imperial_examination_gather_entrants_effect = {
	scope:activity = {
		set_variable = {
			name = num_initial_entrants
			value = 0
		}
		every_attending_character = {
			limit = {
				is_landed = no
				tgp_gender_can_be_exam_entrant_trigger = yes
				trigger_if = {
					limit = {
						exists = primary_title
					}
					primary_title = {
						is_mercenary_company = no
						is_holy_order = no
					}
				}
				NOR = { 
					this = scope:host
					is_in_guest_subset = { name = imperial_examiners }
					has_court_position = travel_leader_court_position
					has_court_position = bodyguard_court_position
					# If you are a player, you should get as many shots at the Palace Exam as you want.
					has_character_flag = passed_palace_exam
					has_trait = devoted
					has_trait = eunuch
				}
				# Remove diarchs from the list.
				bannable_serving_diarch_trigger = no
				is_adult = yes
			}
			save_temporary_scope_as = temp_character
			scope:activity = {
				add_to_guest_subset = {
					name = entrants
					target = scope:temp_character
				}
			}
			set_variable = {
				name = imperial_examination_score
				value = imperial_examination_score_value
			}
			if = {
				limit = {
					is_ai = yes
				}
				set_activity_intent = imperial_exam_taker_intent
			}
		}
		#Run seperately to make sure we include characters added to the entrants subset through edge cases.
		every_guest_subset = {
			name = entrants
			#Record the initial amount of entrants
			scope:activity = {
				change_variable = {
					name = num_initial_entrants
					add = 1
				}
			}
		}
		#Set the base amount of failees we expect during the entire activity
		set_variable = {
			name = failee_quota
			value = imperial_examination_failee_quota_value
		}
		if = { limit = { exists = var:failee_quota } }
	}
}

local_examination_gather_entrants_effect = {
	scope:activity = {
		set_variable = {
			name = num_initial_entrants
			value = 0
		}
		every_attending_character = {
			limit = {
				is_landed = no
				tgp_gender_can_be_exam_entrant_trigger = yes
				trigger_if = {
					limit = {
						exists = primary_title
					}
					primary_title = {
						is_mercenary_company = no
						is_holy_order = no
					}
				}
				NOR = { 
					this = scope:host
					is_in_guest_subset = { name = imperial_examiners }
					has_court_position = travel_leader_court_position
					has_court_position = bodyguard_court_position
					# You have passed the any of the higher level exams
					has_character_flag = passed_metropolitan_exam
					# You have already passed the Provincial
					has_character_flag = passed_provincial_exam
					has_trait = devoted
					has_trait = eunuch
				}
				# Remove diarchs from the list.
				bannable_serving_diarch_trigger = no
				is_adult = yes
			}
			save_temporary_scope_as = temp_character
			scope:activity = {
				add_to_guest_subset = {
					name = entrants
					target = scope:temp_character
				}
			}
			set_variable = {
				name = imperial_examination_score
				value = imperial_examination_score_value
			}
			if = {
				limit = {
					is_ai = yes
				}
				set_activity_intent = local_exam_taker_intent
			}
		}
		#Run seperately to make sure we include characters added to the entrants subset through edge cases.
		every_guest_subset = {
			name = entrants
			scope:activity = {
				change_variable = {
					name = num_initial_entrants
					add = 1
				}
			}
		}
		#Set the base amount of failees we expect during the entire activity
		set_variable = {
			name = failee_quota
			value = imperial_examination_failee_quota_value
		}
		if = { limit = { exists = var:failee_quota } }
	}
}

imperial_examination_gather_stray_entrants_effect = {
	if = {
		# Before we add anyone to the activity, we have to make sure it is not already full.
		limit = {
			scope:activity = {
				OR = {
					AND = {
						has_activity_option = {
							category = imperial_examination_breadth
							option = imperial_examination_breadth_exclusive
						}
						any_attending_character = {
							count < exclusive_exam_guests_full_calc
						}
					}
					AND = {
						has_activity_option = {
							category = imperial_examination_breadth
							option = imperial_examination_breadth_restricted
						}
						any_attending_character = {
							count < restricted_exam_guests_full_calc
						}
					}
					AND = {
						has_activity_option = {
							category = imperial_examination_breadth
							option = imperial_examination_breadth_open
						}
						any_attending_character = {
							count < open_exam_guests_full_calc
						}
					}
				}			
			}
		}
		every_courtier = {
			limit = {
				involved_activity ?= scope:activity
				this != root
				is_landed = no
				trigger_if = {
					limit = {
						scope:activity = {
							has_activity_type = activity_imperial_examination
						}
					}
					NOT = { has_character_flag = passed_palace_exam}
				}
				trigger_else = {
					NOR = {
						has_character_flag = passed_provincial_exam
						has_character_flag = passed_metropolitan_exam
					}
				}
				# To make sure no characters appear that shouldn't.
				NOR = {
					has_trait = devoted
					has_trait = eunuch
				}
				trigger_if = {
					limit = {
						exists = primary_title
					}
					primary_title = {
						is_mercenary_company = no
						is_holy_order = no
					}
				}
				# Remove diarchs from the list.
				bannable_serving_diarch_trigger = no
				tgp_gender_can_be_exam_entrant_trigger = yes
			}
			add_to_list = entourage_entrants
		}
		current_travel_plan ?= {
			every_entourage_character = {
				limit = {
					this != root
					is_landed = no
					trigger_if = {
						limit = {
							scope:activity = {
								has_activity_type = activity_imperial_examination
							}
						}
						NOT = { has_character_flag = passed_palace_exam}
					}
					trigger_else = {
						NOR = {
							has_character_flag = passed_provincial_exam
							has_character_flag = passed_metropolitan_exam
						}
					}
					# To make sure no characters appear that shouldn't.
					NOR = {
						has_trait = devoted
						has_trait = eunuch
					}
					trigger_if = {
						limit = {
							exists = primary_title
						}
						primary_title = {
							is_mercenary_company = no
							is_holy_order = no
						}
					}
					# Remove diarchs from the list.
					bannable_serving_diarch_trigger = no
					tgp_gender_can_be_exam_entrant_trigger = yes
				}
				add_to_list = entourage_entrants
			}
		}
		every_in_list = {
			list = entourage_entrants
			if = {
				limit = {
					can_join_activity = scope:activity
					NOT = {
						involved_activity ?= scope:activity
					}
					location = scope:activity.activity_location
				}
				add_to_activity_without_travel = scope:activity
			}
			if = {
				limit = {
					involved_activity ?= scope:activity
				}
				scope:activity = {
					add_to_guest_subset = {
						name = entrants
						target = prev
					}
				}
				set_variable = {
					name = imperial_examination_score
					value = imperial_examination_score_value
				}
			}
		}
	}
}

metropolitan_examination_scoreboard_setup_effect = {
	#Do we actually have 10 entrants for the scoreboard?
	set_variable = { 
		name = scoreboard_size
		value = 0
	}
	if = {
		limit = {
			any_guest_subset = {
				name = entrants
				count >= 10
			} 
		}
		change_variable = {
			name = scoreboard_size
			add = 10
		}
	}
	#Otherwise set the scoreboard size to the amount of entrants
	else = {
		every_guest_subset = {
			name = entrants
			scope:activity = {
				change_variable = {
					name = scoreboard_size
					add = 1
				}
			}
		}
	}
	#Add the fresh entrants to the scoreboard
	while = {
		count = 1
		ordered_attending_character = {
			limit = {
				or = {
					is_in_guest_subset = { name = entrants }
				}
				NOR = {
					is_in_guest_subset = { name = scoreboard }
					scope:activity = {
						any_guest_subset = {
							name = scoreboard
							count = scope:activity.var:scoreboard_size
						}
					}
				}
			}
			order_by = imperial_examination_score_value
			save_temporary_scope_as = temp_character
			scope:activity = {
				add_to_guest_subset = {
					name = scoreboard
					target = scope:temp_character
				}
			}
		}
	}
}

palace_examination_scoreboard_setup_effect = {
	#Do we actually have 10 entrants for the scoreboard?
	set_variable = { 
		name = scoreboard_size
		value = 0
	}
	if = {
		limit = {
			any_guest_subset = {
				name = palace_entrants
				count >= 10
			} 
		}
		change_variable = {
			name = scoreboard_size
			add = 10
		}
	}
	#Otherwise set the scoreboard size to the amount of entrants
	else = {
		every_guest_subset = {
			name = palace_entrants
			scope:activity = {
				change_variable = {
					name = scoreboard_size
					add = 1
				}
			}
		}
	}
	#Add the fresh entrants to the scoreboard
	while = {
		count = 1
		ordered_attending_character = {
			limit = {
				is_in_guest_subset = { name = palace_entrants }
				NOR = {
					is_in_guest_subset = { name = scoreboard }
					scope:activity = {
						any_guest_subset = {
							name = scoreboard
							count = scope:activity.var:scoreboard_size
						}
					}
				}
			}
			order_by = imperial_examination_score_value
			save_temporary_scope_as = temp_character
			scope:activity = {
				add_to_guest_subset = {
					name = scoreboard
					target = scope:temp_character
				}
			}
		}
	}
}


#Run at the end of each Phase
imperial_examination_determine_exam_outcome_effect = {
	#Get the people in the last place and fail them
	scope:activity = {
		#Account for the cheating AI entrants
		every_guest_subset = {
			name = entrants
			limit = { has_variable = been_caught_cheating }
			set_variable = failee_to_be_removed
		}
		#Otherwise run through the list and trim it from the bottom up
		if = {
			limit = { imperial_examination_failee_quota_value > 0 }
			ordered_guest_subset = {
				name = entrants
				limit = {
					NOT = { has_variable = failee_to_be_removed }
				}
				order_by = {
					value = temporary_exam_score_value
					multiply = -1
				}
				max = imperial_examination_failee_quota_value
				check_range_bounds = no
				set_variable = failee_to_be_removed
			}
		}
		# Check how many successful entrants we have with a martial education.
		if = {
			limit = {
				any_guest_subset = {
					name = entrants
					count < {
						value = 20
						if = {
							limit = {
								scope:activity = {
									has_activity_type = activity_imperial_examination
								}
							}
							add = 20
						}
					}
					has_trait = education_martial
					NOT = { has_variable = failee_to_be_removed }
				}
			}
			# If we don't have enough, let some of the failees pass.
			ordered_guest_subset = {
				name = entrants
				limit = {
					has_trait = education_martial
					has_variable = failee_to_be_removed
					is_ai = yes
				}
				order_by = {
					value = temporary_exam_score_value
				}
				max = {
					if = {
						limit = {
							scope:activity = {
								has_activity_type = activity_imperial_examination
							}
						}
						value = 20
					}
					else = {
						value = 3
					}
				}
				remove_variable = failee_to_be_removed
				change_merit = { 100 150 }
			}
		}
	}
}

imperial_examination_prune_failees_effect = {
	if = {
		limit = { has_variable = failee_to_be_removed }
		save_temporary_scope_as = temp_char
		#Don't fail players
		if = {
			limit = { is_ai = yes }
			scope:activity = {
				remove_from_guest_subset = { 
					name = entrants
					target = scope:temp_char
				}
				add_to_guest_subset = { 
					name = failees
					target = scope:temp_char
				}
			}
		}
		remove_variable ?= failee_to_be_removed
	}
}

#After each Phase
imperial_examination_clean_up_phase_variables_effect = {
	scope:activity = {
		every_attending_character = {
			#Exams
			remove_variable ?= had_essay_examination
			remove_variable ?= had_classics_examination
			remove_variable ?= had_poetry_examination
			remove_variable ?= been_caught_cheating
			#Cheats
			remove_variable ?= has_exam_taker
			remove_variable ?= has_bribed_examiner
			#Advantages
			remove_variable ?= has_exam_advantage
			remove_variable ?= has_stayed_up_studying
			remove_variable ?= has_studied_with_friend
			#Events
			remove_variable ?= has_greeted_palace_entrants
		}
	}
}

imperial_examination_guest_sort_effect = {
	save_scope_value_as = {
		name = exam_invited_guests_amount
		value = {
			value = 0
			add = exam_invited_guests_amount_calc
		}
	}
	while = {
		count = scope:exam_invited_guests_amount
		random_in_list = {
			list = potential_exam_guest_list
			limit = {
				NOT = { is_in_list = characters }
			}
			add_to_list = characters
		}
	}
}

imperial_examination_entrants_sort_effect = {
	save_scope_value_as = {
		name = exam_invited_guests_amount
		value = {
			value = 0
			add = exam_invited_entrants_amount_calc
		}
	}
	while = {
		count = scope:exam_invited_guests_amount
		random_in_list = {
			list = potential_exam_entrants_list
			limit = {
				NOT = { is_in_list = characters }
			}
			add_to_list = characters
		}
	}
}

examination_clear_timeout_effect = {
	if = { # If we still have a short duration remaining on our appointment timeout, clear it
		limit = {
			appointment_timeout_days > 0
			appointment_timeout_days < 365
		}
		clear_appointment_timeout = yes
	}
}

imperial_examination_grab_nr_of_family_entrants_effect = {
	set_variable = {
		name = num_exam_family_entrants
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		root = {
			change_variable = {
				name = num_exam_family_entrants
				add = 1
			}
		}
	}
	# Then measure how many characters did pass the exam
	set_variable = {
		name = num_exam_family_entrants_passed
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		limit = {
			OR = {
				has_character_flag = passed_palace_exam
				has_character_flag = passed_metropolitan_exam
			}
		}
		root = {
			change_variable = {
				name = num_exam_family_entrants_passed
				add = 1
			}
		}
	}
	# More specifically, how many passed the Metropolitan exam
	set_variable = {
		name = num_exam_family_passed_metropolitan
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		limit = {
			has_character_flag = passed_metropolitan_exam
			NOT = { has_character_flag = passed_palace_exam }
		}
		root = {
			change_variable = {
				name = num_exam_family_passed_metropolitan
				add = 1
			}
		}
	}
	# And how many made it to the Palace exam
	set_variable = {
		name = num_exam_family_passed_palace
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		limit = {
			has_character_flag = passed_palace_exam
		}
		root = {
			change_variable = {
				name = num_exam_family_passed_palace
				add = 1
			}
		}
	}
	# Finally, how many did bitterly disappoint...
	set_variable = {
		name = num_exam_family_entrants_failed
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		limit = { has_character_flag = failed_imperial_examination }
		root = {
			change_variable = {
				name = num_exam_family_entrants_failed
				add = 1
			}
		}
	}
}

local_examination_grab_nr_of_family_entrants_effect = {
	set_variable = {
		name = num_exam_family_entrants
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		root = {
			change_variable = {
				name = num_exam_family_entrants
				add = 1
			}
		}
	}
	# Then measure how many characters did pass the exam
	set_variable = {
		name = num_exam_family_entrants_passed
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		limit = { has_character_flag = passed_provincial_exam }
		root = {
			change_variable = {
				name = num_exam_family_entrants_passed
				add = 1
			}
		}
	}
	# Finally, how many did bitterly disappoint...
	set_variable = {
		name = num_exam_family_entrants_failed
		value = 0
	}
	every_in_list = {
		list = parent_relevant_entrants
		limit = {
			NOT = { has_character_flag = passed_provincial_exam }
		}
		root = {
			change_variable = {
				name = num_exam_family_entrants_failed
				add = 1
			}
		}
	}
}

exam_grab_entrant_position_effect = {
	scope:activity = {
		every_attending_character = {
			limit = {
				exists = var:imperial_examination_score
				var:imperial_examination_score >= root.var:imperial_examination_score
			}
			add_to_list = exam_position_list
		}
	}
	set_variable = {
		name = your_exam_position
		value = list_size:exam_position_list
	}
}