Die LUA-Datei – Das Wherigo-Handbuch (das-wherigo-handbuch.de)
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.
Urwigo erzeugt die LUA-Datei gemäß nachfolgende Dateistruktur:
--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 function _czTN(str) -- der Name ist beliebig -- diese Funktion dient dem Verschlüsseln der Texte -- die Tabelle dtable ist der Schlüssel local res = "" local dtable = "x%\006QF6MLe\022hA)J7o_+\021VK}\n\0162\029\0009$<H\005s0pG\0268T?N-!Z\027D\001]b\019C3(.q~g ;tOB\024/{u>v|nyX\t\0205^[\f41=&c\015I:\004\rf\018S\017\031a@#w\030mi\"\002zU'\014\bkl\\\023\028\003\a`Y*Wd,ER\vPj\025r" for i = 1, #str do local b = str:byte(i) if b > 0 and b <= 127 then res = res .. string.char(dtable:byte(b)) else res = res .. string.char(b) end end return res end -- es folgen nun eine Reihe von Funktionen, die Urwigo für das korrekte Funktionieren benötigt objAdvent = Wherigo.ZCartridge() --Die Cartridge wird initialisiert, d.h. es wird ein einzige Cartridge Objekt angelegt. -- Die Daten der Cartridge werden später dann als Eigenschaften abgelegt -- Media -- --Hier werden die Media-Objekte - Bilder und Sound angelegt _xTL7U = Wherigo.ZMedia(_clqD) _xTL7U.Id = "533a5ac6-d250-4088-8783-82ab011d7cac" _xTL7U.Name = _czTN("\f##m^B!") _xTL7U.Description = "" _xTL7U.AltText = "" _xTL7U.Resources = { { Type = "mp3", Filename = "Applaus.mp3", Directives = {} } } -- Cartridge Info -- --Hier landen alle Einstellungen der Cartridge objAdvent.Id = "f8d030af-9734-41cb-b096-71347d242fb6" objAdvent.Name = "Agent Karl Toffel " objAdvent.Description = "Diese Runde fuehrt durch Kladow." objAdvent.Visible = true objAdvent.Activity = "Geocache" objAdvent.StartingLocationDescription = "Hier muesst ihr starten" objAdvent.StartingLocation = ZonePoint(52.472533, 13.135383, 0) objAdvent.Version = "1" objAdvent.Company = "" objAdvent.Author = "Aski-Team" objAdvent.BuilderVersion = "URWIGO 1.20.5218.24064" objAdvent.CreateDate = "06/13/2014 20:17:27" objAdvent.PublishDate = "1/1/0001 12:00:00 AM" objAdvent.UpdateDate = "09/21/2014 16:58:43" objAdvent.LastPlayedDate = "1/1/0001 12:00:00 AM" objAdvent.TargetDevice = "PocketPC" objAdvent.TargetDeviceVersion = "0" objAdvent.StateId = "1" objAdvent.CountryId = "2" objAdvent.Complete = false objAdvent.UseLogging = true objAdvent.Media = _0ci -- Zones -- --Definition der Zonen _zoneDrachenlager = Wherigo.Zone(objAdvent) zoneDrachenlager.Id = "6215691a-b997-4277-b1b5-d4bf62368489" zoneDrachenlager.Name = "Drachenlager" zoneDrachenlager.Description = "Dies sollte nie angezeigt werden," zoneDrachenlager.Visible = false zoneDrachenlager.DistanceRange = Distance(0, "meters") zoneDrachenlager.ShowObjects = "OnEnter" zoneDrachenlager.ProximityRange = Distance(0, "meters") zoneDrachenlager.AllowSetPositionTo = false zoneDrachenlager.Active = false zoneDrachenlager.Points = { ZonePoint(52.51552, 13.57171, 0), ZonePoint(52.51552, 13.57213, 0), ZonePoint(52.51526, 13.57213, 0), ZonePoint(52.51526, 13.57171, 0) } zoneDrachenlager.OriginalPoint = ZonePoint(52.515389, 13.571918, 0) zoneDrachenlager.DistanceRangeUOM = "Meters" zoneDrachenlager.ProximityRangeUOM = "Meters" zoneDrachenlager.OutOfRangeName = "" zoneDrachenlager.InRangeName = "" -- Characters -- --Definition der Personen objBlondine = Wherigo.ZCharacter({Cartridge = KlausKlabuster, Container = zBI}) objBlondine.Id = "8aec9cae-8d8f-402d-a33b-4f39abd04244" objBlondine.Name = "Blondine" objBlondine.Description = "Ein blonder Engel. Umschwirrt von Maennern wie Motten um ein Licht." objBlondine.Visible = true objBlondine.Media = objbarfrau objBlondine.Icon = objicobarfrau objBlondine.Commands = { cmdanquatschenundflirten = Wherigo.ZCommand({ Text = "anquatschen und flirten", CmdWith = false, Enabled = true, EmptyTargetListText = "Nicht verfugbar" }), cmdzumTanzenauffordern = Wherigo.ZCommand({ Text = "zum Tanzen auffordern", CmdWith = false, Enabled = true, EmptyTargetListText = "Nicht verfugbar" }) } objBlondine.Commands.cmdanquatschenundflirten.Custom = true objBlondine.Commands.cmdanquatschenundflirten.Id = "f8da54ff-157b-4927-a942-66b39c6b2596" objBlondine.Commands.cmdanquatschenundflirten.WorksWithAll = true objBlondine.Commands.cmdzumTanzenauffordern.Custom = true objBlondine.Commands.cmdzumTanzenauffordern.Id = "47639b5b-e941-4fa8-a065-25a812946f87" objBlondine.Commands.cmdzumTanzenauffordern.WorksWithAll = true objBlondine.ObjectLocation = Wherigo.INVALID_ZONEPOINT objBlondine.Gender = "Female" objBlondine.Type = "NPC" -- Items -- --Definition der Items/Gegenstände objMuelleimer = Wherigo.ZItem({Cartridge = KlausKlabuster, Container = zMP}) objMuelleimer.Id = "14e91fa0-8c16-412f-9c97-ff24031f83a0" objMuelleimer.Name = "Muelleimer" objMuelleimer.Description = "" objMuelleimer.Visible = true objMuelleimer.Media = objmuelleimer objMuelleimer.Icon = objicomuelleimer objMuelleimer.Commands = { cmdansehen = Wherigo.ZCommand({ Text = "ansehen", CmdWith = false, Enabled = true, EmptyTargetListText = "Nothing available" }) } objMuelleimer.Commands.cmdansehen.Custom = true objMuelleimer.Commands.cmdansehen.Id = "210f3095-0117-42c0-b2cc-24c488d30200" objMuelleimer.Commands.cmdansehen.WorksWithAll = true objMuelleimer.ObjectLocation = Wherigo.INVALID_ZONEPOINT objMuelleimer.Locked = false objMuelleimer.Opened = false -- Tasks -- --Defintiion der Aufgaben tGM = Wherigo.ZTask(KlausKlabuster) tGM.Id = "a869d211-89ad-4328-a423-3caf43e167ff" tGM.Name = "Gehe zum Marktplatz" tGM.Description = "Gehe zum Spandauer Marktplatz in der Altstadt und stuerze Dich ins Leben." tGM.Visible = true tGM.Media = objMarktplatz tGM.Icon = objicomarktplatz tGM.Active = true tGM.Complete = false tGM.CorrectState = "None" -- 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) KlausKlabuster.ZVariables = { objvarGeld = 34, iA = 0, objvarBartenderBestellung = false, iTV = 0, objvarOhneGummi = false, ... } -- Timers -- --Definition der Timer objHund2 = Wherigo.ZTimer(KlausKlabuster) objHund2.Id = "8c527e68-ca80-44b3-97da-84775ee5461d" objHund2.Name = "Hund" objHund2.Description = "" objHund2.Visible = true objHund2.Duration = 120 objHund2.Type = "Countdown" -- Inputs -- --Defintion der Eingaben -- die eigentlichen Eingaben erfolgen in der jeweiligen Funktion und werden seperat definiert objPasswort = Wherigo.ZInput(KlausKlabuster) objPasswort.Id = "48eb287c-b820-4f03-8f0c-9bee83b7a470" objPasswort.Name = "Passwort" objPasswort.Description = "" objPasswort.Visible = true objPasswort.Media = objTuer objPasswort.Icon = objicoTuer objPasswort.InputType = "Text" objPasswort.Text = "Wie ist das Kennwort" objBestellungBartender.InputType = "MultipleChoice" objBestellungBartender.Text = "Also, was mochtest Du:" -- WorksWithList for object commands -- --hier wird abgelegt, wenn Kommandos auf eine Liste von anderen Items etc. anwendbar sind objRose1.Commands.cmdRosewegwerfen.WorksWithList = { objAschenbecher1, objMuelleimer, objBiographie } -- functions -- --hier landen alle Funktionen - z.B. OnEnter-Events, Timer-Events etc. aus Urwigo --Beispiel für eine Eingabe: function objBestellungBartender:OnGetInput(input) if input == nil then input = "" end if Wherigo.NoCaseEquals(input, "Whiskey") then ... elseif Wherigo.NoCaseEquals(input, "Wein") then ... -- 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...
Weitere Informationen zum LUA-Package Wherigo finden sich bei webwig/wherigo.lua at master · Jakuje/webwig (github.com)