﻿on_travel_plan_start = {
	on_actions = {
		agse_squire_travel_start
	}
}

on_travel_plan_movement = {
	on_actions = {
		agse_squire_travel_pulse
		agse_squire_ai_travel_pulse
	}
}

on_travel_plan_complete = {
	on_actions = {
		agse_squire_travel_cleanup
	}
}

on_travel_plan_abort = {
	on_actions = {
		agse_squire_travel_cleanup
	}
}

random_yearly_playable_pulse = {
	on_actions = {
		agse_squire_home_pulse
	}
}

random_yearly_everyone_pulse = {
	on_actions = {
		agse_squire_ai_home_pulse
		agse_squire_ai_torture_memory_check
	}
}

tournament_passive_state_host_pulse = {
	on_actions = {
		agse_squire_tournament_pulse
		agse_squire_loose_girth_pulse
		agse_squire_ai_tournament_pulse
		agse_squire_ai_loose_girth_pulse
	}
}

tournament_passive_state_guest_pulse = {
	on_actions = {
		agse_squire_tournament_pulse
		agse_squire_loose_girth_pulse
		agse_squire_ai_tournament_pulse
		agse_squire_ai_loose_girth_pulse
	}
}

tournament_active_state_pulse = {
	on_actions = {
		agse_squire_tournament_pulse
		agse_squire_ai_tournament_pulse
	}
}

tournament_locale_tournament_grounds_events = {
	random_events = {
		10 = agse_squire_events.9750
	}
}

tournament_locale_tavern_events = {
	random_events = {
		60 = agse_squire_events.9850
	}
}

tournament_locale_artisans_events = {
	random_events = {
		60 = agse_squire_events.9840
	}
}

tournament_locale_settlement_events = {
	random_events = {
		60 = agse_squire_events.2010
	}
}

tournament_locale_religious_building_events = {
	random_events = {
		60 = agse_squire_events.2020
	}
}

tournament_locale_visitor_camp_events = {
	random_events = {
		60 = agse_squire_events.2030
	}
}

feast_main_event_selection = {
	on_actions = {
		agse_squire_feast_pulse
		agse_squire_ai_feast_pulse
	}
}

feast_default_event_selection = {
	on_actions = {
		agse_squire_feast_pulse
		agse_squire_ai_feast_pulse
	}
}

feast_default_host_event_selection = {
	on_actions = {
		agse_squire_feast_pulse
		agse_squire_ai_feast_pulse
	}
}

hunt_random_pulse = {
	on_actions = {
		agse_squire_hunt_flavor_pulse
		agse_squire_ai_hunt_flavor_pulse
	}
}

hunt_outcome_complication_events = {
	on_actions = {
		agse_squire_hunt_complication_pulse
		agse_squire_ai_hunt_complication_pulse
	}
}

hunt_outcome_end_events = {
	on_actions = {
		agse_squire_hunt_outcome_pulse
		agse_squire_ai_hunt_outcome_pulse
	}
}

funeral_wake_pulse = {
	on_actions = {
		agse_squire_funeral_pulse
		agse_squire_ai_funeral_pulse
	}
}

on_army_monthly = {
	on_actions = {
		agse_squire_siege_pulse
		agse_squire_campaign_pulse
	}
}

on_army_enter_province = {
	on_actions = {
		agse_squire_siege_reset
	}
}

on_combat_start = {
	on_actions = {
		agse_squire_post_battle_on_combat_start
	}
}

on_combat_unit_join_side = {
	on_actions = {
		agse_squire_post_battle_on_unit_join
	}
}

on_combat_end_winner = {
	on_actions = {
		agse_squire_post_battle_on_combat_end
	}
}

on_combat_end_loser = {
	on_actions = {
		agse_squire_post_battle_on_combat_end
	}
}

agse_squire_travel_start = {
	trigger = {
		agse_knight_with_squire_trigger = yes
		exists = current_travel_plan
		NOT = {
			current_travel_plan = {
				has_travel_option = dragon_flight_option
			}
		}
	}

	effect = {
		every_relation = {
			type = agot_squire
			limit = {
				agse_squire_can_join_entourage_trigger = yes
			}
			save_scope_as = agse_joining_squire
			root.current_travel_plan = {
				add_companion = scope:agse_joining_squire
			}
			add_character_flag = {
				flag = agse_added_to_travel_entourage
				years = 2
			}
			if = {
				limit = { root = { is_ai = no } }
				debug_log = "AGSE: Active squire added to the player travel entourage."
			}
		}
	}
}

