Scripting Tutorial für Einsteiger

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
MADxHAWK
Posts: 710
Joined: Tue, 1. Mar 05, 17:49
x4

Scripting Tutorial für Einsteiger

Post by MADxHAWK »

Sicherheitshinweise für Neueinsteiger
Der Scripteditor ist ein sehr mächtiges Werkzeug, man kann sich damit mal eben ein paar Millionen Credits oder sogar ein Großkampfschiff der M1 oder M2 Klasse und sogar Stationen „herbeizaubern“, man kann jedoch mit einem fehlerhaften Script auch leicht sein Spiel zum Absturz bringen oder sogar seinen gespeicherten Spielstand unbrauchbar machen. Da Scripts im XML – Format gespeichert werden ist es leider auch möglich X3 durch Verwendung eines XML – Steuerzeichens schon beim Laden zum Absturz zu bringen.

Deshalb habe ich hier ein paar Sicherheitshinweise zusammengestellt die das Scripten relativ sicher machen.

1. Sichert Eure Spielstände!
Kopiert einfach alle Dateien aus dem Verzeichnis c:\Eigene Dateien\Egosoft\X3\save in ein anderes Verzeichnis

2. Erstellt einen neuen Spielstand den Ihr zum Scripten nutzt, wird dieser Spielstand beschädigt ist dies nicht so schlimm da Ihr Euren Originalspielstand noch habt.

3. Kopiert Euch alle Dateien aus dem Verzeichnis <X3>\scripts in ein anderes Verzeichnis. Sollte X3 beim starten einmal abstürzen könnt Ihr die Dateien in diesem Verzeichnis löschen und durch die Sicherheitskopie ersetzten.

4. Vermeidet in Strings und Kommentaren unbedingt Zeichen wie <, >, /, \,
Bei diesen Zeichen handelt es sich um XML – Steuerzeichen die zu Fehlern, bis hin zum Absturz beim landen, führen können

Scripts extern öffnen
Für gewöhnlich liegen die Scriptdateien im XML – Format im Verzeichnis <X3>\scripts* vor. Diese können einfach mit einem Webbrowser geöffnet und betrachtet werden. Eine Ausnahme bildet ein Teil der Standartscripts die mit X3 installiert werden, da sie als gepackte XML – Datei (Endung pck) vorliegen. PCK – Dateien können mit dem Tool X2 Modder von OlisJ entpackt werden. Das Tool findet man unter anderem auf der Webseite von Doubleshadow, http://www.doubleshadow.wz.cz/
Um den Scripteditor unter X2 frei zu schalten gibt man einfach während des Fluges durch den freien Raum den Text Thereshallbewings ein. Der Scripteditor ist nun über die Kommandokonsole startbar.

Unter X3 schaltet man den Scripteditor frei, indem man das Pilotenmenü mit der Taste <p> aufruft und den Unterpunkt Namen ändern wählt.

Nun gibt man als neuen Namen Thereshallbewings ein. Wenn man sich nicht vertippt hat wird der augenblickliche Name beibehalten und der Scripteditor ist frei geschaltet.
Der Scripteditor ist nun über die Tastenkombination <Shift> + <c> , <s> oder die Kommandokonsole aufrufbar.

Ist der Scripteditor erst einmal frei geschaltet lässt er sich nicht mehr deaktivieren. X2 zeigt einen frei geschalteten Scripteditor mittels eines „Modified“ Schriftzugs oben links im Bildschirm an. Bei X3 wird „Modified“ am Ende der Pilotenstatistik angezeigt.

Beim ersten Start des Scripteditors wird die Hilfe eingeblendet. Hier erhält man einen Überblick über die Tastenbelegung des Editors.

Aktionen im Scriptbrowser
<l> Script aus dem Scriptordner laden
<c> Script kopieren
<r> Script ausführen
<Entf> Script löschen
<Enter> Script bearbeiten

