GUI Tooltipp will sicht nicht ändern

» Siedler Map Source Forum » Siedler DEdK Script Forum » GUI Tooltipp will sicht nicht ändern

Seiten: 1

Drake
#1
24.06.2010 09:35
Beiträge: 132

GUI Tooltipp will sicht nicht ändern

Hi leute ich hab mal ne Frage warum Funzt diese Funktion net HILFE!!!

function HeroAbilities()
Action()
ToolTipp()
end
function ToolTipp()
GUITooltip_Generic_Orig = GUITooltip_Generic;
GUITooltip_Generic = function(a)
if a == "MenuCommandsGeneric/expel" then
	XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText,"Euer Held nimmt @color:190,255,0 Gift @color:255,255,255 und vergiftet alle Einheiten in seiner nähe!")
else
	GUITooltip_Generic_Orig(a);
end
end
end
function Action()
GUIAction_ExpelSettler_Original = GUIAction_ExpelSettler
 function GUIAction_ExpelSettler()
	pos = GetPosition("Held")
	pX = pos.X --woher soll GetPosition wissen, ob du X oder Y willst?
	pY = pos.Y
Logic.CreateEffect( GGL_Effects.FXKalaPoison, pos.X, pos.Y, 1 );
	TowerData = {Logic.GetPlayerEntitiesInArea(2, 0, pX, pY, 500, 6)} --Liefert so geschrieben ein table zurück
	for i = 2, TowerData[1]+1, 1 do
	Logic.HurtEntity(TowerData[i], 200)
	end
end
end



und das will auch net hinnhauen :

XGUIEng.TransferMaterials("Hero8_Poison", "MenuCommandsGeneric/expel")

XGUIEng.TransferMaterials("Buy_Serf", "Technologies.T_LightBricks")

Mordred
#2
24.06.2010 10:10
Beiträge: 939

function HeroAbilities()
 Action()
 ToolTipp()
end
function ToolTipp()
GUITooltip_Generic_Original = GUITooltip_Generic
 function GUITooltip_Generic(_menu)
  if (_menu == "MenuCommandsGeneric/expel")then
   XGUIEng.SetText(gvGUI_WidgetID.TooltipBottomText,"Euer Held nimmt @color:190,255,0 Gift @color:255,255,255 und vergiftet alle Einheiten in seiner Nähe!")
  else
   GUITooltip_Generic_Original(_menu)
  end
 end
end
function Action()
GUIAction_ExpelSettler_Original = GUIAction_ExpelSettler -- unnötig - wird ja eh nicht verwendet
 function GUIAction_ExpelSettler()
  Logic.CreateEffect(GGL_Effects.FXKalaPoison,GetPosition("Held").X,GetPosition("Held").Y,1)
  TowerData = {Logic.GetPlayerEntitiesInArea(2,0,GetPosition("Held").X,GetPosition("Held").Y,500,6)} --Liefert so geschrieben ein table zurück (schlau! Besser gesagt eins mit 6 Entities von spieler 2)
   for i = 2, TowerData[1]+1, 1 do
    Logic.HurtEntity(TowerData[i], 200)
   end
 end
end



hi Drake
Ich bin erstaunt
denn tooltipps und GUIActions sind schon etwas schwerer - Respekt.
Allerdings ist dein Code - auch der oben - generell für entlassen. DH, egal bei welcher entity du "entlassen" klickst, es wird immer diese Aktion ausgeführt und es erschein immer der "gefälschte" tooltipp(bei jeder xbeliebigen einheit).
Dann wird schon etwas schwerer.

Drake
#3
24.06.2010 10:41
Beiträge: 132

THX Mordred

Anarki
#4
24.06.2010 12:17
Beiträge: 518

Mh, Anmerkung.
Nutzt du notepad++ ?
Wenn nein, bitte tu es
Wenn ja, bitte rücke doch per Tab etc deine Funktionen ein bevor du sie per copy paste hier einfügst... es ist schlecht wenn 'wir' erstmal die Funktionen selbst einrücken müssen um die zu helfen.

Verstehst was ich meine?

z.B. also bitte So:

function MeineFunktion()
	meineVariable = false
	for i = 1, 20 do
		if i > 10 then
			if i == 15 then
				meineVariable = true
			end
			if i == 17 and meineVariable == true then
				break
			end
		end
	end
