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

Umgebungsvariablen

izaseba

Geomaster
Hallo,
ich bastle gerade mal an einem Wherigo und muss wohl das eine, oder andere in LUA ausprogrammieren.
Es ist nicht grade das große Problem, allerdings brauche ich doch ein wenig Hilfe :???:

Wie kann ich rausfinden, in welcher Zone ich mich gerade befinde?
Ich programmiere mit Urwigo und habe alle Zonen mit eindeutigem Identifier versehen.
Die Identifier befinden sich samt weiterer Variablen in einem Table.
Ich möchte jetzt einfach eine Funktion ausführen, wo ich in einer Schleife den Table durchlaufen und mit der aktuellen Zone vergleichen kann.
Gibt es da eine Umgebungsvariable, wo die aktuelle Zone gespeichert ist, oder muss ich mir beim betretten der Zone selber eine Variable setzen?

Gruß Sebastian
 

jonny65

Geomaster
Die wenigen mal die ich abfrage, ob der Spieler in der Zone ist - z.b wenn ein Itemcommand erst in einer bestimmten Zoe sichtbar sein soll - benutze ich die normale Urwigo Funktion "if Zone contains Player"
 
OP
izaseba

izaseba

Geomaster
Hallo,
danke für die Antwort.
Allerdings will ich nicht wissen, ob sich der Player in einer bestimmten Zone befindet, sondern, in welcher Zone er sich befindet :???:
Ich mache es im Moment so, dass ich eine Variable beim betreten der Zonen 1-12 auf die Zahl 1-12 setze.
So kann ich dann in einer Funktion bestimmen, wo sich der Player befindet.
Es geht so, allerdings dachte ich, dass es da eine handvoll nützlicher Umgebungsvariablen gibt, die solche Informationen enthalten.
 

bodenseepingu

Geomaster
Stöbere mal unter http://www.das-wherigo-handbuch.de - ich habe einiges zu dem Thema LUA dort geschrieben - insbesonders gibt es Links auf die Wherigo-Seite mit Wherigo-spezifischen Objekten von Groundspeak (Wherigo spezifischer LUA-Befehlskatalog)


Du brauchst auch keine Table mit Identifiern anzulegen, die gibt es bereits. Vergebe einfach eine eindeutige Kennung für die Cartridge, die brauchst du zum Drankommen

Es gibt auch eine Table, in der ALLE Zonen aufgeführt sind, in der sich der Spieler befindet - das ist auf der Wherigo-Seite ebenso zu sehen - der Spieler kann nämlich bei überlappenden Zonen auch in mehreren Zonen sein - wenn du das ausschliessen kannst, dann kannst du mit dem [1]-er Element der Tables arbeiten.

Ich kann Dir wärmstens das komplexe Item-Beispiel (in der Urwigo-Section als Beispiel)
empfehlen - da wird rauf und runter durch die Table AllZObjects geloopt um herauszubekommen, wie das Medium heißt.

Weiterhin gibts auch nette Beispiele mit Zonen automatisch vergrössern, verkleinern, Umlaute ersetzen, Debuggen von der Terasse aus...

Um es kurz zu machen
http://www.das-wherigo-handbuch.de/index.php?title=Programmierbeispiele/Codesnipsel#Items
http://www.das-wherigo-handbuch.de/index.php?title=Wherigo_-_spezifischer_LUA-Befehlskatalog
http://wherigobuilder.wikispaces.com/Wherigo+(Class)
 
OP
izaseba

izaseba

Geomaster
Hallo, danke für die Antwort,

Du brauchst auch keine Table mit Identifiern anzulegen, die gibt es bereits.
Doch schon(glaube ich) :D
Jede Zone hat mehrere Merkmale, sie enthält zufälliges Item und verschiedene Merkmale, wie Aufgabe aktiv/inaktiv, Aufgabe egledigt/nicht erledigt, Itemname.
Die muss ich doch irgendwie Managen :???:
Wie auch immer, ich habe eine Variable erzeugt, die beim betretten der Zone entsprechend gesetzt wird.
So weiß ich immer, wo ich bin.
Trotzden schaue ich mir die AllZObjects Tabelle an.
Vielen Dank für die Hilfe, ich schaue, was ich damit machen kann.

Gruß Sebastian
 

jonny65

Geomaster
Bei paar Zonen und ebenso viele If Abfragen sind doch auch viel schneller zusammengeklickt, als irgendwelche Klimmzüge mit Tabellen. Denk aber dran die Variable auf 0 oder was auch immer zu setzen, wenn eine Zone verlassen wird. Denn dann ist der Spieler ja aktuell in keiner Zone, sondern im Nirwana.
 
