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

First argument must be a ZonePoint

WhitePawn

Geocacher
Ich bastele z. Z. an meinem ersten PlayAnywhere und bin auf ein Problem gestoßen, zu dem ich mal einen Tipp bräuchte, in welche Richtung ich suchen muß:
Abhängig von der Entfernung vom Startpunkt generiere ich vorhandene Zonen mit neuen Koordinaten um den Spieler herum. Soweit klappt alles ganz gut.
Nur habe ich jetzt festgestellt, daß beim Aufrufen eines gespeicherten Spiels, das ganze auf die Bretter geht. Die Fehlermeldung ist die aus dem Betreff: "First argument must be a ZonePoint.

Auszug aus dem Log:
Code:
Thu Dec 12 11:39:06 2013 CARTRIDGE [Lua]: 51.47810|0.00000|0.000|1.000|Zone:Distant - Venus
Thu Dec 12 11:39:06 2013 CARTRIDGE [Lua]: 51.47810|0.00000|0.000|1.000|Zone:Exit - Venus
[b]Thu Dec 12 11:39:02 2013 WARN [Engine]: ProcessTime(): Timer Tick method call failed. .../urwigo-src-1542cd00-b232-4d85-9bb6-0fe9f9cb028b.lua:4882: First argument must be a ZonePoint[/b]
Thu Dec 12 11:39:02 2013 CARTRIDGE [Lua]: 51.47905|-0.00020|0.000|1.000|ZCartridge:Restore
Thu Dec 12 11:39:02 2013 CARTRIDGE [Lua]: 51.47905|-0.00020|0.000|1.000|Engine Version 2.11, Player Name: Mr. Smith, Device ID: Desktop
 

Charlenni

Geomaster
Die Fehlermeldung bezieht sich auf die Zeile 4882 deiner Lua-Datei. An diese kommst Du, wenn Du die GWZ-Datei entpackst (Endung GWZ in ZIP umbenennen und entpacken). Dort schaust Du nach, welcher Befehl dort ausgeführt wird. Vermutlich ein VectorToZone oder VectorToPoint.

Die Fehlermeldung besagt, dass das erste Argument kein Wherigo.ZonePoint sondern etwas anderes ist. Vermutlich ein nil, aber das ist reine Spekulation. Dazu müsste man die Stelle im Quellcode sehen und verstehen, was da abläuft.
 
OP
W

WhitePawn

Geocacher
Danke, damit kann ich das Ganze eingrenzen. Allerdings weiß ich trotzdem nicht weiter:

Code:
function getDistance()

  current = Player.ObjectLocation;
 
  distance, bearing = Wherigo.VectorToPoint(start,current);    <<< FEHLERMELDUNG
  
  meter = distance:GetValue"m";
  meter = math.floor(meter);

  if old > 0 then
      delta = old - meter;
      if delta < 0 then
         delta = delta * -1;
      end
  end
  old = meter;

  return meter;

end
Die o. a. Funktion ist eigentlich ständig in Gebrauch, da sie von einem Intervalltimer periodisch aufgerufen wird. Nur beim Laden eines gespeicherten Spielstandes scheint es hier ein Problem zu geben.

In der Variable start speichere ich für die Entfernungsmessung den Ort, an dem der Spieler mit der Cartridge losgelegt hat. Das ist auch eine Referenze auf ein Player.ObjectLocation.
Kann es sein, daß bei der Speicherung eines Spielstandes diese nicht mitgespeichert werden? :???:
 

Charlenni

Geomaster
Da der Wert von current eigentlich immer gesetzt ist, liegt es vermutlich an start.

Mitgespeichert werden nur Variablen, die unter cartridge.ZVariables registriert sind, also irendwo ein cartridge.ZVariables["start"] = start haben (die Zuweisung ist unwichtig, nur der Tabelleneintrag muss vorhanden sein). Dann wird die Variable gespeichert und überlebt damit die wiederherstellung.

Ist das nicht der Fall, dann has Du eine undefinierte Variable, also start = nil, was dann den Fehler verursacht, da ZonePoint != nil.
 
OP
W

WhitePawn

Geocacher
Danke für die Hilfe, jetzt klappt es! :D

Ich hatte erst noch ein paar Probleme beim kompilieren, weil die Kennung der Cartridge auf "automatisch" stand, aber jetzt ist nach dem Laden eines gespeicherten Spieles, der Ausgangspunkt bekannt und nichts stürzt mehr ab.

Wieder was gelernt.... :D
 
Oben