agse_squire_travel_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = current_travel_plan
		is_location_valid_for_travel_event_on_land = yes
		NOT = { has_character_flag = agse_squire_event_cooldown }
		current_travel_plan = {
			NOT = { has_variable = agse_squire_event_fired }
			NOT = { has_travel_option = dragon_flight_option }
			any_entourage_character = {
				agse_valid_travel_squire_trigger = yes
			}
		}
	}

	random_events = {
		chance_to_happen = 10
		1 = agse_easter_egg_events.1000
		100 = agse_squire_events.1000
		100 = agse_squire_events.1100
		100 = agse_squire_events.1200
		100 = agse_squire_events.1300
		100 = agse_squire_events.2000
	}
}

agse_squire_ai_travel_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		exists = current_travel_plan
		is_location_valid_for_travel_event_on_land = yes
		NOT = { has_character_flag = agse_squire_event_cooldown }
		current_travel_plan = {
			NOT = { has_variable = agse_squire_event_fired }
			NOT = { has_travel_option = dragon_flight_option }
			any_entourage_character = {
				agse_valid_travel_squire_trigger = yes
			}
		}
	}

	# The whole damn map travels, so AI gets a lighter roll than the player.
	random_events = {
		chance_to_happen = 3
		100 = agse_squire_events.1000
		100 = agse_squire_events.1100
		100 = agse_squire_events.1200
		100 = agse_squire_events.1300
		100 = agse_squire_events.2000
	}
}

agse_squire_travel_cleanup = {
	trigger = {
		exists = current_travel_plan
		current_travel_plan = {
			any_entourage_character = {
				has_character_flag = agse_added_to_travel_entourage
			}
		}
	}

	effect = {
		current_travel_plan = {
			every_entourage_character = {
				limit = {
					has_character_flag = agse_added_to_travel_entourage
				}
				remove_character_flag = agse_added_to_travel_entourage
			}
		}
	}
}

agse_squire_home_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		NOT = { exists = current_travel_plan }
		NOT = { exists = involved_activity }
		is_commanding_army = no
		NOT = { has_character_flag = agse_squire_event_cooldown }
		any_relation = {
			type = agot_squire
			agse_valid_home_squire_trigger = yes
		}
	}

	random_events = {
		chance_to_happen = 50
		25 = agse_squire_events.2400
		15 = agse_squire_events.2430
		25 = agse_squire_events.2440
		15 = agse_squire_events.2450
		25 = agse_squire_events.2460
		25 = agse_squire_events.2470
		25 = agse_squire_events.2480
		15 = agse_squire_events.2490
		25 = agse_squire_events.2500
		25 = agse_squire_events.2510
		25 = agse_squire_events.2520
		25 = agse_squire_events.2530
		25 = agse_squire_events.2540
		25 = agse_squire_events.2550
		25 = agse_squire_events.2560
		25 = agse_squire_events.2570
		25 = agse_squire_events.2580
		25 = agse_squire_events.2590
		25 = agse_squire_events.2600
		25 = agse_squire_events.2610
		5 = agse_squire_events.2611
		25 = agse_squire_events.3000
		25 = agse_squire_events.4000
		25 = agse_squire_events.5000
		25 = agse_squire_events.6000
		25 = agse_squire_events.7000
		25 = agse_squire_events.8000
		25 = agse_squire_events.9000
		25 = agse_squire_events.9100
		25 = agse_squire_events.9200
		25 = agse_squire_events.9300
		25 = agse_squire_events.9400
		25 = agse_squire_events.9500
		25 = agse_squire_events.9600
		25 = agse_squire_events.9700
	}
}

agse_squire_ai_home_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		NOT = { exists = current_travel_plan }
		NOT = { exists = involved_activity }
		is_commanding_army = no
		NOT = { has_character_flag = agse_squire_event_cooldown }
		any_relation = {
			type = agot_squire
			agse_valid_home_squire_trigger = yes
		}
	}

	# AI gets every home event too, just without half of Westeros firing one each year.
	random_events = {
		chance_to_happen = 12
		25 = agse_squire_events.2400
		15 = agse_squire_events.2430
		25 = agse_squire_events.2440
		15 = agse_squire_events.2450
		25 = agse_squire_events.2460
		25 = agse_squire_events.2470
		25 = agse_squire_events.2480
		15 = agse_squire_events.2490
		25 = agse_squire_events.2500
		25 = agse_squire_events.2510
		25 = agse_squire_events.2520
		25 = agse_squire_events.2530
		25 = agse_squire_events.2540
		25 = agse_squire_events.2550
		25 = agse_squire_events.2560
		25 = agse_squire_events.2570
		25 = agse_squire_events.2580
		25 = agse_squire_events.2590
		25 = agse_squire_events.2600
		25 = agse_squire_events.2610
		5 = agse_squire_events.2611
		25 = agse_squire_events.3000
		25 = agse_squire_events.4000
		25 = agse_squire_events.5000
		25 = agse_squire_events.6000
		25 = agse_squire_events.7000
		25 = agse_squire_events.8000
		25 = agse_squire_events.9000
		25 = agse_squire_events.9100
		25 = agse_squire_events.9200
		25 = agse_squire_events.9300
		25 = agse_squire_events.9400
		25 = agse_squire_events.9500
		25 = agse_squire_events.9600
		25 = agse_squire_events.9700
	}
}

