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

Zugriff auf Command eines Characters per LUA?

DerLalo

Geonewbie
Hallo allerseits,

bisher bin ich durch lesen der vielen guten Einträge hier ja schon recht weit gekommen mit meinem ersten WIG, aber gerade hängt es leider.. Und zwar habe ich folgendes Problem:
Aus komfortgründen habe ich mir eine Funktion programmiert, die das Einsteigen in eine Straßenbahn erledigt. In der Straßenbahn ist eine Schaffnerin (Character) mit den Commands "Billet kaufen" und "Aussteigen". Da diese beiden Commands im Spielverlauf (grafisch programmiert) öfter mal auf Enabled=false gesetzt werden, sollen sie nun beim Einsteigen wieder auf Enabled=true geschaltet werden.

Die Schaffnerin hat den Identifier "Schaffnerin", für die Commands habe ich "cBilletkaufen" und "cAussteigen" vorgesehen. [Anm: alle anderen Items, Zonen,.. haben einen eindeutigen Präfix wie das c für command, das ist bei den Personen hier aber unnötig].
In meinem jugendlichen Leichtsinn habe ich jetzt versucht zu schreiben:
Code:
function fEinsteigen(vOrt)
	Schaffnerin.cBilletkaufen.Enabled = true
	Schaffnerin.cAussteigen.Enabled = true
        [...]
end
Die Fehlermeldung lautet "attempt to index field 'cBilletkaufen' (a function value)" und kommt auch wenn ich ohne Schaffnerin. direkt zugreifen möchte.
Kann mir jemand erklären, warum das nicht tut und was ich stattdessen machen kann?

Großen Dank schonmal,
DerLaló
 

Charlenni

Geomaster
Alle Commands, die zu einem Objekt gehören, sind in der Tabelle "Commands" hinterlegt. Der richtige Zugriff erfolgt dann über das "Keyword", normalerweise der Name ohne Leerzeichen. Richtig wäre dann:
Code:
Schaffnerin.Commands["Billetkaufen"].Enabled = true
Schaffnerin.Commands.Billetkaufen.Enabled = true
Beide Methoden sollten gleichwertig sein.
 
OP
D

DerLalo

Geonewbie
Hallo Charlenni,

vielen Dank für deine Hilfe, es hat geklappt :)..

Kleine Anmerkung allerdings noch, falls jemand auf das gleiche Hindenis stößt: da ich den Identifier der Commands geändert habe, musste ich diese verwenden, also eines der beiden
Code:
Schaffnerin.Commands["cBilletkaufen"].Enabled = true
Schaffnerin.Commands.cBilletkaufen.Enabled = true

Danke, jetzt kann's weitergehen :)
 
Vielen Dank für diesen Thread, ich konnte dies nutzen um den Text eines Commands, der auf dem Button angezeigt wird, zu ändern (brauche ich, weil ich gerade auf mehrsprachig umstelle):

Code:
objZwischenstand.Commands.cmdZwischenstandausgeben.Text = "Show intermediate status"
 

Charlenni

Geomaster
In dem Zusammenhang schon einmal Earwigo angeschaut. Ist bestens für mehrsprachige Cartridges geeignet. Sprache kann dann beim Start ausgewählt werden. Geht ganz einfach.
 
Oben