OP
izaseba

izaseba

Geomaster
Jonny65 schrieb:
Bei paar Zonen und ebenso viele If Abfragen sind doch auch viel schneller zusammengeklickt, als irgendwelche Klimmzüge mit Tabellen. Denk aber dran die Variable auf 0 oder was auch immer zu setzen, wenn eine Zone verlassen wird. Denn dann ist der Spieler ja aktuell in keiner Zone, sondern im Nirwana.

Genau aus diesem Grund will ich das nicht mit den if/else Abfragen machen.
Gefühlte 100 Abfragen per onEnter Event machen die Sache sehr unübersichtlich und dezentral.
So habe ich das bei meinem ersten Wherigo gemacht und steig nicht mehr durch, was Sache ist :eek:ps:
Die Variable muss ich auch nicht auf 0 setzen, ich will ja bei onEnter Event wissen, wo ich bin ;)

Gruß Sebastian
 

bodenseepingu

Geomaster
....wie gesagt, es gibt für alles Lösungen - ich kann dir problemlos per LUA-Code sagen, in welchen Zonen Du Dich aktuell befindest...

Übrigens: Man kann auch bei jedem LUA-Objekt zusätzliche Variablen dranhängen - bietet Urwigo leider nicht direkt - ich bastle grad einen Wherigo da habe ich das intensivst genutzt.

Urwigo bietet beispielsweise bei Items das Boolean-Feld "Gesperrt" an. Ich hab das bei einem Lastwagen den ich als Item habe einfach benutzt und habe für mich definiert

"Gesperrt" = Lastwagen beladen
"Nicht Gesperrt" = Lastwagen unbeladen

Was ich geladen habe habe ich nicht in separaten Variablen verwaltet, sondern habe einfach
objLastwagen.Geladen = 3 (ich lasse z.b. hier die Zahlen 1-5 zur Objektunterscheidung zu) verwendet.

Der Vorteil ist einfach, dass jedes "Objekt" alle Informationen bei sich trägt - das was ich dann abgeladen habe, habe ich in der jeweiligen Zielzone in eine Table gesteckt - alles schön übersichtlich - keine Variableninflation und vor allem Sicher gegen Falschbehandlung.


Wenn Du das sauber machst, musst Du gar nichts managen - schau dir das komplexe Item-Beispiel an - zugegebenermassen ist der Initialaufwand höher bis man korrekt funktionierende LUA-Funktionen hat - danach ist die Anwendung easy going. Zur Not - bei jedem OnEnter eine einzige Variable aktZone zu setzen ist auch noch verträglich, wenn die anschliessende Behandlung hinterher dann generisch geht....hab ich auch grad gemacht, weil das eben übersichtlicher ist, als die aktuelle Zone selber zu ermitteln - Falls Du weiteres wissen willst, schreib mich per privater Mail an.
 
OP
izaseba

izaseba

Geomaster
bodenseepingu schrieb:
Übrigens: Man kann auch bei jedem LUA-Objekt zusätzliche Variablen dranhängen - bietet Urwigo leider nicht direkt - ich bastle grad einen Wherigo da habe ich das intensivst genutzt.
Das wäre natürlich die perfekteste Lösung.
Habe gar nicht soweit gedacht :???:
Ich dachte eher, Wherigo ist nicht ganz so flexibel und die Eigenschaften der Objekte sind fest "verdrahtet"

bodenseepingu schrieb:
Urwigo bietet beispielsweise bei Items das Boolean-Feld "Gesperrt" an. Ich hab das bei einem Lastwagen den ich als Item habe einfach benutzt und habe für mich definiert

"Gesperrt" = Lastwagen beladen
"Nicht Gesperrt" = Lastwagen unbeladen

Was ich geladen habe habe ich nicht in separaten Variablen verwaltet, sondern habe einfach
objLastwagen.Geladen = 3 (ich lasse z.b. hier die Zahlen 1-5 zur Objektunterscheidung zu) verwendet.
Das ist auch ein wertvoller Tipp, danke.
An sich eigentlich klar, wo steht denn geschrieben, dass der Typ boolean sein muss.
Da LUA eigentlich Neuland für mich ist und ich mich eher mit Sprachen auskenne, wo man den Datentyp explizit definieren muss, war das für mich unvorstelbar :eek:ps:

bodenseepingu schrieb:
- Falls Du weiteres wissen willst, schreib mich per privater Mail an.

Im Moment bin ich mit meinem Code zufrieden, läuft flüssig und macht das, was ich will.
Sollte ich auf irgendwelche Probleme stoßen kommen ich gerne drauf zurück.

Gruß Sebastian
 
Oben