Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

LUA wäre schön...

Adventure-Cartridges für PDAs oder Garmin Colorado/Oregon

Moderator: m.zielinski

Antworten
Atokad
Geocacher
Beiträge: 17
Registriert: Mi 7. Mär 2012, 23:36

LUA wäre schön...

Beitrag von Atokad »

Hallo,
ich würde mich gerne mal an LUA für einen WIG ausprobieren und hab den ein oder anderen Thread hier durchgelesen.
Leider komme ich mit URWIGO nicht zum gewünschten Ergebnis.
Ich möchte beim Betreten einer Zone folgende Funktion ausführen:

Benutzer Funktion:
function GetTime()
objTime = 5
end

Dazu hab ich die Variable "Time" als Zahl mit Wert 0 definiert
Beim Betreten der Zone rufe ich über "Benutzerdefinierer Code" die Funktion "GetTime()"

Zone.Beim Betreten
Meldung
Time
Beim Anklicken
Benutzerdefinierter Code
GetTime
Meldung
Time

Leider bekomme ich immer nur den Wert 0 angezeigt.
Was muss ich anders machen um bei der letzten Meldung den Wert 5 angezeigt zu bekommen?
Danke
Atokad
Benutzeravatar
kansu_makugen
Geocacher
Beiträge: 230
Registriert: Mi 11. Mai 2011, 11:01

Re: LUA wäre schön...

Beitrag von kansu_makugen »

Atokad hat geschrieben:Hallo,
ich würde mich gerne mal an LUA für einen WIG ausprobieren und hab den ein oder anderen Thread hier durchgelesen.
Leider komme ich mit URWIGO nicht zum gewünschten Ergebnis.
Ich möchte beim Betreten einer Zone folgende Funktion ausführen:

Benutzer Funktion:
function GetTime()
objTime = 5
end

Dazu hab ich die Variable "Time" als Zahl mit Wert 0 definiert
Beim Betreten der Zone rufe ich über "Benutzerdefinierer Code" die Funktion "GetTime()"

Zone.Beim Betreten
Meldung
Time
Beim Anklicken
Benutzerdefinierter Code
GetTime
Meldung
Time

Leider bekomme ich immer nur den Wert 0 angezeigt.
Was muss ich anders machen um bei der letzten Meldung den Wert 5 angezeigt zu bekommen?
Danke
Atokad
Spontan würde ich sagen, dass du die Klammern hinter GetTime vergessen hast. Funktionsaufrufe erfolgen immer in der Form

Code: Alles auswählen

FunktionsName([opt. Parameter])
bzw.

Code: Alles auswählen

Variable = FunktionsName([opt. Parameter])
Heißt deine Variable denn auch wirklich objTime?

PS: Sinnvollerweise würde ich innerhalb der Funktion mit einer lokalen Variable arbeiten und diese mittels return zurückgeben. Das hat den Vorteil, dass du den Wert auch anderen Variablen außer objTime zuweisen kannst, ohne eine neue Funktion schreiben zu müssen. Sieht dann etwa so aus:

Code: Alles auswählen

function GetTime()
   local varTime = 5
   return varTime
end
Der Aufruf erfolgt dann über:

Code: Alles auswählen

objTime = GetTime()
Wenn du in der Funktion auch noch die Konstante 5 durch was gescheites ersetzt - Urwigo hat bspw. die Zeitfunktion _Urwigo.SecondInYear eingebaut - kannste in deiner Funktion die aktuelle Zeit ausgeben. Geht in etwa so

Code: Alles auswählen

local varTime = _Urwigo.SecondInYear(os.date "*t")
Nur mal so am Rande ;)
Do you think a pile of shit feels popular because it's surrounded by flies?
Atokad
Geocacher
Beiträge: 17
Registriert: Mi 7. Mär 2012, 23:36

Re: LUA wäre schön...

Beitrag von Atokad »

leider wars das nicht :(
Die Klammern sind auf jeden Fall gesetzt.
Bild1.png
Bild1.png (117.83 KiB) 557 mal betrachtet
Dabei ist es auch egal ob ich die Variable als "Time" oder "objTime" verwende.
es kommt jedes Mal der Wert "0" zur Anzeige.
Urwigo hat bspw. die Zeitfunktion
Genau das möchte ich mal verwenden! Aber ich bekomme das Ergebnis nicht auf die
Cartige. Erst wenn ich aus LUA ein Ergebnis in eine definierte Variable zur Anzeige bekomme kann ich mich dem Thema os.time() widmen. Die kann ich mir zumindest schon mal im Urwigo LUA Debug ermitteln lassen...nur auf die Cartige bekomme ich sie halt nicht.

:hilfe:
Benutzeravatar
kansu_makugen
Geocacher
Beiträge: 230
Registriert: Mi 11. Mai 2011, 11:01

Re: LUA wäre schön...

Beitrag von kansu_makugen »

Schreib mal in das Feld mit dem User Code, wo derzeit nur "GetTime()" drin steht "objTime = GetTime()" rein. Ansonsten wird ja deiner Varaiblen Time (deren Lua-Name vermutlich objTime ist) kein Wert zugewiesen, sondern nur der lokalen Variablen "Time". Dann sollte es gehen.
Zugriff auf die Urwigo-Zeitfunktionen hast du über das Menü auf der linken Seite. Da ist irgendein Baustein für Zeit/Datum drin. Dazu brauchste nicht mal User Code. Nimmst einfach den Set-Befehl (in der deutschen Version Festlegen genannt) und packst deine Variable Time sowie den Zeit/Datumsbaustein rein. Da kannste dann noch festlegen, was du der Variablen Time zuweisen willst (z.B. Sekunden seit dem 1.1. oder Tage seit dem 1.1. und solche Geschichten).
Ich kann grad keine screenshots zu Urwigo liefern. Sitz am falschen Rechner. Aber ich hab dir was gemalt (siehe Anahng). ;)
Das fügste anstelle deines User Codes ein.

