﻿# Commander+ integration helper triggers.

cmd_plus_has_available_random_commander_trait = {
	OR = {
		NOT = { has_trait = mapper }
		NOT = { has_trait = observant_pathfinder }
		NOT = { has_trait = respected_leader }
		NOT = { has_trait = sea_raider }
		NOT = { has_trait = seasoned_rover }
		NOT = { has_trait = resolute_localist }
		NOT = { has_trait = relentless_pursuer }
		NOT = { has_trait = infiltration_specialist }
		NOT = { has_trait = battlefield_medic }
		NOT = { has_trait = dauntless_leader }
		NOT = { has_trait = crafty_commander }
		NOT = { has_trait = cautious_planner }
		NOT = { has_trait = bannerlord }
		NOT = { has_trait = focus_specialist }
		NOT = { has_trait = master_ambusher }
		NOT = { has_trait = navigator }
		NOT = { has_trait = zealot }
		NOT = { has_trait = patriot }
		NOT = { has_trait = military_savior }
		NOT = { has_trait = combined_arms }
		NOT = { has_trait = levies_specialist }
		NOT = { has_trait = skirmishers_specialist }
		NOT = { has_trait = archers_specialist }
		NOT = { has_trait = heavy_cav_specialist }
		NOT = { has_trait = light_cav_specialist }
		NOT = { has_trait = heavy_infantry_specialist }
		NOT = { has_trait = archer_cav_specialist }
		NOT = { has_trait = pikemen_specialist }
		NOT = { has_trait = knights_specialist }
	}
}

cmd_plus_has_new_commander_trait = {
	OR = {
		has_trait = mapper
		has_trait = observant_pathfinder
		has_trait = respected_leader
		has_trait = sea_raider
		has_trait = seasoned_rover
		has_trait = resolute_localist
		has_trait = relentless_pursuer
		has_trait = infiltration_specialist
		has_trait = battlefield_medic
		has_trait = dauntless_leader
		has_trait = crafty_commander
		has_trait = cautious_planner
		has_trait = bannerlord
		has_trait = focus_specialist
		has_trait = master_ambusher
		has_trait = navigator
		has_trait = zealot
		has_trait = patriot
		has_trait = military_savior
		has_trait = combined_arms
		has_trait = levies_specialist
		has_trait = skirmishers_specialist
		has_trait = archers_specialist
		has_trait = heavy_cav_specialist
		has_trait = light_cav_specialist
		has_trait = heavy_infantry_specialist
		has_trait = archer_cav_specialist
		has_trait = pikemen_specialist
		has_trait = knights_specialist
	}
}