agse_squire_tournament_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_tournament }
		any_relation = {
			type = agot_squire
			agse_valid_tournament_squire_trigger = yes
		}
	}

	events = {
		agse_squire_events.9870
	}
}

agse_squire_loose_girth_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		agse_player_is_mounted_tournament_competitor_trigger = yes
		NOT = { has_character_flag = agse_squire_loose_girth_roll_checked }
		any_relation = {
			type = agot_squire
			agse_valid_tournament_squire_trigger = yes
			NOT = { has_character_flag = agse_loose_girth_cooldown }
		}
	}

	events = {
		agse_squire_events.9770
	}
}

agse_squire_feast_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_feast }
		any_relation = {
			type = agot_squire
			agse_valid_feast_squire_trigger = yes
		}
	}

	events = {
		agse_squire_events.9920
	}
}

agse_squire_hunt_flavor_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_hunt }
		any_relation = {
			type = agot_squire
			agse_valid_hunt_squire_trigger = yes
		}
	}

	events = {
		agse_squire_events.9960
	}
}

agse_squire_hunt_complication_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_hunt }
		any_relation = {
			type = agot_squire
			agse_valid_hunt_squire_trigger = yes
		}
	}

	events = {
		agse_squire_events.9970
	}
}

agse_squire_hunt_outcome_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_hunt }
		any_relation = {
			type = agot_squire
			agse_valid_hunt_squire_trigger = yes
		}
	}

	events = {
		agse_squire_events.9980
	}
}

agse_squire_funeral_pulse = {
	trigger = {
		agse_player_knight_with_squire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_funeral }
		any_relation = {
			type = agot_squire
			agse_valid_funeral_squire_trigger = yes
		}
	}

	events = {
		agse_squire_events.9740
	}
}

# Human-attended activities stay on the player route. The AI can cook in its own halls.
agse_squire_ai_tournament_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_tournament }
		any_relation = {
			type = agot_squire
			agse_valid_tournament_squire_trigger = yes
		}
	}

	events = { agse_squire_events.9870 }
}

agse_squire_ai_loose_girth_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		agse_player_is_mounted_tournament_competitor_trigger = yes
		NOT = { has_character_flag = agse_squire_loose_girth_roll_checked }
		any_relation = {
			type = agot_squire
			agse_valid_tournament_squire_trigger = yes
			NOT = { has_character_flag = agse_loose_girth_cooldown }
		}
	}

	events = { agse_squire_events.9770 }
}

agse_squire_ai_feast_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_feast }
		any_relation = {
			type = agot_squire
			agse_valid_feast_squire_trigger = yes
		}
	}

	events = { agse_squire_events.9920 }
}

agse_squire_ai_hunt_flavor_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_hunt }
		any_relation = {
			type = agot_squire
			agse_valid_hunt_squire_trigger = yes
		}
	}

	events = { agse_squire_events.9960 }
}

agse_squire_ai_hunt_complication_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_hunt }
		any_relation = {
			type = agot_squire
			agse_valid_hunt_squire_trigger = yes
		}
	}

	events = { agse_squire_events.9970 }
}

agse_squire_ai_hunt_outcome_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_hunt }
		any_relation = {
			type = agot_squire
			agse_valid_hunt_squire_trigger = yes
		}
	}

	events = { agse_squire_events.9980 }
}

agse_squire_ai_funeral_pulse = {
	trigger = {
		agse_ai_knight_with_squire_trigger = yes
		agse_ai_activity_can_fire_trigger = yes
		exists = scope:activity
		scope:activity = { has_activity_type = activity_funeral }
		any_relation = {
			type = agot_squire
			agse_valid_funeral_squire_trigger = yes
		}
	}

	events = { agse_squire_events.9740 }
}