Aktionen beim Bearbeiten eines Scripts
<auf / ab> durch Zeilen navigieren
<links / rechts> durch Ausdrücke navigieren
<Enter> Funktionsmenü aufrufen
<Einfg> neue Zeile einfügen
<Entf> Zeile löschen
<c> Zeile kopieren
<x> Zeile ausschneiden
<v> kopierte / ausgeschnittene Zeile einfügen
<.> Zeile auskommentieren
<,> Auskommentierung rückgängig machen
<Pos1> Ausdruck einfügen
<Ende> Ausdruck entfernen
<ESC> Script schließen und speichern

Scripteditor Hauptmenü

Script Editor
Öffnet den Script Browser. Hier hat man die Möglichkeit ein neues Script zu beginnen, ein vorhandenes zu editieren, zu kopieren, löschen oder auszuführen.

Reinit Script Caches
Scripts werden bei beginn eines neuen Spiels oder beim laden eines Spielstands in einen Zwischenspeicher (Cache) geladen und von dort aus ausgeführt. Eine Ausnahme bilden Init- und Setupscripts, die geladen, ausgeführt und beendet werden. Dies hat den Vorteil das Scripts schneller zur Verfügung stehen da sie nicht jedes mal von der Festplatte geladen werden müssen, es gibt jedoch auch Nachteile auf die ich später eingehen werde. Der Befehl Reinit Script Caches führt alle Setup- und Initscripts erneut aus und lädt alle anderen Scripts erneut in den Script Cache.

Script Debugging <Objekt> OFF | Logging | Trace
Der Scripteditor bietet mit dieser Funktion eine komfortable Möglichkeit zur Fehlersuche in Scripts. Dabei stehen die Möglichkeiten Logging und Trace zur Verfügung. Aktiviert man Logging werden alle Zeilen des Programmcodes die ausgeführt werden in einem Log. Mit der Option Trace hingegen hat man die Möglichkeit jede Zeile des Programmcodes einzeln auszuführen und sich den Inhalt aller verwendeten Variablen anzeigen zu lassen. Log oder Trace kann man sich über den Menüpunkt Script Debugger Menu anzeigen lassen. Die einzelnen Optionen werden durch drücken der <Return> Taste gewählt.

Clear Debug Messages
Löscht ein mit Logging oder Trace erstelltes Log.

Script Debugger Menu
Zeigt bei gewählter Option Logging den Log an und bietet bei gewählter Option Trace die Möglichkeit das Script im Einzelschrittmodus auszuführen, in dem jede Zeile des Programmcodes durch drücken der <Return> Taste einzeln ausgeführt wird. Des Weiteren werden bei gewählter Option Trace die Inhalte / Zustände aller Variablen des Scripts in der unteren hälfte des Fensters angezeigt.

Global Script Tasks
Scripts die auf einem Objekt (Schiff, Station) ausgeführt werden lassen sich einfach über das Kommando „Kein“ abbrechen, dies geht jedoch nicht bei Scripts die global, also auf keinem Objekt, ausgeführt werden. Unter diesem Menüpunkt werden alle Scripts, die zurzeit global laufen, mit Ihrer PID (Prozess ID) angezeigt. Hier hat man auch die Möglichkeit Scripts durch Auswahl und drücken der <Entf> Taste zu beenden. Da einige Scripts sich selber neu starten sollte man beim Beenden eines Scripts auf die PID achten da man sonst leicht das falsche Script beenden kann.

Hilfe
Ruft die Hilfe auf
Last edited by MADxHAWK on Fri, 20. Oct 06, 03:32, edited 2 times in total.
***modified*** und stolz drauf
Why does it hurt when my heart misses the beat? Propaganda - Dr. Mabuse (1984)
User avatar
MADxHAWK
Posts: 710
Joined: Tue, 1. Mar 05, 17:49
x4

Post by MADxHAWK »

Scripts editieren

[ external image ]

Abb.: Der Editor

Die Abb. zeigt das eigentliche Editorfenster in dem Scripts editiert werden. Außer dem eigentlichen Scriptcode gibt es noch einige Informationen die beim erstellen eines neuen Scripts eingegeben werden müssen. Schauen wir uns das Fenster einmal genauer an:

Zeile 1:
zeigt den Scriptnamen an und kann nicht editiert werden.