cmd_plus_educator_has_teachable_commander_trait = {
	OR = {
		AND = {
			NOT = { has_trait = mapper }
			scope:educator = { has_trait = mapper }
		}
		AND = {
			NOT = { has_trait = observant_pathfinder }
			scope:educator = { has_trait = observant_pathfinder }
		}
		AND = {
			NOT = { has_trait = respected_leader }
			scope:educator = { has_trait = respected_leader }
		}
		AND = {
			NOT = { has_trait = sea_raider }
			scope:educator = { has_trait = sea_raider }
		}
		AND = {
			NOT = { has_trait = seasoned_rover }
			scope:educator = { has_trait = seasoned_rover }
		}
		AND = {
			NOT = { has_trait = resolute_localist }
			scope:educator = { has_trait = resolute_localist }
		}
		AND = {
			NOT = { has_trait = relentless_pursuer }
			scope:educator = { has_trait = relentless_pursuer }
		}
		AND = {
			NOT = { has_trait = infiltration_specialist }
			scope:educator = { has_trait = infiltration_specialist }
		}
		AND = {
			NOT = { has_trait = battlefield_medic }
			scope:educator = { has_trait = battlefield_medic }
		}
		AND = {
			NOT = { has_trait = dauntless_leader }
			scope:educator = { has_trait = dauntless_leader }
		}
		AND = {
			NOT = { has_trait = crafty_commander }
			scope:educator = { has_trait = crafty_commander }
		}
		AND = {
			NOT = { has_trait = cautious_planner }
			scope:educator = { has_trait = cautious_planner }
		}
		AND = {
			NOT = { has_trait = bannerlord }
			scope:educator = { has_trait = bannerlord }
		}
		AND = {
			NOT = { has_trait = focus_specialist }
			scope:educator = { has_trait = focus_specialist }
		}
		AND = {
			NOT = { has_trait = master_ambusher }
			scope:educator = { has_trait = master_ambusher }
		}
		AND = {
			NOT = { has_trait = navigator }
			scope:educator = { has_trait = navigator }
		}
		AND = {
			NOT = { has_trait = zealot }
			scope:educator = { has_trait = zealot }
		}
		AND = {
			NOT = { has_trait = patriot }
			scope:educator = { has_trait = patriot }
		}
		AND = {
			NOT = { has_trait = military_savior }
			scope:educator = { has_trait = military_savior }
		}
		AND = {
			NOT = { has_trait = combined_arms }
			scope:educator = { has_trait = combined_arms }
		}
		AND = {
			NOT = { has_trait = levies_specialist }
			scope:educator = { has_trait = levies_specialist }
		}
		AND = {
			NOT = { has_trait = skirmishers_specialist }
			scope:educator = { has_trait = skirmishers_specialist }
		}
		AND = {
			NOT = { has_trait = archers_specialist }
			scope:educator = { has_trait = archers_specialist }
		}
		AND = {
			NOT = { has_trait = heavy_cav_specialist }
			scope:educator = { has_trait = heavy_cav_specialist }
		}
		AND = {
			NOT = { has_trait = light_cav_specialist }
			scope:educator = { has_trait = light_cav_specialist }
		}
		AND = {
			NOT = { has_trait = heavy_infantry_specialist }
			scope:educator = { has_trait = heavy_infantry_specialist }
		}
		AND = {
			NOT = { has_trait = archer_cav_specialist }
			scope:educator = { has_trait = archer_cav_specialist }
		}
		AND = {
			NOT = { has_trait = pikemen_specialist }
			scope:educator = { has_trait = pikemen_specialist }
		}
		AND = {
			NOT = { has_trait = knights_specialist }
			scope:educator = { has_trait = knights_specialist }
		}
	}
}

