XRWS           'ó   P  '£subst_01.cat subst_01.dat aiscripts/engineer.player.xml 10147 1527690538 bd932ee118b98a3c73fcea171c16f034
ï»¿<?xml version="1.0" encoding="utf-8"?>
<aiscript name="engineer.player" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="aiscripts.xsd">
  <init>
    <set_command command="command.repair" />
    <!-- initialization -->
    <set_value name="$debugoutputchance" exact="0" />
    <debug_text text="'Script initialized'" chance="$debugoutputchance" />
    <set_value name="$nextsoundtime" exact="player.age" />
    <set_value name="$forcecheck" exact="true" />
    <create_list name="this.$repairqueue" />
    <create_list name="$sortedchecklist" />
    <create_group groupname="$damageableobjects" />
  </init>
  <attention min="unknown">
    <actions>
      <label name="start" />
      <!-- calculate values based on engineer skill -->
      <set_value name="$repairpersec" exact="(1.0 + (this.combinedskill / 25.0)) * 0.3" comment="between 1 and 5 times the base repair speed (the factor at the end)" />
      <set_value name="$maxhullpercent" exact="60 + (40 * this.combinedskill / 100)" comment="between 60% and 100%" />
      <do_if value="this.ship.hullpercentage lt $maxhullpercent">
        <set_value name="$skunkhullinterval" exact="8 - this.combinedskill / 20" />
        <do_if value="not $skunkhullrepairstarttime?">
          <set_value name="$skunkhullrepairstarttime" exact="player.age" />
        </do_if>
        <do_elseif value="(player.age - $skunkhullrepairstarttime) ge $skunkhullinterval">
          <set_value name="$repairedhullpercent" exact="this.ship.hullpercentage + (player.age - $skunkhullrepairstarttime) / $skunkhullinterval" />
          <do_if value="player.age ge $nextsoundtime and player.room.isclass.cockpit">
            <debug_text text="'playing repair sound'" chance="$debugoutputchance" />
            <play_sound object="this" sound="'cpit_engi_repairs'" />
            <set_value name="$nextsoundtime" min="player.age + 2s" max="player.age + 4s" />
          </do_if>
          <do_if value="$repairedhullpercent lt $maxhullpercent">
            <set_object_hull object="this.ship" exact="$repairedhullpercent" />
            <set_value name="$skunkhullrepairstarttime" exact="player.age" />
          </do_if>
          <do_else>
            <set_object_hull object="this.ship" exact="$maxhullpercent" />
            <remove_value name="$skunkhullrepairstarttime" />
            <remove_value name="$skunkhullinterval" />
            <speak actor="player.computer">
              <name value="this.ship" />
              <text page="10002" line="94" />
            </speak>
          </do_else>
        </do_elseif>
      </do_if>
      <do_if value="this.$repairqueue.count">
        <debug_text text="'repair queue contains %1 entries'.[this.$repairqueue.count]" chance="$debugoutputchance" />
        <debug_text text="'restoring hull of ' + this.$repairqueue.{1}.knownname" chance="$debugoutputchance" />
        <!-- repair the object at the front of the list -->
        <set_value name="$repairedpercent" exact="$repairpersec * (player.age - $repairstarttime)" />
        <set_value name="$damagedhullpercent" exact="this.$repairqueue.{1}.hullpercentage" />
        <set_value name="$repairedhullpercent" exact="$damagedhullpercent + $repairedpercent" />
        <do_if value="$repairedhullpercent gt $maxhullpercent">
          <set_value name="$repairedhullpercent" exact="$maxhullpercent" />
        </do_if>
        <set_object_hull object="this.$repairqueue.{1}" exact="$repairedhullpercent" />
        <debug_text text="'hull value is now ' + this.$repairqueue.{1}.hullpercentage + ' of ' + $maxhullpercent" chance="$debugoutputchance" />
        <do_if value="player.age ge $nextsoundtime and player.room.isclass.cockpit">
          <debug_text text="'playing repair sound'" chance="$debugoutputchance" />
          <play_sound object="this" sound="'cpit_engi_repairs'" />
          <set_value name="$nextsoundtime" min="player.age + 2s" max="player.age + 4s" />
        </do_if>
        <do_if value="$repairedhullpercent == $maxhullpercent">
          <debug_text text="'fully repaired, removing from list and letting computer speak'" chance="$debugoutputchance" />
          <speak actor="player.computer">
            <name value="this.$repairqueue.{1}" />
            <text page="10002" line="94" />
          </speak>
          <!-- finished repairing for now -->
          <remove_value name="this.$repairqueue.{1}" />
        </do_if>
      </do_if>
      <do_if value="@$forcecheck">
        <do_if value="not $sortedchecklist?">
          <create_list name="$sortedchecklist" />
        </do_if>
        <clear_list list="$sortedchecklist" />
        <clear_group group="$damageableobjects" />
        <find_object_component groupname="$damageableobjects" object="player.primaryship" functional="true" hullinvulnerable="false" multiple="true">
          <match_parent macro="player.primaryship.macro" />
          <match_any>
            <match class="class.engine" />
            <match class="class.shieldgenerator" />
            <match class="class.weapon" tag="tag.primary_slot" />
          </match_any>
        </find_object_component>
        <do_all exact="$damageableobjects.count" counter="$i">
          <do_if value="$damageableobjects.{$i}.isclass.engine">
            <set_value name="$sortedchecklist.{1}" exact="$damageableobjects.{$i}" operation="insert" />
          </do_if>
          <do_elseif value="$damageableobjects.{$i}.isclass.shieldgenerator">
            <do_if value="$sortedchecklist.count">
              <do_all exact="$sortedchecklist.count" counter="$j">
                <do_if value="$sortedchecklist.{$j}.isclass.weapon">
                  <set_value name="$sortedchecklist.{$j}" exact="$damageableobjects.{$i}" operation="insert" />
                  <break />
                </do_if>
                <do_elseif value="$j == $sortedchecklist.count">
                  <append_to_list name="$sortedchecklist" exact="$damageableobjects.{$i}" />
                </do_elseif>
              </do_all>
            </do_if>
            <do_else>
              <append_to_list name="$sortedchecklist" exact="$damageableobjects.{$i}" />
            </do_else>
          </do_elseif>
          <do_else>
            <append_to_list name="$sortedchecklist" exact="$damageableobjects.{$i}" />
          </do_else>
        </do_all>
        <clear_group group="$damageableobjects" />
      </do_if>
      <do_if value="@$forcecheck or not player.platform">
        <do_if value="$forcecheck?">
          <remove_value name="$forcecheck" />
        </do_if>
        <clear_list list="this.$repairqueue" />
        <do_all exact="$sortedchecklist.count" counter="$i">
          <do_if value="$sortedchecklist.{$i}.hullpercentage lt $maxhullpercent">
            <append_to_list name="this.$repairqueue" exact="$sortedchecklist.{$i}" />
          </do_if>
        </do_all>
      </do_if>
      <do_if value="this.$repairqueue.count">
        <set_value name="$repairstarttime" exact="player.age" />
        <set_value name="$waittime" exact="1s" />
        <!-- set to repaireng component -->
        <set_command_action commandaction="commandaction.repairingto" param="this.$repairqueue.{1}" />
      </do_if>
      <do_elseif value="$skunkhullinterval?">
        <do_if value="$repairstarttime?">
          <remove_value name="$repairstarttime" />
        </do_if>
        <set_value name="$waittime" exact="$skunkhullinterval * 1s" />
        <set_command_action commandaction="commandaction.repairchecking" />
      </do_elseif>
      <do_else>
        <do_if value="$repairstarttime?">
          <remove_value name="$repairstarttime" />
        </do_if>
        <!-- nothing to repair right now, just wait for a really long time -->
        <set_value name="$waittime" exact="1h" />
        <set_value name="$forcecheck" exact="true" />
        <!-- set to repaireng check -->
        <set_command_action commandaction="commandaction.repairchecking" />
        <debug_text text="'nothing to repair'" chance="$debugoutputchance" />
      </do_else>
      <wait exact="$waittime">
        <interrupt>
          <conditions>
            <check_any>
              <check_all>
                <event_object_hull_damaged object="this.ship" />
                <check_value value="event.param.hullpercentage lt $maxhullpercent" />
                <check_value value="(event.param != this.ship and not $repairstarttime?) or (event.param == this.ship and not$skunkhullrepairstarttime?)" />
              </check_all>
              <check_all>
                <event_repair_requested object="this.ship" />
                <check_value value="event.param.hullpercentage lt $maxhullpercent and not $repairstarttime?" />
              </check_all>
              <check_all>
                <event_conversation_returned_to_section section="gMain_charProfileMenu" actor="this" />
                <check_value value="event.param2.{3} == this and typeof event.param3 == datatype.skilltype" />
              </check_all>
              <check_all>
                <event_conversation_returned_to_section section="cTrader_upgrades" />
                <check_any>
                  <check_value value="event.param2.{4} == 'engine'" />
                  <check_value value="event.param2.{4} == 'shieldgenerator'" />
                  <check_value value="event.param2.{4} == 'primary_slot'" />
                </check_any>
              </check_all>
              <check_all>
                <event_game_loaded />
                <check_value value="not $sortedchecklist?" />
              </check_all>
            </check_any>
          </conditions>
          <actions>
            <do_if value="event.name == 'event_game_loaded'">
              <set_value name="$forcecheck" exact="true" />
            </do_if>
          </actions>
        </interrupt>
      </wait>
      <resume label="start" />
    </actions>
  </attention>