agse_squire_siege_pulse = {
	effect = {
		scope:army ?= {
			if = {
				limit = {
					is_army_in_siege = yes
					NOT = { has_variable = agse_squire_siege_event_fired }
					exists = army_commander
					army_commander = {
						agse_player_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
					}
				}
				army_commander = { trigger_event = agse_squire_events.1700 }
			}
			army_owner = {
				every_knight = {
					limit = {
						agse_player_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
						knight_army ?= scope:army
					}
					trigger_event = agse_squire_events.1700
				}
			}
			# The player gets first bite. AI only rolls if that army is still free.
			if = {
				limit = {
					is_army_in_siege = yes
					NOT = { has_variable = agse_squire_siege_event_fired }
					exists = army_commander
					army_commander = {
						agse_ai_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
					}
				}
				army_commander = { trigger_event = agse_squire_events.1700 }
			}
			army_owner = {
				every_knight = {
					limit = {
						agse_ai_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
						knight_army ?= scope:army
						scope:army = {
							is_army_in_siege = yes
							NOT = { has_variable = agse_squire_siege_event_fired }
						}
					}
					trigger_event = agse_squire_events.1700
				}
			}
		}
	}
}

agse_squire_siege_reset = {
	effect = {
		scope:army ?= {
			remove_variable = agse_squire_siege_event_fired
			remove_variable = agse_squire_campaign_event_fired
		}
	}
}

agse_squire_campaign_pulse = {
	effect = {
		scope:army ?= {
			if = {
				limit = {
					is_army_in_combat = no
					is_army_in_siege = no
					NOT = { has_variable = agse_squire_campaign_event_fired }
					exists = army_commander
					army_commander = {
						agse_player_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
					}
				}
				army_commander = { trigger_event = agse_squire_events.2200 }
			}
			army_owner = {
				every_knight = {
					limit = {
						agse_player_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
						knight_army ?= scope:army
						scope:army = {
							is_army_in_combat = no
							is_army_in_siege = no
							NOT = { has_variable = agse_squire_campaign_event_fired }
						}
					}
					trigger_event = agse_squire_events.2200
				}
			}
			if = {
				limit = {
					is_army_in_combat = no
					is_army_in_siege = no
					NOT = { has_variable = agse_squire_campaign_event_fired }
					exists = army_commander
					army_commander = {
						agse_ai_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
					}
				}
				army_commander = { trigger_event = agse_squire_events.2200 }
			}
			army_owner = {
				every_knight = {
					limit = {
						agse_ai_knight_with_squire_trigger = yes
						is_current_dragonrider_warfare = no
						knight_army ?= scope:army
						scope:army = {
							is_army_in_combat = no
							is_army_in_siege = no
							NOT = { has_variable = agse_squire_campaign_event_fired }
						}
					}
					trigger_event = agse_squire_events.2200
				}
			}
		}
	}
}

agse_squire_post_battle_on_combat_start = {
	effect = {
		combat_attacker = { agse_track_player_squire_battle_participants_effect = yes }
		combat_defender = { agse_track_player_squire_battle_participants_effect = yes }
	}
}

agse_squire_post_battle_on_unit_join = {
	effect = {
		agse_track_player_squire_battle_participants_effect = yes
	}
}

agse_squire_post_battle_on_combat_end = {
	effect = {
		# Wait for AGOT's dragon calculation on both commanders.
		if = {
			limit = {
				exists = side_commander
				side_commander = { has_character_flag = calculated_dragon_modifier }
				enemy_side = {
					exists = side_commander
					side_commander = { has_character_flag = calculated_dragon_modifier }
				}
			}
			if = {
				limit = {
					exists = side_commander
					side_commander = {
						has_character_flag = agse_squire_battle_participant
						NOT = { has_character_flag = agse_squire_post_battle_queued }
						is_current_dragonrider_warfare = no
					}
				}
				side_commander = { agse_queue_player_squire_post_battle_effect = yes }
			}
			every_side_commander = {
				limit = {
					has_character_flag = agse_squire_battle_participant
					NOT = { has_character_flag = agse_squire_post_battle_queued }
					is_current_dragonrider_warfare = no
				}
				agse_queue_player_squire_post_battle_effect = yes
			}
			every_side_knight = {
				limit = {
					has_character_flag = agse_squire_battle_participant
					NOT = { has_character_flag = agse_squire_post_battle_queued }
					is_current_dragonrider_warfare = no
				}
				agse_queue_player_squire_post_battle_effect = yes
			}
			if = {
				limit = { exists = side_commander }
				side_commander = { agse_clear_squire_battle_tracking_effect = yes }
			}
			every_side_commander = { agse_clear_squire_battle_tracking_effect = yes }
			every_side_knight = { agse_clear_squire_battle_tracking_effect = yes }
		}
		else = {
			if = {
				limit = { exists = side_commander }
				side_commander = { agse_clear_squire_battle_tracking_effect = yes }
			}
			every_side_commander = { agse_clear_squire_battle_tracking_effect = yes }
			every_side_knight = { agse_clear_squire_battle_tracking_effect = yes }
		}
	}
}
