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

Wandernde Zone LUA Code für Urwigo

Waldgammler

Geocacher
Ich benötige für meine WIG unbedingt ein spezielles LUA script. In Urwigo ist das absolut nicht machbar.

Ich brauche ein Lua-Script was folgendes beinhaltet.

StartpunktZone -> bewegt mit ca 3m/s o. 5km/h (wäre cool wenn man das einstellen könnte) nach Punkt X

Es geht hier nicht darum ein Hüpfen der Zonen zu erstellen, sondern eine Quasi Echtzeitbewegung einer Zone bzw. einer Person.


Es geht hier um eine Beschattung. Person X bewegt sich. Man muss folgen und darf weder zu Nahe, noch zu weit weg von der Person X sein. Das ist durch die Proximity gut zu machen. Ich hab nur keine Lust 100 Zonen für die flüssige Bewegung zu Programmieren. Da muss es doch was besseres geben.

ps. Cool wäre auch wenn man von den Startkoordinaten Grad und Meter für die Bewegung nutzen kann. Würde dann später was Vereinfachen.


Ich könnte auch erstmal damit leben wenn ihr mir paar Lua-Befehle um die Ohren knallt damit ich mich damit beschäftigen kann. Momentan habe ich mich davor immer gedrückt. Nun wird es jedoch wohl nicht zu umgehen sein.

so far so good - mfg Waldgammler
 

Hugo-Habicht

Geocacher
Also mit LUA habe ich leider noch viel zu wenig am Hut um dir da zu helfen, aber soviel verstehe ich wahrscheinlich, dass du auch mit einem "fertigen" Kode nicht zurecht kommen wirst, da du da bestimmt Anpassungen vornehmen musst was ohne LUA-Kenntnisse nicht gehen wird. Aber vielleicht hast du die ja auch?
Ich hätte aber eine Denkanstoß wie du es mit Urwigo hin bekommen kannst. Selbst habe ich so schon einen "Pseudo-" Playanywhere erstellt, rein in Urwigo ohne LUA.

Erstell dir zwei Referenzzonen, eine irgendwo am Nordpol und eine irgendwo im Westen im Wasser. Beim Starten speicherst du den Abstand zu den Zonen in eine Variable. Somit hast du den fixen Abstand in Richtung Nord, bzw. Westen. Diese Werte kannst du nun z.B. per Intervalltimer immer wieder abfragen und dabei die Distanz "wandern" lassen.
Nachteil ist klar: Du hast keine sichtbare Zone, die dir den Abstand oder die Richtung anzeigt. Das ginge aber z.B. durch eine Intervallmeldung "Der Abstand beträgt jetzt xxx Meter. Beeile dich! Laufe Richtung Kirche"... oder so

Hilft dir das?
Die Idee find ich auf jeden Fall klasse.
 

Roter-Wolf

Geocacher
Die Idee ist in der Tat klasse, kannst ja mal nen Link posten, wenn er fertig ist.

Gesendet von meinem HTC Desire mit Tapatalk 2
 

AoiSora

Geocacher
Waldgammler schrieb:
Es geht hier nicht darum ein Hüpfen der Zonen zu erstellen, sondern eine Quasi Echtzeitbewegung einer Zone bzw. einer Person.


Was verstehst du unter Hüpfen und quasi Echtzeitbewgung.
Ich kann mir nicht vorstellen, dass man Zonen gleichmäßig bewegen kann. Du könntest höchstens per Timer sagen, dass jede Sekunde sich die Zone um 3m verschieben soll.
Es gäbe also jede Sekunde einen kleinen Sprung.
Wie das mit der Zonenverschiebung genau geht, weiß ich jetzt auch nicht. Denk mal da könnte dir bodenseepingu weiterhelfen.
 
OP
W

Waldgammler

Geocacher
hihatzz schrieb:
Schau dir mal im Wherigo-Handbuch den Abschnitt Beispiele/Codeschnipsel in LUA -> 3 Play-Anywhere Cartridges-.......
an.

Jepp, Da bin ich jetzt auch schon. Nur ich hab nur sowas von keinen Plan wie das funktioniert. So vom theoretischen Ansatz würde ich es folgendermaßen machen.

