Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Mit der Version 0.910 werden die globalen Variablen in XScript eingeführt.
Die globalen Variablen ermöglichen einen Skriptübergreifenden Austausch und Speicherung von Werten. Aus diesem Grunde können sie auch nur über spezielle Befehle und nicht direkt angesprochen werden.
Es gibt die vier Variablentypen Boolean, Integer, Double und String, die jeweils einen Wert der angegebenen Art speichern können.
Zu jedem Variablentyp gibt es je drei Befehle (Register, Set und Get) für eine gesamte Anzahl von 12 Befehlen.
Diese Befehle können in der Scriptreferenz nachgeschlagen werden, sie lauten z.B. game_api_RegisterInteger(Name:String).
Der Registerbefehl einer Variable muss genau einmal aufgerufen werden, um diese Variable zu definieren (zu einer Ausnahme komme ich später). Vor dem Register-Befehl kann die Variable nicht verwendet werden, ein zweiter Aufruf erzeugt einen Fehler.
Der Parameter des Registerbefehls ist der Name der Variablen als String.
ACHTUNG: Da der Name als String übergeben und gespeichert wird, macht Gross/Kleinschreibung hier einen Unterschied!!!
Nach der Registrierung kann der Set-Befehl benutzt werden, um einer Variablen einen Wert zuzuweisen und der Get-Befehl ruft diesen Wert ab. Andere Zugriffe existieren nicht, was insbesondere bedeutet das man mit den globalen Variablen nicht alles direkt berechnen kann.
Die Demo des galaktischen Krieges benutzt die globalen Variablen für viele Zwecke. In UKI_AAinit werden sie zur Übergabe der UFO-Objekte an extern aufgerufene Skripte benutzt. Die SPS-Scripte benutzen die globalen Variablen zur Überprüfung der Spielphase mit anschließender Änderung von verfügbaren UFOs etc. bei einem Phasenwechsel. Weitere Einsatzgebiete könnt Ihr selber nachschlagen...
Es gibt keine Arrays bei den globalen Variablen, aber in den Units DEF_Arace... sieht man wie man mit einer zusätzlichen Befehlsebene einen Pseudo-Array aus den globalen Variablen bildet.
Es gibt abgesehen von der Register-Funktion eine andere Möglichkeit zur Definition von globalen Variablen. Dies ist das Fenster des Schwierigkeitsgrades.
Jeder neu definierte Wert im Schwierigkeitsgrad wird automatisch als eine globale Variable angelegt - der Registerbefehl darf dann nicht mehr für diesen Variablennamen aufgerufen werden.
Allerdings kann man dieser Variablen unterschiedliche Werte in Abhängigkeit des Schwierigkeitsgrades zuteilen und so seinen Spielsatz besser anpassen.
Im galaktischen Krieg gibt es aus diesem Grunde mehrere unsichtbare Werte im Schwierigkeitsgrad-Fenster, die bei späteren Schwierigkeitsgraden andere Werte erhalten werden. Bestes Beispiel ist die Anzahl der aktiven Rassen, die auf dem höchsten Schwierigkeitsgrad deutlich höher liegen wird als die aktuell eingetragene 2...
Darüber hinaus gibt es noch zwei vordefinierte globale Variablen - leider habe ich gerade die Namen nicht parat, muss später ich nachtragen (oder Natter nennt sie wenn er sie auswendig kennt).
Die erste Variable zählt in einem Integer die Tage seit Spielstart und ist damit einfacher abzurufen und mit der Verfügbarkeit zu vergleichen als das Datum.
Die zweite Variable ist ein Boolean zum aktivieren/deaktivieren des sogenannten Danger-Modus. Die einzige bisherige Auswirkung besteht dann in einer Umschaltung der Hintergrundmusik. Das ist dann auch der Hintergrund für die jeweils zwei Definitionszeilen pro Situation in der ini-Datei, die die Auswahl der Musikstücke steuert. |