XRWS             Ì 8ext_01.cat ext_01.dat md/auto_fleet_roles.xml 60512 1778407574 5b9cfe8df94cd3aac44562c158d8114a
t/0001-l044.xml 4183 1778209105 c385e957750362dcfe2966f3f73027ac
t/0001-l086.xml 2689 1778208995 b3b3f663684b7d2cdca583fbdc0c6666
<?xml version="1.0" encoding="utf-8"?>
<mdscript name="AutoFleetRoles">
  <cues>
    <cue name="InitOnUniverseGenerated" instantiate="true">
      <conditions>
        <event_universe_generated/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
      </actions>
    </cue>

    <cue name="InitOnGameLoaded" instantiate="true">
      <conditions>
        <event_game_loaded/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
      </actions>
    </cue>

    <cue name="RegisterOptionsMenu" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled cue="md.Simple_Menu_API.Reloaded"/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Register_Options_Menu"
                              param="table[
                                $id = 'AutoFleetRolesOptions',
                                $columns = 2,
                                $title = {8892101,101},
                                $onOpen = BuildOptionsMenu
                              ]"/>
      </actions>
    </cue>

    <cue name="BuildOptionsMenu" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $colSpan = 2,
                                $text = {8892101,110},
                                $mouseOverText = {8892101,111}
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $text = {8892101,115},
                                $mouseOverText = {8892101,119}
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Dropdown"
                              param="table[
                                $col = 2,
                                $id = 'fleet_role_tier',
                                $text = table[$halign = 'center'],
                                $options = [
                                  table[$text = {8892101,116}, $value = 1],
                                  table[$text = {8892101,117}, $value = 2],
                                  table[$text = {8892101,118}, $value = 3]
                                ],
                                $startOption = if global.$AutoFleetRolesTier? then global.$AutoFleetRolesTier else 1,
                                $bgColor = 'Helper.defaultButtonBackgroundColor',
                                $highlightColor = 'Helper.defaultButtonHighlightColor',
                                $onDropDownConfirmed = OnTierChanged,
                                $mouseOverText = {8892101,119}
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $text = {8892101,120},
                                $mouseOverText = {8892101,122}
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Button"
                              param="table[
                                $col = 2,
                                $text = table[
                                  $text = {8892101,123},
                                  $halign = 'center'
                                ],
                                $onClick = RunTraderEscorts,
                                $onRightClick = RunTraderEscorts
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $text = {8892101,160},
                                $mouseOverText = {8892101,162}
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Button"
                              param="table[
                                $col = 2,
                                $text = table[
                                  $text = {8892101,163},
                                  $halign = 'center'
                                ],
                                $onClick = RunMinerEscorts,
                                $onRightClick = RunMinerEscorts
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $text = {8892101,130},
                                $mouseOverText = {8892101,131}
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Button"
                              param="table[
                                $col = 2,
                                $text = table[
                                  $text = {8892101,132},
                                  $halign = 'center'
                                ],
                                $onClick = RunCarrierWings,
                                $onRightClick = RunCarrierWings
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $text = {8892101,140},
                                $mouseOverText = {8892101,141}
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Button"
                              param="table[
                                $col = 2,
                                $text = table[
                                  $text = {8892101,142},
                                  $halign = 'center'
                                ],
                                $onClick = RunAllRules,
                                $onRightClick = RunAllRules
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $colSpan = 2,
                                $id = 'afr_trade_summary',
                                $text = readtext.{8892101}.{152} + global.$AutoFleetRolesLastTradeSummary,
                                $wordwrap = true,
                                $cellBGColor = 'Color.optionsmenu_cell_background'
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $colSpan = 2,
                                $id = 'afr_mining_summary',
                                $text = readtext.{8892101}.{153} + global.$AutoFleetRolesLastMiningSummary,
                                $wordwrap = true,
                                $cellBGColor = 'Color.optionsmenu_cell_background'
                              ]"/>

        <signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Make_Text"
                              param="table[
                                $col = 1,
                                $colSpan = 2,
                                $id = 'afr_carrier_summary',
                                $text = readtext.{8892101}.{154} + global.$AutoFleetRolesLastCarrierSummary,
                                $wordwrap = true,
                                $cellBGColor = 'Color.optionsmenu_cell_background'
                              ]"/>
      </actions>
    </cue>

    <cue name="RunTraderEscorts" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
        <set_value name="global.$AutoFleetRolesRunToken" exact="global.$AutoFleetRolesRunToken + 1"/>
        <set_value name="$RunToken" exact="global.$AutoFleetRolesRunToken"/>
        <do_if value="$RunToken == global.$AutoFleetRolesRunToken">
          <run_actions ref="Apply_Trade_Escorts" result="$TradeResult"/>
          <set_value name="global.$AutoFleetRolesLastTradeSummary"
                     exact="readtext.{8892101}.{200} + $TradeResult.$assigned + readtext.{8892101}.{201} + $TradeResult.$configured + readtext.{8892101}.{202} + $TradeResult.$eligible + readtext.{8892101}.{203} + $TradeResult.$remainings + readtext.{8892101}.{204} + $TradeResult.$remainingm + readtext.{8892101}.{205}"/>
          <include_actions ref="Update_Result_Widgets"/>
          <show_help duration="4s" position="1" custom="readtext.{8892101}.{152} + global.$AutoFleetRolesLastTradeSummary"/>
        </do_if>
      </actions>
    </cue>

    <cue name="RunMinerEscorts" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
        <set_value name="global.$AutoFleetRolesRunToken" exact="global.$AutoFleetRolesRunToken + 1"/>
        <set_value name="$RunToken" exact="global.$AutoFleetRolesRunToken"/>
        <do_if value="$RunToken == global.$AutoFleetRolesRunToken">
          <run_actions ref="Apply_Mining_Escorts" result="$MiningResult"/>
          <set_value name="global.$AutoFleetRolesLastMiningSummary"
                     exact="readtext.{8892101}.{200} + $MiningResult.$assigned + readtext.{8892101}.{201} + $MiningResult.$configured + readtext.{8892101}.{202} + $MiningResult.$eligible + readtext.{8892101}.{203} + $MiningResult.$remainings + readtext.{8892101}.{204} + $MiningResult.$remainingm + readtext.{8892101}.{205}"/>
          <include_actions ref="Update_Result_Widgets"/>
          <show_help duration="4s" position="1" custom="readtext.{8892101}.{153} + global.$AutoFleetRolesLastMiningSummary"/>
        </do_if>
      </actions>
    </cue>

    <cue name="OnTierChanged" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
        <set_value name="$choice" exact="if event.param.$option.$value? then event.param.$option.$value else event.param.$option_index"/>
        <set_value name="global.$AutoFleetRolesTier" exact="$choice"/>
      </actions>
    </cue>

    <cue name="RunCarrierWings" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
        <set_value name="global.$AutoFleetRolesRunToken" exact="global.$AutoFleetRolesRunToken + 1"/>
        <set_value name="$RunToken" exact="global.$AutoFleetRolesRunToken"/>
        <do_if value="$RunToken == global.$AutoFleetRolesRunToken">
          <run_actions ref="Apply_Carrier_Wings" result="$CarrierResult"/>
          <set_value name="global.$AutoFleetRolesLastCarrierSummary"
                     exact="readtext.{8892101}.{210} + $CarrierResult.$assigned + readtext.{8892101}.{211} + $CarrierResult.$configured + readtext.{8892101}.{212} + $CarrierResult.$eligible + readtext.{8892101}.{213} + $CarrierResult.$bombers + readtext.{8892101}.{214} + $CarrierResult.$interceptors + readtext.{8892101}.{215} + $CarrierResult.$attackships + readtext.{8892101}.{216}"/>
          <include_actions ref="Update_Result_Widgets"/>
          <show_help duration="4s" position="1" custom="readtext.{8892101}.{154} + global.$AutoFleetRolesLastCarrierSummary"/>
        </do_if>
      </actions>
    </cue>

    <cue name="RunAllRules" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <include_actions ref="Ensure_Globals"/>
        <set_value name="global.$AutoFleetRolesRunToken" exact="global.$AutoFleetRolesRunToken + 1"/>
        <set_value name="$RunToken" exact="global.$AutoFleetRolesRunToken"/>
        <do_if value="$RunToken == global.$AutoFleetRolesRunToken">
          <run_actions ref="Apply_Trade_Escorts" result="$TradeResult"/>
          <run_actions ref="Apply_Mining_Escorts" result="$MiningResult"/>
          <run_actions ref="Apply_Carrier_Wings" result="$CarrierResult"/>
          <set_value name="global.$AutoFleetRolesLastTradeSummary"
                     exact="readtext.{8892101}.{200} + $TradeResult.$assigned + readtext.{8892101}.{201} + $TradeResult.$configured + readtext.{8892101}.{202} + $TradeResult.$eligible + readtext.{8892101}.{203} + $TradeResult.$remainings + readtext.{8892101}.{204} + $TradeResult.$remainingm + readtext.{8892101}.{205}"/>
          <set_value name="global.$AutoFleetRolesLastMiningSummary"
                     exact="readtext.{8892101}.{200} + $MiningResult.$assigned + readtext.{8892101}.{201} + $MiningResult.$configured + readtext.{8892101}.{202} + $MiningResult.$eligible + readtext.{8892101}.{203} + $MiningResult.$remainings + readtext.{8892101}.{204} + $MiningResult.$remainingm + readtext.{8892101}.{205}"/>
          <set_value name="global.$AutoFleetRolesLastCarrierSummary"
                     exact="readtext.{8892101}.{210} + $CarrierResult.$assigned + readtext.{8892101}.{211} + $CarrierResult.$configured + readtext.{8892101}.{212} + $CarrierResult.$eligible + readtext.{8892101}.{213} + $CarrierResult.$bombers + readtext.{8892101}.{214} + $CarrierResult.$interceptors + readtext.{8892101}.{215} + $CarrierResult.$attackships + readtext.{8892101}.{216}"/>
          <include_actions ref="Update_Result_Widgets"/>
          <include_actions ref="Show_Combined_Result"/>
        </do_if>
      </actions>
    </cue>

    <library name="Ensure_Globals" purpose="include_actions">
      <actions>
        <do_if value="not global.$AutoFleetRolesTraderEscortCount?">
          <set_value name="global.$AutoFleetRolesTraderEscortCount" exact="2"/>
        </do_if>
        <do_if value="not global.$AutoFleetRolesTier?">
          <set_value name="global.$AutoFleetRolesTier" exact="1"/>
        </do_if>
        <do_if value="not global.$AutoFleetRolesCarrierReserveS?">
          <set_value name="global.$AutoFleetRolesCarrierReserveS" exact="0"/>
        </do_if>
        <do_if value="not global.$AutoFleetRolesRunToken?">
          <set_value name="global.$AutoFleetRolesRunToken" exact="0"/>
        </do_if>
        <do_if value="not global.$AutoFleetRolesLastTradeSummary?">
          <set_value name="global.$AutoFleetRolesLastTradeSummary" exact="readtext.{8892101}.{161}"/>
        </do_if>
        <do_if value="not global.$AutoFleetRolesLastMiningSummary?">
          <set_value name="global.$AutoFleetRolesLastMiningSummary" exact="readtext.{8892101}.{161}"/>
        </do_if>
        <do_if value="not global.$AutoFleetRolesLastCarrierSummary?">
          <set_value name="global.$AutoFleetRolesLastCarrierSummary" exact="readtext.{8892101}.{161}"/>
        </do_if>
      </actions>
    </library>

    <library name="Update_Result_Widgets" purpose="include_actions">
      <actions>
        <signal_cue_instantly cue="md.Simple_Menu_API.Update_Widget"
                              param="table[
                                $id = 'afr_trade_summary',
                                $text = readtext.{8892101}.{152} + global.$AutoFleetRolesLastTradeSummary
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Update_Widget"
                              param="table[
                                $id = 'afr_mining_summary',
                                $text = readtext.{8892101}.{153} + global.$AutoFleetRolesLastMiningSummary
                              ]"/>
        <signal_cue_instantly cue="md.Simple_Menu_API.Update_Widget"
                              param="table[
                                $id = 'afr_carrier_summary',
                                $text = readtext.{8892101}.{154} + global.$AutoFleetRolesLastCarrierSummary
                              ]"/>
      </actions>
    </library>

    <library name="Show_Combined_Result" purpose="include_actions">
      <actions>
        <show_help duration="5s" position="1"
                   custom="readtext.{8892101}.{152} + global.$AutoFleetRolesLastTradeSummary + readtext.{8892101}.{223} + readtext.{8892101}.{153} + global.$AutoFleetRolesLastMiningSummary + readtext.{8892101}.{223} + readtext.{8892101}.{154} + global.$AutoFleetRolesLastCarrierSummary"/>
      </actions>
    </library>

    <library name="IsUntouchedCommander" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="true"/>
        <do_if value="not $Ship or not $Ship.exists">
          <set_value name="$Result" exact="false"/>
        </do_if>
        <do_elseif value="not $Ship.isoperational">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship.trueowner != faction.player">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship == player.occupiedship">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship.commander">
          <do_if value="not $Ship.commander.isclass.station">
            <set_value name="$Result" exact="false"/>
          </do_if>
        </do_elseif>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="IsCivilianCommander" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="false"/>
        <do_if value="$Ship and $Ship.exists">
          <do_if value="($Ship.primarypurpose == purpose.trade) or ($Ship.primarypurpose == purpose.mine)">
            <set_value name="$Result" exact="true"/>
          </do_if>
          <do_elseif value="($Ship.type == shiptype.courier) or ($Ship.type == shiptype.transporter) or ($Ship.type == shiptype.freighter) or ($Ship.type == shiptype.miner) or ($Ship.type == shiptype.largeminer) or ($Ship.type == shiptype.builder) or ($Ship.type == shiptype.resupplier) or ($Ship.type == shiptype.personnelcarrier) or ($Ship.type == shiptype.scavenger) or ($Ship.type == shiptype.tug) or ($Ship.type == shiptype.compactor)">
            <set_value name="$Result" exact="true"/>
          </do_elseif>
        </do_if>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="IsTradeCommander" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="false"/>
        <do_if value="$Ship and $Ship.exists">
          <do_if value="$Ship.primarypurpose == purpose.trade">
            <set_value name="$Result" exact="true"/>
          </do_if>
          <do_elseif value="($Ship.type == shiptype.courier) or ($Ship.type == shiptype.transporter) or ($Ship.type == shiptype.freighter) or ($Ship.type == shiptype.builder) or ($Ship.type == shiptype.resupplier) or ($Ship.type == shiptype.personnelcarrier) or ($Ship.type == shiptype.scavenger) or ($Ship.type == shiptype.tug) or ($Ship.type == shiptype.compactor)">
            <set_value name="$Result" exact="true"/>
          </do_elseif>
        </do_if>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="IsMineCommander" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="false"/>
        <do_if value="$Ship and $Ship.exists">
          <do_if value="$Ship.primarypurpose == purpose.mine">
            <set_value name="$Result" exact="true"/>
          </do_if>
          <do_elseif value="($Ship.type == shiptype.miner) or ($Ship.type == shiptype.largeminer)">
            <set_value name="$Result" exact="true"/>
          </do_elseif>
        </do_if>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="IsAvailableSubordinate" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="true"/>
        <set_value name="$CurrentOrder" exact="if ($Ship and $Ship.exists) then $Ship.order else null"/>
        <do_if value="not $Ship or not $Ship.exists">
          <set_value name="$Result" exact="false"/>
        </do_if>
        <do_elseif value="not $Ship.isoperational">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship.trueowner != faction.player">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship == player.occupiedship">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship.commander">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship.subordinates.count gt 0">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$Ship.tradeorders.count gt 0 or $Ship.buildorders.count gt 0">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <do_elseif value="$CurrentOrder and ($CurrentOrder.id != 'Wait') and ($CurrentOrder.id != 'DockAndWait')">
          <set_value name="$Result" exact="false"/>
        </do_elseif>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="IsBombardmentShip" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="false"/>
        <do_if value="$Ship and $Ship.exists">
          <do_if value="$Ship.type == shiptype.bomber">
            <set_value name="$Result" exact="true"/>
          </do_if>
          <do_if value="not $Result">
            <do_for_each name="$Weapon" in="$Ship.weapons.operational.list">
              <do_if value="$Weapon.istorpedo">
                <set_value name="$Result" exact="true"/>
                <break/>
              </do_if>
            </do_for_each>
          </do_if>
          <do_if value="not $Result">
            <do_for_each name="$Ammo" in="$Ship.ammostorage.missile.list">
              <do_if value="$Ammo.istorpedo">
                <set_value name="$Result" exact="true"/>
                <break/>
              </do_if>
            </do_for_each>
          </do_if>
          <do_if value="not $Result and ($Ship.ammostorage.missile.capacity gt 0) and ($Ship.dps.missiles.all gt ($Ship.dps.lasers.all * 1.5f))">
            <set_value name="$Result" exact="true"/>
          </do_if>
        </do_if>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="IsMissileShip" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$Result" exact="false"/>
        <do_if value="$Ship and $Ship.exists">
          <do_if value="$Ship.ammostorage.missile.capacity gt 0">
            <set_value name="$Result" exact="true"/>
          </do_if>
          <do_if value="not $Result">
            <do_for_each name="$Weapon" in="$Ship.weapons.operational.list">
              <do_if value="$Weapon.isguided">
                <set_value name="$Result" exact="true"/>
                <break/>
              </do_if>
            </do_for_each>
          </do_if>
        </do_if>
        <return value="$Result"/>
      </actions>
    </library>

    <library name="GetFreeDockCapacity" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$FreeSDocks" exact="0"/>
        <set_value name="$FreeMDocks" exact="0"/>

        <do_if value="$Ship and $Ship.exists">
          <find_dockingbay name="$ExternalSDocks" object="$Ship" multiple="true">
            <match_dock size="tag.dock_s" free="true" storage="false"/>
          </find_dockingbay>
          <find_dockingbay name="$ExternalMDocks" object="$Ship" multiple="true">
            <match_dock size="tag.dock_m" free="true" storage="false"/>
          </find_dockingbay>
          <set_value name="$FreeSDocks" exact="$ExternalSDocks.count"/>
          <set_value name="$FreeMDocks" exact="$ExternalMDocks.count"/>

          <find_dockingbay name="$InternalSDocks" object="$Ship" multiple="true">
            <match_dock size="tag.dock_s" free="true" storage="true"/>
          </find_dockingbay>
          <do_for_each name="$Dock" in="$InternalSDocks">
            <set_value name="$FreeSDocks" exact="$FreeSDocks + $Dock.shipstorage.free"/>
          </do_for_each>

          <find_dockingbay name="$InternalMDocks" object="$Ship" multiple="true">
            <match_dock size="tag.dock_m" free="true" storage="true"/>
          </find_dockingbay>
          <do_for_each name="$Dock" in="$InternalMDocks">
            <set_value name="$FreeMDocks" exact="$FreeMDocks + $Dock.shipstorage.free"/>
          </do_for_each>
        </do_if>

        <return value="table[
          $s = $FreeSDocks,
          $m = $FreeMDocks,
          $total = $FreeSDocks + $FreeMDocks
        ]"/>
      </actions>
    </library>

    <library name="GetCurrentSubordinateCounts" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$CurrentS" exact="0"/>
        <set_value name="$CurrentM" exact="0"/>

        <do_if value="$Ship and $Ship.exists">
          <do_for_each name="$Subordinate" in="$Ship.subordinates">
            <do_if value="$Subordinate.isclass.{class.ship_s}">
              <set_value name="$CurrentS" exact="$CurrentS + 1"/>
            </do_if>
            <do_elseif value="$Subordinate.isclass.{class.ship_m}">
              <set_value name="$CurrentM" exact="$CurrentM + 1"/>
            </do_elseif>
          </do_for_each>
        </do_if>

        <return value="table[
          $s = $CurrentS,
          $m = $CurrentM
        ]"/>
      </actions>
    </library>

    <library name="GetTierTargets" purpose="run_actions">
      <params>
        <param name="Ship"/>
      </params>
      <actions>
        <set_value name="$MinS" exact="2"/>
        <set_value name="$MinM" exact="0"/>

        <do_if value="global.$AutoFleetRolesTier == 3">
          <set_value name="$MinS" exact="4"/>
        </do_if>

        <do_if value="$Ship and ($Ship.isclass.{class.ship_l} or $Ship.isclass.{class.ship_xl})">
          <do_if value="global.$AutoFleetRolesTier == 1">
            <set_value name="$MinS" exact="0"/>
            <set_value name="$MinM" exact="0"/>
          </do_if>
          <do_elseif value="global.$AutoFleetRolesTier == 2">
            <set_value name="$MinS" exact="2"/>
            <set_value name="$MinM" exact="1"/>
          </do_elseif>
          <do_else>
            <set_value name="$MinS" exact="4"/>
            <set_value name="$MinM" exact="2"/>
          </do_else>
        </do_if>

        <return value="table[
          $s = $MinS,
          $m = $MinM
        ]"/>
      </actions>
    </library>

    <library name="Apply_Trade_Escorts" purpose="run_actions">
      <actions>
        <set_value name="$TradeCommanders" exact="[]"/>
        <set_value name="$SEscorts" exact="[]"/>
        <set_value name="$MEscorts" exact="[]"/>
        <set_value name="$MMissileEscorts" exact="[]"/>
        <set_value name="$ConfiguredCommanders" exact="0"/>
        <set_value name="$TotalAssignedS" exact="0"/>
        <set_value name="$TotalAssignedM" exact="0"/>

        <find_ship_by_true_owner name="$PlayerShips"
                                 faction="faction.player"
                                 space="player.galaxy"
                                 multiple="true"
                                 class="[class.ship_s, class.ship_m, class.ship_l, class.ship_xl]"
                                 checkoperational="true"/>

        <do_for_each name="$Ship" in="$PlayerShips">
          <run_actions ref="IsUntouchedCommander" result="$EligibleCommander">
            <param name="Ship" value="$Ship"/>
          </run_actions>
          <do_if value="$EligibleCommander">
            <run_actions ref="IsTradeCommander" result="$IsTradeCommander">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="$IsTradeCommander">
              <append_to_list name="$TradeCommanders" exact="$Ship"/>
            </do_if>
          </do_if>

          <run_actions ref="IsAvailableSubordinate" result="$AvailableSubordinate">
            <param name="Ship" value="$Ship"/>
          </run_actions>
          <do_if value="$AvailableSubordinate and $Ship.isclass.{class.ship_s} and (($Ship.type == shiptype.fighter) or ($Ship.type == shiptype.heavyfighter) or ($Ship.type == shiptype.interceptor))">
            <run_actions ref="IsBombardmentShip" result="$IsBombardment">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="not $IsBombardment">
              <append_to_list name="$SEscorts" exact="$Ship"/>
            </do_if>
          </do_if>
          <do_if value="$AvailableSubordinate and $Ship.isclass.{class.ship_m} and (($Ship.type == shiptype.corvette) or ($Ship.type == shiptype.frigate) or ($Ship.type == shiptype.gunboat))">
            <run_actions ref="IsBombardmentShip" result="$IsBombardment">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="not $IsBombardment">
              <run_actions ref="IsMissileShip" result="$IsMissileShip">
                <param name="Ship" value="$Ship"/>
              </run_actions>
              <do_if value="$IsMissileShip">
                <append_to_list name="$MMissileEscorts" exact="$Ship"/>
              </do_if>
              <do_else>
                <append_to_list name="$MEscorts" exact="$Ship"/>
              </do_else>
            </do_if>
          </do_if>
        </do_for_each>

        <do_for_each name="$Commander" in="$TradeCommanders">
          <set_value name="$AssignedToCommanderS" exact="0"/>
          <set_value name="$AssignedToCommanderM" exact="0"/>
          <run_actions ref="GetFreeDockCapacity" result="$DockCapacity">
            <param name="Ship" value="$Commander"/>
          </run_actions>
          <run_actions ref="GetCurrentSubordinateCounts" result="$CurrentCounts">
            <param name="Ship" value="$Commander"/>
          </run_actions>
          <run_actions ref="GetTierTargets" result="$TierTargets">
            <param name="Ship" value="$Commander"/>
          </run_actions>
          <set_value name="$TargetSEscorts" exact="$DockCapacity.$s"/>
          <do_if value="$TierTargets.$s gt $CurrentCounts.$s">
            <set_value name="$MissingSEscorts" exact="$TierTargets.$s - $CurrentCounts.$s"/>
            <do_if value="$MissingSEscorts gt $TargetSEscorts">
              <set_value name="$TargetSEscorts" exact="$MissingSEscorts"/>
            </do_if>
          </do_if>
          <set_value name="$TargetMEscorts" exact="$DockCapacity.$m"/>
          <do_if value="$TierTargets.$m gt $CurrentCounts.$m">
            <set_value name="$MissingMEscorts" exact="$TierTargets.$m - $CurrentCounts.$m"/>
            <do_if value="$MissingMEscorts gt $TargetMEscorts">
              <set_value name="$TargetMEscorts" exact="$MissingMEscorts"/>
            </do_if>
          </do_if>

          <set_value name="$SCandidatesByDistance" exact="$SEscorts"/>
          <sort_list list="$SCandidatesByDistance" sortbyvalue="loop.element.distanceto.{$Commander}" sortdescending="false"/>
          <do_for_each name="$Candidate" in="$SCandidatesByDistance">
            <do_if value="$AssignedToCommanderS ge $TargetSEscorts">
              <break/>
            </do_if>
            <do_if value="$SEscorts.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.defence}.{$Commander}">
              <set_object_commander object="$Candidate" commander="$Commander" assignment="assignment.defence"/>
              <create_order object="$Candidate" id="'Escort'" default="true">
                <param name="target" value="$Commander"/>
              </create_order>
              <remove_from_list name="$SEscorts" exact="$Candidate"/>
              <set_value name="$AssignedToCommanderS" exact="$AssignedToCommanderS + 1"/>
              <set_value name="$TotalAssignedS" exact="$TotalAssignedS + 1"/>
            </do_if>
          </do_for_each>

          <set_value name="$MCandidatesByDistance" exact="$MEscorts"/>
          <sort_list list="$MCandidatesByDistance" sortbyvalue="loop.element.distanceto.{$Commander}" sortdescending="false"/>
          <do_for_each name="$Candidate" in="$MCandidatesByDistance">
            <do_if value="$AssignedToCommanderM ge $TargetMEscorts">
              <break/>
            </do_if>
            <do_if value="$MEscorts.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.defence}.{$Commander}">
              <set_object_commander object="$Candidate" commander="$Commander" assignment="assignment.defence"/>
              <create_order object="$Candidate" id="'Escort'" default="true">
                <param name="target" value="$Commander"/>
              </create_order>
              <remove_from_list name="$MEscorts" exact="$Candidate"/>
              <set_value name="$AssignedToCommanderM" exact="$AssignedToCommanderM + 1"/>
              <set_value name="$TotalAssignedM" exact="$TotalAssignedM + 1"/>
            </do_if>
          </do_for_each>

          <set_value name="$MissileMCandidatesByDistance" exact="$MMissileEscorts"/>
          <sort_list list="$MissileMCandidatesByDistance" sortbyvalue="loop.element.distanceto.{$Commander}" sortdescending="false"/>
          <do_for_each name="$Candidate" in="$MissileMCandidatesByDistance">
            <do_if value="$AssignedToCommanderM ge $TargetMEscorts">
              <break/>
            </do_if>
            <do_if value="$MMissileEscorts.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.defence}.{$Commander}">
              <set_object_commander object="$Candidate" commander="$Commander" assignment="assignment.defence"/>
              <create_order object="$Candidate" id="'Escort'" default="true">
                <param name="target" value="$Commander"/>
              </create_order>
              <remove_from_list name="$MMissileEscorts" exact="$Candidate"/>
              <set_value name="$AssignedToCommanderM" exact="$AssignedToCommanderM + 1"/>
              <set_value name="$TotalAssignedM" exact="$TotalAssignedM + 1"/>
            </do_if>
          </do_for_each>

          <do_if value="($AssignedToCommanderS + $AssignedToCommanderM) gt 0">
            <set_value name="$ConfiguredCommanders" exact="$ConfiguredCommanders + 1"/>
          </do_if>
        </do_for_each>

        <return value="table[
          $eligible = $TradeCommanders.count,
          $configured = $ConfiguredCommanders,
          $assigned = $TotalAssignedS + $TotalAssignedM,
          $assigneds = $TotalAssignedS,
          $assignedm = $TotalAssignedM,
          $remainings = $SEscorts.count,
          $remainingm = $MEscorts.count + $MMissileEscorts.count
        ]"/>
      </actions>
    </library>

    <library name="Apply_Mining_Escorts" purpose="run_actions">
      <actions>
        <set_value name="$MineCommanders" exact="[]"/>
        <set_value name="$MineSEscorts" exact="[]"/>
        <set_value name="$MineMEscorts" exact="[]"/>
        <set_value name="$MineMMissileEscorts" exact="[]"/>
        <set_value name="$MineConfiguredCommanders" exact="0"/>
        <set_value name="$MineTotalAssignedS" exact="0"/>
        <set_value name="$MineTotalAssignedM" exact="0"/>

        <find_ship_by_true_owner name="$MinePlayerShips"
                                 faction="faction.player"
                                 space="player.galaxy"
                                 multiple="true"
                                 class="[class.ship_s, class.ship_m, class.ship_l, class.ship_xl]"
                                 checkoperational="true"/>

        <do_for_each name="$Ship" in="$MinePlayerShips">
          <run_actions ref="IsUntouchedCommander" result="$EligibleCommander">
            <param name="Ship" value="$Ship"/>
          </run_actions>
          <do_if value="$EligibleCommander">
            <run_actions ref="IsMineCommander" result="$IsMineCommander">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="$IsMineCommander">
              <append_to_list name="$MineCommanders" exact="$Ship"/>
            </do_if>
          </do_if>

          <run_actions ref="IsAvailableSubordinate" result="$AvailableSubordinate">
            <param name="Ship" value="$Ship"/>
          </run_actions>
          <do_if value="$AvailableSubordinate and $Ship.isclass.{class.ship_s} and (($Ship.type == shiptype.fighter) or ($Ship.type == shiptype.heavyfighter) or ($Ship.type == shiptype.interceptor))">
            <run_actions ref="IsBombardmentShip" result="$IsBombardment">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="not $IsBombardment">
              <append_to_list name="$MineSEscorts" exact="$Ship"/>
            </do_if>
          </do_if>
          <do_if value="$AvailableSubordinate and $Ship.isclass.{class.ship_m} and (($Ship.type == shiptype.corvette) or ($Ship.type == shiptype.frigate) or ($Ship.type == shiptype.gunboat))">
            <run_actions ref="IsBombardmentShip" result="$IsBombardment">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="not $IsBombardment">
              <run_actions ref="IsMissileShip" result="$IsMissileShip">
                <param name="Ship" value="$Ship"/>
              </run_actions>
              <do_if value="$IsMissileShip">
                <append_to_list name="$MineMMissileEscorts" exact="$Ship"/>
              </do_if>
              <do_else>
                <append_to_list name="$MineMEscorts" exact="$Ship"/>
              </do_else>
            </do_if>
          </do_if>
        </do_for_each>

        <do_for_each name="$Commander" in="$MineCommanders">
          <set_value name="$AssignedToCommanderS" exact="0"/>
          <set_value name="$AssignedToCommanderM" exact="0"/>
          <run_actions ref="GetFreeDockCapacity" result="$DockCapacity">
            <param name="Ship" value="$Commander"/>
          </run_actions>
          <run_actions ref="GetCurrentSubordinateCounts" result="$CurrentCounts">
            <param name="Ship" value="$Commander"/>
          </run_actions>
          <run_actions ref="GetTierTargets" result="$TierTargets">
            <param name="Ship" value="$Commander"/>
          </run_actions>
          <set_value name="$TargetSEscorts" exact="$DockCapacity.$s"/>
          <do_if value="$TierTargets.$s gt $CurrentCounts.$s">
            <set_value name="$MissingSEscorts" exact="$TierTargets.$s - $CurrentCounts.$s"/>
            <do_if value="$MissingSEscorts gt $TargetSEscorts">
              <set_value name="$TargetSEscorts" exact="$MissingSEscorts"/>
            </do_if>
          </do_if>
          <set_value name="$TargetMEscorts" exact="$DockCapacity.$m"/>
          <do_if value="$TierTargets.$m gt $CurrentCounts.$m">
            <set_value name="$MissingMEscorts" exact="$TierTargets.$m - $CurrentCounts.$m"/>
            <do_if value="$MissingMEscorts gt $TargetMEscorts">
              <set_value name="$TargetMEscorts" exact="$MissingMEscorts"/>
            </do_if>
          </do_if>

          <set_value name="$SCandidatesByDistance" exact="$MineSEscorts"/>
          <sort_list list="$SCandidatesByDistance" sortbyvalue="loop.element.distanceto.{$Commander}" sortdescending="false"/>
          <do_for_each name="$Candidate" in="$SCandidatesByDistance">
            <do_if value="$AssignedToCommanderS ge $TargetSEscorts">
              <break/>
            </do_if>
            <do_if value="$MineSEscorts.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.defence}.{$Commander}">
              <set_object_commander object="$Candidate" commander="$Commander" assignment="assignment.defence"/>
              <create_order object="$Candidate" id="'Escort'" default="true">
                <param name="target" value="$Commander"/>
              </create_order>
              <remove_from_list name="$MineSEscorts" exact="$Candidate"/>
              <set_value name="$AssignedToCommanderS" exact="$AssignedToCommanderS + 1"/>
              <set_value name="$MineTotalAssignedS" exact="$MineTotalAssignedS + 1"/>
            </do_if>
          </do_for_each>

          <set_value name="$MCandidatesByDistance" exact="$MineMEscorts"/>
          <sort_list list="$MCandidatesByDistance" sortbyvalue="loop.element.distanceto.{$Commander}" sortdescending="false"/>
          <do_for_each name="$Candidate" in="$MCandidatesByDistance">
            <do_if value="$AssignedToCommanderM ge $TargetMEscorts">
              <break/>
            </do_if>
            <do_if value="$MineMEscorts.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.defence}.{$Commander}">
              <set_object_commander object="$Candidate" commander="$Commander" assignment="assignment.defence"/>
              <create_order object="$Candidate" id="'Escort'" default="true">
                <param name="target" value="$Commander"/>
              </create_order>
              <remove_from_list name="$MineMEscorts" exact="$Candidate"/>
              <set_value name="$AssignedToCommanderM" exact="$AssignedToCommanderM + 1"/>
              <set_value name="$MineTotalAssignedM" exact="$MineTotalAssignedM + 1"/>
            </do_if>
          </do_for_each>

          <set_value name="$MissileMCandidatesByDistance" exact="$MineMMissileEscorts"/>
          <sort_list list="$MissileMCandidatesByDistance" sortbyvalue="loop.element.distanceto.{$Commander}" sortdescending="false"/>
          <do_for_each name="$Candidate" in="$MissileMCandidatesByDistance">
            <do_if value="$AssignedToCommanderM ge $TargetMEscorts">
              <break/>
            </do_if>
            <do_if value="$MineMMissileEscorts.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.defence}.{$Commander}">
              <set_object_commander object="$Candidate" commander="$Commander" assignment="assignment.defence"/>
              <create_order object="$Candidate" id="'Escort'" default="true">
                <param name="target" value="$Commander"/>
              </create_order>
              <remove_from_list name="$MineMMissileEscorts" exact="$Candidate"/>
              <set_value name="$AssignedToCommanderM" exact="$AssignedToCommanderM + 1"/>
              <set_value name="$MineTotalAssignedM" exact="$MineTotalAssignedM + 1"/>
            </do_if>
          </do_for_each>

          <do_if value="($AssignedToCommanderS + $AssignedToCommanderM) gt 0">
            <set_value name="$MineConfiguredCommanders" exact="$MineConfiguredCommanders + 1"/>
          </do_if>
        </do_for_each>

        <return value="table[
          $eligible = $MineCommanders.count,
          $configured = $MineConfiguredCommanders,
          $assigned = $MineTotalAssignedS + $MineTotalAssignedM,
          $assigneds = $MineTotalAssignedS,
          $assignedm = $MineTotalAssignedM,
          $remainings = $MineSEscorts.count,
          $remainingm = $MineMEscorts.count + $MineMMissileEscorts.count
        ]"/>
      </actions>
    </library>

    <library name="Apply_Carrier_Wings" purpose="run_actions">
      <actions>
        <set_value name="$MilitaryCommanders" exact="[]"/>
        <set_value name="$Bombers" exact="[]"/>
        <set_value name="$Interceptors" exact="[]"/>
        <set_value name="$AttackShips" exact="[]"/>
        <set_value name="$MissileAttackShips" exact="[]"/>
        <set_value name="$ConfiguredCarriers" exact="0"/>
        <set_value name="$TotalBombersAssigned" exact="0"/>
        <set_value name="$TotalInterceptorsAssigned" exact="0"/>
        <set_value name="$TotalAttackShipsAssigned" exact="0"/>

        <find_ship_by_true_owner name="$PlayerShips"
                                 faction="faction.player"
                                 space="player.galaxy"
                                 multiple="true"
                                 class="[class.ship_s, class.ship_m, class.ship_l, class.ship_xl]"
                                 checkoperational="true"/>

        <do_for_each name="$Ship" in="$PlayerShips">
          <run_actions ref="IsUntouchedCommander" result="$EligibleCommander">
            <param name="Ship" value="$Ship"/>
          </run_actions>
          <do_if value="$EligibleCommander">
            <run_actions ref="IsCivilianCommander" result="$IsCivilianCommander">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="not $IsCivilianCommander">
              <run_actions ref="GetFreeDockCapacity" result="$DockCapacity">
                <param name="Ship" value="$Ship"/>
              </run_actions>
              <do_if value="$DockCapacity.$total gt 0">
                <append_to_list name="$MilitaryCommanders" exact="$Ship"/>
              </do_if>
            </do_if>
          </do_if>

          <run_actions ref="IsAvailableSubordinate" result="$AvailableSubordinate">
            <param name="Ship" value="$Ship"/>
          </run_actions>
          <do_if value="$AvailableSubordinate and $Ship.isclass.{class.ship_s} and (($Ship.type == shiptype.fighter) or ($Ship.type == shiptype.heavyfighter) or ($Ship.type == shiptype.interceptor) or ($Ship.type == shiptype.bomber))">
            <run_actions ref="IsBombardmentShip" result="$IsBombardment">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="$IsBombardment">
              <append_to_list name="$Bombers" exact="$Ship"/>
            </do_if>
            <do_else>
              <append_to_list name="$Interceptors" exact="$Ship"/>
            </do_else>
          </do_if>
          <do_if value="$AvailableSubordinate and $Ship.isclass.{class.ship_m} and (($Ship.type == shiptype.corvette) or ($Ship.type == shiptype.frigate) or ($Ship.type == shiptype.gunboat))">
            <run_actions ref="IsMissileShip" result="$IsMissileShip">
              <param name="Ship" value="$Ship"/>
            </run_actions>
            <do_if value="$IsMissileShip">
              <append_to_list name="$MissileAttackShips" exact="$Ship"/>
            </do_if>
            <do_else>
              <append_to_list name="$AttackShips" exact="$Ship"/>
            </do_else>
          </do_if>
        </do_for_each>

        <do_for_each name="$Carrier" in="$MilitaryCommanders">
          <set_value name="$AssignedToCarrier" exact="0"/>
          <set_value name="$BombersForCarrier" exact="0"/>
          <set_value name="$SAssignmentsForCarrier" exact="0"/>
          <set_value name="$MAssignmentsForCarrier" exact="0"/>
          <run_actions ref="GetFreeDockCapacity" result="$DockCapacity">
            <param name="Ship" value="$Carrier"/>
          </run_actions>
          <run_actions ref="GetCurrentSubordinateCounts" result="$CurrentCounts">
            <param name="Ship" value="$Carrier"/>
          </run_actions>
          <run_actions ref="GetTierTargets" result="$TierTargets">
            <param name="Ship" value="$Carrier"/>
          </run_actions>
          <set_value name="$TargetSAssignments" exact="$DockCapacity.$s"/>
          <do_if value="$TierTargets.$s gt $CurrentCounts.$s">
            <set_value name="$MissingSAssignments" exact="$TierTargets.$s - $CurrentCounts.$s"/>
            <do_if value="$MissingSAssignments gt $TargetSAssignments">
              <set_value name="$TargetSAssignments" exact="$MissingSAssignments"/>
            </do_if>
          </do_if>
          <set_value name="$TargetMAssignments" exact="$DockCapacity.$m"/>
          <do_if value="$TierTargets.$m gt $CurrentCounts.$m">
            <set_value name="$MissingMAssignments" exact="$TierTargets.$m - $CurrentCounts.$m"/>
            <do_if value="$MissingMAssignments gt $TargetMAssignments">
              <set_value name="$TargetMAssignments" exact="$MissingMAssignments"/>
            </do_if>
          </do_if>

          <do_if value="($TargetSAssignments + $TargetMAssignments) gt 0">
            <set_value name="$BombardmentQuota" exact="0"/>
            <do_if value="($TargetSAssignments gt 8) and ($TargetSAssignments le 16)">
              <set_value name="$BombardmentQuota" exact="$TargetSAssignments * 0.25f"/>
            </do_if>
            <do_elseif value="$TargetSAssignments gt 16">
              <set_value name="$BombardmentQuota" exact="$TargetSAssignments * 0.30f"/>
            </do_elseif>

            <set_value name="$BomberCandidates" exact="$Bombers"/>
            <sort_list list="$BomberCandidates" sortbyvalue="loop.element.distanceto.{$Carrier}" sortdescending="false"/>
            <do_for_each name="$Candidate" in="$BomberCandidates">
              <do_if value="($SAssignmentsForCarrier ge $TargetSAssignments) or ($BombersForCarrier ge $BombardmentQuota)">
                <break/>
              </do_if>
              <do_if value="$Bombers.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.bombardment}.{$Carrier}">
                <set_object_commander object="$Candidate" commander="$Carrier" assignment="assignment.bombardment"/>
                <create_order object="$Candidate" id="'Escort'" default="true">
                  <param name="target" value="$Carrier"/>
                </create_order>
                <remove_from_list name="$Bombers" exact="$Candidate"/>
                <set_value name="$AssignedToCarrier" exact="$AssignedToCarrier + 1"/>
                <set_value name="$BombersForCarrier" exact="$BombersForCarrier + 1"/>
                <set_value name="$SAssignmentsForCarrier" exact="$SAssignmentsForCarrier + 1"/>
                <set_value name="$TotalBombersAssigned" exact="$TotalBombersAssigned + 1"/>
              </do_if>
            </do_for_each>

            <set_value name="$InterceptorCandidates" exact="$Interceptors"/>
            <sort_list list="$InterceptorCandidates" sortbyvalue="loop.element.distanceto.{$Carrier}" sortdescending="false"/>
            <do_for_each name="$Candidate" in="$InterceptorCandidates">
              <do_if value="$SAssignmentsForCarrier ge $TargetSAssignments">
                <break/>
              </do_if>
              <do_if value="$Interceptors.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.interception}.{$Carrier}">
                <set_object_commander object="$Candidate" commander="$Carrier" assignment="assignment.interception"/>
                <create_order object="$Candidate" id="'Escort'" default="true">
                  <param name="target" value="$Carrier"/>
                </create_order>
                <remove_from_list name="$Interceptors" exact="$Candidate"/>
                <set_value name="$AssignedToCarrier" exact="$AssignedToCarrier + 1"/>
                <set_value name="$SAssignmentsForCarrier" exact="$SAssignmentsForCarrier + 1"/>
                <set_value name="$TotalInterceptorsAssigned" exact="$TotalInterceptorsAssigned + 1"/>
              </do_if>
            </do_for_each>

            <set_value name="$BomberFillCandidates" exact="$Bombers"/>
            <sort_list list="$BomberFillCandidates" sortbyvalue="loop.element.distanceto.{$Carrier}" sortdescending="false"/>
            <do_for_each name="$Candidate" in="$BomberFillCandidates">
              <do_if value="$SAssignmentsForCarrier ge $TargetSAssignments">
                <break/>
              </do_if>
              <do_if value="$Bombers.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.bombardment}.{$Carrier}">
                <set_object_commander object="$Candidate" commander="$Carrier" assignment="assignment.bombardment"/>
                <create_order object="$Candidate" id="'Escort'" default="true">
                  <param name="target" value="$Carrier"/>
                </create_order>
                <remove_from_list name="$Bombers" exact="$Candidate"/>
                <set_value name="$AssignedToCarrier" exact="$AssignedToCarrier + 1"/>
                <set_value name="$BombersForCarrier" exact="$BombersForCarrier + 1"/>
                <set_value name="$SAssignmentsForCarrier" exact="$SAssignmentsForCarrier + 1"/>
                <set_value name="$TotalBombersAssigned" exact="$TotalBombersAssigned + 1"/>
              </do_if>
            </do_for_each>

            <set_value name="$AttackCandidates" exact="$AttackShips"/>
            <sort_list list="$AttackCandidates" sortbyvalue="loop.element.distanceto.{$Carrier}" sortdescending="false"/>
            <do_for_each name="$Candidate" in="$AttackCandidates">
              <do_if value="$MAssignmentsForCarrier ge $TargetMAssignments">
                <break/>
              </do_if>
              <do_if value="$AttackShips.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.attack}.{$Carrier}">
                <set_object_commander object="$Candidate" commander="$Carrier" assignment="assignment.attack"/>
                <create_order object="$Candidate" id="'Escort'" default="true">
                  <param name="target" value="$Carrier"/>
                </create_order>
                <remove_from_list name="$AttackShips" exact="$Candidate"/>
                <set_value name="$AssignedToCarrier" exact="$AssignedToCarrier + 1"/>
                <set_value name="$MAssignmentsForCarrier" exact="$MAssignmentsForCarrier + 1"/>
                <set_value name="$TotalAttackShipsAssigned" exact="$TotalAttackShipsAssigned + 1"/>
              </do_if>
            </do_for_each>

            <set_value name="$MissileAttackCandidates" exact="$MissileAttackShips"/>
            <sort_list list="$MissileAttackCandidates" sortbyvalue="loop.element.distanceto.{$Carrier}" sortdescending="false"/>
            <do_for_each name="$Candidate" in="$MissileAttackCandidates">
              <do_if value="$MAssignmentsForCarrier ge $TargetMAssignments">
                <break/>
              </do_if>
              <do_if value="$MissileAttackShips.indexof.{$Candidate} and $Candidate.canuseassignment.{assignment.attack}.{$Carrier}">
                <set_object_commander object="$Candidate" commander="$Carrier" assignment="assignment.attack"/>
                <create_order object="$Candidate" id="'Escort'" default="true">
                  <param name="target" value="$Carrier"/>
                </create_order>
                <remove_from_list name="$MissileAttackShips" exact="$Candidate"/>
                <set_value name="$AssignedToCarrier" exact="$AssignedToCarrier + 1"/>
                <set_value name="$MAssignmentsForCarrier" exact="$MAssignmentsForCarrier + 1"/>
                <set_value name="$TotalAttackShipsAssigned" exact="$TotalAttackShipsAssigned + 1"/>
              </do_if>
            </do_for_each>
          </do_if>

          <do_if value="$AssignedToCarrier gt 0">
            <set_value name="$ConfiguredCarriers" exact="$ConfiguredCarriers + 1"/>
          </do_if>
        </do_for_each>

        <return value="table[
          $eligible = $MilitaryCommanders.count,
          $configured = $ConfiguredCarriers,
          $bombers = $TotalBombersAssigned,
          $interceptors = $TotalInterceptorsAssigned,
          $attackships = $TotalAttackShipsAssigned,
          $assigned = $TotalBombersAssigned + $TotalInterceptorsAssigned + $TotalAttackShipsAssigned,
          $remainingbombers = $Bombers.count,
          $remaininginterceptors = $Interceptors.count,
          $remainingattackships = $AttackShips.count + $MissileAttackShips.count
        ]"/>
      </actions>
    </library>

    <cue name="InteractMenu_GetActions" instantiate="true">
      <conditions>
        <event_cue_signalled cue="md.Interact_Menu_API.Get_Actions"/>
      </conditions>
      <actions>
        <set_value name="$selectedShips" exact="@event.param.$selectedplayerships"/>
        <set_value name="$target" exact="@event.param.$object"/>
        <do_if value="$selectedShips.count gt 0 and $target and $target.exists">
          <do_if value="$target.isclass.ship and $target.trueowner == faction.player and $target.isoperational and not $target.isunit">
            <do_if value="$target != player.occupiedship">
              <set_value name="$hasFree" exact="false"/>
              <do_for_each name="$ship" in="$selectedShips">
                <do_if value="not $hasFree and $ship and $ship.exists and $ship.isoperational and $ship.trueowner == faction.player and not $ship.isunit and not $ship.commander and $ship != $target and $ship != player.occupiedship and $ship.subordinates.count == 0">
                  <set_value name="$hasFree" exact="true"/>
                </do_if>
              </do_for_each>
              <do_if value="$hasFree">
                <signal_cue_instantly cue="md.Interact_Menu_API.Add_Action" param="table[
                  $id = 'afr_assign_to_commander',
                  $section = 'selected_orders',
                  $text = {8892101,300},
                  $icon = 'order_defend',
                  $callback = InteractMenu_OnAssignShips,
                  $echo = table[$target = $target]
                ]"/>
              </do_if>
            </do_if>
          </do_if>
        </do_if>
        <cancel_cue cue="this"/>
      </actions>
    </cue>

    <cue name="InteractMenu_OnAssignShips" instantiate="true">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <set_value name="$selectedShips" exact="@event.param.$selectedplayerships"/>
        <set_value name="$target" exact="event.param.$object"/>
        <do_if value="not $target and @event.param.$echo.$target.exists">
          <set_value name="$target" exact="event.param.$echo.$target"/>
        </do_if>
        <do_if value="$target and $target.exists and $target.isoperational and $target.trueowner == faction.player">
          <run_actions ref="IsCivilianCommander" result="$IsCivilian">
            <param name="Ship" value="$target"/>
          </run_actions>
          <set_value name="$Assignment" exact="if $IsCivilian then 'assignment.defence' else 'assignment.attack'"/>
          <set_value name="$assigned" exact="0"/>
          <do_for_each name="$ship" in="$selectedShips">
            <do_if value="$ship and $ship.exists and $ship.isoperational and $ship.trueowner == faction.player and not $ship.isunit and not $ship.commander and $ship != $target and $ship != player.occupiedship and $ship.subordinates.count == 0">
              <set_object_commander object="$ship" commander="$target" assignment="$Assignment"/>
              <create_order object="$ship" id="'Escort'" default="true">
                <param name="target" value="$target"/>
              </create_order>
              <set_value name="$assigned" exact="$assigned + 1"/>
            </do_if>
          </do_for_each>
          <show_help duration="4s" position="1" custom="readtext.{8892101}.{301} + $assigned + readtext.{8892101}.{302} + $target.name"/>
        </do_if>
        <reset_cue cue="this"/>
      </actions>
    </cue>
  </cues>
