﻿# Commander+ army-state runtime effects.
# The army on_actions call this file directly instead of dispatching 16 hidden events.

# Save migration: remove transient variables used by pre-audit-refactor builds.
# Cleanup is performed only when a legacy value actually exists; no permanent
# per-character migration flag is written into long-running savegames.
cmd_plus_cleanup_legacy_transient_state_effect = {
	# Builds produced during the earlier audit could have written this permanent
	# flag. Remove it as active commanders pass through the normal refresh path.
	remove_character_flag = cmd_plus_transient_state_migrated_11907

	if = {
		limit = {
			OR = {
				has_variable = acclaimed_knights_specialist_counter
				has_variable = archer_cav_specialist_counter
				has_variable = archers_specialist_counter
				has_variable = combined_arms_archer_cavalry_var
				has_variable = combined_arms_archers_var
				has_variable = combined_arms_camel_cavalry_var
				has_variable = combined_arms_counter_var
				has_variable = combined_arms_elephant_cavalry_var
				has_variable = combined_arms_heavy_cavalry_var
				has_variable = combined_arms_heavy_infantry_var
				has_variable = combined_arms_light_cavalry_var
				has_variable = combined_arms_pikemen_var
				has_variable = combined_arms_skirmishers_var
				has_variable = heavy_cav_specialist_counter
				has_variable = heavy_infantry_specialist_counter
				has_variable = knights_specialist_adv_bonus_counter
				has_variable = knights_specialist_counter
				has_variable = knights_specialist_prestige_to_add_counter
				has_variable = levies_specialist_var
				has_variable = light_cav_specialist_counter
				has_variable = pikemen_specialist_counter
				has_variable = skirmishers_specialist_counter
			}
		}
		remove_variable = acclaimed_knights_specialist_counter
		remove_variable = archer_cav_specialist_counter
		remove_variable = archers_specialist_counter
		remove_variable = combined_arms_archer_cavalry_var
		remove_variable = combined_arms_archers_var
		remove_variable = combined_arms_camel_cavalry_var
		remove_variable = combined_arms_counter_var
		remove_variable = combined_arms_elephant_cavalry_var
		remove_variable = combined_arms_heavy_cavalry_var
		remove_variable = combined_arms_heavy_infantry_var
		remove_variable = combined_arms_light_cavalry_var
		remove_variable = combined_arms_pikemen_var
		remove_variable = combined_arms_skirmishers_var
		remove_variable = heavy_cav_specialist_counter
		remove_variable = heavy_infantry_specialist_counter
		remove_variable = knights_specialist_adv_bonus_counter
		remove_variable = knights_specialist_counter
		remove_variable = knights_specialist_prestige_to_add_counter
		remove_variable = levies_specialist_var
		remove_variable = light_cav_specialist_counter
		remove_variable = pikemen_specialist_counter
		remove_variable = skirmishers_specialist_counter
	}
}

