﻿# Commander+ 1.20 compatibility rebase on exact CK3 1.20.0 vanilla.
# Vanilla effects are based on CK3 1.20.0 and call grouped Commander+ helpers.
give_random_commander_trait_effect = {
	random_list = {
		100 = {
			trigger = { NOT = { has_trait = logistician } }
			add_trait = logistician
		}
		100 = {
			trigger = { NOT = { has_trait = military_engineer } }
			add_trait = military_engineer
		}
		100 = {
			trigger = { NOT = { has_trait = aggressive_attacker } }
			add_trait = aggressive_attacker
		}
		100 = {
			trigger = { NOT = { has_trait = unyielding_defender } }
			add_trait = unyielding_defender
		}
		100 = {
			trigger = { NOT = { has_trait = forder } }
			add_trait = forder
		}
		100 = {
			trigger = { NOT = { has_trait = flexible_leader } }
			add_trait = flexible_leader
		}
		100 = {
			trigger = {
				NOT = { has_trait = desert_warrior }
				any_sub_realm_barony = {
					title_province = {
						OR = {
							terrain = desert
							terrain = desert_mountains
							terrain = oasis
							terrain = drylands
						}
					}
				}
			}
			add_trait = desert_warrior
		}
		100 = {
			trigger = {
				NOT = { has_trait = jungle_stalker }
				any_sub_realm_barony = {
					title_province = {
						terrain = jungle
					}
				}
			}
			add_trait = jungle_stalker
		}
		100 = {
			trigger = {
				NOT = { has_trait = winter_soldier }
				any_sub_realm_barony = {
					title_province = {
						OR = {
							terrain = taiga
							geographical_region = world_tibet
							geographical_region = world_europe_north
							geographical_region = world_europe_east
							geographical_region = world_steppe
						}
					}
				}
			}
			add_trait = winter_soldier
		}
		100 = {
			trigger = {
				NOT = { has_trait = forest_fighter }
				any_sub_realm_barony = {
					title_province = {
						OR = {
							terrain = forest
							terrain = taiga
						}
					}
				}
			}
			add_trait = forest_fighter
		}
		100 = {
			trigger = {
				NOT = { has_trait = open_terrain_expert }
				any_sub_realm_barony = {
					title_province = {
						OR = {
							terrain = plains
							terrain = farmlands
							terrain = steppe
						}
					}
				}
			}
			add_trait = open_terrain_expert
		}
		100 = {
			trigger = {
				NOT = { has_trait = rough_terrain_expert }
				any_sub_realm_barony = {
					title_province = {
						OR = {
							terrain = hills
							terrain = mountains
							terrain = wetlands
						}
					}
				}
			}
			add_trait = rough_terrain_expert
		}
		100 = {
			trigger = { NOT = { has_trait = reaver } }
			add_trait = reaver
		}
		100 = {
			trigger = { NOT = { has_trait = reckless } }
			add_trait = reckless
		}
		100 = {
			trigger = { NOT = { has_trait = holy_warrior } }
			add_trait = holy_warrior
		}
		100 = {
			trigger = { NOT = { has_trait = organizer } }
			add_trait = organizer
		}
		100 = {
			trigger = { NOT = { has_trait = cautious_leader } }
			add_trait = cautious_leader
		}
		# Commander+ 1.20 - grouped extension
		2900 = {
			trigger = { cmd_plus_has_available_random_commander_trait = yes }
			cmd_plus_give_random_commander_trait_effect = yes
		}
	}
}

learn_commander_trait_success_effect = {
	remove_character_flag = being_taught_commander_trait
	if = {
		limit = {
			has_relation_mentor = scope:teacher
			NOT = { exists = scope:long_term_mentor }
			scope:teacher = {
				is_alive = yes
			}
		}
		remove_relation_mentor = scope:teacher
	}
	if = {
		limit = {
			scope:teacher = {
				is_alive = yes
			}
		}
		hidden_effect = {
			add_opinion = {
				target = scope:teacher
				modifier = taught_me_commander_trait_opinion
			}
		}
	}
	if = {
		limit = { var:commander_trait_being_taught = flag:logistician }
		add_trait = logistician
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:military_engineer }
		add_trait = military_engineer
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:aggressive_attacker }
		add_trait = aggressive_attacker
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:unyielding_defender }
		add_trait = unyielding_defender
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:forder }
		add_trait = forder
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:flexible_leader }
		add_trait = flexible_leader
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:desert_warrior }
		add_trait = desert_warrior
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:jungle_stalker }
		add_trait = jungle_stalker
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:winter_soldier }
		add_trait = winter_soldier
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:reaver }
		add_trait = reaver
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:reckless }
		add_trait = reckless
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:holy_warrior }
		add_trait = holy_warrior
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:open_terrain_expert }
		add_trait = open_terrain_expert
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:rough_terrain_expert }
		add_trait = rough_terrain_expert
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:forest_fighter }
		add_trait = forest_fighter
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:cautious_leader }
		add_trait = cautious_leader
	}
	else_if = {
		limit = { var:commander_trait_being_taught = flag:organizer }
		add_trait = organizer
	}

	# Commander+ 1.20 - grouped extension
	cmd_plus_learn_commander_trait_success_effect = yes

}