cmd_plus_teacher_can_teach_new_commander_trait = {
	OR = {
		AND = {
			NOT = { has_trait = mapper }
			scope:teacher = { has_trait = mapper }
		}
		AND = {
			NOT = { has_trait = observant_pathfinder }
			scope:teacher = { has_trait = observant_pathfinder }
		}
		AND = {
			NOT = { has_trait = respected_leader }
			scope:teacher = { has_trait = respected_leader }
		}
		AND = {
			NOT = { has_trait = sea_raider }
			scope:teacher = { has_trait = sea_raider }
		}
		AND = {
			NOT = { has_trait = seasoned_rover }
			scope:teacher = { has_trait = seasoned_rover }
		}
		AND = {
			NOT = { has_trait = resolute_localist }
			scope:teacher = { has_trait = resolute_localist }
		}
		AND = {
			NOT = { has_trait = relentless_pursuer }
			scope:teacher = { has_trait = relentless_pursuer }
		}
		AND = {
			NOT = { has_trait = infiltration_specialist }
			scope:teacher = { has_trait = infiltration_specialist }
		}
		AND = {
			NOT = { has_trait = battlefield_medic }
			scope:teacher = { has_trait = battlefield_medic }
		}
		AND = {
			NOT = { has_trait = dauntless_leader }
			scope:teacher = { has_trait = dauntless_leader }
		}
		AND = {
			NOT = { has_trait = crafty_commander }
			scope:teacher = { has_trait = crafty_commander }
		}
		AND = {
			NOT = { has_trait = cautious_planner }
			scope:teacher = { has_trait = cautious_planner }
		}
		AND = {
			NOT = { has_trait = bannerlord }
			scope:teacher = { has_trait = bannerlord }
		}
		AND = {
			NOT = { has_trait = focus_specialist }
			scope:teacher = { has_trait = focus_specialist }
		}
		AND = {
			NOT = { has_trait = master_ambusher }
			scope:teacher = { has_trait = master_ambusher }
		}
		AND = {
			NOT = { has_trait = navigator }
			scope:teacher = { has_trait = navigator }
		}
		AND = {
			NOT = { has_trait = zealot }
			scope:teacher = { has_trait = zealot }
		}
		AND = {
			NOT = { has_trait = patriot }
			scope:teacher = { has_trait = patriot }
		}
		AND = {
			NOT = { has_trait = military_savior }
			scope:teacher = { has_trait = military_savior }
		}
		AND = {
			NOT = { has_trait = combined_arms }
			scope:teacher = { has_trait = combined_arms }
		}
		AND = {
			NOT = { has_trait = levies_specialist }
			scope:teacher = { has_trait = levies_specialist }
		}
		AND = {
			NOT = { has_trait = skirmishers_specialist }
			scope:teacher = { has_trait = skirmishers_specialist }
		}
		AND = {
			NOT = { has_trait = archers_specialist }
			scope:teacher = { has_trait = archers_specialist }
		}
		AND = {
			NOT = { has_trait = heavy_cav_specialist }
			scope:teacher = { has_trait = heavy_cav_specialist }
		}
		AND = {
			NOT = { has_trait = light_cav_specialist }
			scope:teacher = { has_trait = light_cav_specialist }
		}
		AND = {
			NOT = { has_trait = heavy_infantry_specialist }
			scope:teacher = { has_trait = heavy_infantry_specialist }
		}
		AND = {
			NOT = { has_trait = archer_cav_specialist }
			scope:teacher = { has_trait = archer_cav_specialist }
		}
		AND = {
			NOT = { has_trait = pikemen_specialist }
			scope:teacher = { has_trait = pikemen_specialist }
		}
		AND = {
			NOT = { has_trait = knights_specialist }
			scope:teacher = { has_trait = knights_specialist }
		}
	}
}