</aiscript><?xml version="1.0" encoding="iso-8859-1"?>
<content id="" name="" description="" author="eliseeff" version="101" date="2018-05-31" save="false" lastupdate="">
  <dependency version="251"/>
  <text language="7" name="&#1048;&#1085;&#1078;&#1077;&#1085;&#1077;&#1088; &#1057;&#1082;&#1091;&#1085;&#1089;&#1072;" description="&#1059;&#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1085; &#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; &#1080;&#1085;&#1078;&#1077;&#1085;&#1077;&#1088;&#1072; &#1076;&#1083;&#1103; &#1080;&#1089;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1080;&#1103; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1080; &#1087;&#1088;&#1086;&#1087;&#1091;&#1089;&#1082;&#1072; &#1087;&#1086;&#1074;&#1088;&#1077;&#1078;&#1076;&#1077;&#1085;&#1085;&#1099;&#1093; &#1082;&#1086;&#1084;&#1087;&#1086;&#1085;&#1077;&#1085;&#1090;&#1086;&#1074; &#1080; &#1073;&#1086;&#1083;&#1077;&#1077; &#1085;&#1072;&#1076;&#1077;&#1078;&#1085;&#1086;&#1075;&#1086; &#1074;&#1099;&#1089;&#1090;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; &#1087;&#1088;&#1080;&#1086;&#1088;&#1080;&#1090;&#1077;&#1090;&#1072; &#1074; &#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1080; &#1088;&#1077;&#1084;&#1086;&#1085;&#1090;&#1072; &#1076;&#1074;&#1080;&#1075;&#1072;&#1090;&#1077;&#1083;&#1103;&#1084; &#1080; &#1097;&#1080;&#1090;&#1072;&#1084;. &#1044;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085; &#1088;&#1077;&#1084;&#1086;&#1085;&#1090; &#1082;&#1086;&#1088;&#1087;&#1091;&#1089;&#1072;."/>
</content>