end



STATT SO:

function MeineFunktion()
meineVariable = false
for i = 1, 20 do
if i > 10 then
if i == 15 then
meineVariable = true
end
if i == 17 and meineVariable == true then
break
end
end
end
end



Denke es wird klar was ich meine...

____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren

warrior1024
#5
24.06.2010 14:06
Beiträge: 345

function HeroAbilities()
	Action()
	ToolTipp()
end
function ToolTipp()
	GUITooltip_Generic_Orig = GUITooltip_Generic;
	GUITooltip_Generic = function(a)
		local sel = GUI.GetSelectedEntity() --Welche Entity ist selektiert? sel ist die ID der selektierten Entity.
		if sel == GetEntityID("Held") then
			if a == "MenuCommandsGeneric/expel" then
				XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText,"Euer Held nimmt @color:190,255,0 Gift @color:255,255,255 und vergiftet alle Einheiten in seiner nähe!")
			else
				GUITooltip_Generic_Orig(a);
			end
		else
			GUITooltip_Generic_Orig(a)
		end
	end
end
function Action() --Cooldown vielleicht?
	GUIAction_ExpelSettler_Original = GUIAction_ExpelSettler
	GUIAction_ExpelSettler() = function()
		local sel = GUI.GetSelectedEntity()
		if sel == GetEntityID("Held") then
			local pos = GetPosition("Held")
			local pX = pos.X --woher soll GetPosition wissen, ob du X oder Y willst? --Schön kopiert!
			local pY = pos.Y
			Logic.CreateEffect( GGL_Effects.FXKalaPoison, pos.X, pos.Y, 1 );
			local TowerData = {Logic.GetPlayerEntitiesInArea(2, 0, pX, pY, 500, 6)} --Liefert so geschrieben ein table zurück
			for i = 2, TowerData[1]+1, 1 do
				Logic.HurtEntity(TowerData[i], 200) --Böse! Kann ins Auge gehen, wenn Leader getötet wird, aber noch Soldaten der Truppe existieren!
			end
		else
			GUIAction_ExpelSettler_Original()
		end
	end
end



Das mit dem Einrücken geht mit der Tabulator-Taste(die über CapsLock[ist mies, wer hat die erfunden?] und Shift[die Taste zum Großschreiben]).
Im Browser(GoogleChrome, Firefox, InternetExplorer, Opera) macht der Tabulator was anderes.
Sogar im mitgelieferten Windoof-Editor kannst du Tabulator benutzten, aber mit Notepad++ hast du eine halbautomatische Einrückung.
Der Code müsste funktionieren, hat eine tolle Einrückung und Kommentare, auf die ich näher eingehe, um dir zu zeigen, auf was man achten sollte:
Zeile 26:
Immernoch mein Kommentar drin? Deswegen: Stell dir vor, du machst eine Testmap und setzst an die Position bei der X-Koordinate 2000 und bei der Y-Koordinate 3500 eine Entity mit Skriptnamen "Hans".
Dann liefert GetPosition("Hans" sowas zurück: {X = 2000, Y = 3500}
Verstanden?
Zeile 29:
Nochmal schön kopiert, wenigstens mit abgeänderten Parametern.
Zeile 8:
GUI.GetSelectedEntity ist dein Freund! Mit der Abfrage in Zeile 9 kannst du dann überprüfen, ob der Spieler den Helden selektiert hat. Wichtig: Die Funktion liefert eine ID!
Der schlimmste Fehler in Zeile 31:
Stell dir vor, ein Leader mit 8 Soldaten im Schlepptau kommt, kriegt den Schaden und stirbt, aber seine Soldaten existieren noch. Wenn du Glück hast, ist der Spieler irritiert, wenn du Pech hast, verabschiedet sich das Spiel ohne Fehlermeldung.
Wie vermeiden?
So: Lösung
Dann noch die ganze Funktion:
Cooldown(wie beim Scout-Försterskript)/Kosten(vielleicht steigend?) wäre/wären vorteilhaft, sonst setzt der Spieler die Funktion zu oft ein.

warrior1024

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Seiten: 1

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

Impressum