1. ) 2 Punkte ermitteln und die urwigo Koords im Dezimalgrad bestimmen. Da scheint zu lüppen. Aber wahrscheinlich geht auch das Grad/Dezimalminuten format.

2.) Peilungsermittlung von P1->P2 z.b. 10° in 100m

3.) das in Abschnitte splitten, je nach Geschwindigkeit und länge in Sekundenintervalle

Ich glaub das geht gut in nem Table.

4.) Damit hätte man jetzt die Grundlage den Punkt bzw. die Zonenpunkte um 10° z.B 2m/s zu bewegen.


Müsste eigentlich für den versierten Programmierer kein Problem. Ich steig da nur nicht durch.
 

AoiSora

Geocacher
Ist die Problematik nicht das selbe wie bodenseepingu in seinem WIG Catch me if u can http://www.geocaching.com/seek/cache_details.aspx?guid=ad6695a9-d4e1-4f9b-b16b-10b6755ecba2
verbaut hat?

Ich würde defenitiv bodenssepingu per pm mal anschreiben.
 
OP
W

Waldgammler

Geocacher
Das scheint ja sowieso der Guru im WIG-Proggn zu sein. Ich werd mal ne PM schreiben und erst mich erstmal mit dem LUA-Code allgemein beschäftigen. Scheint ja doch recht simpel aufgebaut zu sein. Man muss halt erstmal den einstieg finden.

Das Script würde auch jede menge Möglichkeiten mit sich bringen.

Patrolliengänge erstellen. Verfolgungsjagden, Spionage, Schleicheinlagen. Halt was man so vom RPG aus kennt. Und genau diese Funktionen brauch ich. So far so good.
 

bodenseepingu

Geomaster
OK - jetzt hab ich auch den Thread zur Mail.....

Grundlage für die gewünschten LUA-Funktionen sind genau 2 Wherigo-Funktionen, die in allen Play-Anywhere-Cartridges benötigt werden. Diese sind alle hier http://www.das-wherigo-handbuch.de/index.php?title=Wherigo_-_spezifischer_LUA-Befehlskatalog beschrieben.

Bitte auch genau die Hinweise lesen - insbesonders das Thema Wherigo.Distance und den I-Phone-Bug bei Wherigo.VectorToPoint

Benötigt wird
- Wherigo.TranslatePoint: Projektion von einer bestimmten Position in eine bestimmte Richtung
- Wherigo.VectorToPoint: Ermitteln von Distanz und Winkeln von 2 Punkten - wie gesagt - I-Phone-Bug, daher evtl. eigene Implementierung verwenden

Man kann damit dann ohne Probleme eine LUA-Funktion basteln - wie z.B. UpdateZone, die eine Zone von ihrer aktuellen Position in eine bestimmte Richtung um eine bestimmte Distanz versetzt. Diese dann mit einem Timer aufgerufen stellt die Möglichkeit einer Verfolgung dar. Klar kann man auch ne separate LUA-Funktion basteln, deren Aufgabe es ist den Player zu verfolgen - alternativ kann man mit einer separaten LUA-Funktion sich Distanz und Richtung des Players ermitteln lassen. Das hätte auch den Vorteil, dass man ne Geschwindigkeitsdynamik einbauen kann - der Verfolger wird langsamer, wenn er näher dran ist...

Jetzt ein paar Bemerkungen dazu:
- es macht in einem WIG nur Sinn, Zonen zu versetzen, obwohl Charaktere auch eine Position haben - allerdings kann nicht jeder Player auf eine Person navigieren - man hat auch keinen OnEnter oder OnProximity Event - ich mach das so, dass da halt ne Zone ist und evtl. auch ein Character, der sich innerhalb der selben Zone befindet (Zone Wache, Character Wache)
- man muss sehr vorsichtig mit dem Timer-Update sein - eine Zone wird nur dann versetzt, wenn sie deaktiviert und wieder aktiviert wird - das setzt einen Player unter Stress. Ein 1-Sekunden-Takt ist hier schon grenzwertig - besser nur alle 2 Sekunden eine Zone bewegen
- die ganze Mimik muss sehr gut auf verschiedenen Geräten getestet werden...
 
OP
W

Waldgammler