Zeile 2:
ermöglicht die Eingabe einer Versionsnummer. Diese Nummer kann per Script ausgelesen und zur Erkennung neuer Versionen genutzt werden.

Zeile 3:
Description = Beschreibung, sollte für eine kurze Funktionsbeschreibung des Scripts genutzt werden.

Zeile 4:
Command = Kommando, wird das Script über ein Kommando in einem Kommandoslot aufgerufen, kann man hier den Kommandonamen wählen der im entsprechenden Kommandoslot während der Ausführung des Scripts angezeigt wird.

Zeile 5:
Arguments = Argumente die dem Script beim Start oder Aufruf durch ein anderes Script übergeben werden.

Zeile 6:
Beispiel für ein Argument, Argumente die beim Start an das Script übergeben werden haben das Format <Variable> , <Variablentyp> , <Beschreibungstext> , <Variable> ist in diesem Fall der Name der Variable an den der Wert übergeben wird, <Variablentyp> beschreibt den Inhalt der Variable, z.B. ein Sektor oder ein Schiff, und der Beschreibungstext ist ein kurzer Text der eingeblendet wird wenn zur Eingaben des Variablenwerts aufgerufen wird..

Zeile 8:
ab hier folgt der eigentliche Scriptcode


Das Befehls Auswahl Menü

Über das Menü in werden die Befehle / Anweisungen zu einem Script hinzugefügt. Alle möglichen Befehle sind in Gruppen aufgeteilt und werden durch Auswahl dem Scriptcode hinzugefügt. Dies erleichtert das Scripten da man nicht erst die Syntax der Befehle erlernen muss, hat jedoch auch den kleinen Nachteil das man teilweise etwas suchen muss bevor man den gewünschten Befehl findet ;-)

Die Befehle sind in folgende Gruppen aufgeteilt:

General Commands
Variablen Werte zuordnen, Scripts an Kommandos binden, if, while, skip Anweisungen usw.

Audio Commands
Befehle rund um die Audioausgabe

Logbook Commands
Befehle zur Textausgabe im Logbuch und in externer Logdatei

Fly Commands
Flug- und Kampfbefehle

Trade Commands
Handelskommandos für Schiffe, Stationen und freie Händler

General Object Commands
Erstellen von Schiffen, Stationen, Statusabfragen von Objekten usw.

Universe and Sector Commands
Befehle rund um die Galaxie- und Sektorkarten

Scripts benennen
Man kann seine Scripts natürlich benennen wie man möchte, es gibt jedoch einige reservierte Scriptnamen sowie eine offizielle Regel zur Benennung seiner Scripts. An diese Regeln sollte man sich jedoch halten, da es die Übersichtlichkeit wahrt, zusammengehörige Scripts eines Plugins leichter erkannt werden, und bei signierten Scripts sogar Pflicht ist.
Reservierte Scriptnamen und ihre Funktion

!init oder init
Beispiel: !init.ship.commandupgrade

Scripts deren Name mit init oder !init beginnen sind Initialisierungsscripts. Sie werden während des Ladevorgangs geladen, ausgeführt und beendet noch bevor die Sektorobjekte erstellt werden. Sie eignen sich z.B. dazu Scripts an Kommandos zu binden,

!setup oder setup
Beispiel: setup.plugin.autotrade

Bei diesen Scripts handelt es sich um Setupscripts, Sie werden ebenfalls während des Ladevorgangs geladen, ausgeführt und beendet, jedoch erst nachdem die Sektorobjekte erstellt wurden. Sie eignen sich dazu Waren zu einer Station hinzu zu fügen und ebenfalls um Kommandos an Scripts zu binden. Sie sind etwas unkritischer zu handhaben da sie erst ausgeführt werden nachdem alle Sektorobjekte erstellt wurden.

!al.plugin oder al.plugin
Beispiel: al.plugin.race.rebuild

Hierbei handelt es sich um AL (Artifical Life) Scripts. Diese werden automatisch geladen und Ausgeführt und dienen der Belebung des X – Universums wie z.B. Taxidienste die Passagiere von Station zu Station fliegen. AL.Plugins können über das Artifical Life Menü aktiviert / deaktiviert werden.