cmd_plus_param_teacher_can_teach_new_commander_trait = {
	OR = {
		AND = {
			$TEACHER$ = { has_trait = mapper }
			$STUDENT$ = { NOT = { has_trait = mapper } }
		}
		AND = {
			$TEACHER$ = { has_trait = observant_pathfinder }
			$STUDENT$ = { NOT = { has_trait = observant_pathfinder } }
		}
		AND = {
			$TEACHER$ = { has_trait = respected_leader }
			$STUDENT$ = { NOT = { has_trait = respected_leader } }
		}
		AND = {
			$TEACHER$ = { has_trait = sea_raider }
			$STUDENT$ = { NOT = { has_trait = sea_raider } }
		}
		AND = {
			$TEACHER$ = { has_trait = seasoned_rover }
			$STUDENT$ = { NOT = { has_trait = seasoned_rover } }
		}
		AND = {
			$TEACHER$ = { has_trait = resolute_localist }
			$STUDENT$ = { NOT = { has_trait = resolute_localist } }
		}
		AND = {
			$TEACHER$ = { has_trait = relentless_pursuer }
			$STUDENT$ = { NOT = { has_trait = relentless_pursuer } }
		}
		AND = {
			$TEACHER$ = { has_trait = infiltration_specialist }
			$STUDENT$ = { NOT = { has_trait = infiltration_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = battlefield_medic }
			$STUDENT$ = { NOT = { has_trait = battlefield_medic } }
		}
		AND = {
			$TEACHER$ = { has_trait = dauntless_leader }
			$STUDENT$ = { NOT = { has_trait = dauntless_leader } }
		}
		AND = {
			$TEACHER$ = { has_trait = crafty_commander }
			$STUDENT$ = { NOT = { has_trait = crafty_commander } }
		}
		AND = {
			$TEACHER$ = { has_trait = cautious_planner }
			$STUDENT$ = { NOT = { has_trait = cautious_planner } }
		}
		AND = {
			$TEACHER$ = { has_trait = bannerlord }
			$STUDENT$ = { NOT = { has_trait = bannerlord } }
		}
		AND = {
			$TEACHER$ = { has_trait = focus_specialist }
			$STUDENT$ = { NOT = { has_trait = focus_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = master_ambusher }
			$STUDENT$ = { NOT = { has_trait = master_ambusher } }
		}
		AND = {
			$TEACHER$ = { has_trait = navigator }
			$STUDENT$ = { NOT = { has_trait = navigator } }
		}
		AND = {
			$TEACHER$ = { has_trait = zealot }
			$STUDENT$ = { NOT = { has_trait = zealot } }
		}
		AND = {
			$TEACHER$ = { has_trait = patriot }
			$STUDENT$ = { NOT = { has_trait = patriot } }
		}
		AND = {
			$TEACHER$ = { has_trait = military_savior }
			$STUDENT$ = { NOT = { has_trait = military_savior } }
		}
		AND = {
			$TEACHER$ = { has_trait = combined_arms }
			$STUDENT$ = { NOT = { has_trait = combined_arms } }
		}
		AND = {
			$TEACHER$ = { has_trait = levies_specialist }
			$STUDENT$ = { NOT = { has_trait = levies_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = skirmishers_specialist }
			$STUDENT$ = { NOT = { has_trait = skirmishers_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = archers_specialist }
			$STUDENT$ = { NOT = { has_trait = archers_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = heavy_cav_specialist }
			$STUDENT$ = { NOT = { has_trait = heavy_cav_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = light_cav_specialist }
			$STUDENT$ = { NOT = { has_trait = light_cav_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = heavy_infantry_specialist }
			$STUDENT$ = { NOT = { has_trait = heavy_infantry_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = archer_cav_specialist }
			$STUDENT$ = { NOT = { has_trait = archer_cav_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = pikemen_specialist }
			$STUDENT$ = { NOT = { has_trait = pikemen_specialist } }
		}
		AND = {
			$TEACHER$ = { has_trait = knights_specialist }
			$STUDENT$ = { NOT = { has_trait = knights_specialist } }
		}
	}
}

# Performance guards for frequent army/combat on_actions.
cmd_plus_army_commander_needs_state_refresh = {
	exists = scope:army.army_commander
	scope:army.army_commander = {
		is_alive = yes
		OR = {
			# One-time update cleanup for audit builds that wrote a permanent flag.
			has_character_flag = cmd_plus_transient_state_migrated_11907
			has_trait = seasoned_rover
			has_trait = resolute_localist
			has_trait = infiltration_specialist
			has_trait = master_ambusher
			has_trait = crafty_commander
			has_trait = focus_specialist
			has_trait = combined_arms
			has_trait = levies_specialist
			has_trait = archers_specialist
			has_trait = skirmishers_specialist
			has_trait = heavy_cav_specialist
			has_trait = light_cav_specialist
			has_trait = heavy_infantry_specialist
			has_trait = archer_cav_specialist
			has_trait = pikemen_specialist
			has_trait = knights_specialist
			AND = {
				has_trait = military_savior
				scope:army = { is_army_in_combat = yes }
			}
		}
	}
}

cmd_plus_combat_side_needs_cleanup = {
	any_side_commander = {
		is_alive = yes
		OR = {
			has_trait = military_savior
			has_trait = levies_specialist
			has_character_modifier = cmd_plus_savior_modifier
			has_character_modifier = cmd_plus_savior_modifier_1
			has_character_modifier = cmd_plus_savior_modifier_2
			has_character_modifier = cmd_plus_savior_modifier_3
			has_character_modifier = levies_specialist_modifier
			has_character_modifier = levies_specialist_modifier_1
			has_character_modifier = levies_specialist_modifier_2
			has_character_modifier = levies_specialist_modifier_3
		}
	}
}

cmd_plus_combat_winner_needs_post_combat_refresh = {
	exists = side_commander
	side_commander = {
		is_alive = yes
		OR = {
			has_trait = relentless_pursuer
			has_trait = knights_specialist
		}
	}
}

cmd_plus_join_side_needs_savior_refresh = {
	exists = scope:army.army_commander
	scope:army.army_commander = {
		is_alive = yes
		has_trait = military_savior
	}
}


