Find Unit Buttons

» Siedler Map Source Forum » Siedler DEdK Script Forum » Find Unit Buttons

Seiten: 1

Play4FuN
#1
04.01.2022 21:12
Beiträge: 704

Find Unit Buttons

Aus der Kategorie "es hat zwar niemand danach gefragt, aber ich teile es dennoch mal mit euch"

In einigen Karten habe ich gesehen, dass der Spieler Einheiten kontrolliert, die über seinem Tech Level liegen. Z.B. Spieler hat Schwertkämpfer noch nicht in der Kaserne aufgerüstet (hat nur Stufe 1), bekommt aber Schwertis von Stufe 4. Dann wird der Schwertkämpfer finden Button nicht angezeigt - ergo man kann sie nicht auf diese Weise auffinden. Um das zu beheben kann folgeneder Code verwendet werden (in der FMA aufrufen). Funktioniert natürlich auch für Schützen usw.

-- display find buttons even if the player tech level is too low (e.g. find LeaderSword4 when the player has not upgraded swordsman yet)
-- overwrites GUIUpdate_FindView function in updatebuttons.lua
function P4FComforts_FindButtonFix()

	GUIUpdate_FindView = function()
		
		local PlayerID = GUI.GetPlayerID()
		
		-- Serfs
		local SerfAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_Serf )
		if SerfAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindIdleSerf, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindIdleSerf, 0 )
		end	
		
		-- Sword
		local PlayerSwordmenAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderSword1 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderSword2 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderSword3 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderSword4 )
		if PlayerSwordmenAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindSwordLeader, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindSwordLeader, 0 )
		end
		
		-- Spear
		local PlayerSpearmenAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderPoleArm1 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderPoleArm2 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderPoleArm3 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderPoleArm4 )
		if PlayerSpearmenAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindSpearLeader, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindSpearLeader, 0 )
		end
		
		-- Bow
		local PlayerBowmenAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderBow1 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderBow2 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderBow3 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderBow4 )
		if PlayerBowmenAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindBowLeader, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindBowLeader, 0 )
		end
		
		-- light Cavalry
		local PlayerCavalryAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderCavalry1 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderCavalry2 )
		if PlayerCavalryAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindLightCavalryLeader, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindLightCavalryLeader, 0 )
		end
		
		-- heavy Cavalry
		local PlayerHeavyCavalryAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderHeavyCavalry1 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderHeavyCavalry2 )
		if PlayerHeavyCavalryAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindHeavyCavalryLeader, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindHeavyCavalryLeader, 0 )
		end
		
		-- cannons	
		local Cannon1 = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PV_Cannon1 )
		local Cannon2 = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PV_Cannon2 )
		local Cannon3 = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PV_Cannon3 )
		local Cannon4 = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PV_Cannon4 )
		local CannonAmount = Cannon1 + Cannon2 + Cannon3 + Cannon4
		if CannonAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindCannon, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindCannon, 0 )
		end
		
		-- rifle	
		local PlayerRifleAmount = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderRifle1 )
			+ Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_LeaderRifle2 )
		if PlayerRifleAmount > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindRifleLeader, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindRifleLeader, 0 )
		end
		
		-- Scout
		local Scout = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_Scout )	
		if Scout > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindScout, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindScout, 0 )
		end
		
		-- Thief
		local Thief = Logic.GetNumberOfEntitiesOfTypeOfPlayer( PlayerID, Entities.PU_Thief )	
		if Thief > 0 then
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindThief, 1 )
		else
			XGUIEng.ShowWidget( gvGUI_WidgetID.FindThief, 0 )
		end
		
	end

end



____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

BalistiK
#2
10.01.2022 08:44
Beiträge: 70

Nice

Das ist nice. Gefällt mir

Seiten: 1

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

Impressum