Gruß

PS: Man möge mir die dilettantische Zeichnung verzeihen
Dateianhänge
Date_time.jpg
Date_time.jpg (8.98 KiB) 532 mal betrachtet
Do you think a pile of shit feels popular because it's surrounded by flies?
Benutzeravatar
kansu_makugen
Geocacher
Beiträge: 230
Registriert: Mi 11. Mai 2011, 11:01

Re: LUA wäre schön...

Beitrag von kansu_makugen »

Nochmal was zum Verständnis:
Wenn du im Urwigo eine Variable erstellst und ihr einen Namen zuweist, wird im Normalfall als Lua-Bezeichner (also quasi als interner Name der Varaiblen) das Kürzel obj vor den eingetragenen Namen gesetzt. d.h. wenn du den Namen "Time" eingetragen hast, heißt der Lua-Bezeichner "objTime". Den Lua-Bezeichner kannst du auch von Hand festlegen. Ist sinnvoll, wenn du irgendwo im UserCode auf die Variable zugreifen willst. Das Problem ist nämlich, dass wenn ein Name mehrfach verwendet wird (bspw. hast du eine Variable "Time", eine Zone "Time" und ein Bild "Time"), wird noch ein Zähler drangehängt. Es gibt dann also objTime1, objTime2 etc.
Die grafische Oberfläche von Urwigo zeigt immer nur den Namen und nicht den Bezeichner an! Im User Code (also auch in den User Functions) steht dagegen immer der Lua-Bezeichner und nicht der Name. Die Variable mit dem Namen "Time" in der Meldung in deinem Beispiel also ist NICHT die Variable "Time" aus deiner Funktion!
Do you think a pile of shit feels popular because it's surrounded by flies?
bodenseepingu
Geomaster
Beiträge: 583
Registriert: Do 8. Mär 2007, 21:48
Wohnort: 88682 Salem

Re: LUA wäre schön...

Beitrag von bodenseepingu »

Ich möchte hier nochmal auf das Wherigo-Handbuch verweisen

www.das-wherigo-handbuch.de

Da gibt es einen extra Abschnitt über LUA. Sicherlich fehlen noch einige Dinge - auch essentielle, aber vor allem, wenn ein Newcomer mal da drüber geht, kann er wertvolle Hinweise geben bzw. selber dazu beitragen, dass hier was entsteht, was andere auch gebrauchen können.

Das was es wenigstens gibt: genügend herunterladbare Beispiel-Cartridges, die in Urwigo jede Menge LUA-Code verwenden - da bin ich nicht unschuldig daran.

An verschiedenen Stellen ist auch beschrieben, worauf man achten muss - z.B.
- wie sorgt man dafür, dass LUA-Variablen/Tables beim Speichern / Wiederladen auch mitgespeichert werden...
Bild
bodenseepingu
Geomaster
Beiträge: 583
Registriert: Do 8. Mär 2007, 21:48
Wohnort: 88682 Salem

Re: LUA wäre schön...

Beitrag von bodenseepingu »

....hab grad im Wiki noch etwas im Bereich LUA-Codeschnipsel hinzugefügt - gerne darf auch jemand, der das macht die Abschnitte mit aussagekräftigen Screenshots ergänzen...

http://www.das-wherigo-handbuch.de/inde ... -User-Code
Bild
Atokad
Geocacher
Beiträge: 17
Registriert: Mi 7. Mär 2012, 23:36

Re: LUA wäre schön...

Beitrag von Atokad »

Puh, das war 'ne schwere Geburt. Aber ich hab's geschafft das Ergebnis der Funktion auf die Cartrige zu bringen.
Die Funktion wie beschrieben bleibt wie sie ist, nur ihr Aufruf im Benutzerdefinierten Code wird direkt der Variablen zugewiesen wie sie im Urwigo definiert wurde, ohne "obj" vorne dran.
1.jpg
1.jpg (9.24 KiB) 480 mal betrachtet
Danke für die Infos und Links

PS: die meisten Mysteries sind einfacher zu lösen als ein Problem mit Urwigo und LUA :datz:
Antworten