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

100 Zonen abfragen - auch mit Garmin kein Problem

1. Ich gebe das Original Cartridge heute zum Testen weiter.
2. Ich kopiere den Lua Code direkt in Urwigo und entferne require sowie am anfang den Haken für inline lua
 
OP
B

bodenseepingu

Geomaster
...na dann hoffe ich dass wir den Fehler so eingrenzen können...

...ich hab wenn sich das bewahrheitet auch eine Cartridge online, die auf I-Phone nicht funktionieren wird...die ist von megagrozilla gepublished....
 
So, 1. Testcartridge ist raus.

Beim Ändern vom 2. erhalte ich eine Fehlermeldung beim Starten im Emulator.
Hier stimmt warscheinlich etwas beim Zonenerstellen nicht:


var_locationstbl = {}
var_pointstbl = {}
var_besuchttbl = {}
var_activetbl = {}
var_visibletbl = {}
var_distanztbl = {}
var_nametbl = {}
var_descriptiontbl = {}
var_locations = 0
var_naechste_zone = nil
var_zweitnaechste_zone = nil
var_drittnaechste_zone = nil

function init_wherigo_locations(naechstezone, zweitnaechstezone, drittnaechstezone)
var_naechste_zone = naechstezone
var_zweitnaechste_zone = zweitnaechstezone
var_drittnaechste_zone = drittnaechstezone
end



function Add_Location(lat, long, distanz, active, visible, name, description)
local ZP = ZonePoint(lat, long, 0)
table.insert(var_locationstbl, ZP)
table.insert(var_pointstbl, GetZonePoints(ZP, distanz))
table.insert(var_besuchttbl, false)
table.insert(var_activetbl, active)
table.insert(ar_visibletbl, visible)
table.insert(var_distanztbl, distanz)
table.insert(var_nametbl, name)
table.insert(var_descriptiontbl, description)
var_locations = var_locations + 1
end

function Ermittle_Naechst_Erreicht_Ort(index)
local start = index
if (start < 1) or (start > var_locations) then
start = 1
end
for i = start, var_locations, 1 do
if var_activetbl == true then
local d, b = Wherigo.VectorToPoint(var_locationstbl, Player.ObjectLocation)
local dn = d:GetValue"m"
if dn <var_distanztbl and (var_besuchttbl == false) then
--print(i)
return i
end
end
end
--print(0)
return 0
end

function Get_Media(ort) Entfernt da keinen Änderung hier erfolgt
if ort == "
end
end



function Berechne_und_Zeige_Zonen()
local dn_min = 100000
local dn_2min = 100000
local dn_3min = 100000
local naechste_index = 0
local zweitnaechste_index = 0
local drittnaechste_index = 0

for i = 1, var_locations, 1 do
local d, b = Wherigo.VectorToPoint(var_locationstbl, Player.ObjectLocation)
local dn = d:GetValue"m"
if (dn < dn_min) and (var_besuchttbl == false) and
(var_activetbl == true) and
(var_visibletbl == true) then
dn_3min = dn_2min
dn_2min = dn_min
dn_min = dn
drittnaechste_index = zweitnaechste_index
zweitnaechste_index = naechste_index
naechste_index = i
elseif (dn < dn_2min) and (var_besuchttbl == false) and
(var_activetbl == true) and
(var_visibletbl == true) then
dn_3min = dn_2min
dn_2min = dn
drittnaechste_index = zweitnaechste_index
zweitnaechste_index = i
elseif (dn < dn_3min) and (var_besuchttbl == false) and
(var_activetbl == true) and
(var_visibletbl == true) then
dn_3min = dn
drittnaechste_index = i
end
end
Activate_Zone(var_naechste_zone, naechste_index)
Activate_Zone(var_zweitnaechste_zone, zweitnaechste_index)
Activate_Zone(var_drittnaechste_zone, drittnaechste_index)
end

function Activate_Zone(zone, index)
if (index > 0) and (index <=var_locations) then
if (zone.Name ~= var_nametbl[index]) then
zone.Active = false
zone.Name = var_nametbl[index]
zone.Description = var_descriptiontbl[index]
zone.Media = Get_Media(var_nametbl[index])
-- nun die Zone berechnen

zone.OriginalPoint = var_locationstbl[index]
zone.Points = var_pointstbl[index]
zone.Active = true
end
else
zone.Active = false
end
end

function Set_Besucht(index, flag)
if (index > 0) and (index <= var_locations) then
var_besuchttbl[index] = flag
end
end

function Set_Active(index, flag)
if (index > 0) and (index <= var_locations) then
var_activetbl[index] = flag
end
end


