Danke Uni, du hast natürlich Recht, das die elseif Funktion schlecht gesetzt ist.
Der debuglog zeigt nichts an, deshalb gab es dort auc nichts zu posten.
Des weiteren scheint das Problem bereits in einem anderen script aufzutreten. Es handelt sich hierbei um das
trade.station.player
Hier wird in den einzelnen Teilen geprüft ob es sich um ein Miningschiff oder ein Handesschiff handelt und dementpsrechend die scripte (trade.ship oder mining.ship.station) gestartet Im unteren Teil ist dann noch ein Abschnitt in dem zur patroullie aufgerufen wird.
Entsprechend dieser Codezeilen:
Code: Select all
<create_list name="$collect_warelist" />
<do_all exact="$warelist.count" counter="$i">
<set_value name="$ware" exact="$warelist.{$i}" />
<do_if value="$ware.tags.indexof.{tag.minable}">
<do_if value="$subordinate.units.collect.{$ware}.count gt 0">
<append_to_list name="$collect_warelist" exact="$warelist.{$i}" />
</do_if>
</do_if>
</do_all>
<do_if value="$collect_warelist.count gt 0">
<debug_text text="'using %1(%2) to gather %3'.[$subordinate.knownname, $subordinate, $collect_warelist]" chance="$debugchance" />
<start_script name="'mining.ship.station'" object="$subordinate.pilot">
<param name="warebasket" value="$collect_warelist" />
</start_script>
</do_if>
Muss eben die Bedingung, dass in der "collect_warelist" waren enthalten sind, die den tag "minable" in der libary haben. Die Waren hierzu zeiht er sich aus der wareliste, welche vorhergehend durch folgende Zeilen erstellt wird:
Code: Select all
<create_list name="$warelist" />
<do_all exact="$resources.count" counter="$i">
<set_value name="$ware" exact="$resources.{$i}" />
<do_if value="$subordinate.cargo.{$ware}.free gt 0">
<do_if value="$warelist.indexof.{$ware}" exact="0">
<append_to_list name="$warelist" exact="$ware" />
</do_if>
</do_if>
</do_all>
<do_all exact="$products.count" counter="$i">
<set_value name="$ware" exact="$products.{$i}" />
<do_if value="$subordinate.cargo.{$ware}.free gt 0">
<do_if value="$warelist.indexof.{$ware}" exact="0">
<append_to_list name="$warelist" exact="$ware" />
</do_if>
</do_if>
</do_all>
<do_all exact="$ammowares.count" counter="$i">
<set_value name="$ware" exact="$ammowares.{$i}" />
<do_if value="$subordinate.cargo.{$ware}.free gt 0">
<do_if value="$warelist.indexof.{$ware}" exact="0">
<append_to_list name="$warelist" exact="$ware" />
</do_if>
</do_if>
</do_all>
<!-- <do_all exact="$tradewares.count" counter="$i">
<set_value name="$ware" exact="$tradewares.{$i}" />
<do_if value="$subordinate.cargo.{$ware}.free gt 0">
<do_if value="$warelist.indexof.{$ware}" exact="0">
<append_to_list name="$warelist" exact="$ware" />
</do_if>
</do_if>
</do_all> -->
Wie zu sehen ist, gibt es dort auch einen Abschnitt der tradewares in die warelist aufnimmt, welcher aber eben nicht registirert wird. Diesen habe ich nachträglich eingefügt, ebenso wie alle vorhergehenden codes, welche mit tradewares zu tun hatten, damit es auch ordentlich ist. Wie gesagt debuglog zeigt keinen fehler an.
Das Patroullienscript wird ausgeführt wenn die anderen Bedingungen nicht zutreffen.
Code: Select all
<do_else>
<debug_text text="'ship %1(%2) cannot transport anything useful for us.'.[$subordinate.knownname, $subordinate]" chance="$debugchance" />
<do_if value="$subordinate.dps.all" min="50.0f">
<debug_text text="'ship %1(%2) will patrol the station in range %3.'.[$subordinate.knownname, $subordinate, $Object.size/2 + $subordinate.maxradarrange/2]" chance="$debugchance" />
<start_script name="'move.patrol'" object="$subordinate.pilot">
<param name="range" value="'station'" comment="this Station" />
<param name="range_max" value="this.station.size/2 + $subordinate.maxradarrange/2" />
</start_script>
</do_if>
<do_else>
<debug_text text="'ship %1(%2) is not useful for combat purposes.'.[$subordinate.knownname, $subordinate]" chance="$debugchance" />
<start_script name="'move.generic'" object="$subordinate.pilot" >
<param name="destination" value="this.station" />
</start_script>
</do_else>
</do_else>