</mdscript>
<?xml version="1.0" encoding="utf-8"?>
<language id="44">
  <page id="8892101" title="Auto Fleet Roles" descr="Auto Fleet Roles text" voice="no">
    <t id="101">Auto Fleet Roles</t>
    <t id="110">Pick an escort tier first, then manually choose whether to configure trade ships, mining ships, or military ships. Choosing a tier does not assign ships.</t>
    <t id="111">This menu has no background auto-assignment. It runs only when a manual configure button is pressed, and existing subordinate roles are not rearranged.</t>
    <t id="115">Step 1: Choose Escort Tier</t>
    <t id="116">Low</t>
    <t id="117">Medium</t>
    <t id="118">High</t>
    <t id="119">Choosing Low, Medium, or High only saves the preset. It does not configure ships immediately. Low: L and XL ships fill free pads and hangars, all other ships aim for 2 S escorts. Medium: same, plus L and XL ships aim for at least 1 extra M escort. High: same, plus L and XL ships aim for at least 2 extra M escorts and all other ships aim for 4 S escorts.</t>
    <t id="120">Step 2: manually configure trade ships. Trade ships follow the selected escort tier, using close protection behavior.</t>
    <t id="121"> S escorts.</t>
    <t id="122">Press the button on the right to configure trade ships. Existing subordinates stay in place and only missing escorts are added. M escorts prefer non-missile ships, with missile ships used as fallback.</t>
    <t id="123">Manually Configure Trade Ships</t>
    <t id="126">Current preset: Low. Choosing a preset does not run assignment. L and XL ships fill free pads and hangars, all other ships aim for 2 S escorts.</t>
    <t id="127">Current preset: Medium. Choosing a preset does not run assignment. L and XL ships fill free pads and hangars and aim for at least 1 M escort, all other ships aim for 2 S escorts.</t>
    <t id="128">Current preset: High. Choosing a preset does not run assignment. L and XL ships fill free pads and hangars and aim for at least 2 M escorts, all other ships aim for 4 S escorts.</t>
    <t id="130">Step 3: manually configure military ships. Pad-bearing warships follow the selected escort tier. S slots use interceptors and bombers, M slots use attack ships.</t>
    <t id="131">External pads and internal hangars both count. Existing wings stay in place; only missing ships are added. Non-missile M ships are preferred first, then missile M ships fill any remaining attack slots.</t>
    <t id="132">Manually Configure Military Ships</t>
    <t id="140">Optional: manually configure trade, mining, and military ships in one pass.</t>
    <t id="141">Use this when you want one pass over all eligible player ships. This is still a manual button and does not run in the background.</t>
    <t id="142">Manually Configure All Ships</t>
    <t id="150">Last civilian run: </t>
    <t id="151">Last military run: </t>
    <t id="152">Last trade run: </t>
    <t id="153">Last mining run: </t>
    <t id="154">Last military run: </t>
    <t id="160">Step 2: manually configure mining ships. Mining ships follow the selected escort tier, using close protection behavior.</t>
    <t id="161">never run in this save.</t>
    <t id="162">Press the button on the right to configure mining ships. Existing subordinates stay in place and only missing escorts are added. M escorts prefer non-missile ships, with missile ships used as fallback.</t>
    <t id="163">Manually Configure Mining Ships</t>
    <t id="200">assigned </t>
    <t id="201"> escorts across </t>
    <t id="202"> of </t>
    <t id="203"> eligible ships; </t>
    <t id="204"> S escorts and </t>
    <t id="205"> M escorts remain free.</t>
    <t id="210">assigned </t>
    <t id="211"> military subordinates across </t>
    <t id="212"> of </t>
    <t id="213"> eligible pad-bearing warships; </t>
    <t id="214"> bombardment, </t>
    <t id="215"> interception, and </t>
    <t id="216"> M attack ships.</t>
    <t id="220">Auto Fleet Roles finished. Civilian assignments: </t>
    <t id="221">. Military assignments: </t>
    <t id="222">.</t>
    <t id="300">Assign Ships to Commander</t>
    <t id="301">Assigned </t>
    <t id="302"> ships to </t>
  </page>
