Die LUA-Datei

Aus Das Wherigo-Handbuch
Wechseln zu: Navigation, Suche

Eine Wherigo-Cartridge wird immer - egal mit welchem Builder sie erstellt wurde - in die Programmiersprache LUA übersetzt. Man kann auch Wherigo-Cartridges ohne einen Builder erstellen - d.h. man schreibt die LUA-Datei komplett selber.

Das .gwz-File, das auf Wherigo.com beim Hochladen einer Cartridge hochgeladen wird enthält immer eine LUA-Datei sowie die Mediendateien - Das .gwz-File ist ein ganz normales Zip-File - ihr könnt es umbenennen (manche Zip-Programme arbeiten sonst nicht) in .zip und entpacken mit 7zip, Winzip, Unzip oder sonstigen Zip-Programmen.

Für Urwigo heißt die Datei _cartridge.lua.

Aufbau der LUA-Datei - am Beispiel des generierten Codes von Urwigo

Hier habe ich mal den generierten Code von Urwigo - d.h. die _cartridge.lua-Datei "kastriert".

In Kommentaren beschreibe ich grob, was Urwigo in der LUA-Datei macht

  --hier intialisiert Urwigo den LUA-Code
  require "Wherigo"
               --Das Package Wherigo wird benoetigt
  ZonePoint = Wherigo.ZonePoint
               --Diese Definitionen sind zum Verkürzen der Schreibweise, hier die im Package Wherigo definierte 
               --table für einen Punkt, bestehend aus Latitude (geografische Breite), Longitude (geografische Länge) 
               --und Altitude (Höhe)
  Distance = Wherigo.Distance 
               -- Achtung einige Funktionen aus dem Package Wherigo benötigen den Datentyp Distance - 
               -- hier unbedingt beachten, wie man vom Typ Distance in eine Gleitkommazahl für Meter
               --(oder auch Fuß kommt) und anders herum
  Player = Wherigo.Player
               -- Spieler-Objekt - enthält einige Attribute, die interessant sind - insbesonders 
               -- Player.OriginalPoint (vom Objekttyp ZonePoint) das immer die aktuelle Koordinate enthält
  objAdvent = Wherigo.ZCartridge()
              --Die Cartridge wird initialisiert, d.h. es wird ein einzige Cartridge Objekt angelegt.
  -- String decode --
              --Hier gibt es Funktionen für Obfuscating - damit in der Cartridge die Antworten/Strings nicht durch 
              --einen Hexeditor abgelesen werden können
  -- Internal functions --
              --Urwigo definiert hier einige Funktionen - zur Hilfe und ggf. um Fehlerworkarounds zu bauen
  -- Media --
              --Hier werden die Media-Objekte - Bilder und Sound angelegt
  -- Cartridge Info --
              --Hier landen alle Einstellungen der Cartridge
  -- Zones --
              --Definition der Zonen
  -- Characters --
              --Definition der Personen
  -- Items --
              --Definition der Items/Gegenstände
  -- Tasks -- 
              --Defintion der Aufgaben
  -- Cartridge Variables --
              --Definition der Variablen - alle Variablen werden in die Table ZVariables eingetragen, das ist 
              -- notwendig zum Speichern und wieder Laden - zu beachten für eigenen LUA-Code wenn die dortigen 
              -- Variablen gespeichert/geladen werden sollen (siehe unten)
  -- Timers --
              --Definition der Timer
  -- Inputs --
              --Defintion der Eingaben
  -- WorksWithList for object commands --
              --hier wird abgelegt, wenn Kommandos auf eine Liste von anderen Items etc. anwendbar sind
  -- functions --
              --hier landen alle Funktionen - z.B. OnEnter-Events, Timer-Events etc. aus Urwigo
  -- Begin user functions --
              --ab hier sind die User-Funktionen
              --aber zuerst mal Urwigo-Functions
  -- End Urwigo functions --
              --und erst ab hier die eigentlichen User-Functions
  -- End user functions -- 
              --und das wars - ggf. fehlen Abschnitte, wenn keine Defintionen da sind...

Wenn ihr wissen wollt, wie ein Beispielcode von Urwigo generiert wird, dann

  • erstellt die Cartridge
  • lasst die Cartridge.gwz-Datei generieren
  • entpackt die Datei mit einem Zip-Programm, evtl. müsst ihr sie vorher noch nach .zip umbenennen
  • schaut euch die _cartridge.lua-Datei an

Für andere Builder wie den Earwigo und den Groundspeak-Builder sieht die LUA-Datei anders aus - aber es wird auf jeden Fall eine geben..

Benutzerdefinierte Funktionen (Urwigo)

In Urwigo habt ihr über einen Menüpunkt die Möglichkeit in einem Editor-Fenster LUA-Programmcode einzubinden.

Benutzerdefinierte Funktionen werden am Ende der LUA-Datei abgelegt. Urwigo schreibt dann in die generierte LUA-Datei den Kommentar

 -- Begin user functions --

Danach findet ihr euren selber geschriebenen Code wieder.

Ihr solltet wenn ihr mit dem Urwigo-Builder arbeitet niemals die LUA-Datei selber ändern, da der Builder sie generiert (Urwigo legt den Source-Code in der .urwigo-Datei als XML ab). Beim Groundspeak-Builder könnt ihr die Datei ändern, da der Groundspeak-Builder die Änderungen nicht überschreibt.


Ihr könnt in LUA auch Variablen oder Tables zur Speicherung von wichtigen Spielinformationen ablegen. Wenn es sich um Daten handelt, die während des Spielverlaufs verändert werden, müsst ihr unbedingt dafür sorgen, daß diese mitgespeichert und wieder geladen werden können.

Das funktioniert grundsätzlich so:

Nehmen wir an, ihr habt in LUA eine globale Variable

 global meine_table={"hallo", "wie", "geht", "es", "Dir"}

Nehmen wir an, ihr verändert diese Table im Laufe des Spieles oder fügt Werte hinzu.

Wenn ihr nichts unternehmt, dann verliert - zumindest auf Garmin - die Table nach Speichern und Laden die veränderten Werte.

Ihr müsst dafür sorgen, daß die Table meine_table in die Table ZVariables aufgenommen wird - das ist die Table in die auch bei Urwigo jede Variable eingetragen wird.

Also kann man einfach folgendes machen:

  • Definieren einer Variablen (ich nenne die u1 - user variable 1) vom Typ String, tragt unter Kennung anstatt automatisch meine_table ein - damit sagt ihr Urwigo, dass ihr selber einen Namen für die Variable vergeben wollt - ihr vergebt dann denselben Namen wie ihr ihn im User-Code verwendet habt.

Das wars auch schon - der String wird mit der Table überschrieben und Speichern/Wieder laden funktioniert einwandfrei.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge