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

Verknüpftung von Items zur Laufzeit aufheben [Wie?]

Sabeta

Geocacher
Hallo,

ich habe mal wieder ein Problem :D

Ich möchte nachträglich bestimmte Verknüpfungen von Items aufheben.
Angenommen es gibt ein itema und drei weitere itemx bis itemz, im itema sind die Häkchen beim Befehl combi für itemx bis itemz gesetzt.

der Befehl combi prüft das Befehlsziel, ist es itemx, dann:
Code:
del_item(itema.Commands.combi.WorksWithList,itemx)
für andere Befehlziele wird analog verfahren
Code:
del_item(itema.Commands.combi.WorksWithList,itemy)
del_item(itema.Commands.combi.WorksWithList,itemz)


del_item() sieht wie folgt aus:
Code:
function del_item(ta,item)
	for i, v in ipairs(ta) do
		if v==item then 
			table.remove(ta, i)
		end
	end
end

Bei itema verschwinden nun nach und nach die Verknüpfungen, sie bleiben aber bei itemx bis itemz bestehen und werden sogar bei einem kompletten Durchlauf bei itema wieder rekonstruiert.

wenn ich nun noch folgenden Code einfüge, funktioniert es, aber ...
Code:
itema.Commands.combi.MakeReciprocal = false
... dann wird bei den itemx bis itemz nicht mehr der Befehl combi angezeigt, was ja obige Befehlzeile nunmal bewirkt.

Eine Lösung bei der ich auf MakeReciprocal = false verzichten könnte, wäre mir sehr willkommen. :)

Sabeta
 

Charlenni

Geomaster
Probier mal
Code:
itemx.Commands.combi = nil
itemy.Commands.combi = nil
itemz.Commands.combi = nil
wobei die MakeReciprocal = false eigentlich die richtige Lösung wäre. Was gefällt Dir an der nicht?
 
OP
S

Sabeta

Geocacher
ich möchte sowohl bei itema als auch bei itemx .. z den Befehl combi zur Auswahl stellen, daher eben :)

Code:
itemx.Commands.combi = nil
bewirkt nichts, was eigentlich auch logisch ist, da itemx keinen Befehl combi hat, der ist ja bei itema angelegt.

sabeta
 

Charlenni

Geomaster
Ok, ist bei WhereYouGo etwas anders implementiert als bei Garmins. Bei Garmins werden explizit Commands vom Type ZReciprocalCommand angelegt. Das passiert vermutlich bei OpenWIG (Engine von WhereYouGo) nicht.

Dann weiß ich nicht weiter :???:
 
OP
S

Sabeta

Geocacher
Derzeit teste ich das nur im Emulator vom Urwigo, ist also noch nicht WhereYouGo-spezifisch.

Die Idee dahinter war, das bestimmte Items, die eigentlich nur einmal bei einer bestimmten Sache verwendet werden, nach verwenden aus der Auswahlliste zu nehmen. Ich kann z.B. einen Apfel dem Kind geben, wenn es aber sagt: "nein", wäre es wenig sinnvoll, ihm später wieder den Apfel anzubieten, also könnte beim Befehl <gib> vom Kind die Verknüpfung zum Apfel gekappt werden. (Einfach den Befehl <gib> deaktivieren geht nicht, da ich dann auch alles andere nicht mehr geben könnte.) Das würde man nun auch mit der Bananne, dem Kürbis usw. machen, bis man eben dem Kind das richtige gegeben hat oder auch nicht, weil etwas ganz anderes die Lösung ist.
Die Auswahlliste der möglichen Dinge die ich mit <gib> geben kann würde so jedenfalls kleiner und somit für den Spieler übersichtlicher (aber auch leichter). Es gibt natürlich auch Befehle die man durchaus öfters auswählen könnte (oder sogar muss) und immer eine andere Aktion hervorrufen.


Ein Nachteil von MakeReciprocal = false wäre auch, das z.B. ein Kombi-Befehl wie <gib> nur beim Kind zu sehen wären, nicht jedoch beim Item Apfel, Buch, dann gibt es noch itemspezifische Befehle wie etwa essen (Apfel essen) oder lesen (Buch lesen)
Man sieht dann nur:
Kind -> gib (Apfel, Buch)
Apfel -> essen
Buch -> lesen

es fehlt
Apfel -> gib (Kind)
Buch -> gib (Kind)

möchte ich also den Apfel jemanden geben, muß ich hier das Kind auswählen und dort <gib> benutzen, möchte ich den Apfel essen, den Apfel

Für den Spieler wäre es nicht ganz logisch, wieso bestimmte Befehle die sich auf zwei Dinge beziehen, nur bei einem zu finden sind. Und da ist obiges Beispiel noch sehr einfach.

Richtig interessant wird es mit Schlüssel, Werkzeug und Tür und wenn das alles mit einander verwendet werden kann.

Schlüssel mit Werkzeug bearbeiten/anpassen
Tür mit Schlüssel öffnen
Tür mit Werkzeug öffnen/aufbrechen oder reparieren

Als Spieler erwarte ich in einen solchen Fall, bei jedem Item alle Befehle zu sehen
Werkzeug -> öffnen (Tür)
Werkzeug -> reparieren (Tür)
Schlüssel -> öffnen (Tür)
Schlüssel -> reparieren (Werkzeug)
Tür -> öffnen (Schlüssel, Werkzeug)
Tür -> reparieren (Werkzeug)

Sabeta
 

Charlenni

Geomaster
Ich glaube, ich weiß wo das Problem liegt. Wenn Du einen Eintrag aus der Tabelle WorksWithList entfernst, dann bekommt der Player nichts davon mit. Ist bei der Tabelle Points von Zonen genau so.

Du musst den Eintrag aus der Tabelle nehmen und dann die Tabelle mit den Commandos wieder den Commandos des Objekts zuweisen. Damit wird die komplette Command-Struktur neu aufgebaut und der Player bekommt mit, dass sich etwas geändert hat.
 
Oben