Frage(n) zum Scripteditor (aktuell: Searchflags und "find flying ware")

Hier ist der ideale Ort um über Scripts und Mods für X³: Reunion zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Frage(n) zum Scripteditor (aktuell: Searchflags und "find flying ware")

Post by Ogerboss »

Ich bin grad dabei mit dem Scripteditor vertraut zu werden hab aber noch einige Fragen, die ich einfach in diesen Thread posten werde, sobald sie mir in den Sinn kommen und ich selbst keine Lösung finde.

1. Problem

Code: Select all

<RetVar/IF> <RefObj> get current action  
Übergibt die Aktion (als Zahl) die das <RefObj> momentan ausführt 
steht auf MadxHawks netter Seite, aber ich habe keine Ahnung wo ich jetzt eine Angabe finde welche Zahl für welches Kommando steht. Hat irgendjemand zufällig 'ne Liste oder 'nen Link parat?

Danke im Voraus!
Last edited by Ogerboss on Fri, 11. May 07, 16:09, edited 15 times in total.
[ external image ]
***modified*** und stolz drauf
-eni-
Posts: 1341
Joined: Sun, 6. Feb 05, 19:27
x3ap

Post by -eni- »

Schau mal beim belegen einer variable bei "constants" -> "Select Constant"
Da hats ACTION_AVOID, ACTION_ENTER_GATE, ... . Das könnte sein was du suchst
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Werd morgen mal sehen, ob ich da was finde. Jetzt bin aber zu müde, bis morgen!
[ external image ]
***modified*** und stolz drauf
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Ich such zurzeit immer noch eine Möglichkeit, den Befehl, der im Spiel gegeben wurde abzufragen, steh nun aber vor dem Problem, dass:

1.

Code: Select all

<RetVar/IF> <RefObj> get current action  
Übergibt die Aktion (als Zahl) die das <RefObj> momentan ausführt 
nur einen Berg Nullen :evil: ausgibt, egal wie ich es versuche (Spieler- und Nichtspielerschiffe mit verschiedenen Aufgaben ausprobiert),

2.

Code: Select all

<RetVar/IF> <RefObj> get command
nur per Script gegebene Befehle ausspuckt (Zentaur auf Patrouille => COMMAND_NONE oder so ähnlich) und

3.

Code: Select all

<RetVar/IF> <RefObj> get job id
ja nur dazu da ist um sowas wie "Argon Waffenhändler" als Ausgabe zu bekommen.

Wie kann ich also nun den aktuellen Auftrag eines Schiffes erfassen um ihn danach prüfen zu lassen, ob er ungleich Auftrag XYZ ist?
[ external image ]
***modified*** und stolz drauf
User avatar
SymTec ltd.
Posts: 5285
Joined: Mon, 11. Apr 05, 21:11
x3tc

Post by SymTec ltd. »

Du könntest z.B. gucken, welches Script auf einem Schiff für den Auftrag zuständig ist, und das dann auf Existenz in Task 0 überprüfen.
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Okay, den Scriptnamen bekomm ich ja aus der erweiterten Schiffsinfo, aber mit welchem Befehl prüfe ich jetzt, ob dieses Script im Task 0 läuft?
[ external image ]
***modified*** und stolz drauf
User avatar
SymTec ltd.
Posts: 5285
Joined: Mon, 11. Apr 05, 21:11
x3tc

Post by SymTec ltd. »

Code: Select all

<if> is script <script> on stack of task <0>
in den General Commands (so auf 2/3)
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Eine dumme Frage noch:
Läuft auf Task 0 immer der Hauptbefehl, den der Spieler gegeben (Ki-Schiffe sind mir im Moment egal) und auf den anderen dann die Scripte, die von diesem aufgerufen werden?
[ external image ]
***modified*** und stolz drauf
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Bei Schiffen:
0= Steuerungskommando
1= Turret-Kommando 1
2= Turret-Kommando 2
3= Turret-Kommando 3
4= Turret-Kommando 4
5= Turret-Kommando 5
6= Turret-Kommando 6
10= Zusätzliches Kommando 1
11= Zusätzliches Kommando 2

Bei Stationen:
10 - 19 = die Stationskommandos
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Danke, das sollte mir erstmal weiterhelfen! :mrgreen:
[ external image ]
***modified*** und stolz drauf
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Hab eure Tips mal ausprobiert und jetzt noch ein kleines Problem:
Wenn ich keine Argumente angebe sondern mit [THIS] arbeite oder ein Argument für das Schiff verwende und das Script auf diesem ausführe, vergisst dieses sofort seinen Befehl und die Abfrage wird negativ. Wenn ich jedoch ein Argument verwende und die Abfrage auf einem anderen Schiff ausführe (das dann seinen Befehl vergisst) oder am Anfang null eingebe (was bedeutet das eigentlich genau :gruebel: ) funktioniert die Abfrage und der Befehl wird normal weitergeführt .
Deswegen möchte ich gerne wissen, ob sich das irgendwie umgehen lässt, oder ob ich dann das Argument selber eingeben bzw. wenn ich es später über ein anderes Script aufrufe, als Argument / Parameter angeben muss.

EDIT: Wofür sind denn die Slot 21, 22 usw. gut?
[ external image ]
***modified*** und stolz drauf
User avatar
SymTec ltd.
Posts: 5285
Joined: Mon, 11. Apr 05, 21:11
x3tc

Post by SymTec ltd. »

Wenn du das Kommandi auf einem Schiff ausführst, wird natürlich das bestehende Kommando überschrieben. Lösungen:
- das Script Global ausführen (also ohne Objekt, auf dem es läuft - das ist das "null")
- Das Script auf einen anderen Slot legen. Freie Slots sind meist Slot 20-1000, dort können auch Scripts laufen, ohne das Script auf Slot 0 zu überschreiben.
da_pro
Posts: 216
Joined: Thu, 16. Nov 06, 19:52
x3tc