discover_new_commander_trait_to_teach = {
	random_list = {
		1 = {
			trigger = { NOT = { has_trait = logistician } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:logistician
			}
		}
		1 = {
			trigger = { NOT = { has_trait = military_engineer } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:military_engineer
			}
		}
		1 = {
			trigger = { NOT = { has_trait = aggressive_attacker } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:aggressive_attacker
			}
		}
		1 = {
			trigger = { NOT = { has_trait = unyielding_defender } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:unyielding_defender
			}
		}
		1 = {
			trigger = { NOT = { has_trait = forder } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:forder
			}
		}
		1 = {
			trigger = { NOT = { has_trait = flexible_leader } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:flexible_leader
			}
		}
		1 = {
			trigger = {
				exists = scope:teacher.location
				scope:teacher.location = {
					OR = {
						terrain = oasis
						terrain = desert
						terrain = desert_mountains
					}
				}
				NOT = { has_trait = desert_warrior }
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:desert_warrior
			}
		}
		1 = {
			trigger = {
				exists = scope:teacher.location
				scope:teacher.location = {
					terrain = jungle
				}
				NOT = { has_trait = jungle_stalker }
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:jungle_stalker
			}
		}
		1 = {
			trigger = {
				exists = scope:teacher.location
				scope:teacher.location = {
					OR = {
						terrain = taiga
						geographical_region = world_tibet
						geographical_region = world_europe_north
						geographical_region = world_europe_east
						geographical_region = world_steppe
					}
				}
				NOT = { has_trait = winter_soldier }
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:winter_soldier
			}
		}
		1 = {
			trigger = { NOT = { has_trait = reaver } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:reaver
			}
		}
		1 = {
			trigger = { NOT = { has_trait = reckless } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:reckless
			}
		}
		1 = {
			trigger = { NOT = { has_trait = holy_warrior } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:holy_warrior
			}
		}
		1 = {
			trigger = { NOT = { has_trait = open_terrain_expert } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:open_terrain_expert
			}
		}
		1 = {
			trigger = { NOT = { has_trait = rough_terrain_expert } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:rough_terrain_expert
			}
		}
		1 = {
			trigger = {
				exists = scope:teacher.location
				scope:teacher.location = {
					OR = {
						terrain = forest
						terrain = taiga
					}
				}
				NOT = { has_trait = forest_fighter }
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:forest_fighter
			}
		}
		1 = {
			trigger = { NOT = { has_trait = cautious_leader } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:cautious_leader
			}
		}
		1 = {
			trigger = { NOT = { has_trait = organizer } }
			set_variable = {
				name = commander_trait_being_taught
				value = flag:organizer
			}
		}
		# Commander+ 1.20 - grouped extension
		29 = {
			trigger = { cmd_plus_has_available_random_commander_trait = yes }
			cmd_plus_set_random_commander_trait_being_taught_effect = yes
		}
	}
}