galaxy.<mapname>
Beispiel: galaxy.meinuniversum.playership

Diese Scripts finden eigentlich nur Verwendung bei einem MOD – Universum. Sie werden nur ausgeführt wenn der <mapname> mit dem Namen der der Galaxiekarte des MOD – Universums übereinstimmt. Diese Scripts können z.B. dazu benutzt werden das Spielerschiff in einem MOD – Universum zu erstellen.


Benennen eigener Scripts

Will man sein Script veröffentlichen oder vielleicht sogar signieren lassen sollte man sich immer an folgende Regel zur Benennung von Scripts halten:

Setupscript: setup.plugin.<pluginname>
Initscript: init.plugin.<pluginname>
AL-Scripts: al.plugin.<pluginname>.<funktionsname>
Alle anderen Scripts: plugin.<pluginname>.<funktionsname>

<pluginnamen> steht in diesem Fall für den Namen des Plugin und <Funktionsname> sollte eine kurze Beschreibung der Scriptfunktion sein. Als Beispiel nehme ich hier mal die Scripts die zum Plugin der Handelssoftware MK III gehören:

setup.plugin.autotrade - das Setupscript
plugin.autotrade.sector - Hauptscript des Sektorhändlers
plugin.autotrade.galaxy - Hauptscript des Universumhändlers

Dies erleichtert nicht nur den Spielern, die ein Plugin installiert haben, zu erkennen welche Scripts zu dem Plugin gehören, sondern auch dem Scripter den Überblick zu behalten.
***modified*** und stolz drauf
Why does it hurt when my heart misses the beat? Propaganda - Dr. Mabuse (1984)
User avatar
MADxHAWK
Posts: 710
Joined: Tue, 1. Mar 05, 17:49
x4

Post by MADxHAWK »

Arrays
Während eine Variable immer nur einen Wert enthalten kann, sind Arrays in der Lage mehrere Werte zu enthalten. Dies macht z.B. Sinn wenn man alle Stationen die einem gehören abfragen will. Im Gegensatz zu einer Variablen, der einfach ein Wert zugeordnet werden kann, muss ein Array erst definiert werden. Einzige Ausnahme sind Befehle die als Wert ein Array zurückgeben. In diesem Fall wird das Array intern definiert. Eine Variable wird mit dem Befehl <RetVar> = array alloc: size = x definiert, wobei RetVar die Variable ist, die als Array definiert werden soll und x für die Anzahl der Elemente steht die das Array enthalten soll.
Eine weitere Besonderheit ist, das ein Array Daten unterschiedlicher Typen enthalten kann.
Zu beachten ist, dass die Elemente eines Array von 0 bis zur angegebenen Größe -1 nummeriert werden. Definiere ich also ein Array mit 10 Elementen, werden diese von 0 – 9 nummeriert.

Beispiele:

Code: Select all

001 $mein.Array = array alloc: size = 4
002 $mein.Array[0]=$position.x
003 $mein.Array[1]=$position.y
004 $mein.Array[2]=$position.z
005 $mein.Array[3]=$sector


In diesem Beispiel wird in Zeile 1 ein Array mit 4 Elementen definiert. In den Zeilen 2 – 5 werden den Elementen 0 – 3 die Werte der Variablen $position.x, $position.y, $position.z und $sector übergeben.

Es gibt jedoch auch Situationen in denen man nicht weiß wie viele Elemente ein Array enthält. Ich will z.B. die Waren einer Station mit den dazugehörigen Preisen für eine spätere Verarbeitung in einem Array ablegen. Da das entsprechende Script auf verschiedenen Stationen ausgeführt werden kann und jede Station eine andere Anzahl von Waren hat weiß ich also nicht wie groß mein Array wird. In diesem Fall habe ich folgende Möglichkeit:

Code: Select all

001 $mein.Array = array alloc: size = 0
002 append $position.x to array $mein.Array
003 append $position.y to array $mein.Array
004 append $position.z to array $mein.Array
005 append $sector to array $mein.Array


