• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

LUA wäre schön...

Atokad

Geocacher
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
 

kansu_makugen

Geocacher
Atokad schrieb:
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:
FunktionsName([opt. Parameter])
bzw.
Code:
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:
function GetTime()
   local varTime = 5
   return varTime
end
Der Aufruf erfolgt dann über:
Code:
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:
local varTime = _Urwigo.SecondInYear(os.date "*t")
Nur mal so am Rande ;)
 
OP
A

Atokad

Geocacher
leider wars das nicht :(
Die Klammern sind auf jeden Fall gesetzt.
Bild1.png
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:
 

kansu_makugen

Geocacher
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
 

Anhänge

  • Date_time.jpg
    Date_time.jpg
    9 KB · Aufrufe: 545

kansu_makugen

Geocacher
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!
 

bodenseepingu

Geomaster
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...
 
OP
A

Atokad

Geocacher
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

Danke für die Infos und Links

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