Eigene Findebuttons

» Siedler Map Source Forum » Siedler DEdK Script Forum » Eigene Findebuttons

Seiten: 1

wilma456
#1
03.04.2017 18:02
Beiträge: 460

Eigene Findebuttons

Da ich gerade an einem Update meiner Map werkle, ist mir die Idee gekommen, eigne Findebuttons für die Raubritter und die Banditenschützen einzubauen. Also habe ich erstmals den Kanonen Findebutton überschrieben:

function KeyBindings_SelectCannons()
    KeyBindings_SelectUnit(UpgradeCategories.BlackKnightLeaderMace1,0)
end


Funktioniert perfekt! Wenn ich den Button anblicke wird ein Raubritter ausgewählt. Aber jetzt wird es kompliziert: Bei allen anderen Buttons muss ich die Funktion KeyBindings_SelectUnit überschreiben (Also die Funktion, die ich brauche). Deshalb habe ich folgendes in die FMA geschrieben:

FindeEinheit = KeyBindings_SelectUnit


Und weiter unten im Skript:

function KeyBindings_SelectCannons()
	FindeEinheit(UpgradeCategories.BlackKnightLeaderMace1,0)
end

function KeyBindings_SelectUnit()
	FindeEinheit(UpgradeCategories.LeaderBanditBow,0)
end


Wenn ich jetzt jedoch auf einen Findebutton klicke (auch auf den der Kanone/Raubritter) stürzt das Spiel ab. Wie kann ich nun die Button überschreiben?

____________________
Schlacht um Crawford

Wilmasmod

mcb
#2
03.04.2017 19:02
Beiträge: 1472

Versuch mal die beiden Funktionen auch in die FMA zu packen (unter die andere Zeile). Sie überschreiben die Originalen beim Laden des Scriptes und danach wird die FMA aufgerufen, die FindeEinheit setzt. Gibt dann am Ende eine schöne Endlosrekursion

wilma456
#3
04.04.2017 21:03
Beiträge: 460

Das führt leider nur zu einem Stack Overflow beim laden der Map.

Aber ich habe eine andere Lösung gefunden: Die FindeEinheit = KeyBindings_SelectUnit Zeile muss außerhalb einer Funktion vor dem Überschreiben von KeyBindings_SelectUnit stehen.

____________________
Schlacht um Crawford

Wilmasmod

Noigi
#4
20.04.2017 13:23
Beiträge: 772

Hi! Ich habe mal eine Comfort-Funktion für custom FindUnit-Buttons geschrieben. Ich meine, sie müsste auch in der TRIBE-Map enthalten sein. Wenn ich zu Hause bin, kann ich noch mal nachsehen.

Zu deinem Problem: Ich meine mich zu erinnern, dass KeyBindings_SelectUnit eine Upgrade-Category als Parameter übergibt.

wilma456
#5
20.04.2017 14:31
Beiträge: 460

Ich konnte das Problem bereits selbst lösen. Trotzdem danke.

____________________
Schlacht um Crawford

Wilmasmod

castleplayer
#6
20.04.2017 23:30
Beiträge: 243

Zitat von mcb:
Gibt dann am Ende eine schöne Endlosrekursion

Zitat von wilma456:
Das führt leider nur zu einem Stack Overflow beim laden der Map.


Das ist so ne miese Eigenschaft, die Endlosrekursionen nicht loswerden wollen

@Noigi
Ja es werden UpgradeCategories zurückgegeben
In zusammenhang mit S5Hook könnte man damit also theoretisch für noch mehr Einheiten - sofern sie eine UpgradeCategory darstellen - einen extra Findebutton machen.
Für die Kanonen dürfte das leider nicht gehen, da SelectCannons keine Übergabeparameter hat.

Für alle die es auch interressiert ich hab auch mal den Code zusammengeschrieben und will ihn hier niemandem vorenthalten (ich würde ihn eh bald in nem Update in den NV-Maps reintun)

KeyBindings_SelectUnit_Orig = KeyBindings_SelectUnit
KeyBindings_SelectUnit = function(_unit)
	KeyBindings_SelectUnit_Orig(_unit)
	if _unit == UpgradeCategories.X then
		KeyBindings_SelectUnit(UpgradeCategories.Y, 0)
	end
end



____________________
Wenn die KI immer frontal angreift, wofür steht dann Das I in Künstliche Intelligenz?
Das neueste vom Nebelvolk!

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum