ja... beim Teleporter + Console wurde auch immer (int i,pClonk) weitergegeben. Hat ne weile gedauert, bis ich einigermaßen verstanden habe, wie ich das dann in den MenüEinträgen nutze. Das einzige, was ich noch nicht verstanden habe, ist wie ich solche Parameter von Funktion zu Funktion weitergebe. Wenn ich das dann verstanden habe, kann ihc glaub ich auch das Rüstungsproblem lösen.
Deswegen nochmal ein Auszug aus dem Geschütz:
public func ConsoleControlled(int i, pClonk)
{
if(i == 1)
{
if(Active) Active = 0;
else
{
Active = 1;
}
}
if(i == 2)
{
ChooseWeapon(int i, pClonk);Log("ChooseW. wurde aufgerufen");
};
}
func ChooseWeapon(int i,pClonk)
{
Log("bin aufgerufen");
CreateMenu (GetID(), pClonk, 0, 0, "wähle Waffe", 0,1, 0, 0);
AddMenuItem ("Mit MG ausrüsten", "Arm", MGSA, GetCursor(GetOwner()), 0, 0, "Rüstet das Geschütz mit einer MG aus");
AddMenuItem ("Mit Railgun ausrüsten", "Arm", RGSA, GetCursor(GetOwner()), 0, 0, "Rüstet das Geschütz mit einer Railgun aus");
}
und hier der Bedienungsausschnit aus der Konsole:
protected func ControlDig(pClonk)
{
CreateMenu(GetID(target), pClonk, target, 0, Format("$Control$: %s", GetName(target)), 0, 1);
for(var i = 1, desc ; desc = target->~ConsoleControl(i) ; i++)
{
//Aufrufenden Clonk und uns selbst dem Zielobjekt übergeben. Dies kann es in ConsoleController abrufen
// target->~ConsoleController(this(), pClonk);
// Zielobjekt muss für ConsoleControl(i) jeweils den Namen der Aktion zurückgeben, wichtig: i beginnt bei 1
AddMenuItem(desc, Format("ConsoleControlled(%d, %d, %d)", i, ObjectNumber(pClonk), ObjectNumber(this())), GetID(), pClonk, 0, pClonk, "$Control$");
// Zielobjekt bekommt Aufruf: ConsoleControll(i) und muss das dann verarbeiten
}
return(1);
}
So. Das heißt die Console sollte sowohl i , als auch pClonk weitergeben (weil pClonk als 2ter Parameter in AddMenuItem angegeben ist, vorher stand dort 0).
Soweit meckert auch keine Funktion über ein "unknown pClonk". Aber wenn ich es so schreibe, wie hier zu sehen, dann wird über ein "unknown int" gemeckert, welches sich in ConsoleControlled des Geschütz befinden soll. Demnach gehe ich davon aus, dass alles soweit richtig ist, aber der Aufruf:
if(i == 2) {ChooseWeapon(int i, pClonk);Log("ChooseW. wurde aufgerufen"); };
so nicht funktioniert. Also wie kann ich korrekt die Daten an die ChooseWeapon Funktion weitergeben?
edit:
(wie an den AddMenuItem Einträgen von ChooseWeapon ersichtlich, habe ich es letzlich nun mit GetCursor gelöst, anstatt pClonk. Aber bei den Rüstungen geht das natürlich nicht ^^)