In Zeile 1 wird wieder die Variable $mein.Array als Array definiert, diesmal jedoch als ein Array mit 0 Elementen. Die Zeilen 2 – 5 erweitern das Array jeweils um 1 Element und übergeben den Wert der Variable an dieses.

Die Werte des Arrays werden folgendermaßen ausgelesen:

Code: Select all

001 $x.position = $mein.Array[0]
002 $y.position = $mein.Array[1]
003 $z.position = $mein.Array[2]
004 $sector = $mein.Array[3]

Konstanten
Anders als Variablen, die jeden Wert annehmen können haben Konstanten einen festen Wert der nicht änderbar ist. In X3 stehen die folgenden Konstanten zur Verfügung:

TRUE - logisch WAHR
THIS - Objekt auf dem das Script ausgeführt wird
SECTOR
Sektor in dem sich das Objekt, auf dem das Script ausgeführt
wird, befindet
PLAYERSHIP - Spielerschiff
OWNER - Rasse des Objekts auf dem das Script ausgeführt wird
HOMEBASE - Heimatbasis des Objekts auf dem das Script ausgeführt wird
FALSE - logisch FALSCH
ENVIRONMENT
Umgebung des Objekts auf dem das Script ausgeführt wird
(z.B. Trägerschiff oder Station auf dem das Objekt gelandet ist oder der Sektor in dem sich das Objekt befindet)
DOCKEDAT
Station / Träger an dem das Objekt auf dem das Script
ausgeführt wird angedockt ist
Select Constant - Auswahl verschiedener Konstanten


Operanden
Operanden dienen dazu mathematische oder logische Funktionen zu beschreiben. Folgende Operanden Stehen zur Verfügung.

== - gleich
!= - ungleich
> - größer als
< - kleiner als
>= - größer gleich
<= - kleiner gleich
& - bitweise UND
| - bitweise ODER
^ - bitweise EXCLUSIV ODER
AND - logisch und
OR - logisch oder
+ - mathematisch Addition
- - mathematisch Subtraktion
* - mathematisch Multiplikation
/ - mathematisch Division
mod - mathematisch MODULO
( - mathematisch Klammer auf
) - mathematisch Klammer zu
~ - mathematische Negation
! - logische Negation
Last edited by MADxHAWK on Fri, 20. Oct 06, 03:39, edited 1 time in total.
***modified*** und stolz drauf
Why does it hurt when my heart misses the beat? Propaganda - Dr. Mabuse (1984)
User avatar
MADxHAWK
Posts: 710
Joined: Tue, 1. Mar 05, 17:49
x4

Post by MADxHAWK »

Bedingte Anweisungen (Conditional Instructions)

Irgendwann kommt man bei einem Script an einen Punkt wo man entscheiden muss wie man nun, abhängig von der Situation, weiter vorgeht. Aus diesem Grund gibt es Bedingungen die hier nun genauer erläutert werden.

IF
Wenn die Abfrage WAHR ist, wird der folgende Code bis zur nächsten else [if] [not] oder end Anweisung ausgeführt, andernfalls wird das Script nach der else [if] [not] oder end Anweisung fortgeführt.

Beispiel:

Code: Select all

020 if $x == 1
021   *Hier folgen die Anweisungen die ausgeführt werden wenn $x=1 ist
022   *ist $x ungleich 1 wird das Script gleich in Zeile 024 fortgesetzt
023 end
024 *weitere Anweisungen
IF NOT
Ist die Abfrage nicht WAHR wird der folgende Code bis zur nächsten else [if] [not] oder end Anweisung ausgeführt, andernfalls wird das Script nach der else [if] [not] oder end Anweisung fortgeführt

Beispiel:

Code: Select all

020 if not $x == 1
021   *Hier folgen die Anweisungen die ausgeführt werden wenn $x nicht 1 ist
022   *ist $x=1 wird das Script gleich in Zeile 024 fortgesetzt
023 end
024 *weitere Anweisungen
ELSE IF
Diese Anweisung ist nur in Verbindung mit einer If Abfrage sinnvoll. Ist das Ergebnis der If Abfrage FALSCH und das Ergebnis der else if Abfrage WAHR wird der folgende Code ausgeführt.

