Problem Zusammenfassung
Ich habe ein hartnäckiges Problem mit custom AI Scripts, bei dem Schiffe erfolgreich andocken, aber sofort wieder abdocken, weil die DockAndWait Order vorzeitig abgebrochen wird. Das erzeugt eine Endlos-Andock/Abdock-Schleife, die ich trotz exakter Befolgung der Vanilla X4 Muster nicht lösen kann.
Ich habe eine minimale Test-Mod erstellt, die dieses Problem zu 100% reproduziert. Der komplette Testfall kann heruntergeladen werden - einfach in den X4 extensions Ordner entpacken und das gleiche Verhalten beobachten.
Test Mod Inhalt:
• order.test.dosomething.xml - Master Order der zufällige Stationen auswählt
• order.test.trainperform.xml - Training Order der das Andock/Abdock Problem zeigt
• Umfassende Logging Patches - Zeigt exakt was passiert
Was passieren sollte:
1. Schiff erstellt DockAndWait Order
2. Schiff dockt erfolgreich an
3. TrainPerform Script setzt mit Training fort
4. Schiff bleibt während Training angedockt
Was tatsächlich passiert:
1. Schiff erstellt DockAndWait Order
2. Schiff dockt erfolgreich an
3. DockAndWait bestätigt "waiting" Status
4. Schiff dockt sofort wieder ab
5. Script braucht ~8 Sekunden um Neustart und Abdocken zu erkennen
6. TrainPerform erstellt neue DockAndWait Order
7. Endlosschleife
Code: Select all
[Scripts] 290.40: [TEST-TRAIN] ❌ Not docked. Creating DockAndWait and waiting for completion
[Scripts] 380.23: [TEST-PATCH] DockAndWait: === DOCK SUCCESS === Now waiting for caller to complete operations...
[Scripts] 380.23: Kurier Verteidiger successfully docked at ARG Mikrochipfabrik I. waiting.
!! SCHIFF DOCKT SOFORT AB !!
[Scripts] 388.44: [TEST-TRAIN] === TRAINING START === Ship: KPC-834, Destination: ARG Mikrochipfabrik I
[Scripts] 388.44: [TEST-TRAIN] ❌ Not docked. Creating DockAndWait...
TrainPerform Order (Vereinfacht):
Code: Select all
<!-- Check if already docked -->
<do_if value="(this.ship.dock and (this.ship.dock.container == $destination)) or
(this.ship.parkedat and ((this.ship.parkedat == $destination) or
this.ship.parkedat.hascontext.{$destination}))">
<debug_text text="Already docked - proceeding to training"/>
<resume label="perform_training"/>
</do_if>
<!-- NOT DOCKED: Create DockAndWait -->
<do_if value="not $cannotdock">
<debug_text text="Not docked. Creating DockAndWait and waiting for completion"/>
<create_order id="'DockAndWait'" object="this.ship" immediate="true">
<param name="destination" value="$destination"/>
<param name="timeout" value="0s"/>
<param name="waittime" value="60min"/>
<param name="callerid" value="this.assignedcontrolled.order"/>
<param name="internalorder" value="true"/>
</create_order>
<wait exact="1ms"/>
<resume label="perform_training"/>
</do_if>
<label name="perform_training"/>
<!-- Training logic here -->
• Exaktes Vanilla order.trade.perform.xml Muster mit <return/>
• Repair Order Muster mit <wait exact="1ms"/>
• Sowohl immediate="true" als auch ohne immediate Flag
• timeout="null" (unendliches Warten)
• timeout="0s" (kein Timeout)
• waittime="60min" (explizite Wartezeit)
• Mit/ohne callerid Parameter
• Mit/ohne undockhandler Parameter
• Ordnungsgemäße Subordinate Order Bereinigung
• Critical Order State Management
• Signal-basierte Completion Handling
1. Was könnte dazu führen, dass eine DockAndWait Order sofort nach erfolgreichem Andocken abgebrochen wird?
Das Schiff dockt an, DockAndWait meldet "waiting" Status, aber dockt dann sofort ab. Welcher Mechanismus könnte das verursachen?
2. Gibt es versteckte Anforderungen für DockAndWait Orders die von Custom Scripts erstellt werden?
Vanilla Orders wie TradePerform nutzen DockAndWait erfolgreich. Gibt es Unterschiede wie Custom Scripts diese Orders erstellen sollten?
3. Könnte es Interferenzen zwischen der Parent TrainPerform Order und der DockAndWait Sub-Order geben?
Gibt es einen ordnungsgemäßen Weg um zwischen einem Parent AI Script und seinen DockAndWait Sub-Orders zu koordinieren?
4. Was ist das korrekte Muster für "andocken und warten bis Script fortsetzt" Verhalten?
Sollten Custom Scripts <return/> (wie TradePerform) oder <wait> (wie Repair) nach dem Erstellen von DockAndWait verwenden?
Der Download enthält eine komplette Test Mod die dieses Problem reproduziert:
Zum Testen:
1. Download und Entpackung nach X4/extensions/
2. Beliebigen Spielstand laden
3. "DoSomething" Order einem kleinen Schiff zuweisen
4. Debug Log für Andock/Abdock Schleife beobachten
Erwartetes Verhalten: Schiff dockt an und bleibt für Training angedockt
Tatsächliches Verhalten: Schiff dockt an, dockt sofort ab, Endlosschleife
• X4 Version: 7.60
• Andere Mods: Keine (nur Vanilla + Test Mod)
• Script Typ: AI Script (aiscripts/), nicht MD Script
Dieses Problem besteht trotz mehrerer Implementierungsversuche hartnäckig. Jede Einsicht zu:
• X4's Order Lifecycle Management
• Ordnungsgemäße DockAndWait Verwendungsmuster
• Debugging Ansätze für Order Cancellation
• Alternative Muster für Dock-and-Continue Verhalten
Wäre unglaublich hilfreich! Der komplette Testfall sollte es einfach machen das Problem zu reproduzieren und zu untersuchen.
Vielen Dank im Voraus für jede Hilfe!