cmd_plus_refresh_army_commander_state_effect = {
	scope:army.army_commander ?= { cmd_plus_cleanup_legacy_transient_state_effect = yes }

	# Friendly territory follows the whole realm of the exact army owner. Start
	# with ROOT as a safe fallback, then replace it with ROOT's top liege when one exists.
	root = { save_temporary_scope_as = cmd_plus_army_friendly_realm_owner }
	root.top_liege ?= { save_temporary_scope_as = cmd_plus_army_friendly_realm_owner }

	# Military Savior: maintain the join-side bonus throughout long battles.
	if = {
		limit = {
			scope:army = { is_army_in_combat = yes }
			exists = scope:army.army_commander
			scope:army.army_commander = {
				is_alive = yes
				has_trait = military_savior
			}
		}
		scope:army.army_commander = {
			cmd_plus_refresh_military_savior_modifier_effect = yes
		}
	}

	# Seasoned Rover (formerly cmd_plus_trait.0001)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = seasoned_rover
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            remove_character_modifier = seasoned_rover_pos_modifier
            remove_character_modifier = seasoned_rover_pos_modifier_1
            remove_character_modifier = seasoned_rover_pos_modifier_2
            remove_character_modifier = seasoned_rover_pos_modifier_3
            remove_character_modifier = seasoned_rover_neg_modifier
            remove_character_modifier = seasoned_rover_neg_modifier_1
            remove_character_modifier = seasoned_rover_neg_modifier_2
            remove_character_modifier = seasoned_rover_neg_modifier_3
        }
        if = {
            limit = {
                exists = scope:army.location.barony.barony_controller
                OR = {
                    scope:army.location.barony.barony_controller = {
                        is_vassal_or_below_of = scope:cmd_plus_army_friendly_realm_owner
                    }
                scope:army.location.barony.barony_controller = scope:cmd_plus_army_friendly_realm_owner
                }
            }
            scope:cmd_plus_army_leader = {
                if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= cmd_plus_trait_tier_3_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_neg_modifier_3
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_neg_modifier
                    remove_character_modifier = seasoned_rover_neg_modifier_1
                    remove_character_modifier = seasoned_rover_neg_modifier_2
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= cmd_plus_trait_tier_2_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_neg_modifier_2
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_neg_modifier
                    remove_character_modifier = seasoned_rover_neg_modifier_1
                    remove_character_modifier = seasoned_rover_neg_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= cmd_plus_trait_tier_1_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_neg_modifier_1
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_neg_modifier
                    remove_character_modifier = seasoned_rover_neg_modifier_2
                    remove_character_modifier = seasoned_rover_neg_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= 0
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_neg_modifier
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_neg_modifier_1
                    remove_character_modifier = seasoned_rover_neg_modifier_2
                    remove_character_modifier = seasoned_rover_neg_modifier_3
                }
                remove_character_modifier = seasoned_rover_pos_modifier
                remove_character_modifier = seasoned_rover_pos_modifier_1
                remove_character_modifier = seasoned_rover_pos_modifier_2
                remove_character_modifier = seasoned_rover_pos_modifier_3
            }
        }
        else = {
            scope:cmd_plus_army_leader = {
                if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= cmd_plus_trait_tier_3_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_pos_modifier_3
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_pos_modifier
                    remove_character_modifier = seasoned_rover_pos_modifier_1
                    remove_character_modifier = seasoned_rover_pos_modifier_2
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= cmd_plus_trait_tier_2_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_pos_modifier_2
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_pos_modifier
                    remove_character_modifier = seasoned_rover_pos_modifier_1
                    remove_character_modifier = seasoned_rover_pos_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= cmd_plus_trait_tier_1_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_pos_modifier_1
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_pos_modifier
                    remove_character_modifier = seasoned_rover_pos_modifier_2
                    remove_character_modifier = seasoned_rover_pos_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = seasoned_rover
                                    value >= 0
                        }
                    }
                    add_character_modifier = {
                        modifier = seasoned_rover_pos_modifier
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = seasoned_rover_pos_modifier_1
                    remove_character_modifier = seasoned_rover_pos_modifier_2
                    remove_character_modifier = seasoned_rover_pos_modifier_3
                }
                remove_character_modifier = seasoned_rover_neg_modifier
                remove_character_modifier = seasoned_rover_neg_modifier_1
                remove_character_modifier = seasoned_rover_neg_modifier_2
                remove_character_modifier = seasoned_rover_neg_modifier_3
            }
        }
    
	}

	# Resolute Localist (formerly cmd_plus_trait.0002)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = resolute_localist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            remove_character_modifier = resolute_localist_pos_modifier
            remove_character_modifier = resolute_localist_pos_modifier_1
            remove_character_modifier = resolute_localist_pos_modifier_2
            remove_character_modifier = resolute_localist_pos_modifier_3
            remove_character_modifier = resolute_localist_neg_modifier
            remove_character_modifier = resolute_localist_neg_modifier_1
            remove_character_modifier = resolute_localist_neg_modifier_2
            remove_character_modifier = resolute_localist_neg_modifier_3
        }
        if = {
            limit = {
                exists = scope:army.location.barony.barony_controller
                OR = {
                    scope:army.location.barony.barony_controller = {
                        is_vassal_or_below_of = scope:cmd_plus_army_friendly_realm_owner
                    }
                scope:army.location.barony.barony_controller = scope:cmd_plus_army_friendly_realm_owner
                }
            }
            scope:cmd_plus_army_leader = {
                if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                                    value >= cmd_plus_trait_tier_3_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_pos_modifier_3
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_pos_modifier
                    remove_character_modifier = resolute_localist_pos_modifier_1
                    remove_character_modifier = resolute_localist_pos_modifier_2
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                                    value >= cmd_plus_trait_tier_2_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_pos_modifier_2
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_pos_modifier
                    remove_character_modifier = resolute_localist_pos_modifier_1
                    remove_character_modifier = resolute_localist_pos_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                                    value >= cmd_plus_trait_tier_1_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_pos_modifier_1
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_pos_modifier
                    remove_character_modifier = resolute_localist_pos_modifier_2
                    remove_character_modifier = resolute_localist_pos_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                                    value >= 0
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_pos_modifier
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_pos_modifier_1
                    remove_character_modifier = resolute_localist_pos_modifier_2
                    remove_character_modifier = resolute_localist_pos_modifier_3
                }
                remove_character_modifier = resolute_localist_neg_modifier
                remove_character_modifier = resolute_localist_neg_modifier_1
                remove_character_modifier = resolute_localist_neg_modifier_2
                remove_character_modifier = resolute_localist_neg_modifier_3
            }
        }
        else = {
            scope:cmd_plus_army_leader = {
                if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                                    value >= cmd_plus_trait_tier_3_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_neg_modifier_3
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_neg_modifier
                    remove_character_modifier = resolute_localist_neg_modifier_1
                    remove_character_modifier = resolute_localist_neg_modifier_2
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                                    value >= cmd_plus_trait_tier_2_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_neg_modifier_2
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_neg_modifier
                    remove_character_modifier = resolute_localist_neg_modifier_1
                    remove_character_modifier = resolute_localist_neg_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                            value >= cmd_plus_trait_tier_1_xp
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_neg_modifier_1
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_neg_modifier
                    remove_character_modifier = resolute_localist_neg_modifier_2
                    remove_character_modifier = resolute_localist_neg_modifier_3
                }
                else_if = {
                    limit = {
                        has_trait_xp = {
                            trait = resolute_localist
                            value >= 0
                        }
                    }
                    add_character_modifier = {
                        modifier = resolute_localist_neg_modifier
                        days = cmd_plus_army_state_modifier_duration_days
                    }
                    remove_character_modifier = resolute_localist_neg_modifier_1
                    remove_character_modifier = resolute_localist_neg_modifier_2
                    remove_character_modifier = resolute_localist_neg_modifier_3
                }
                remove_character_modifier = resolute_localist_pos_modifier
                remove_character_modifier = resolute_localist_pos_modifier_1
                remove_character_modifier = resolute_localist_pos_modifier_2
                remove_character_modifier = resolute_localist_pos_modifier_3
            }
        }
    
	}

	# Infiltration Specialist (formerly cmd_plus_trait.0004)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = infiltration_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            remove_character_modifier = infiltration_specialist_scaling_new_modifier
            add_character_modifier = {
            	modifier = infiltration_specialist_scaling_new_modifier
            	days = cmd_plus_army_state_modifier_duration_days
            }
        }
    
	}

	# Master Ambusher (formerly cmd_plus_trait.0005)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = master_ambusher
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            remove_character_modifier = intrigue_scaling_new_modifier
            add_character_modifier = {
            	modifier = intrigue_scaling_new_modifier
            	days = cmd_plus_army_state_modifier_duration_days
            }
        }
    
	}

	# Crafty Commander (formerly cmd_plus_trait.0006)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = crafty_commander
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            remove_character_modifier = stewardship_scaling_new_modifier
            add_character_modifier = {
            	modifier = stewardship_scaling_new_modifier
            	days = cmd_plus_army_state_modifier_duration_days
            }
        }
    
	}

	# Focus Specialist (formerly cmd_plus_trait.1007)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = focus_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            remove_character_modifier = focus_specialist_modifier
            remove_character_modifier = focus_specialist_modifier_1
            remove_character_modifier = focus_specialist_modifier_2
            remove_character_modifier = focus_specialist_modifier_3
        }
        if = {
            limit = {
                exists = scope:army.location.county.holder
                root = { is_at_war_with = scope:army.location.county.holder }
                scope:army.location.county = scope:army.location.county.holder.primary_title.title_capital_county
            }
            scope:cmd_plus_army_leader = {
                if = {
                    limit = { has_trait_xp = { trait = focus_specialist value >= cmd_plus_trait_tier_3_xp } }
                    add_character_modifier = { modifier = focus_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
                }
                else_if = {
                    limit = { has_trait_xp = { trait = focus_specialist value >= cmd_plus_trait_tier_2_xp } }
                    add_character_modifier = { modifier = focus_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
                }
                else_if = {
                    limit = { has_trait_xp = { trait = focus_specialist value >= cmd_plus_trait_tier_1_xp } }
                    add_character_modifier = { modifier = focus_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
                }
                else_if = {
                    limit = { has_trait_xp = { trait = focus_specialist value >= 0 } }
                    add_character_modifier = { modifier = focus_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
                }
            }
        }
    
	}

	# Combined Arms (formerly cmd_plus_trait.0008)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = combined_arms
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
        }
        scope:cmd_plus_army_leader = {
            set_variable = { name = cmd_plus_combined_arms_counter_var          value = 0 }
            set_variable = { name = cmd_plus_combined_arms_archers_var          value = 0 }
            set_variable = { name = cmd_plus_combined_arms_light_cavalry_var    value = 0 }
            set_variable = { name = cmd_plus_combined_arms_archer_cavalry_var   value = 0 }
            set_variable = { name = cmd_plus_combined_arms_pikemen_var          value = 0 }
            set_variable = { name = cmd_plus_combined_arms_heavy_infantry_var   value = 0 }
            set_variable = { name = cmd_plus_combined_arms_heavy_cavalry_var    value = 0 }
            set_variable = { name = cmd_plus_combined_arms_elephant_cavalry_var value = 0 }
            set_variable = { name = cmd_plus_combined_arms_camel_cavalry_var    value = 0 }
            set_variable = { name = cmd_plus_combined_arms_skirmishers_var      value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                switch = {
                    trigger = is_unit_type
                    archers = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_archers_var value = 1 } } }
                    light_cavalry = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_light_cavalry_var value = 1 } } }
                    archer_cavalry = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_archer_cavalry_var value = 1 } } }
                    pikemen = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_pikemen_var value = 1 } } }
                    heavy_infantry = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_heavy_infantry_var value = 1 } } }
                    heavy_cavalry = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_heavy_cavalry_var value = 1 } } }
                    elephant_cavalry = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_elephant_cavalry_var value = 1 } } }
                    camel_cavalry = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_camel_cavalry_var value = 1 } } }
                    skirmishers = { scope:cmd_plus_army_leader = { set_variable = { name = cmd_plus_combined_arms_skirmishers_var value = 1 } } }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_archers_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_light_cavalry_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_archer_cavalry_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_pikemen_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_heavy_infantry_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_heavy_cavalry_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_elephant_cavalry_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_camel_cavalry_var
            }
            change_variable = {
                name = cmd_plus_combined_arms_counter_var
                add = var:cmd_plus_combined_arms_skirmishers_var
            }
            if = { limit = { var:cmd_plus_combined_arms_counter_var = 0 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 0 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 1 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 0 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 2 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 1 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 3 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 2 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 4 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 4 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 5 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 6 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 6 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 8 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 7 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 10 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 8 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 11 } }
            else_if = { limit = { var:cmd_plus_combined_arms_counter_var = 9 } set_variable = { name = cmd_plus_combined_arms_counter_var value = 12 } }
            remove_character_modifier = combined_arms_modifier
            if = {
                limit = {
                    var:cmd_plus_combined_arms_counter_var !=0
                }
                add_character_modifier = { modifier = combined_arms_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            # Temporary calculation state; modifier scale is captured when assigned.
            remove_variable = cmd_plus_combined_arms_counter_var
            remove_variable = cmd_plus_combined_arms_archers_var
            remove_variable = cmd_plus_combined_arms_light_cavalry_var
            remove_variable = cmd_plus_combined_arms_archer_cavalry_var
            remove_variable = cmd_plus_combined_arms_pikemen_var
            remove_variable = cmd_plus_combined_arms_heavy_infantry_var
            remove_variable = cmd_plus_combined_arms_heavy_cavalry_var
            remove_variable = cmd_plus_combined_arms_elephant_cavalry_var
            remove_variable = cmd_plus_combined_arms_camel_cavalry_var
            remove_variable = cmd_plus_combined_arms_skirmishers_var
        }
    
	}

	# Levies Specialist (formerly cmd_plus_trait.1008)
	if = {
		limit = {
			exists = scope:army.army_commander
			scope:army.army_commander = {
				is_alive = yes
				has_trait = levies_specialist
			}
		}
		scope:army = { cmd_plus_refresh_levies_specialist_for_army_effect = yes }
	}

	# Archers Specialist (formerly cmd_plus_trait.0009)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = archers_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = archers_specialist_modifier
            remove_character_modifier = archers_specialist_modifier_1
            remove_character_modifier = archers_specialist_modifier_2
            remove_character_modifier = archers_specialist_modifier_3
            set_variable = { name = cmd_plus_archers_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    is_unit_type = archers
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_archers_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = archers_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_archers_specialist_counter !=0 }
                add_character_modifier = { modifier = archers_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = archers_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_archers_specialist_counter !=0 }
                add_character_modifier = { modifier = archers_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = archers_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_archers_specialist_counter !=0 }
                add_character_modifier = { modifier = archers_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = archers_specialist value >= 0 } var:cmd_plus_archers_specialist_counter !=0 }
                add_character_modifier = { modifier = archers_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_archers_specialist_counter
        }
    
	}

	# Skirmishers Specialist (formerly cmd_plus_trait.0010)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = skirmishers_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = skirmishers_specialist_modifier
            remove_character_modifier = skirmishers_specialist_modifier_1
            remove_character_modifier = skirmishers_specialist_modifier_2
            remove_character_modifier = skirmishers_specialist_modifier_3
            set_variable = { name = cmd_plus_skirmishers_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    is_unit_type = skirmishers
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_skirmishers_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = skirmishers_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_skirmishers_specialist_counter !=0 }
                add_character_modifier = { modifier = skirmishers_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = skirmishers_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_skirmishers_specialist_counter !=0 }
                add_character_modifier = { modifier = skirmishers_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = skirmishers_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_skirmishers_specialist_counter !=0 }
                add_character_modifier = { modifier = skirmishers_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = skirmishers_specialist value >= 0 } var:cmd_plus_skirmishers_specialist_counter !=0 }
                add_character_modifier = { modifier = skirmishers_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_skirmishers_specialist_counter
        }
    
	}

	# Heavy Cavalry Specialist (formerly cmd_plus_trait.0011)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = heavy_cav_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = heavy_cav_specialist_modifier
            remove_character_modifier = heavy_cav_specialist_modifier_1
            remove_character_modifier = heavy_cav_specialist_modifier_2
            remove_character_modifier = heavy_cav_specialist_modifier_3
            set_variable = { name = cmd_plus_heavy_cav_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    OR = {
                        is_unit_type = heavy_cavalry
                        is_unit_type = elephant_cavalry
                    }
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_heavy_cav_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = heavy_cav_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_heavy_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_cav_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = heavy_cav_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_heavy_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_cav_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = heavy_cav_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_heavy_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_cav_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = heavy_cav_specialist value >= 0 } var:cmd_plus_heavy_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_cav_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_heavy_cav_specialist_counter
        }
    
	}

	# Light Cavalry Specialist (formerly cmd_plus_trait.0012)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = light_cav_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = light_cav_specialist_modifier
            remove_character_modifier = light_cav_specialist_modifier_1
            remove_character_modifier = light_cav_specialist_modifier_2
            remove_character_modifier = light_cav_specialist_modifier_3
            set_variable = { name = cmd_plus_light_cav_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    OR = {
                        is_unit_type = light_cavalry
                        is_unit_type = camel_cavalry
                    }
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_light_cav_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = light_cav_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_light_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = light_cav_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = light_cav_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_light_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = light_cav_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = light_cav_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_light_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = light_cav_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = light_cav_specialist value >= 0 } var:cmd_plus_light_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = light_cav_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_light_cav_specialist_counter
        }
    
	}

	# Heavy Infantry Specialist (formerly cmd_plus_trait.0013)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = heavy_infantry_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = heavy_infantry_specialist_modifier
            remove_character_modifier = heavy_infantry_specialist_modifier_1
            remove_character_modifier = heavy_infantry_specialist_modifier_2
            remove_character_modifier = heavy_infantry_specialist_modifier_3
            set_variable = { name = cmd_plus_heavy_infantry_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    is_unit_type = heavy_infantry
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_heavy_infantry_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = heavy_infantry_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_heavy_infantry_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_infantry_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = heavy_infantry_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_heavy_infantry_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_infantry_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = heavy_infantry_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_heavy_infantry_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_infantry_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = heavy_infantry_specialist value >= 0 } var:cmd_plus_heavy_infantry_specialist_counter !=0 }
                add_character_modifier = { modifier = heavy_infantry_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_heavy_infantry_specialist_counter
        }
    
	}

	# Archer Cavalry Specialist (formerly cmd_plus_trait.0014)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = archer_cav_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = archer_cav_specialist_modifier
            remove_character_modifier = archer_cav_specialist_modifier_1
            remove_character_modifier = archer_cav_specialist_modifier_2
            remove_character_modifier = archer_cav_specialist_modifier_3
            set_variable = { name = cmd_plus_archer_cav_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    is_unit_type = archer_cavalry
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_archer_cav_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = archer_cav_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_archer_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = archer_cav_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = archer_cav_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_archer_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = archer_cav_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = archer_cav_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_archer_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = archer_cav_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = archer_cav_specialist value >= 0 } var:cmd_plus_archer_cav_specialist_counter !=0 }
                add_character_modifier = { modifier = archer_cav_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_archer_cav_specialist_counter
        }
    
	}

	# Pikemen Specialist (formerly cmd_plus_trait.0015)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = pikemen_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = pikemen_specialist_modifier
            remove_character_modifier = pikemen_specialist_modifier_1
            remove_character_modifier = pikemen_specialist_modifier_2
            remove_character_modifier = pikemen_specialist_modifier_3
            set_variable = { name = cmd_plus_pikemen_specialist_counter value = 0 }
        }
        scope:army = {
            every_army_maa_regiment = {
                limit = {
                    is_unit_type = pikemen
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_pikemen_specialist_counter add = 1 }
                }
            }
        }
        scope:cmd_plus_army_leader = {
            if = {
                limit = { has_trait_xp = { trait = pikemen_specialist value >= cmd_plus_trait_tier_3_xp } var:cmd_plus_pikemen_specialist_counter !=0 }
                add_character_modifier = { modifier = pikemen_specialist_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = pikemen_specialist value >= cmd_plus_trait_tier_2_xp } var:cmd_plus_pikemen_specialist_counter !=0 }
                add_character_modifier = { modifier = pikemen_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = pikemen_specialist value >= cmd_plus_trait_tier_1_xp } var:cmd_plus_pikemen_specialist_counter !=0 }
                add_character_modifier = { modifier = pikemen_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = { has_trait_xp = { trait = pikemen_specialist value >= 0 } var:cmd_plus_pikemen_specialist_counter !=0 }
                add_character_modifier = { modifier = pikemen_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_pikemen_specialist_counter
        }
    
	}

	# Knights Specialist (formerly cmd_plus_trait.0016)
	if = {
		limit = {
        exists = scope:army.army_commander
        scope:army.army_commander = {
            is_alive = yes
            has_trait = knights_specialist
        }
    
		}

        scope:army.army_commander = {
            save_temporary_scope_as = cmd_plus_army_leader
            remove_character_modifier = knights_specialist_modifier
            remove_character_modifier = knights_specialist_modifier_1
            remove_character_modifier = knights_specialist_modifier_2
            remove_character_modifier = knights_specialist_advantage_modifier_3
            remove_character_modifier = acclaimed_knights_specialist_advantage_modifier_3
            set_variable = { name = cmd_plus_knights_specialist_counter value = 0 }
            set_variable = { name = cmd_plus_knights_specialist_adv_bonus_counter value = 0 }
            set_variable = { name = cmd_plus_acclaimed_knights_specialist_counter value = 0 }
        }
        scope:army = {
            if = {
                limit = {
                    army_owner = scope:army.army_commander
                }
                scope:army.army_commander = {
                    save_temporary_scope_as = cmd_plus_knights_army_owner
                }
            }
            else = {
                army_owner = {
                    save_temporary_scope_as = cmd_plus_knights_army_owner
                }
            }
        }
        scope:cmd_plus_knights_army_owner = {
            every_knight = {
                limit = {
                    is_in_army = yes
                    knight_army ?= scope:army
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_knights_specialist_counter add = 1 }
                }
            }
            every_knight = {
                limit = {
                    is_in_army = yes
                    is_acclaimed = yes
                    knight_army ?= scope:army
                }
                scope:cmd_plus_army_leader = {
                    change_variable = { name = cmd_plus_acclaimed_knights_specialist_counter add = 1 }
                }
            }
            scope:cmd_plus_army_leader = {
                change_variable = { name = cmd_plus_knights_specialist_adv_bonus_counter add = var:cmd_plus_knights_specialist_counter }
                change_variable = { name = cmd_plus_knights_specialist_adv_bonus_counter divide = 4 }
            }
        }

        scope:cmd_plus_army_leader = {
            if = {
                limit = {
                    has_trait_xp = { trait = knights_specialist value >= cmd_plus_trait_tier_3_xp  }
                    scope:cmd_plus_knights_army_owner = {
                        is_at_war = yes
                    }
                }
                if = {
                    limit = {
                        var:cmd_plus_knights_specialist_counter != 0
                        scope:cmd_plus_knights_army_owner = { is_at_war = yes }
                    }
                    add_character_modifier = { modifier = knights_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
                }
                if = {
                    limit = {
                        var:cmd_plus_knights_specialist_adv_bonus_counter != 0
                    }
                    add_character_modifier = { modifier = knights_specialist_advantage_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
                }
                if = {
                    limit = {
                        var:cmd_plus_acclaimed_knights_specialist_counter != 0
                    }
                    add_character_modifier = { modifier = acclaimed_knights_specialist_advantage_modifier_3 days = cmd_plus_army_state_modifier_duration_days }
                }
            }
            else_if = {
                limit = {
                    has_trait_xp = { trait = knights_specialist value >= cmd_plus_trait_tier_2_xp  }
                    var:cmd_plus_knights_specialist_counter != 0
                    scope:cmd_plus_knights_army_owner = {
                        is_at_war = yes
                    }
                }
                add_character_modifier = { modifier = knights_specialist_modifier_2 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = {
                    has_trait_xp = { trait = knights_specialist value >= cmd_plus_trait_tier_1_xp }
                    var:cmd_plus_knights_specialist_counter != 0
                }
                add_character_modifier = { modifier = knights_specialist_modifier_1 days = cmd_plus_army_state_modifier_duration_days }
            }
            else_if = {
                limit = {
                    has_trait_xp = { trait = knights_specialist value >= 0 }
                    var:cmd_plus_knights_specialist_counter != 0
                }
                add_character_modifier = { modifier = knights_specialist_modifier days = cmd_plus_army_state_modifier_duration_days }
            }
        }
        scope:cmd_plus_army_leader = {
            remove_variable = cmd_plus_knights_specialist_counter
            remove_variable = cmd_plus_knights_specialist_adv_bonus_counter
            remove_variable = cmd_plus_acclaimed_knights_specialist_counter
        }
    
	}
}