Beispiel:

Code: Select all

020 if $x == 1
021   *Hier folgen die Anweisungen die ausgeführt werden wenn $x=1 ist
022 else if $x==2
023   *Hier folgen die Anweisungen die ausgeführt werden wenn $x=2 ist
024 else if $x==3
025   *Hier folgen die Anweisungen die ausgeführt werden wenn $x=3 ist
024 end
025 *weitere Anweisungen
ELSE IF NOT
Diese Anweisung ist nur in Verbindung mit einer If Abfrage sinnvoll. Ist das Ergebnis der If Abfrage FALSCH und das Ergebnis der else if not Abfrage WAHR wird der folgende Code ausgeführt.

Beispiel:

Code: Select all

020 if $x == 1
021   *Hier folgen die Anweisungen die ausgeführt werden wenn $x=1 ist
022 else if not $x==2
023   *Hier folgen die Anweisungen die ausgeführt werden wenn $x nicht 2 ist
024 else if not $x==3
025   *Hier folgen die Anweisungen die ausgeführt werden wenn $x nicht 3 ist
024 end
025 *weitere Anweisungen
ELSE
Diese Anweisung ist nur in Verbindung mit einer If Abfrage sinnvoll. Code der der else Anweisung folgt wird nur ausgeführt wenn das Ergebnis der vorangegangenen if [not] Anweisung FALSCH ist

Beispiel:

Code: Select all

020 if $x == 1
021    *Hier folgen die Anweisungen die ausgeführt werden wenn $x=1 ist
022 else
023   *Hier folgen die Anweisungen die ausgeführt werden wenn $x ungleich 1 ist
024 end
025 *weitere Anweisungen
SKIP IF
Wenn das Ergebnis der Abfrage WAHR ist, wird die folgende Zeile im Code übersprungen.

Beispiel:

Code: Select all

020 skip if $x == 1
021    *der Befehl in dieser Zeile wird übersprungen wenn x=1 ist
022 *hier folgen weitere Anweisungen
SKIP IF NOT
Wenn das Ergebnis der Abfrage nicht WAHR ist, wird die folgende Zeile im Code übersprungen.

Beispiel:

Code: Select all

020 skip if not $x == 1
021    *der Befehl in dieser Zeile wird übersprungen wenn x nicht 1 ist
022 *hier folgen weitere Anweisungen
***modified*** und stolz drauf
Why does it hurt when my heart misses the beat? Propaganda - Dr. Mabuse (1984)
User avatar
MADxHAWK
Posts: 710
Joined: Tue, 1. Mar 05, 17:49
x4

Post by MADxHAWK »

Schleifen (Loops)

WHILE
Der Programmcode der zwischen der while und der end Anweisung steht wird so lange ausgeführt wie das Ergebnis der Anweisung die hinter while steht WAHR ist.

Beispiel:

Code: Select all

020 $x == 0
021 while x < 10
022	inc $x=
023	*die folgenden Anweisungen werden so lange ausgeführt bis x=10 ist
024 end
025 *hier folgen weitere Anweisungen
Die Schleife zwischen while x < 10 und end wird solange durchlaufen bis x = 10 ist. Durch den Befehl inc $x = wird x bei jedem durchlauf um 1 erhöht. Sobald x = 10 ist wird das Script in der Zeile die dem Befehl end folgt, fortgesetzt.


WHILE NOT
Der Programmcode der zwischen der while und der end Anweisung steht wird so lange ausgeführt wie das Ergebnis der Anweisung die hinter while steht nicht WAHR ist.

Beispiel:

Code: Select all

020 $x == 0
021 while not x == 10
022	inc $x=
023	*die folgenden Anweisungen werden so lange ausgeführt wie x ungleich 10 ist 
024 end
025 *hier folgen weitere Anweisungen
Die Schleife zwischen while not x == 10 und end wird solange durchlaufen bis x = 10 ist. Durch den Befehl inc $x = wird x bei jedem durchlauf um 1 erhöht. Sobald x = 10 ist wird das Script in der Zeile die dem Befehl end folgt, fortgesetzt.