randomize_commander_trait_to_be_taught_effect = {
	random_list = {
		100 = {
			trigger = {
				NOT = { has_trait = logistician }
				scope:teacher = {
					has_trait = logistician
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:logistician
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = military_engineer }
				scope:teacher = {
					has_trait = military_engineer
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:military_engineer
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = aggressive_attacker }
				scope:teacher = {
					has_trait = aggressive_attacker
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:aggressive_attacker
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = unyielding_defender }
				scope:teacher = {
					has_trait = unyielding_defender
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:unyielding_defender
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = forder }
				scope:teacher = {
					has_trait = forder
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:forder
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = flexible_leader }
				scope:teacher = {
					has_trait = flexible_leader
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:flexible_leader
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = desert_warrior }
				scope:teacher = {
					has_trait = desert_warrior
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:desert_warrior
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = jungle_stalker }
				scope:teacher = {
					has_trait = jungle_stalker
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:jungle_stalker
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = winter_soldier }
				scope:teacher = {
					has_trait = winter_soldier
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:winter_soldier
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = reaver }
				scope:teacher = {
					has_trait = reaver
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:reaver
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = reckless }
				scope:teacher = {
					has_trait = reckless
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:reckless
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = holy_warrior }
				scope:teacher = {
					has_trait = holy_warrior
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:holy_warrior
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = open_terrain_expert }
				scope:teacher = {
					has_trait = open_terrain_expert 
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:open_terrain_expert
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = rough_terrain_expert }
				scope:teacher = {
					has_trait = rough_terrain_expert
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:rough_terrain_expert
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = forest_fighter }
				scope:teacher = {
					has_trait = forest_fighter
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:forest_fighter
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = cautious_leader }
				scope:teacher = {
					has_trait = cautious_leader 
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:cautious_leader
			}
		}
		100 = {
			trigger = {
				NOT = { has_trait = organizer }
				scope:teacher = {
					has_trait = organizer
				}
			}
			set_variable = {
				name = commander_trait_being_taught
				value = flag:organizer
			}
		}
		# Commander+ 1.20 - grouped extension
		2900 = {
			trigger = { cmd_plus_teacher_can_teach_new_commander_trait = yes }
			cmd_plus_randomize_commander_trait_to_be_taught_effect = yes
		}
	}
	if = { #Fallback
		limit = {
			NOT = { exists = var:commander_trait_being_taught }
		}
		set_variable = {
			name = commander_trait_being_taught
			value = flag:flexible_leader
		}
	}
}

select_ct_for_teacher_to_teach_student_effect = {
	random_list = {
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = logistician }
				$STUDENT$ = { NOT = { has_trait = logistician } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:logistician
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = military_engineer }
				$STUDENT$ = { NOT = { has_trait = military_engineer } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:military_engineer
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = aggressive_attacker }
				$STUDENT$ = { NOT = { has_trait = aggressive_attacker } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:aggressive_attacker
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = unyielding_defender }
				$STUDENT$ = { NOT = { has_trait = unyielding_defender } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:unyielding_defender
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = forder }
				$STUDENT$ = { NOT = { has_trait = forder } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:forder
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = flexible_leader }
				$STUDENT$ = { NOT = { has_trait = flexible_leader } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:flexible_leader
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = desert_warrior }
				$STUDENT$ = { NOT = { has_trait = desert_warrior } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:desert_warrior
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = jungle_stalker }
				$STUDENT$ = { NOT = { has_trait = jungle_stalker } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:jungle_stalker
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = winter_soldier }
				$STUDENT$ = { NOT = { has_trait = winter_soldier } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:winter_soldier
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = reaver }
				$STUDENT$ = { NOT = { has_trait = reaver } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:reaver
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = reckless }
				$STUDENT$ = { NOT = { has_trait = reckless } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:reckless
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = holy_warrior }
				$STUDENT$ = { NOT = { has_trait = holy_warrior } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:holy_warrior
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = open_terrain_expert }
				$STUDENT$ = { NOT = { has_trait = open_terrain_expert } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:open_terrain_expert
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = rough_terrain_expert }
				$STUDENT$ = { NOT = { has_trait = rough_terrain_expert } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:rough_terrain_expert
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = forest_fighter }
				$STUDENT$ = { NOT = { has_trait = forest_fighter } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:forest_fighter
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = cautious_leader }
				$STUDENT$ = { NOT = { has_trait = cautious_leader } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:cautious_leader
				}
			}
		}
		1 = {
			trigger = {
				$TEACHER$ = { has_trait = organizer }
				$STUDENT$ = { NOT = { has_trait = organizer } }
			}
			$STUDENT$ = {
				set_variable = {
					name = commander_trait_being_taught
					value = flag:organizer
				}
			}
		}
		# Commander+ 1.20 - grouped extension
		29 = {
			trigger = { cmd_plus_param_teacher_can_teach_new_commander_trait = { TEACHER = $TEACHER$ STUDENT = $STUDENT$ } }
			cmd_plus_select_ct_for_teacher_to_teach_student_effect = { TEACHER = $TEACHER$ STUDENT = $STUDENT$ }
		}
	}
}
