N3OW/common/scripted_effects/tgp_imperial_examination_scripted_effects.txt
2026-04-25 03:54:05 -04:00

2000 lines
48 KiB
Text

#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
}
if = {
limit = {
has_character_flag = exam_cheat_intent
NOR = {
has_variable = been_caught_cheating
has_variable = been_caught_cheating_longterm
}
government_allows = merit
}
add_secret = {
target = scope:host
type = secret_exam_cheater
}
}
}
#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
}
}
if = {
limit = {
has_character_flag = exam_cheat_intent
NOR = {
has_variable = been_caught_cheating
has_variable = been_caught_cheating_longterm
}
government_allows = merit
}
add_secret = {
target = scope:host
type = secret_exam_cheater
}
}
}
#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 }
# 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
}
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 }
# 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
}
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
}
}
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
}
}
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
every_attending_character = {
limit = {
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
}
}
}
}
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
every_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
}
}
}
}
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
check_range_bounds = no
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
}
}