function Get_Name(index)
if (index > 0) and (index <= var_locations) then
return var_nametbl[index]
else
return "???"
end
end

function Search_Name(name)
for i = 1, var_locations, 1 do
if var_nametbl == name then
return i
end
end
return 0
end

function Get_Anzahl_Orte()
return var_locations
end

function Get_Anzahl_Besucht(index1, index2)
if index1 < 1 then
index1 = 1
end
if index1 > var_locations then
index1 = var_locations
end
if index2 < index1 then
index2 = index1
end
if index2 >var_locations then
index2 = var_locations
end
local anz = 0
for i = index1, index2, 1 do
if var_besuchttbl == true then
anz = anz + 1
end
end
return anz
end

function Get_Description(index)
if (index > 0) and (index <= var_locations) then
return var_descriptiontbl[index]
else
return "???"
end
end

function Get_Besucht(index)
if (index > 0) and (index <= var_locations) then
return var_besuchttbl[index]
else
return false
end
end

function Get_Active(index)
if (index > 0) and (index <= var_locations) then
return var_activetbl[index]
else
return false
end
end


--internal
function GetZonePoints(refPt, radi)
local dist = Wherigo.Distance(radi, "m")
local pts = {
Wherigo.TranslatePoint(refPt, dist, 22.5),
Wherigo.TranslatePoint(refPt, dist, 67.5),
Wherigo.TranslatePoint(refPt, dist, 112.5),
Wherigo.TranslatePoint(refPt, dist, 157.5),
Wherigo.TranslatePoint(refPt, dist, 202.5),
Wherigo.TranslatePoint(refPt, dist, 247.5),
Wherigo.TranslatePoint(refPt, dist, 292.5),
Wherigo.TranslatePoint(refPt, dist, 337.5),
}
return pts
end
 
Ergebnisse:
1. Altes originales Cartridge läuft auf iPhone


2. Cartridge kopierter Lua code in Urwigo lässt sich nichteimal im Emulator starten --> nil value in table
Passiert gleich beim starten des Cartridge wenn die Zonen erstellt werden
Irgendeine Idee hierzu? Siehe Code oben. Denke er hat Probleme mit var_nächsteZone=nil
 
OP
B

bodenseepingu

Geomaster
ok, stell mir mal die aktuelle Testcartridge zur Verfügung - ich schaus mir dann an - hoffe ich komme heute abend dazu.

Ich denke es ist der vermutete I-phone-Fehler
 
OP
B

bodenseepingu

Geomaster
Der Fehler ist ganz einfach
Code:
function Add_Location(lat, long, distanz, active, visible, name, description)
    local ZP = ZonePoint(lat, long, 0)
    table.insert(var_locationstbl, ZP)
    table.insert(var_pointstbl, GetZonePoints(ZP, distanz))
    table.insert(var_besuchttbl, false)
    table.insert(var_activetbl, active)
    table.insert(var_visibletbl, visible)
    table.insert(var_distanztbl, distanz)
    table.insert(var_nametbl, name)
    table.insert(var_descriptiontbl, description)
    var_locations = var_locations + 1
end

Bei var_visibletbl fehlte ein v, daher wurde das nicht als Table erkannt...

...aber Achtung, in der Realisierung werden die ganzen Tables nicht persistiert, d.h.
nach Beenden und Speichern und dann wieder Laden sind die Table-Einträge weg.

Ich empfehle die ganzen Tables in eine Gesamttable reinzuschreiben und diese dann
über das bekannte Konzept Urwigo-Variable in ZVariables aufzunehmen oder alternativ
das von Krolock verwendete Konzept für die Persistierung von LUA-Variablen anzuwenden (hab ich selber noch nicht gemacht).
 

Krolock

Geocacher
bodenseepingu schrieb:
Ich empfehle die ganzen Tables in eine Gesamttable reinzuschreiben und diese dann
über das bekannte Konzept Urwigo-Variable in ZVariables aufzunehmen oder alternativ
das von Krolock verwendete Konzept für die Persistierung von LUA-Variablen anzuwenden (hab ich selber noch nicht gemacht).
Wer sich die verschiedenen Möglichkeiten der Persistierung anschauen möchte, kann dies hier tun
 