Post by da_pro »

oder am Anfang null eingebe (was bedeutet das eigentlich genau?
das es global läuft
Edit: SymTec war schneller :wink:
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Also brauch ein extra Script das global läuft und dann mit

Code: Select all

<RefObj> -> start task <Var/Number> with script <Script Name> and prio <Var/Number>: arg1=<value> arg2=<value> arg3=<value> arg4=<value> arg5=<value> 
mein Script ausführt, wobei ich für start task <Var/Number> die Task-Nummer einsetze, oder gibt es eine Möglichkeit die Task ID eines laufenden Script zu ändern (dann wär's für meinen Fall aber schon zu spät, oder?)?

p.s Solange ich keine Schleifen oder so einbaue ist mein globales Script doch dann, wenn's durch ist, auch definitiv wieder weg oder muss ich da eventuell noch irgendwo nachhelfen?

EDIT: Wenn mein Schiff gar keinen Befehl hat ist in der Schiffsinfo kein Task 0 zu sehen. Wenn ich diesen "Befehl" abfrage, muss ich dann für <Scriptname> die null einsetzen?
[ external image ]
***modified*** und stolz drauf
User avatar
SymTec ltd.
Posts: 5285
Joined: Mon, 11. Apr 05, 21:11
x3tc

Post by SymTec ltd. »

Solange ich keine Schleifen oder so einbaue ist mein globales Script doch dann, wenn's durch ist, auch definitiv wieder weg oder muss ich da eventuell noch irgendwo nachhelfen?
Wenn das Script zuende ist, ist es auch wieder weg. Generell werden globale Scripts aber nicht empfohlen, wenn es auch direkt lokal geht (etwa duch einen der zwei Schiffs-Sonderkommandoslots)
Wenn mein Schiff gar keinen Befehl hat...
Nee, da gibts nen extra-Befehl:

Code: Select all

<if> <ship> is task <0> in use
dürfte das gewünschte Ergebnis bringen.
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Wenn meine Sektorpatrouille jetzt Feindkontakt hat, sind ja mehrere Scripte in einem Task gestapelt, wenn ich jetzt

Code: Select all

<RetVar/IF> <RefObj> is script <ScriptName> on stack of task=<Var/Number> 
verwende, macht es dann einen Unterschied wo sich das Script im Stapel befindet? Oder kann ich die Anfrage auch zweimal für zusammenhängende Scripte ausführen und so z.B. erst nach der Patrouille und dann nach dem Patrouillenkampfscript (die beide auf Task 0 laufen, aber eins nur temporär) fragen ohne Müll zu erhalten?
[ external image ]
***modified*** und stolz drauf
User avatar
SymTec ltd.
Posts: 5285
Joined: Mon, 11. Apr 05, 21:11
x3tc

Post by SymTec ltd. »

Du fragst nur nach dem Stapel. Wenn ein Script irgendwo im Stapel ist, ist es das, sonst nicht.

(Langsam könnten wir hier nen Chat aufmachen :) )
User avatar
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

Also die Tasks und die Befehlabfrage funzen jetzt erstmal in der Rohform. Danke schonmal für eure Hilfe bis hier.
Jetzt brauch ich aber zwei Listen, die der Spieler eingeben soll, eine für Waren und eine für die dazugehörigen Mengen. Hab mir gedacht, dass ganze als zwei Arrays abzuspeichern, steh jetzt aber vor dem Problem, dass ich nicht weiß, wie man jetzt in einem Script einen Array definiert (das krieg ich schon noch hin) und den dann an ein anderes Script übergibt, dass dann jedesmal wenn es aufgerufen wird, diesen Array um die Eingaben des Spielers erweitert. Anschließend soll dieser Array wieder an ein anderes Script übergeben werden.
Jetzt liegt mein Hauptproblem aber in der Frage: In der Argumentenliste gibt es keine Arrays (oder ich bin blind) und deswegen hab ich nicht die leiseste Idee (und MADxHAWK's Site ist leider zur Zeit down :cry: ).
[ external image ]
***modified*** und stolz drauf
User avatar
SymTec ltd.
Posts: 5285
Joined: Mon, 11. Apr 05, 21:11
x3tc

Post by SymTec ltd. »

Array:

Code: Select all

<$Array> array alloc: size: <?>
Sofern du die Übergabe der Variablen nur Scriptintern machst, ist es egal, welchen Variablentyp du auswählst, da immer der Typ übergeben wird, der eingegeben wird. Als Spielereingabe kann man aber keine Arrays nutzen. Dort könntest du mit einem "Hinzufügen"-Script arbeiten, das direkt an das Schiffskommando gebunden ist, und dann nur das globale Array updatet.
User avatar
MADxHAWK
Posts: 710
Joined: Tue, 1. Mar 05, 17:49
x4

Post by MADxHAWK »

hi,

also ein array wird mit

<retvar> array alloc: size=<var/number> deffinert.
Du kannst hier als grosse ( size ) 0 angeben, dann musst du jedoch werte mit

append <value> into array <var/array> hizufügen.
die Arraybefehle findest unter General Commands -> Arrays

um ein Array an ein anderes Script zu übergeben kannst du entweder ein argument definieren und das array an dieses argument übergeben oder du nutzt eine locale variable.

get local variable name = <varname> zum auslesen
set local variable : name = <varname> zum setzten.

greetz
MAD
***modified*** und stolz drauf
Why does it hurt when my heart misses the beat? Propaganda - Dr. Mabuse (1984)

Return to “X³: Reunion - Scripts und Modding”