Geocacher
Code:
translatePoint 

TranslatePoint hat als ersten Parameter eine Koordinate vom Typ ZonePoint, dann eine Entfernung vom Typ Distance und dann einen Winkel in Grad 

....

  Verwendung
  ..z.B. innerhalb einer LUA-Funktion
  local ZonePoint p
  local dist = Wherigo.Distance(100,'m')
  p = Wherigo.TranslatePoint(Player.OriginalPoint,dist,90)
  --p enthält die Koordinate, projeziert von der aktuellen Position, 
  --100 Meter nach Osten.

Ok. So weit so gut. Ich hab jetzt so meine Probleme hier eine Zuweisung zu bekommen. Das Script kann man so direkt nicht übernehmen. Wie weise ich jetzt meine Zonen zu.


Code:
objAgentenzoneStart.OriginalPoint = ZonePoint(50.9409779455671, 6.95682741701603, 0)
objAgentenzoneStart.DistanceRangeUOM = "Meters"
objAgentenzoneStart.ProximityRangeUOM = "Meters"
objAgentenzoneStart.OutOfRangeName = ""
objAgentenzoneStart.InRangeName = ""
objAgentenZone01 = Wherigo.Zone(objSpionage)
objAgentenZone01.Id = "902f537d-2c25-46ab-9456-cd4aa1f388b9"
objAgentenZone01.Name = "AgentenZone01"
objAgentenZone01.Description = ""
objAgentenZone01.Visible = true
objAgentenZone01.Commands = {}
objAgentenZone01.DistanceRange = Distance(-1, "feet")
objAgentenZone01.ShowObjects = "OnEnter"
objAgentenZone01.ProximityRange = Distance(60, "meters")
objAgentenZone01.AllowSetPositionTo = false
objAgentenZone01.Active = false
objAgentenZone01.Points = {
	ZonePoint(50.9402816128907, 6.95642441511154, 0), 
	ZonePoint(50.9402816128907, 6.95642441511154, 0), 
	ZonePoint(50.9402816128907, 6.95642441511154, 0)
}

was zur Höllle ist eigentlich der
Code:
objAgentenZone01.OriginalPoint = ZonePoint(50.9402816128907, 6.95642441511154, 0)

Damit wir hier zusammen Basteln können. Lade ich bei den ersten ergebnissen die Cartridge hoch.

Wie wende ich nun konkret den Projektioncode an. Verschiedene Möglichkeiten habe ich schon durchprobiert. Bei

Code:
  local ZonePoint p
gibt Urwigo sogar eine Fehlermeldung aus. Ich habe die Befürchtung das das Schema auch eine alte Version gestrickt ist.

Vielleicht hat einer von euch einer nen Einstieg. Ich steh hier aufm Schlauch
 

bodenseepingu

Geomaster
....na ich glaub ich geb den Code dann doch besser vor....

....Code-Fragmente, die ich einfach ausserhalb einer Cartridge irgendwo reingeschreiben habe können natürlich auch Syntax-Fehler haben....da hilft einfach mal eine LUA-Seite oder übersetzbare Cartridges...

es heisst natürlich

local p = Zonepoint(49.3,17.7,0) (siehe ein paar Zeilen tiefer bei Originalpoint)...

Dann: bitte keine Zonen per LUA anlegen - das macht Urwigo viel eleganter - die Bedeutung des OriginalPoint ist nicht so ganz klar...

Einfach in Urwigo eine Zone anlegen und bei Kennung einen selber vergebenen Namen eintragen - diesen dann z.b. in einer LUA-Funktion als Übergabeparameter verwenden...

Definiere doch einfach mal, was für eine LUA-Funktion du haben willst - auch welche Übergabeparameter diese haben soll - diese rufst du dann aus einem Timer-Konstrukt auf. Und dann kann man allmählich die LUA-Funktion mit Leben füllen..

Ich schlag auch vor, die Cartridge direkt beim Wherigo-Handbuch hochzuladen - dann kann man auch gleich dabei Erläuterungen schreiben
 

bodenseepingu

