Skip to end of metadata
Go to start of metadata

@ START|[skip|else] if [not]|while [not]| <RetVar/IF/START> = <RefObj> call script <Script Name>[<Parameter>=<Value>]  [...] 


START|[skip|else] if [not]|while [not]| = Die möglichen bedingten Anweisungen, die mit diesem Befehl genutzt werden können. 
<RetVar> = Nutze eine Variable, wenn der Befehl eine Information zurückgeben soll. 
<RefObj> = Das Objekt, auf dem das aufgerufene Script laufen soll. 
<Script Name> = Das Script, das aufgerufen werden soll. 
<Parameter> = Die Argumente, falls vorhanden, die dem aufgerufenen Script übergeben werden sollen. 


Nutze diesen Befehl, um ein anderes Script aus dem aktuell laufenden Script heraus aufzurufen. Abhängig vom ersten genutzten Parameter, z.B. START oder <RetVar>, wird das aufgerufene Script zur gleichen Zeit wie das aufrufende Script laufen oder das aufrufende Script wird warten, bis das aufgerufene Script beendet wurde, ehe es selbst weiterläuft. 

Ohne den Parameter START wird ein Script auf dem gleichen Objekt mit der gleichen task ID aufgerufen wie das aufrufende Script. 
Das aufrufende und das aufgerufene Script befinden sich auf dem gleichen stack, wobei letzteres ganz oben ist, ausgeführt wird, bis es endet, und schlussendlich einen Rückgabewert sowie die Kontrolle zurück an das aufrufende Script übergibt. 

Das <RefObj> wird ignoriert, solange der START-Parameter nicht genutzt wird. 

Nutzt man START sowie null als <RefObj>, so wird das Script unabhängig als globales Script gestartet. Globale Scripte sind schwieriger zu kontrollieren, da sie von anderen Scripten nicht erkannt werden können. 

Nutzt man START zusammen mit einem existierenden <RefObj>, so werden alle Scripte auf task 0 auf dem <RefObj> beendet and und dieses Script wird stattdessen auf task 0 gestartet. 
Nicht alle Objekte können als <RefObj> verwendet werden. Asteroiden und Raketen sind Beispiele für ungültige Objekte. 

Ein Script kann sich nicht selbst überschreiben. Somit kann ein Script auf task 0 nicht auf einem <RefObj> = dem aktuellen <RefObj> starten ( START on a <RefObj> = [THIS] ). 

START erstellt einen neuen Prozess anstatt einen auf dem aktuellen aufzurufen. Somit wird die Kontrolle sofort dem aufrufenden Script zurückgegeben. 

Ein "@"-Zeichen in einer Script-Anweisung markiert einen Unterbrechungspunkt. 

Eine Variable kann dem Rückgabewert des aufgerufenen Scripts zugewiesen werden. In diesem Fall wird jeglicher Wert der vom aufgerufenen Script zurückgegeben wird, in der Variable im aufrufenden Script gespeichert. Dieser Rückgabewert kann auch als Bedingung für eine if, skip, or while Anweisung genutzt werden. Tut man dies, so kann das Ergebnis nur darauf getestet werden, ob es null ist oder nicht, d.h. ob die Bedingung zutrifft (ungleich null) oder nicht zutrifft (null) 

Ein aufgerufenes Script kann bis zu 10 Argumente haben - abhängig davon, wie viele beim Schreiben des Scriptes angegeben wurden. Allen Argumenten muss ein Wert zugewiesen werden, damit das Script aufgerufen werden kann. Im einfachsten Fall heißt das, überall null eintragen, für den Fall dass das Script diese Eingaben unterstützt. 

Beispiel 1

Icon

@ START = $ship call script The.script.i.want.to.run : argument 1: $do.this, argument 2: $then.do.this .... 

 Startet das Script The.script.i.want.to.run auf dem Objekt $ship und übergibt die Argumente $do.this und $then.do.this. Dies wird dazu führen, dass sowohl das aufgerufene als auch das aufrufende Script gleichzeitig weiterlaufen. 

 

Beispiel 2

Icon

@ $return = $ship call script The.script.i.want.to.run : argument 1: $do.this, argument 2: $then.do.this .... 

Das aufgerufene Script The.script.i.want.to.run wird gestartet und es werden die Argumente $do.this sowie $then.do.this übergeben. In diesem Beispiel wird das aufrufende Script auf das aufgerufene Script warten. Nachdem das aufgerufene Script beendet wurde und dessen Rückgabewert in der Variable $return gespeichert worden ist, wird das aufrufene Script weiterlaufen.


Beispiel 3

Icon

@ = $ship call script The.script.i.want.to.run : argument 1: $do.this, argument 2: $then.do.this .... 

ODER 

$anull = null 
@ = $anull call script The.script.i.want.to.run : argument 1: $do.this, argument 2: $then.do.this .... 

Wie oben wird das aufrufende Script warten bis das aufgerufene Script beendet wurde. Allerdings wird hier kein Rückgabewert benötigt. 

Um das Zeichen = ohne null oder eine Rückgabevariable $return.variable dort stehen zu haben, muss man "No return variable" in der Liste der möglichen bedingten Anweisungen im SE Menü auswählen. 

Die Variable $anull = null wird genutzt, um null als <RefObj> auswählen zu können, damit das Script als globales Script laufen kann.

 

 

 

Write a comment…