</language>
<?xml version="1.0" encoding="utf-8"?>
<language id="86">
  <page id="8892101" title="èˆ°é˜Ÿæ‰‹åŠ¨é…ç½®" descr="èˆ°é˜Ÿæ‰‹åŠ¨é…ç½®æ–‡æœ¬" voice="no">
    <t id="101">èˆ°é˜Ÿæ‰‹åŠ¨é…ç½®</t>
    <t id="110">é€‰æ‹©æ¢¯åº¦åŽï¼Œç‚¹å‡»ä¸‹é¢æŒ‰é’®æ‰§è¡Œã€‚ä¸ä¼šåŽå°è‡ªåŠ¨é…ç½®ã€‚</t>
    <t id="111">åªæœ‰ç‚¹å‡»æŒ‰é’®æ—¶æ‰ä¼šåˆ†é…èˆ°èˆ¹ã€‚å·²æœ‰ä¸‹å±žä¸ä¼šè¢«æ‰“ä¹±ï¼Œåªè¡¥ç¼ºå£ã€‚</t>
    <t id="115">æŠ¤å«æ¢¯åº¦</t>
    <t id="116">ä½Žæ¡£</t>
    <t id="117">ä¸­æ¡£</t>
    <t id="118">é«˜æ¡£</t>
    <t id="119">ä½Žæ¡£ï¼šL/XLè¡¥æ»¡åœæœºä½ï¼Œå…¶ä»–èˆ¹è¡¥2æž¶Sã€‚&#13;&#10;ä¸­æ¡£ï¼šL/XLé¢å¤–è‡³å°‘1è‰˜MæŠ¤å«ã€‚&#13;&#10;é«˜æ¡£ï¼šL/XLè‡³å°‘2è‰˜MæŠ¤å«ï¼Œå…¶ä»–èˆ¹è¡¥4æž¶Sã€‚</t>
    <t id="120">å•†ç”¨èˆ°èˆ¹</t>
    <t id="121"> æž¶ S æŠ¤å«ã€‚</t>
    <t id="122">ç‚¹å‡»å³ä¾§æŒ‰é’®æ‰ä¼šæ‰§è¡Œã€‚MæŠ¤å«ä¼˜å…ˆç”¨éžå¯¼å¼¹èˆ¹ï¼Œä¸å¤Ÿæ—¶ç”¨å¯¼å¼¹èˆ¹å…œåº•ã€‚</t>
    <t id="123">é…ç½®å•†ç”¨</t>
    <t id="126">å½“å‰ï¼šä½Žæ¡£ã€‚L/XLè¡¥æ»¡åœæœºä½ï¼Œå…¶ä»–èˆ¹è¡¥2æž¶Sã€‚</t>
    <t id="127">å½“å‰ï¼šä¸­æ¡£ã€‚L/XLè¡¥æ»¡åœæœºä½ï¼Œå¹¶è‡³å°‘è¡¥1è‰˜MæŠ¤å«ã€‚</t>
    <t id="128">å½“å‰ï¼šé«˜æ¡£ã€‚L/XLè‡³å°‘è¡¥2è‰˜MæŠ¤å«ï¼Œå…¶ä»–èˆ¹è¡¥4æž¶Sã€‚</t>
    <t id="130">å†›ç”¨èˆ°èˆ¹</t>
    <t id="131">å¤–éƒ¨åœæœºåªå’Œå†…éƒ¨æœºåº“éƒ½ä¼šè®¡å…¥ã€‚å·²æœ‰æœºç¿¼ä¸ä¼šè¢«æ‰“ä¹±ï¼Œåªä¼šç»§ç»­è¡¥ç¼ºå£ã€‚Mä½ä¼šå…ˆç”¨éžå¯¼å¼¹Mèˆ°ï¼Œå†ç”¨å¯¼å¼¹Mèˆ°è¡¥å‰©ä½™ç«åŠ›ä½ã€‚</t>
    <t id="132">é…ç½®å†›ç”¨</t>
    <t id="140">æ‰€æœ‰èˆ°èˆ¹</t>
    <t id="141">ä¸€æ¬¡æ€§å¤„ç†æ‰€æœ‰ç¬¦åˆè§„åˆ™çš„çŽ©å®¶èˆ°èˆ¹ã€‚ä»ç„¶æ˜¯æ‰‹åŠ¨æŒ‰é’®ã€‚</t>
    <t id="142">ä¸€é”®é…ç½®æ‰€æœ‰èˆ°èˆ¹</t>
    <t id="150">æ°‘èˆ¹ç»“æžœï¼š</t>
    <t id="151">å†›èˆ°ç»“æžœï¼š</t>
    <t id="152">å•†èˆ¹ç»“æžœï¼š</t>
    <t id="153">çŸ¿èˆ¹ç»“æžœï¼š</t>
    <t id="154">å†›èˆ°ç»“æžœï¼š</t>
    <t id="160">çŸ¿ä¸šèˆ°èˆ¹</t>
    <t id="161">æœ¬å­˜æ¡£å°šæœªæ‰§è¡Œã€‚</t>
    <t id="162">ç‚¹å‡»å³ä¾§æŒ‰é’®æ‰ä¼šæ‰§è¡Œã€‚MæŠ¤å«ä¼˜å…ˆç”¨éžå¯¼å¼¹èˆ¹ï¼Œä¸å¤Ÿæ—¶ç”¨å¯¼å¼¹èˆ¹å…œåº•ã€‚</t>
    <t id="163">é…ç½®çŸ¿ä¸š</t>
    <t id="200">åˆ†é… </t>
    <t id="201"> ä¸ªæŠ¤å«ï¼Œè¦†ç›– </t>
    <t id="202">/</t>
    <t id="203"> è‰˜ï¼Œå‰©ä½™ S </t>
    <t id="204"> / M </t>
    <t id="205">ã€‚</t>
    <t id="210">åˆ†é… </t>
    <t id="211"> ä¸ªä¸‹å±žï¼Œè¦†ç›– </t>
    <t id="212">/</t>
    <t id="213"> è‰˜ï¼Œè½°ç‚¸ </t>
    <t id="214"> / æ‹¦æˆª </t>
    <t id="215"> / Mæ”»å‡» </t>
    <t id="216">ã€‚</t>
    <t id="220">èˆ°é˜Ÿæ‰‹åŠ¨é…ç½®æ‰§è¡Œå®Œæˆã€‚æ°‘èˆ¹åˆ†é…ï¼š</t>
    <t id="221">ã€‚å†›èˆ°åˆ†é…ï¼š</t>
    <t id="222">ã€‚</t>
    <t id="223">&#13;&#10;</t>
    <t id="300">åˆ†é…é€‰ä¸­èˆ°èˆ¹ç»™æŒ‡æŒ¥å®˜</t>
    <t id="301">å·²å°† </t>
    <t id="302"> è‰˜èˆ°èˆ¹åˆ†é…ç»™ </t>
  </page>
</language>
<?xml version="1.0" encoding="utf-8"?>
<content id="" name="" description="" author="Mantxi" version="900" date="2026-05-10" save="1" lastupdate="">
  <dependency version="900"/>
  <dependency id="ws_2042901274" optional="false" version="193" name="SirNukes Mod Support APIs"/>
  <text language="86" name="åŠŸèƒ½ç±» èˆ°é˜Ÿè§’è‰²è‡ªåŠ¨åˆ†é…" description="èˆ°é˜Ÿè§’è‰²è‡ªåŠ¨åˆ†é…ç›¸å…³å†…å®¹ã€‚" author="Mantxi"/>
</content>