BREAK
Unterbricht die Schleife und setzt den Programmcode, der nach der end Anweisung folgt, fort

Beispiel:

Code: Select all

020 $x == 0
021 while x < 10
022	inc $x=
023	*die folgenden Anweisungen werden so lange ausgeführt bis x=10 ist 
024 skip if $y == 5
025	break
025 *hier folgen weitere Anweisungen
026 end
Die Schleife zwischen while x < 10 und end wird solange durchlaufen bis x = 10 ist. Durch den Befehl inc $x = wird x bei jedem durchlauf um 1 erhöht. Ist $y = 5 wird die Zeile 025 übersprungen. Die Schleife wird unterbrochen und das Script in der Zeile nach dem Befehl end fortgesetzt wenn:
1. $x = 10 ist oder
2. wenn $y ungleich 5 ist, da in diesem Fall die Zeile 025 mit dem Befehl break ausgeführt wird.


CONTINUE
Unterbricht die Schleife und führt den Programmcode, der nach der while Anweisung folgt, fort

Beispiel:

Code: Select all

020 $x == 0
021 while x < 10
022	inc $x=
023	*die folgenden Anweisungen werden so lange ausgeführt bis x=10 ist 
024 skip if $y == 5
025	continue
025 *hier folgen weitere Anweisungen
026 end
Die Schleife zwischen while x < 10 und end wird solange durchlaufen bis x = 10 ist. Durch den Befehl inc $x = wird x bei jedem durchlauf um 1 erhöht. Ist $y = 5 wird die Zeile 025 übersprungen. Ist $y ungleich 5 wird die Schleife in Zeile 025 unterbrochen und in Zeile 021 fortgesetzt, d.h. der Scriptcode zwischen den Befehlen continue und end wird nicht ausgeführt


So das wars erstmal

Greetz
MADxHAWK
***modified*** und stolz drauf
Why does it hurt when my heart misses the beat? Propaganda - Dr. Mabuse (1984)
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Ich fügs gleich mal in die Tutorial-Sammlung ein, damit es nicht untergeht ;)
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 ;)
subaluigi
Posts: 388
Joined: Thu, 23. Dec 04, 22:48
x3tc

Post by subaluigi »

Salut MADxHAWK :-)

:thumb_up: Gute Arbeit!

à bientôt


Louis
¨¨¨¨¨¨¨¨¨¨¨¨¨***modified***
¨¨¨¨¨¨¨¨¨¨¨¨¨and proud of it!!
'Cause X without scripts is like girls without tits...

another new video of the: >>Terran Conflict<<
User avatar
Naxx
Posts: 2
Joined: Wed, 10. May 06, 03:45
x3

Post by Naxx »

Hi MADxHAWK,

ist natürlich nicht SO wichtig, aber trotzdem.

du hast einen kleinen Fehler übersehen:
x == 0 <---- Das ist ein vergleich, aber du meintest eine

x=0 <--- Eine zuweisung.

Ich sagte ja ein kleiner Fehler. :-)

Aber ansonsten denke ich das es hilfreich ist. ;-)


MADxHAWK wrote:Schleifen (Loops)

WHILE
Der Programmcode der zwischen der while und der end Anweisung steht wird so lange ausgeführt wie das Ergebnis der Anweisung die hinter while steht WAHR ist.

Beispiel:

Code: Select all

020 $x == 0
021 while x < 10
022	inc $x=
023	*die folgenden Anweisungen werden so lange ausgeführt bis x=10 ist
024 end
025 *hier folgen weitere Anweisungen
Die Schleife zwischen while x < 10 und end wird solange durchlaufen bis x = 10 ist. Durch den Befehl inc $x = wird x bei jedem durchlauf um 1 erhöht. Sobald x = 10 ist wird das Script in der Zeile die dem Befehl end folgt, fortgesetzt.

..........................

So das wars erstmal

Greetz
MADxHAWK

MfG Naxx
Fehler sind Absicht, um die Konzentration zu fördern,
WENN!du welche findest, dann kannst du sie auch behalten.

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