Hab ich laut Krolock gemacht, aber irgendwo muss ich wohl eine Variable übersehen haben :( da ich dann folgende Fehlermeldung beim wiederherstellen erhalte:

Attampt to index a local 'zone' (a nil value)

Die drei Zonen in nächster Nähe werden dargestellt und gleich darauf kommt die Fehlermeldung.


var_locationstbl = {}
var_pointstbl = {}
var_besuchttbl = {}
var_activetbl = {}
var_visibletbl = {}
var_distanztbl = {}
var_nametbl = {}
var_descriptiontbl = {}
var_locations = 0
var_naechste_zone = nil
var_zweitnaechste_zone = nil
var_drittnaechste_zone = nil

objStadtfuehrung.ZVariables.var_locationstbl = var_locationstbl
objStadtfuehrung.ZVariables.var_pointstbl = var_pointstbl
objStadtfuehrung.ZVariables.var_besuchttbl = var_besuchttbl
objStadtfuehrung.ZVariables.var_activetbl = var_activetbl
objStadtfuehrung.ZVariables.var_visibletbl = var_visibletbl
objStadtfuehrung.ZVariables.var_distanztbl = var_distanztbl
objStadtfuehrung.ZVariables.var_nametbl = var_nametbl
objStadtfuehrung.ZVariables.var_descriptiontbl = var_descriptiontbl
objStadtfuehrung.ZVariables.var_locations = var_locations
objStadtfuehrung.ZVariables.var_naechste_zone = naechste_zone
objStadtfuehrung.ZVariables.var_zweitnaechste_zone = var_zweitnaechste_zone
objStadtfuehrung.ZVariables.drittnaechste_zone = var_drittnaechste_zone



function init_wherigo_locations(naechstezone, zweitnaechstezone, drittnaechstezone)
var_naechste_zone = naechstezone
var_zweitnaechste_zone = zweitnaechstezone
var_drittnaechste_zone = drittnaechstezone
end



function Add_Location(lat, long, distanz, active, visible, name, description)
local ZP = ZonePoint(lat, long, 0)
table.insert(var_locationstbl, ZP)
table.insert(var_pointstbl, GetZonePoints(ZP, distanz))
table.insert(var_besuchttbl, false)
table.insert(var_activetbl, active)
table.insert(var_visibletbl, visible)
table.insert(var_distanztbl, distanz)
table.insert(var_nametbl, name)
table.insert(var_descriptiontbl, description)
var_locations = var_locations + 1
end

function Ermittle_Naechst_Erreicht_Ort(index)
local start = index
if (start < 1) or (start > var_locations) then
start = 1
end
for i = start, var_locations, 1 do
if var_activetbl == true then
local d, b = Wherigo.VectorToPoint(var_locationstbl, Player.ObjectLocation)
local dn = d:GetValue"m"
if dn <var_distanztbl and (var_besuchttbl == false) then
--print(i)
return i
end
end
end
--print(0)
return 0
end

function Get_Media(ort)
if ort == "Alte " then
var_Text1 = "Die Alte "
var_Text2 = "Im "
var_Text3 = "Loese folgende Aufgabe"
var_Loesung = "3333"
return objAlte
elseif ort ==
end
end
--GEKÜRZT!!!

function Berechne_und_Zeige_Zonen()
local dn_min = 100000
local dn_2min = 100000
local dn_3min = 100000
local naechste_index = 0
local zweitnaechste_index = 0
local drittnaechste_index = 0

for i = 1, var_locations, 1 do
local d, b = Wherigo.VectorToPoint(var_locationstbl, Player.ObjectLocation)
local dn = d:GetValue"m"
if (dn < dn_min) and (var_besuchttbl == false) and
(var_activetbl == true) and
(var_visibletbl == true) then
dn_3min = dn_2min
dn_2min = dn_min
dn_min = dn
drittnaechste_index = zweitnaechste_index
zweitnaechste_index = naechste_index
naechste_index = i
elseif (dn < dn_2min) and (var_besuchttbl == false) and
(var_activetbl == true) and
(var_visibletbl == true) then
dn_3min = dn_2min
dn_2min = dn
drittnaechste_index = zweitnaechste_index
zweitnaechste_index = i
elseif (dn < dn_3min) and (var_besuchttbl == false) and
(var_activetbl == true) and
(var_visibletbl == true) then
dn_3min = dn
drittnaechste_index = i
end
end
Activate_Zone(var_naechste_zone, naechste_index)
Activate_Zone(var_zweitnaechste_zone, zweitnaechste_index)
Activate_Zone(var_drittnaechste_zone, drittnaechste_index)
end

function Activate_Zone(zone, index)
if (index > 0) and (index <=var_locations) then
if (zone.Name ~= var_nametbl[index]) then
zone.Active = false
zone.Name = var_nametbl[index]
zone.Description = var_descriptiontbl[index]
zone.Media = Get_Media(var_nametbl[index])
-- nun die Zone berechnen

zone.OriginalPoint = var_locationstbl[index]
zone.Points = var_pointstbl[index]
zone.Active = true
end
else
zone.Active = false
end
end

function Set_Besucht(index, flag)
if (index > 0) and (index <= var_locations) then
var_besuchttbl[index] = flag
end
end

function Set_Active(index, flag)
if (index > 0) and (index <= var_locations) then
var_activetbl[index] = flag
end
end


function Get_Name(index)
if (index > 0) and (index <= var_locations) then
return var_nametbl[index]
else
return "???"
end
end

function Search_Name(name)
for i = 1, var_locations, 1 do
if var_nametbl == name then
return i
end
end
return 0
end

function Get_Anzahl_Orte()
return var_locations
end

function Get_Anzahl_Besucht(index1, index2)
if index1 < 1 then
index1 = 1
end
if index1 > var_locations then
index1 = var_locations
end
if index2 < index1 then
index2 = index1
end
if index2 >var_locations then
index2 = var_locations
end
local anz = 0
for i = index1, index2, 1 do
if var_besuchttbl == true then
anz = anz + 1
end
end
return anz
end

function Get_Description(index)
if (index > 0) and (index <= var_locations) then
return var_descriptiontbl[index]
else
return "???"
end
end

function Get_Besucht(index)
if (index > 0) and (index <= var_locations) then
return var_besuchttbl[index]
else
return false
end
end

function Get_Active(index)
if (index > 0) and (index <= var_locations) then
return var_activetbl[index]
else
return false
end
end


--internal
function GetZonePoints(refPt, radi)
local dist = Wherigo.Distance(radi, "m")
local pts = {
Wherigo.TranslatePoint(refPt, dist, 22.5),
Wherigo.TranslatePoint(refPt, dist, 67.5),
Wherigo.TranslatePoint(refPt, dist, 112.5),
Wherigo.TranslatePoint(refPt, dist, 157.5),
Wherigo.TranslatePoint(refPt, dist, 202.5),
Wherigo.TranslatePoint(refPt, dist, 247.5),
Wherigo.TranslatePoint(refPt, dist, 292.5),
Wherigo.TranslatePoint(refPt, dist, 337.5),
}
return pts
end
 
OP
B

bodenseepingu

Geomaster
Ich hab von einer Cartridge aus Frankreich eine Rückmeldung bzgl. I-Phone. Die Cartridge wurde ebenfalls mit Inline-LUA programmiert.

Code:
so, my friend read three error messages
Lua Alert "don't know how to call <null>", "don't know how to call English or
French" , "don't know how to call Papou27"
but when he clicked on "OK" all seemed normal

...das mit dem Normal glaub ich so nicht, ich denke da wurde einfach einiges vom I-Phone unterschlagen....sieht mir doch sehr ähnlich zu dem Problem in diesem Thread aus..
 
Ist zumindest am iPad für mich getestet worden und hatte funktioniert.
Ich habe erst dieses WOE wieder Zugriff auf einen iPhone 5 User und werde es nochmal testen lassen.
 
OP
B

bodenseepingu

Geomaster
Inzwischen ist der Fehler auch näher eingegrenzt worden - nur der Winkel ist um 180 Grad falsch - der erste Post war nicht richtig, da so wie ich die Testcartridge gemacht habe offensichtlich noch kein GPS-Signal da war....

Die Entfernung scheint auf dem I-Phone richtig zu sein, so daß es auch keinen Grund geben dürfte, dass die Locations-Cartridge nicht geht....Der Winkel wird nicht ausgewertet.
Also in dem Fall Entwarnung :p

Ich kann noch nicht so richtig überblicken, welche meiner Play-Anywheres bzw. Code-Beispiele betroffen sind.

Geo-Memory auf jeden Fall, die französische Cartridge Die Hard 3 (werde ich sicher interims demnächst korrigieren), die neueste Speed-Dating eigentlich nicht, die sollte funktionieren...die anderen oder Code-Fragmente, die ich gemacht hab, muss ich mal überprüfen..
 
OP
B

bodenseepingu

Geomaster
Für das Thema Cartridges mit jeder Menge Zonen, die auch noch durch den Spieler in beliebiger Reihenfolge absolviert werden können habe ich nochmals rumexperimentiert und eine etwas elegantere Lösung gefunden als bisher.

Die Lösung heißt Auto-Aktivieren / Deaktivieren von Zonen anhand der Entfernung zum Spieler.

Ein paar Zeilen LUA-Code machen das - die Zonen werden anhand eines Namensmusters identifiziert (Achtung aufpassen - keine anderen Objekte dürfen dieses Namensmuster beinhalten).

Ich hab das Beispiel gleich mal ins Wherigo-Handbuch reingenommen inklusive Beispiel-Cartridge
in Urwigo
http://www.das-wherigo-handbuch.de/...ierung_von_Zonen_.2F_Nicht_Lineare_Cartridges
 
Oben