Geomaster
Es gibt eine neue Version für 2 unterschiedliche Verhaltensweisen des Agenten
- einmal einfach in die Richtung des Spielers gehen mit einer Geschwindigkeit zwischen v_min und v_max
- dann Speichern der Spielerpositionen in einer Table (Ringpuffer) mit wählbarer Größe und einfach Nachgehen - das hat dann zur Folge, wenn der Spieler länger als z.b. 20 Sekunden stehenbleibt, stösst er auf den Agenten.
 
OP
W

Waldgammler

Geocacher
:2thumbs: das sieht doch schon mal super aus. Da :2thumbs:

Jetzt wird mir so langsam vieles klar. Ich habe gestern abend noch was getüfftelt und habe einen anderen Weg eingeschlagen. Und zwar das ich mit Hilfe eines GPS tracks, den ich in das CSV Format gespeichert habe in excel umwandel, bzw. für den LUA Code vorbereite. Da wird wohl ein neuer Fred notwendig.

Aber sieht in alles in allem schon mal gut aus und sollte für mein Vorhaben nun gut anpassbar sein. Gerne füge ich dann mein Ergebniss zum Handbuch hinzu.

Fettes THX an den Bodenseepinguin aka Wig-Guru^^
 

jonny65

Geomaster
@bodenseepingu
Wär evtl. ne neue Unterkategorie im Handbuch nicht übersichtlicher in der man, nennen wir sie mal "Module aus der Praxis" einstellt ? Ich denk halt nur es zerfleddert zunehmend wenn neben den Grundfunktionen auch noch zahlreiche spezielle Beispiele da mit reinkommen. Das Sixpack Beispiel bei Urwigo wäre auch so ein Aspirant, es innerhalb der Urwigo Beispiele in eine Unterkategorie zu stecken. Ich kann mir vorstellen es kommen immer mal wieder so Spezialfälle. Nur so ne Idee zwecks Übersichtlichkeit ...
 

AoiSora

Geocacher
Bin da Jonny's Meinung. :up:

Vielleicht sollte man als Entscheidungskriterium, welche Beispiele Basics sind und welche Fortgeschritten schauen, ob man das Beispiel komplett mit Builderfunktionen erstellen kann oder ob man Lua-Code dafür benötigt.

Viele die ihren ersten WIG erstellen wollen sind bestimmt mit Lua-Code überfordert und da wärs halt schön einen Bereich zu haben wo alles ohne extra Code funktioniert.
 

bodenseepingu

Geomaster
Ich bin da leidenschaftslos - da ich eh nicht der Ordnungsfanatiker bin, bin ich immer froh, wenn es jemanden gibt, der Dinge in eine strukturiertere Form bringt. Mein Beispiel ist in der Rubrik LUA-Code sowieso schon untergebracht - das wird den Anfänger nicht verwirren..
 

Vansen

Geocacher
Hallo an Alle!
Ich muss diesen Beitrag nochmal hochholen. Ich habe zwei wichtige Fragen, die ich nicht durch den Code bzw. die Beiträge im Handbuch klären kann.

1. Die Zone Agent wird mit 3 Punkten definiert. Wenn das Programm startet, dann ist die Zone Agent aber ein Sechseck. Im Handbuch habe ich unter dem Abschnitt "Play-Anywhere Cartridges " die Funktion "function GetZonePoints(refPt, radi)" gefunden, welche erklärt, wie man ein Achteck hinbekommt. Aber wo steht das in der Cartridge. Ich kann es nicht finden.
2. Es gibt den Timer Bewegung und die Variable Counter. Wenn das Ereignis Bewegung.BeiAblauf eintritt, wird bei einer Bewegung des Agenten überprüft, ob der Counter>=2 beträgt, anderfalls wirk inkrementiert. Warum wird der Counter nicht gleich auf 2 Sekunden eingestellt?
3.Wenn die Zone dann in dem Timer Bewegung versetzt wird, wird gleichzeitig die Entfernung übergeben, damit der Agent bei einem Abstand weniger als 10 stoppt. Hätte man das nicht auch lösen können, wenn der Spieler sozusagen die Zone Agent betritt oder gibt es da irgendwelche Besonderheiten, die ich nicht kenne?

Ihr seht, ich habe jede Menge Fragen und wäre sehr dankbar wenn ihr mich aufklären könntet.

Beste Grüße Vansen
 
Oben