Technologie erforschen(GUI-Frage)
» Siedler Map Source Forum » Siedler DEdK Script Forum » Technologie erforschen(GUI-Frage)
Seiten: 1
andre111
|
#1 26.03.2010 18:28 Beiträge: 220 |
Technologie erforschen(GUI-Frage)
Hallo,
ich habe eine Funktion geschrieben, mit der man eine Technologie(in der Hochschule) erforschen kann, um Tore(wenn man sie selektiert hat) zu öffnen und zu schliesen.
Meine frage hierzu:
bisher ist mit einem klick auf den button die Technologie sofort erforscht.
Wie kann ich bei einem klick auf einen selbst erstellten Button eine normale Forschungsleiste(Dauer) erstellen?
Hier der Script:
function TorErweiterung() aktivAufZu() StartSimpleHiResJob("AufZuAktivJob") toraz = "" end function aktivAufZu() XGUIEng.TransferMaterials("Research_Banking","DestroyBuildingButton") XGUIEng.SetWidgetPosition("DestroyBuilding",200,120) XGUIEng.TransferMaterials("Research_Banking","Research_Gilds") XGUIEng.SetWidgetPosition("Research_Gilds",185,76) GUIAction_ToDestroyBuildingWindowOrig = GUIAction_ToDestroyBuildingWindow GUIAction_ToDestroyBuildingWindow = function() local sel = GUI.GetSelectedEntity() if IsEntityOfType( sel, "XD_WallStraightGate" ) then ReplaceEntity( sel, Entities.XD_WallStraightGate_Closed ) elseif IsEntityOfType( sel, "XD_WallStraightGate_Closed" ) then ReplaceEntity( sel, Entities.XD_WallStraightGate ) elseif IsEntityOfType( sel, "XD_DarkWallStraightGate" ) then ReplaceEntity( sel, Entities.XD_DarkWallStraightGate_Closed ) elseif IsEntityOfType( sel, "XD_DarkWallStraightGate_Closed" ) then ReplaceEntity( sel, Entities.XD_DarkWallStraightGate ) end end GUIAction_ReserachTechnologyOrig = GUIAction_ReserachTechnology GUIAction_ReserachTechnology = function(_a) if _a == Technologies.GT_Gilds then if toraz == "erforscht" then else local sel = GUI.GetSelectedEntity() if Logic.GetBuildingWorkPlaceUsage( sel ) == 0 then Message("In diesem Geb\195\164ude arbeitet niemand!") else if GetWood(1) >= 200 and GetStone(1) >= 200 then AddWood(-200) AddStone(-200) toraz = "erforscht" Sound.PlayGUISound( Sounds.VoicesMentor_RESEARCH_ResearchReady_rnd_01, 200 ) Message("Tore: \195\182ffnen und schliesen wurde erforscht!") GUITooltip_ResearchTechnologies = function(_a,_b) if _b == "MenuUniversity/Gilds" then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:170,170,170 Tore @cr @color:255,200,0 erm\195\182glicht: @color:255,255,255 Tore \195\182ffnen und schliesen. @cr Bereits erforscht!" ); XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Holz: "..GibTTHolz( 200, 1 ).." @cr Stein: "..GibTTStein( 200, 1 ).."" ); else GUITooltip_ResearchTechnologiesOrig(_a,_b) end end GUITooltip_NormalButton = function(_a) if _a == "MenuBuildingGeneric/destroybuilding" then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:170,170,170 Tor @cr @color:255,255,255 \195\150ffnet oder schliest das Tor" ); XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "" ); else GUITooltip_NormalButtonOrig(_a) end end else if GetWood(1) < 200 then local fehl = 200 - GetWood(1) Message("Euch fehlt "..fehl.." Holz!") Sound.PlayGUISound( Sounds.VoicesMentor_INFO_NotEnoughWood_rnd_01, 200 ) if GetStone(1) < 200 then local fehl = 200 - GetStone(1) Message("Euch fehlt "..fehl.." Stein!") end elseif GetStone(1) < 200 then local fehl = 200 - GetStone(1) Message("Nicht genug Holz oder Stein!") Sound.PlayGUISound( Sounds.VoicesMentor_INFO_NotEnoughStone_rnd_01, 200 ) end end end end else GUIAction_ReserachTechnologyOrig(_a) end end GUITooltip_NormalButtonOrig = GUITooltip_NormalButton GUITooltip_NormalButton = function(_a) if _a == "MenuBuildingGeneric/destroybuilding" then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:170,170,170 Tor @cr @color:255,255,255 \195\150ffnet oder schliest das Tor @cr Ben\195\182tigt die Hochschultechnologie: Tore" ); XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "" ); else GUITooltip_NormalButtonOrig(_a) end end GUITooltip_ResearchTechnologiesOrig = GUITooltip_ResearchTechnologies GUITooltip_ResearchTechnologies = function(_a,_b) if _b == "MenuUniversity/Gilds" then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:170,170,170 Tore @cr @color:255,200,0 erm\195\182glicht: @color:255,255,255 Tore \195\182ffnen und schliesen." ); XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Holz: "..GibTTHolz( 200, 1 ).." @cr Stein: "..GibTTStein( 200, 1 ).."" ); else GUITooltip_ResearchTechnologiesOrig(_a,_b) end end end function AufZuAktivJob() local sel = GUI.GetSelectedEntity() if IsEntityOfType( sel, "XD_WallStraightGate" ) or IsEntityOfType( sel, "XD_WallStraightGate_Closed" ) or IsEntityOfType( sel, "XD_DarkWallStraightGate" ) or IsEntityOfType( sel, "XD_DarkWallStraightGate_Closed" ) then XGUIEng.ShowWidget( "DestroyBuildingButton",1 ); -- if toraz == "erforscht" then XGUIEng.DisableButton(XGUIEng.GetWidgetID("DestroyBuildingButton"), 0) else XGUIEng.DisableButton(XGUIEng.GetWidgetID("DestroyBuildingButton"), 1) end else XGUIEng.ShowWidget( "DestroyBuildingButton",0 ); -- end if IsEntityOfType( sel, "PB_University1" ) or IsEntityOfType( sel, "PB_University2" ) then XGUIEng.ShowWidget( "Research_Gilds",1 ); -- if toraz == "erforscht" then XGUIEng.HighLightButton(XGUIEng.GetWidgetID("Research_Gilds"), 1) else XGUIEng.HighLightButton(XGUIEng.GetWidgetID("Research_Gilds"), 0) end else XGUIEng.ShowWidget( "Research_Gilds",0 ); -- end end function IsEntityOfType( _entity, _type ) if type( _entity ) == "nil" then return false; elseif type( _entity ) == "string" then _entity = GetEntityId( _entity ); end assert( type( _entity ) == "number" ); assert( type( _type ) == "string" ); if Logic.GetEntityTypeName( Logic.GetEntityType( _entity ) ) == _type then return true; end return false; end function GibTTGold( _amount, _id ) if not type(_id) == "number" then _id = 1; end local da = GetGold(_id); if da < _amount then return "@color:255,0,0 ".._amount.." @color:255,255,255" end return tostring(_amount); end function GibTTLehm( _amount, _id ) if not type(_id) == "number" then _id = 1; end local da = GetClay(_id); if da < _amount then return "@color:255,0,0 ".._amount.." @color:255,255,255" end return tostring(_amount); end function GibTTHolz( _amount, _id ) if not type(_id) == "number" then _id = 1; end local da = GetWood(_id); if da < _amount then return "@color:255,0,0 ".._amount.." @color:255,255,255" end return tostring(_amount); end function GibTTStein( _amount, _id ) if not type(_id) == "number" then _id = 1; end local da = GetStone(_id); if da < _amount then return "@color:255,0,0 ".._amount.." @color:255,255,255" end return tostring(_amount); end function GibTTEisen( _amount, _id ) if not type(_id) == "number" then _id = 1; end local da = GetIron(_id); if da < _amount then return "@color:255,0,0 ".._amount.." @color:255,255,255" end return tostring(_amount); end function GibTTSchwefel( _amount, _id ) if not type(_id) == "number" then _id = 1; end local da = GetSulfur(_id); if da < _amount then return "@color:255,0,0 ".._amount.." @color:255,255,255" end return tostring(_amount); end
Zum Aufrufen einfach: TorErweiterung() schreiben
Noigi
|
#2 27.03.2010 02:32 Beiträge: 772 |
Ein manuelles Basteln von so einer Forschungs-Leiste kann ich nicht empfehlen, schon gar nicht wenn das "normale" Erforschen parallel auch funktionieren soll.
Du kannst deine verwendete Technologie (GT_Gilds) aber einfach regulär erforschen lassen, und die Tor-Mechanik dann erst nach Abschluss der Forschung aktivieren.
GameCallback_OnTechnologyResearched_Orig = GameCallback_OnTechnologyResearched; GameCallback_OnTechnologyResearched = function(pID,techID,eID) GameCallback_OnTechnologyResearched_OrigWP(pID,techID,eID); if pID == 1 then if techID == Technologies.GT_Gilds then ...
Auf diese Weise werden natürlich die Originalkosten für GT_Gilds beim Klick mit abgebucht. Das kann man aber durch eine geschickte Abfragereihenfolge aushebeln.
andre111
|
#3 27.03.2010 08:04 Beiträge: 220 |
@Noigi: wie meinst du das mit normal erforschen lassen?
edit: wie viel kostet GT_Gilds denn normal?
edit2:
habs so versucht, kommt aber nur ne Leiste die sich nicht füllt:
GUIAction_ReserachTechnologyOrig = GUIAction_ReserachTechnology GUIAction_ReserachTechnology = function(_a) if _a == Technologies.GT_Gilds then if toraz == "erforscht" then else local sel = GUI.GetSelectedEntity() if Logic.GetBuildingWorkPlaceUsage( sel ) == 0 then Message("In diesem Geb\195\164ude arbeitet niemand!") else if GetWood(1) >= 200 and GetStone(1) >= 200 then AddWood(-200) AddStone(-200) GUIAction_ReserachTechnologyOrig(_a) else if GetWood(1) < 200 then local fehl = 200 - GetWood(1) Message("Euch fehlt "..fehl.." Holz!") Sound.PlayGUISound( Sounds.VoicesMentor_INFO_NotEnoughWood_rnd_01, 200 ) if GetStone(1) < 200 then local fehl = 200 - GetStone(1) Message("Euch fehlt "..fehl.." Stein!") end elseif GetStone(1) < 200 then local fehl = 200 - GetStone(1) Message("Nicht genug Holz oder Stein!") Sound.PlayGUISound( Sounds.VoicesMentor_INFO_NotEnoughStone_rnd_01, 200 ) end end end end else GUIAction_ReserachTechnologyOrig(_a) end end
Dieser Beitrag wurde von andre111 am 27.03.2010 um 08:29 editiert.
Noigi
|
#4 27.03.2010 14:48 Beiträge: 772 |
Mit normal erforschen meine ich genau das, was du gemacht hast, also in der gehackten GUIAction_ReserachTechnology nur die Ressourcen überprüfen und dann die Originalfuktion aufrufen.
Wenn das mit GT_Gilds nicht richtig klappt nimm GT_Taxation, damit hab ich sowas schonmal getestet. Taxation kostet meine ich 100 Taler.
Seiten: 1