Noch eine Frage
» Siedler Map Source Forum » Siedler DEdK Script Forum » Noch eine Frage
Seiten: 1
Drake
|
#1 24.06.2010 11:12 Beiträge: 132 |
Noch eine Frage
Warum bekomme ich immer ne Fehlermeldung?
Script.Load( Folders.MapTools.."Main.lua" ) IncludeGlobals("MapEditorTools") function FirstMapAction() ModusNormal() --ModusDebug() _Kaufe = "Kauft einen Leibeigenen" _Kosten = " @cr 50 Taler" end --FMA Ende :D function StartTesten() SU(5) --MakeInvulnerable("Held") end function StartAllMain() _num = 1 --XGUIEng.TransferMaterials("Hero8_Poison", "MenuCommandsGeneric/expel") XGUIEng.TransferMaterials("Buy_Serf", "1140") Haupthaus() CamStart() Serf() Klick = 0 Player = 1 Type = 0 Sollis = 0 Tools.ExploreArea( -1, -1, 900 ) StartSimpleJob("HeroAbilities") end function Haupthaus() GroupSelection_SelectTroops_Orig = GroupSelection_SelectTroops function GroupSelection_SelectTroops(c) if c == 1 then _num = 1 XGUIEng.TransferMaterials("Buy_Serf", "1140") elseif c == 2 then _num = 2 XGUIEng.TransferMaterials("Hero8_Poison", "1140") elseif c == 3 then _num = 3 XGUIEng.TransferMaterials("Hero3_Heal", "1140") elseif c == 4 then _num = 4 XGUIEng.TransferMaterials("Hero5_Camouflage", "1140") return true end end end function Tool(a) if a == 1 then AddGold(-50) i = i + 1 CreateEntity(1,Entities.PU_Serf,GetPosition("GetSerf"),"Serf"..i) Move("Serf"..i,"SerfMove") Serf() _Kaufe = "Kauft einen Leibeigenen" _Kosten = " @cr 50 Taler" elseif a == 2 then pos = GetPosition("haupt") pX = pos.X --woher soll GetPosition wissen, ob du X oder Y willst? pY = pos.Y Logic.CreateEffect( GGL_Effects.FXMaryPoison, pos.X, pos.Y, 1 ); TowerData = {Logic.GetPlayerEntitiesInArea(2, 0, pX, pY, 900, 20)} --Liefert so geschrieben ein table zurück for i = 2, TowerData[1]+1, 1 do Logic.HurtEntity(TowerData[i], 300) end _Kaufe = "Euere Lehmhütte wird ein paar einheiten in ihrer nähe vergiften!" _Kosten = " @cr 100 Schwefel" elseif a == 3 then local health = Logic.GetEntityHealth("haupt") local maxHealth = Logic.GetEntityMaxHealth("haupt") SetHealth("haupt",( (health/maxHealth) * 100) + 50) _Kaufe = "Euere Lehmhütte heielt sich um 50 Prozent" _Kosten = " @cr 500 Stein" elseif a == 4 then MakeInvulnerable("haupt") StartCountdown(120,End,true) _Kaufe = "Euere Lehmhütte wird fuer 2 min Unsterblich!" _Kosten = " @cr 200 Lehm" return true end end function End() MakeVulnerable("haupt") end function Serf() XGUIEng.ShowWidget( 1140, 1 ) GUITooltip_ResearchTechnologies_Orig = GUITooltip_ResearchTechnologies GUITooltip_ResearchTechnologies = function(_a) if _a == 120 then --XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "".._Kaufe.."" ); --XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "".._Kosten.."" ); else GUITooltip_ResearchTechnologies_Orig(_a) end end GUIAction_ReserachTechnology_OrigProtected = GUIAction_ReserachTechnology GUIAction_ReserachTechnology = function(_tech) if _tech == 120 then Tool(_num) else GUIAction_ReserachTechnology_OrigProtected(_tech) end end end 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 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,600)} for i = 2, TowerData[1]+1, 1 do Logic.HurtEntity(TowerData[i], 200) end end end function ModusNormal() StartAllVariables() StartAllMain() StartAllOther() StartTesten() StartGlobalAi() StartGlobalNames() StartGlobalColors() StartGlobalRecourcen() StartGlobalDiplomatic() StartGlobalGfxSets() StartGlobalWeather() StartGlobalTechnologies() end function ModusDebug() StartAllVariables() StartAllMain() StartAllOther() StartTesten() end --Script Beginn ;) function CamStart() local cutsceneTable = { StartPosition = { position = GetPosition("Held"), angle = 25, zoom = 2500, rotation = -20 }, Flights = { { position = GetPosition("Caeser"), angle = 15, zoom = 700, rotation = -80, duration = 20, delay = 0, title = "@color:255,127,0 Vorspann", text = "Die weiten Landschaften Germaniens.So friedlich wie ein Hase auf einer Wiese.Doch nun wurden immer mehr Völker von dem Mächtigen Julius Caeser unterworfen wer sich ihm nich anschloss musste sterben.Er war der stärkste König Roms, denn er war gefährlich für euch ihr übernehmt das Reich der Sveden.", }, { position = GetPosition("Held"), angle = 50, zoom = 900, rotation = -40, duration = 20, delay = 3, title = "@color:255,127,0 Vorspann", text = "Doch nur einer der Sveden wird es schaffen sich gegen Caeser zu Behaupten.Und dieser widr Caeser von Tron stoßen dieser Held wird alle Germanen Befreien.......", }, }, Callback = function() Einleitung() end } StartCutscene(cutsceneTable) end function Einleitung() local briefing = {}; briefing.finished = function() Spielstart_NameAbfragen() end local AP = function(_page) table.insert(briefing, _page); return _page; end; local page1 = AP{ title = "Mentor", text = "Caesers Leute werden nicht lange warten schnell, benennt euren Held wie ihr wollt, Achtung gebt den ersten Buchstaben Doppelt ein!Gebt einfach den Namen den ihr wollt in die Zeile unten ein.Verstanden?OK dann kann es ja los gehen ;)", position = GetPosition("Held"), dialogCamera = true, quest = { title = "Euer Held", -- Ein neuer Quest wird erstellt text = "Bitte benennt euren Held wie ihr wollt Achtung gebt den ersten Buchstaben Doppelt ein!gebt einfach den Namen den ihr wollt in die Zeile unten ein.Verstanden?OK dann kann es ja los gehen ;)", type = SUBQUEST_OPEN, -- Hauptquest oder optionaler Quest? Unterschied ist Farbe des Icons id = 1 -- Jeder Quest hat eine eindeutige ID } }; StartBriefing(briefing); end function Spielstart_NameAbfragen() Message("Gebt hier bitte ein, wie euer Held in dieser Map heissen soll.") XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1) function GameCallback_GUI_ChatStringInputDone(_string) SetPlayerName(1,_string) Name = "".._string.."" Weiter() end end function Weiter() local briefing = {}; briefing.finished = function() end local AP = function(_page) table.insert(briefing, _page); return _page; end; local page1 = AP{ title = "Mentor", text = "Willkommen "..Name..".Achtung Caeser kommt schnell, baut eine Kaserne um euch zu verteidigen und zerstört das erste Lager!", position = GetPosition("Held"), dialogCamera = true, quest = { title = "Caeser", -- Ein neuer Quest wird erstellt text = "Schnell Caeser ist Stark verteidigt euch gegen ihn fällt eure Burg(Lehmhütte) hat ihr verloren!", type = SUBQUEST_OPEN, -- Hauptquest oder optionaler Quest? Unterschied ist Farbe des Icons id = 2 -- Jeder Quest hat eine eindeutige ID } }; StartBriefing(briefing); end function Marker() local pos = GetPosition("Held"); Logic.CreateEffect( GGL_Effects.FXDarioFear, pos.X, pos.Y, 1 ); end function StartAllVariables() HeroLVL = 1 Hero_LVL = " @color:190,255,0 "..HeroLVL.."" Held = StartSimpleJob("Hero") i = 0 end function StartAllOther() ReplaceEntity("GATE", Entities.XD_PalisadeGate2) StartJob("Marker") StartSimpleJob(Held) StartSimpleJob("HeroDead") StartSimpleHiResJob("Tower_of_Life") XGUIEng.SetText( "TopMainMenuTextButton", "@color:0,0,0,0: ....... @color:255,255,255 Menü @cr @cr Info über Held: @cr @color:255,0,0 Lvl."..Hero_LVL.."") end
function SU(_oft) if _oft == 1 then SpeedUpGame() elseif _oft == 2 then SpeedUpGame() SpeedUpGame() elseif _oft == 3 then SpeedUpGame() SpeedUpGame() SpeedUpGame() elseif _oft == 4 then SpeedUpGame() SpeedUpGame() SpeedUpGame() SpeedUpGame() elseif _oft == 5 then SpeedUpGame() SpeedUpGame() SpeedUpGame() SpeedUpGame() SpeedUpGame() return true end end function HeroDead() if IsDead("Held") then Held = StartSimpleJob("Hero") Held2 = StartSimpleJob("HeroDead") EndJob(Held) EndJob(Held2) Message("Oh nein Euer held is Besiegt wartet 2 min dann wird er wieder im Dorf erscheinen!") StartCountdown(120,HeroAllive,false) return true end end function HeroAllive() Held = StartSimpleJob("Hero") Held2 = StartSimpleJob("HeroDead") CreateEntity(1,Entities.PU_LeaderHeavyCavalry1,GetPosition("HeroStart"),"Held") Message("Gut euer Held ist wieder Bereit!") StartSimpleJob(Held) StartSimpleJob(Held2) end function Hero() local health = Logic.GetEntityHealth("Held") local maxHealth = Logic.GetEntityMaxHealth("Held") SetHealth("Held",( (health/maxHealth) * 100) + 1) end function StartCountdown(_Limit, _Callback, _Show) assert(type(_Limit) == "number") assert( not _Callback or type(_Callback) == "function" ) Counter.Index = (Counter.Index or 0) + 1 if _Show and CountdownIsVisisble() then assert(false, "StartCountdown: A countdown is already visible") end Counter["counter" .. Counter.Index] = {Limit = _Limit, TickCount = 0, Callback = _Callback, Show = _Show, Finished = false} if _Show then MapLocal_StartCountDown(_Limit) end if Counter.JobId == nil then Counter.JobId = StartSimpleJob("CountdownTick") end return Counter.Index end function StopCountdown(_Id) if Counter.Index == nil then return end if _Id == nil then for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end Counter["counter" .. i] = nil end end else if Counter.IsValid("counter" .. _Id) then if Counter["counter" .. _Id].Show then MapLocal_StopCountDown() end Counter["counter" .. _Id] = nil end end end function CountdownTick() local empty = true for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter.Tick("counter" .. i) then Counter["counter" .. i].Finished = true end if Counter["counter" .. i].Finished and not IsBriefingActive() then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end -- callback function if type(Counter["counter" .. i].Callback) == "function" then Counter["counter" .. i].Callback() end Counter["counter" .. i] = nil end empty = false end end if empty then Counter.JobId = nil Counter.Index = nil return true end end function CountdownIsVisisble() for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) and Counter["counter" .. i].Show then return true end end return false end function StartCutscene(_Cutscene) local length = 0 local i for i = 1, table.getn(_Cutscene.Flights) do length = length + _Cutscene.Flights[i].duration + (_Cutscene.Flights[i].delay or 0) end gvCutscene = { Page = 1, Flights = _Cutscene.Flights, EndTime = Logic.GetTime() + length, Callback = _Cutscene.Callback, Music = Music.GetVolumeAdjustment(), } cutsceneIsActive = true Logic.SetGlobalInvulnerability(1) Interface_SetCinematicMode(1) Display.SetFarClipPlaneMinAndMax(0, 14000) Music.SetVolumeAdjustment(gvCutscene.Music * 0.5) Sound.PlayFeedbackSound(0,0) GUI.SetFeedbackSoundOutputState(0) --Sound.StartMusic(1,1) Camera.StopCameraFlight() Camera.ZoomSetDistance(_Cutscene.StartPosition.zoom) Camera.RotSetAngle(_Cutscene.StartPosition.rotation) Camera.ZoomSetAngle(_Cutscene.StartPosition.angle) Camera.ScrollSetLookAt(_Cutscene.StartPosition.position.X,_Cutscene.StartPosition.position.Y) Counter.SetLimit("Cutscene", -1) StartSimpleJob("ControlCutscene") end function ControlCutscene() if not gvCutscene then return true end if Logic.GetTime() >= gvCutscene.EndTime then CutsceneDone() return true else if Counter.Tick("Cutscene") then local page = gvCutscene.Flights[gvCutscene.Page] if not page then CutsceneDone() return true end Camera.InitCameraFlight() Camera.ZoomSetDistanceFlight(page.zoom, page.duration) Camera.RotFlight(page.rotation, page.duration) Camera.ZoomSetAngleFlight(page.angle, page.duration) Camera.FlyToLookAt(page.position.X, page.position.Y, page.duration) if page.title ~= nil then PrintBriefingHeadline("@color:255,250,200 " .. page.title) end if page.text ~= nil then PrintBriefingText(page.text) end if page.action ~= nil then page.action() end Counter.SetLimit("Cutscene", page.duration + (page.delay or 0)) gvCutscene.Page = gvCutscene.Page + 1 end end end function CutsceneDone() if not gvCutscene then return true end Logic.SetGlobalInvulnerability(0) Interface_SetCinematicMode(0) XGUIEng.ShowWidget("Cinematic_Headline", 0) Display.SetFarClipPlaneMinAndMax(0, 0) Music.SetVolumeAdjustment(gvCutscene.Music) GUI.SetFeedbackSoundOutputState(1) if gvCutscene.Callback ~= nil then gvCutscene.Callback() end Counter.Cutscene = nil gvCutscene = nil cutsceneIsActive = false end function CutsceneCallParameter(_zoomdistance,_angle,_zoomangle,_backup) Interface_SetCinematicMode(1) Display.SetRenderFogOfWar(3) Camera.StopCameraFlight() Camera.ZoomSetDistance(_zoomdistance) Camera.RotSetAngle(_angle) Camera.ZoomSetAngle(_zoomangle) if _backup then MapLocal_CameraPositionBackup() backup_cs = 1 -- "_backup" in "backup_cs" wegen gleichlautendem Parameter umbenannt end end function CutsceneRecallOrig() Interface_SetCinematicMode(0) Display.SetRenderFogOfWar(0) Camera.FollowEntity(0) if backup_cs == 1 then MapLocal_CameraPositionRestore() backup_cs = nil -- auf nil gesetzt, damit keine Probleme mit ShortCutScene auftreten end end function GetHealth( _entity ) local entityID = GetEntityId( _entity ); if not Tools.IsEntityAlive( entityID ) then return 0; end local maxHealth = Logic.GetEntityMaxHealth( entityID ); local health = Logic.GetEntityHealth( entityID ); return ( health / maxHealth ) * 100; end
Drake
|
#2 24.06.2010 11:16 Beiträge: 132 |
Hier Teil 2
function Init_Screentool() StartSimpleJob("Screentools_extension") Camera.RotSetFlipBack(0) Screentool_Kamerawinkel = 46 Screentool_Kameradistanz = 1000 Screentool_Gui = 1 gvCamera.ZoomDistanceMin = Screentool_Kameradistanz gvCamera.ZoomDistanceMax = Screentool_Kameradistanz GroupSelection_SelectTroops_Orig = GroupSelection_SelectTroops function GroupSelection_SelectTroops(_count) if (_count == 9)then if (Screentool_Kamerawinkel > -3)then Screentool_Kamerawinkel = Screentool_Kamerawinkel - 1 gvCamera.ZoomAngleMin = Screentool_Kamerawinkel gvCamera.ZoomAngleMax = Screentool_Kamerawinkel end elseif (_count == 10)then if (Screentool_Kamerawinkel < 90)then Screentool_Kamerawinkel = Screentool_Kamerawinkel + 1 gvCamera.ZoomAngleMin = Screentool_Kamerawinkel gvCamera.ZoomAngleMax = Screentool_Kamerawinkel end elseif (_count == 7)then if (Screentool_Kameradistanz > 30)then Screentool_Kameradistanz = Screentool_Kameradistanz - 12 gvCamera.ZoomDistanceMin = Screentool_Kameradistanz gvCamera.ZoomDistanceMax = Screentool_Kameradistanz end elseif (_count == 8)then if (Screentool_Kameradistanz < 2000)then Screentool_Kameradistanz = Screentool_Kameradistanz + 12 gvCamera.ZoomDistanceMin = Screentool_Kameradistanz gvCamera.ZoomDistanceMax = Screentool_Kameradistanz end elseif (_count == 6)then Screentool_Gui = 1 - Screentool_Gui XGUIEng.ShowWidget("Normal",Screentool_Gui) elseif (_count == 1)then XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1) function GameCallback_GUI_ChatStringInputDone(_Eingabe) local posX,posY = GUI.Debug_GetMapPositionUnderMouse() DestroyEntity("Mausposition") AMausposition = Logic.CreateEntity(Entities.XD_ScriptEntity,posX,posY,0,1) SetEntityName(AMausposition,"Mausposition") local X = math.floor(GetPosition("Mausposition").X/100)*1 local Y = math.floor(GetPosition("Mausposition").Y/100)*1 local offsetX = -5 + X *100 local offsetY = -5 + Y *100 local CreateChatEnti={{"".._Eingabe.."",offsetX+0,offsetY+0,0,1,""},} local i=1 Logic.CreateEntity(Entities[CreateChatEnti[i][1]],CreateChatEnti[i][2],CreateChatEnti[i][3],CreateChatEnti[i][4],CreateChatEnti[i][5],CreateChatEnti[i][6]) end elseif (_count == 2)then local Selected = {GUI.GetSelectedEntities()} if (table.getn(Selected) == 1)then if (Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(Selected[1]))) == "CU_BlackKnight")then GUI.SettlerInflictFear(GetEntityId(Selected[1])) Logic.CreateEffect(GGL_Effects.FXKerberosFear,GetPosition(GetEntityId(Selected[1])).X,GetPosition(GetEntityId(Selected[1])).Y,1) elseif (Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(Selected[1]))) == "PU_Hero4")then GUI.SettlerCircularAttack(GetEntityId(Selected[1])) elseif (Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(Selected[1]))) == "PU_Hero3")then Logic.CreateEffect(GGL_Effects.FXSalimHeal,GetPosition(GetEntityId(Selected[1])).X,GetPosition(GetEntityId(Selected[1])).Y,1) GUI.SettlerAffectUnitsInArea(GetEntityId(Selected[1])) end end else GroupSelection_SelectTroops_Orig(_count) end end end function Screentools_extension() Display.SetRenderFogOfWar(0) Display.SetRenderSky(1) end --Globale Funktionen function StartGlobalAi() MapEditor_SetupAI( 2, 3, 11000000, 3, "r1", 3, 0) SetupPlayerAi( 2, { serfLimit = 20, extracting = 1, constructing = true, repairing = true } ) end function StartGlobalNames() SetPlayerName(1,"Germanen") SetPlayerName(2,"Römisches Lager @color:255,0,255 1") SetPlayerName(3,"Römisches Lager @color:255,255,0 2") SetPlayerName(6,"Römisches Lager @color:0,255,0 3") SetPlayerName(7,"@color:255,0,0 Caesar") SetPlayerName(8,"@color:0,255,0 Freie Leute") end function StartGlobalRecourcen() --Frische Recourcen Für Player 1 ;) AddGold (1,1000) AddSulfur(1,200) AddIron (1,300) AddWood (1,750) AddStone (1,500) AddClay (1,800) end function StartGlobalColors() --Color Für Player 1 = Weiß ;) Display.SetPlayerColorMapping(1,FRIENDLY_COLOR3) --Color Für Römer(Player 2 -7 kriegen alle Rot ;) ) for r = 2, 7 do Display.SetPlayerColorMapping(r,2) end --Color Für Player 8 :) Display.SetPlayerColorMapping(8,15)-- 15 = HimmelBlau ^.^ :) geht sogar bis 16 ^_^ end function StartGlobalDiplomatic() --Hostile Setup Für Player 1 for i = 2,7 do SetHostile(1,i) end --Friendly Setup Für Player 1 SetFriendly(1,8) --Hostile Setup Für Player 2 - 7 for c = 2,7 do SetHostile(c,1) SetHostile(c,8) end --Ps:Zu Friendly bei den Römern: Römer haben hier keine Freunde XD --Hostile Setup Für Player 8 for a = 2,7 do SetHostile(8,a) end --Friendly Setup Für Player 8 SetFriendly(8,1) end function StartGlobalTechnologies() --Serviert Die Technoligien ;) end function StartGlobalWeather() --Einmal das Wetter Bitte ;) AddPeriodicSummer(10) end function StartGlobalGfxSets() --Nun das Gfx Set :) SetupNormalWeatherGfxSet() end --Globale Funktionen Ende
Mordred
|
#3 24.06.2010 12:29 Beiträge: 939 |
hier die gröbsten fehler rausgehauen.
Script.Load( Folders.MapTools.."Main.lua" ) IncludeGlobals("MapEditorTools") function FirstMapAction() ModusNormal() --ModusDebug() _Kaufe = "Kauft einen Leibeigenen" _Kosten = " @cr 50 Taler" end --FMA Ende :D function StartTesten() SU(5) --MakeInvulnerable("Held") end function StartAllMain() _num = 1 --XGUIEng.TransferMaterials("Hero8_Poison", "MenuCommandsGeneric/expel") XGUIEng.TransferMaterials("Buy_Serf", "1140") Haupthaus() CamStart() Serf() Klick = 0 Player = 1 Type = 0 Sollis = 0 Tools.ExploreArea( -1, -1, 900 ) StartSimpleJob("HeroAbilities") end function Haupthaus() GroupSelection_SelectTroops_Orig = GroupSelection_SelectTroops function GroupSelection_SelectTroops(c) if c == 1 then _num = 1 XGUIEng.TransferMaterials("Buy_Serf", "1140") elseif c == 2 then _num = 2 XGUIEng.TransferMaterials("Hero8_Poison", "1140") elseif c == 3 then _num = 3 XGUIEng.TransferMaterials("Hero3_Heal", "1140") elseif c == 4 then _num = 4 XGUIEng.TransferMaterials("Hero5_Camouflage", "1140") return true end end end function Tool(a) if a == 1 then AddGold(-50) i = i + 1 CreateEntity(1,Entities.PU_Serf,GetPosition("GetSerf"),"Serf"..i) Move("Serf"..i,"SerfMove") Serf() _Kaufe = "Kauft einen Leibeigenen" _Kosten = " @cr 50 Taler" elseif a == 2 then pos = GetPosition("haupt") pX = pos.X --woher soll GetPosition wissen, ob du X oder Y willst? pY = pos.Y Logic.CreateEffect( GGL_Effects.FXMaryPoison, pos.X, pos.Y, 1 ); TowerData = {Logic.GetPlayerEntitiesInArea(2, 0, pX, pY, 900, 20)} --Liefert so geschrieben ein table zurück for i = 2, TowerData[1]+1, 1 do Logic.HurtEntity(TowerData[i], 300) end _Kaufe = "Euere Lehmhütte wird ein paar einheiten in ihrer nähe vergiften!" _Kosten = " @cr 100 Schwefel" elseif a == 3 then local health = Logic.GetEntityHealth("haupt") local maxHealth = Logic.GetEntityMaxHealth("haupt") SetHealth("haupt",( (health/maxHealth) * 100) + 50) _Kaufe = "Euere Lehmhütte heielt sich um 50 Prozent" _Kosten = " @cr 500 Stein" elseif a == 4 then MakeInvulnerable("haupt") StartCountdown(120,End,true) _Kaufe = "Euere Lehmhütte wird fuer 2 min Unsterblich!" _Kosten = " @cr 200 Lehm" return true end end function End() MakeVulnerable("haupt") end function Serf() XGUIEng.ShowWidget( 1140, 1 ) GUITooltip_ResearchTechnologies_Orig = GUITooltip_ResearchTechnologies GUITooltip_ResearchTechnologies = function(_a) if _a == 120 then --XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "".._Kaufe.."" ); --XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "".._Kosten.."" ); else GUITooltip_ResearchTechnologies_Orig(_a) end end GUIAction_ReserachTechnology_OrigProtected = GUIAction_ReserachTechnology GUIAction_ReserachTechnology = function(_tech) if _tech == 120 then Tool(_num) else GUIAction_ReserachTechnology_OrigProtected(_tech) end end end 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 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,600)} for i = 2, TowerData[1]+1, 1 do Logic.HurtEntity(TowerData[i], 200) end end end function ModusNormal() StartAllVariables() StartAllMain() StartAllOther() StartTesten() StartGlobalAi() StartGlobalNames() StartGlobalColors() StartGlobalRecourcen() StartGlobalDiplomatic() StartGlobalGfxSets() StartGlobalWeather() StartGlobalTechnologies() end function ModusDebug() StartAllVariables() StartAllMain() StartAllOther() StartTesten() end --Script Beginn ;) function CamStart() local cutsceneTable = { StartPosition = { position = GetPosition("Held"), angle = 25, zoom = 2500, rotation = -20 }, Flights = { { position = GetPosition("Caeser"), angle = 15, zoom = 700, rotation = -80, duration = 20, delay = 0, title = "@color:255,127,0 Vorspann", text = "Die weiten Landschaften Germaniens.So friedlich wie ein Hase auf einer Wiese.Doch nun wurden immer mehr Völker von dem Mächtigen Julius Caeser unterworfen wer sich ihm nich anschloss musste sterben.Er war der stärkste König Roms, denn er war gefährlich für euch ihr übernehmt das Reich der Sveden.", }, { position = GetPosition("Held"), angle = 50, zoom = 900, rotation = -40, duration = 20, delay = 3, title = "@color:255,127,0 Vorspann", text = "Doch nur einer der Sveden wird es schaffen sich gegen Caeser zu Behaupten.Und dieser widr Caeser von Tron stoßen dieser Held wird alle Germanen Befreien.......", }, }, Callback = function() Einleitung() end } StartCutscene(cutsceneTable) end function Einleitung() local briefing = {}; briefing.finished = function() Spielstart_NameAbfragen() end local AP = function(_page) table.insert(briefing, _page); return _page; end; local page1 = AP{ title = "Mentor", text = "Caesers Leute werden nicht lange warten schnell, benennt euren Held wie ihr wollt, Achtung gebt den ersten Buchstaben Doppelt ein!Gebt einfach den Namen den ihr wollt in die Zeile unten ein.Verstanden?OK dann kann es ja los gehen ;)", position = GetPosition("Held"), dialogCamera = true, quest = { title = "Euer Held", -- Ein neuer Quest wird erstellt text = "Bitte benennt euren Held wie ihr wollt Achtung gebt den ersten Buchstaben Doppelt ein!gebt einfach den Namen den ihr wollt in die Zeile unten ein.Verstanden?OK dann kann es ja los gehen ;)", type = SUBQUEST_OPEN, -- Hauptquest oder optionaler Quest? Unterschied ist Farbe des Icons id = 1 -- Jeder Quest hat eine eindeutige ID } }; StartBriefing(briefing); end function Spielstart_NameAbfragen() Message("Gebt hier bitte ein, wie euer Held in dieser Map heissen soll.") XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1) function GameCallback_GUI_ChatStringInputDone(_string) SetPlayerName(1,_string) Name = "".._string.."" Weiter() end end function Weiter() local briefing = {}; briefing.finished = function() end local AP = function(_page) table.insert(briefing, _page); return _page; end; local page1 = AP{ title = "Mentor", text = "Willkommen "..Name..".Achtung Caeser kommt schnell, baut eine Kaserne um euch zu verteidigen und zerstört das erste Lager!", position = GetPosition("Held"), dialogCamera = true, quest = { title = "Caeser", -- Ein neuer Quest wird erstellt text = "Schnell Caeser ist Stark verteidigt euch gegen ihn fällt eure Burg(Lehmhütte) hat ihr verloren!", type = SUBQUEST_OPEN, -- Hauptquest oder optionaler Quest? Unterschied ist Farbe des Icons id = 2 -- Jeder Quest hat eine eindeutige ID } }; StartBriefing(briefing); end function Marker() local pos = GetPosition("Held"); Logic.CreateEffect( GGL_Effects.FXDarioFear, pos.X, pos.Y, 1 ); end function StartAllVariables() HeroLVL = 1 Hero_LVL = " @color:190,255,0 "..HeroLVL.."" Held = StartSimpleJob("Hero") i = 0 end function StartAllOther() ReplaceEntity("GATE", Entities.XD_PalisadeGate2) StartJob("Marker") StartSimpleJob(Held) StartSimpleJob("HeroDead") StartSimpleHiResJob("Tower_of_Life") XGUIEng.SetText( "TopMainMenuTextButton", "@color:0,0,0,0: ....... @color:255,255,255 Menü @cr @cr Info über Held: @cr @color:255,0,0 Lvl."..Hero_LVL.."") end function HeroDead() if IsDead("Held") then Held = StartSimpleJob("Hero") Held2 = StartSimpleJob("HeroDead") EndJob(Held) EndJob(Held2) Message("Oh nein Euer held is Besiegt wartet 2 min dann wird er wieder im Dorf erscheinen!") StartCountdown(120,HeroAllive,false) return true end end function HeroAllive() Held = StartSimpleJob("Hero") Held2 = StartSimpleJob("HeroDead") CreateEntity(1,Entities.PU_LeaderHeavyCavalry1,GetPosition("HeroStart"),"Held") Message("Gut, Euer Held ist wieder bereit!") StartSimpleJob(Held) StartSimpleJob(Held2) end function Hero() local health = Logic.GetEntityHealth("Held") local maxHealth = Logic.GetEntityMaxHealth("Held") SetHealth("Held",( (health/maxHealth) * 100) + 1) end -- Comfort SpeedUp (Drake) function SU(_oft) for i=1,_oft do SpeedUpGame() end end -- Comfort Countdown function StartCountdown(_Limit, _Callback, _Show) assert(type(_Limit) == "number") assert( not _Callback or type(_Callback) == "function" ) Counter.Index = (Counter.Index or 0) + 1 if _Show and CountdownIsVisisble() then assert(false, "StartCountdown: A countdown is already visible") end Counter["counter" .. Counter.Index] = {Limit = _Limit, TickCount = 0, Callback = _Callback, Show = _Show, Finished = false} if _Show then MapLocal_StartCountDown(_Limit) end if Counter.JobId == nil then Counter.JobId = StartSimpleJob("CountdownTick") end return Counter.Index end function StopCountdown(_Id) if Counter.Index == nil then return end if _Id == nil then for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end Counter["counter" .. i] = nil end end else if Counter.IsValid("counter" .. _Id) then if Counter["counter" .. _Id].Show then MapLocal_StopCountDown() end Counter["counter" .. _Id] = nil end end end function CountdownTick() local empty = true for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter.Tick("counter" .. i) then Counter["counter" .. i].Finished = true end if Counter["counter" .. i].Finished and not IsBriefingActive() then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end if type(Counter["counter" .. i].Callback) == "function" then Counter["counter" .. i].Callback() end Counter["counter" .. i] = nil end empty = false end end if empty then Counter.JobId = nil Counter.Index = nil return true end end function CountdownIsVisisble() for i = 1, Counter.Index do if (Counter.IsValid("counter"..i) and Counter["counter"..i].Show)then return true end end return false end -- Comfort Cutscene function StartCutscene(_Cutscene) local length = 0 local i for i = 1, table.getn(_Cutscene.Flights) do length = length + _Cutscene.Flights[i].duration + (_Cutscene.Flights[i].delay or 0) end gvCutscene = { Page = 1, Flights = _Cutscene.Flights, EndTime = Logic.GetTime() + length, Callback = _Cutscene.Callback, Music = Music.GetVolumeAdjustment(), } cutsceneIsActive = true Logic.SetGlobalInvulnerability(1) Interface_SetCinematicMode(1) Display.SetFarClipPlaneMinAndMax(0, 14000) Music.SetVolumeAdjustment(gvCutscene.Music * 0.5) Sound.PlayFeedbackSound(0,0) GUI.SetFeedbackSoundOutputState(0) Camera.StopCameraFlight() Camera.ZoomSetDistance(_Cutscene.StartPosition.zoom) Camera.RotSetAngle(_Cutscene.StartPosition.rotation) Camera.ZoomSetAngle(_Cutscene.StartPosition.angle) Camera.ScrollSetLookAt(_Cutscene.StartPosition.position.X,_Cutscene.StartPosition.position.Y) Counter.SetLimit("Cutscene", -1) StartSimpleJob("ControlCutscene") end function ControlCutscene() if not gvCutscene then return true end if Logic.GetTime() >= gvCutscene.EndTime then CutsceneDone() return true else if Counter.Tick("Cutscene") then local page = gvCutscene.Flights[gvCutscene.Page] if not page then CutsceneDone() return true end Camera.InitCameraFlight() Camera.ZoomSetDistanceFlight(page.zoom, page.duration) Camera.RotFlight(page.rotation, page.duration) Camera.ZoomSetAngleFlight(page.angle, page.duration) Camera.FlyToLookAt(page.position.X, page.position.Y, page.duration) if page.title ~= nil then PrintBriefingHeadline("@color:255,250,200 " .. page.title) end if page.text ~= nil then PrintBriefingText(page.text) end if page.action ~= nil then page.action() end Counter.SetLimit("Cutscene", page.duration + (page.delay or 0)) gvCutscene.Page = gvCutscene.Page + 1 end end end function CutsceneDone() if not gvCutscene then return true end Logic.SetGlobalInvulnerability(0) Interface_SetCinematicMode(0) XGUIEng.ShowWidget("Cinematic_Headline", 0) Display.SetFarClipPlaneMinAndMax(0, 0) Music.SetVolumeAdjustment(gvCutscene.Music) GUI.SetFeedbackSoundOutputState(1) if gvCutscene.Callback ~= nil then gvCutscene.Callback() end Counter.Cutscene = nil gvCutscene = nil cutsceneIsActive = false end function CutsceneCallParameter(_zoomdistance,_angle,_zoomangle,_backup) Interface_SetCinematicMode(1) Display.SetRenderFogOfWar(3) Camera.StopCameraFlight() Camera.ZoomSetDistance(_zoomdistance) Camera.RotSetAngle(_angle) Camera.ZoomSetAngle(_zoomangle) if _backup then MapLocal_CameraPositionBackup() backup_cs = 1 -- "_backup" in "backup_cs" wegen gleichlautendem Parameter umbenannt end end function CutsceneRecallOrig() Interface_SetCinematicMode(0) Display.SetRenderFogOfWar(0) Camera.FollowEntity(0) if backup_cs == 1 then MapLocal_CameraPositionRestore() backup_cs = nil -- auf nil gesetzt, damit keine Probleme mit ShortCutScene auftreten end end -- Comfort health function GetHealth(_entity) local entityID = GetEntityId(_entity) if not Tools.IsEntityAlive(entityID)then return 0 end local maxHealth = Logic.GetEntityMaxHealth(entityID) local health = Logic.GetEntityHealth(entityID) return ((health / maxHealth) * 100) end
Mordred
|
#4 24.06.2010 12:33 Beiträge: 939 |
HoTM 2
Allerdings kannst du Dir das ganze Heldengescripte ersparen, da hab ich mich schon mal durchgequält.
Wie der code aufrufbar ist, siehe mein Profil unten.
function HeroOfTheMap(_name,_regeneratingpos,_extraschaden) HeroOfTheMap_schonDa = HeroOfTheMap_schonDa or 1 if (HeroOfTheMap_schonDa == 2)then Message("@color:255,0,0 ERROR HoTM! Only one hero!") else if not _name then Message("@color:255,0,0 ERROR HoTM! _name?!") end if not _regeneratingpos then _regeneratingpos = GetPosition(_name) end if not _extraschaden then _extraschaden = 10 else if (_extraschaden < 0)then Message("@color:255,0,0 ERROR HoTM! _extraschaden should be positive!") _extraschaden = 0 end end HoTM = {} HoTM.name = _name HoTM.entity = GetEntityId(_name) HoTM.entitytype = Logic.GetEntityType(HoTM.entity) HoTM.startpos = _regeneratingpos HoTM.damageoriginal = Logic.GetEntityDamage(HoTM.entity) HoTM.damage = _extraschaden HoTM.tottime = 0 HoTM.bombetime = 40 XGUIEng.TransferMaterials("Command_Expel","Research_BookKeeping") XGUIEng.TransferMaterials("OnlineHelpButton","MinimapButtons_Tactic") XGUIEng.DisableButton("MinimapButtons_Tactic",0) GameCallback_OnGameStart_Original = GameCallback_OnGameStart function GameCallback_OnGameStart() GameCallback_OnGameStart_Original() XGUIEng.TransferMaterials("Command_Expel","Research_BookKeeping") end GUIUpdate_SelectionName_Original = GUIUpdate_SelectionName function GUIUpdate_SelectionName() if IsEntitySelected(HoTM.entity)then XGUIEng.SetText(gvGUI_WidgetID.SelectionName,"@cr "..HoTM.name) else GUIUpdate_SelectionName_Original() end end GetEntityArmor_Original = Logic.GetEntityArmor function Logic.GetEntityArmor(_entity) if (_entity == HoTM.entity)then return 10 else return GetEntityArmor_Original(_entity) end end GetEntityDamage_Original = Logic.GetEntityDamage function Logic.GetEntityDamage(_entity) if (_entity == HoTM.entity)then return (HoTM.damageoriginal + HoTM.damage) else return GetEntityDamage_Original(_entity) end end GUITooltip_ResearchTechnologies_Original = GUITooltip_ResearchTechnologies function GUITooltip_ResearchTechnologies(_tech,_menu) if (_menu == "MenuMap/TacticView")then XGUIEng.SetText(gvGUI_WidgetID.TooltipBottomCosts,"") if IsAlive(GetEntityId(HoTM.entity))then XGUIEng.SetText(gvGUI_WidgetID.TooltipBottomText,"@color:190,190,190 "..HoTM.name.." @cr @color:255,255,255 Springt zu Eurem Helden "..HoTM.name..".") else XGUIEng.SetText(gvGUI_WidgetID.TooltipBottomText,"@color:190,190,190 "..HoTM.name.." @cr @color:255,255,255 Springt zu Eurem Helden "..HoTM.name..". @cr @color:250,20,30 "..HoTM.name.." muss sich erst erholen!") end else GUITooltip_ResearchTechnologies_Original(_tech,_menu) end end GUIAction_ToggleMinimap_Original = GUIAction_ToggleMinimap function GUIAction_ToggleMinimap(_number) if (_number == 1)then if not IsDead(GetEntityId(HoTM.entity))then Camera.ScrollSetLookAt(GetPosition(HoTM.entity).X,GetPosition(HoTM.entity).Y) GUI.SetSelectedEntity(HoTM.entity) else Camera.ScrollSetLookAt(HoTM.startpos.X,HoTM.startpos.Y) end else GUIAction_ToggleMinimap_Original(_number) end end GUIUpdate_BuildingButtons_Original = GUIUpdate_BuildingButtons function GUIUpdate_BuildingButtons(_menu,_tech) if (_menu ~= "MinimapButtons_Tactic")then GUIUpdate_BuildingButtons_Original(_menu,_tech) end end GUITooltip_NormalButton_Original = GUITooltip_NormalButton function GUITooltip_NormalButton(_menu,_keybind) if (_menu == "MenuCommandsGeneric/expel")then if NurHoTMSelektiert() then local StringRein = "@color:255,0,0 "..(40 - HoTM.bombetime).."" if ((40 - HoTM.bombetime) > 0)then StringRein = "@color:255,0,0 "..(40 - HoTM.bombetime).."" else StringRein = " "..(40 - HoTM.bombetime).."" end _keybind = "" XGUIEng.SetText(gvGUI_WidgetID.TooltipBottomText,"@color:190,190,190 Bombe legen @cr @color:255,255,255 "..HoTM.name.." wird eine Bombe legen, um Felsen zu sprengen oder Feinde zu verjagen.") XGUIEng.SetText(gvGUI_WidgetID.TooltipBottomCosts,"Zu wartende @cr Zeit: @cr "..StringRein) else GUITooltip_NormalButton_Original(_menu,_keybind) end else GUITooltip_NormalButton_Original(_menu,_keybind) end end GameCallback_GUI_SelectionChanged_Original = GameCallback_GUI_SelectionChanged function GameCallback_GUI_SelectionChanged() XGUIEng.TransferMaterials("Research_BookKeeping","Command_Expel") GameCallback_GUI_SelectionChanged_Original() if NurHoTMSelektiert() then XGUIEng.TransferMaterials("Hero2_PlaceBomb","Command_Expel") end end GUIAction_ExpelSettler_Original = GUIAction_ExpelSettler function GUIAction_ExpelSettler() if IsEntitySelected(HoTM.entity)then if NurHoTMSelektiert() then if (HoTM.bombetime == 40)then CreateEntity(1,Entities.XD_Bomb1,GetPosition(HoTM.entity)) HoTM.bombetime = 0 else Sound.PlayGUISound(Sounds.VoicesLeader_LEADER_NO_rnd_01,200) end else Sound.PlayGUISound(Sounds.VoicesLeader_LEADER_NO_rnd_01,200) end else GUIAction_ExpelSettler_Original() end end Trigger.RequestTrigger(Events.LOGIC_EVENT_ENTITY_HURT_ENTITY,"HoTM_Attack_Check","HoTM_Attack_Attack",1) StartSimpleJob("HoTM_Job") HeroOfTheMap_schonDa = 2 end end function HoTM_Attack_Check() if (Event.GetEntityID1() == HoTM.entity)then return true else return false end end function HoTM_Attack_Attack() if (Event.GetEntityID1() == HoTM.entity)then if IstGutZumAngreifen(Event.GetEntityID2())then if ((Logic.GetEntityMaxHealth(GetEntityId(Event.GetEntityID2())) - HoTM.damage) > 1)then Logic.HurtEntity(Event.GetEntityID2(),HoTM.damage) else SetHealth(Event.GetEntityID2(),0) end end end end function IstGutZumAngreifen(_entity) _entity = GetEntityId(_entity) if ((Logic.IsBuilding(_entity) == 1) or (Logic.IsSerf(_entity) == 1) or (Logic.IsHero(_entity) == 1) or (Logic.IsWorker(_entity) == 1))then return true else if (Logic.IsLeader(_entity) == 1)then if (Logic.LeaderGetNumberOfSoldiers(_entity) == 0)then return true else return false end else return false end end end function HoTM_Job() XGUIEng.TransferMaterials("OnlineHelpButton","MinimapButtons_Tactic") if IsDead(HoTM.entity)then if (HoTM.tottime == 0)then Explore.Hide("ShowHoTM") DestroyEntity(HoTM.entity) CreateEntity(0,Entities.XD_Rock1,HoTM.startpos,"HoTM_Grab") HoTM_Graveyard = GetEntityId("HoTM_Grab") Logic.SetModelAndAnimSet(HoTM_Graveyard,Models.XD_Tomb7) Sound.PlayGUISound(Sounds.OnKlick_PB_Headquarters3,200) Message(""..HoTM.name.." @color:255,0,0 Wurde \195\188berw\195\164ltigt! Er muss sich nun eine Minute ausruhen!") end if (HoTM.tottime > 59)then DestroyEntity(HoTM_Graveyard) Sound.PlayGUISound(Sounds.VoicesLeader_LEADER_Yes_rnd_01,200) CreateEntity(1,HoTM.entitytype,HoTM.startpos,"New_HoTM") HoTM.entity = GetEntityId("New_HoTM") HoTM.tottime = -1 end HoTM.tottime = HoTM.tottime + 1 else local pos = GetPosition(HoTM.entity) local Leibeigene = {Logic.GetEntitiesInArea(1,Entities.PU_Serf,pos.X,pos.Y,1200,10)} for i=1,table.getn(Leibeigene) do if (Logic.GetEntityHealth(GetEntityId(Leibeigene[i])) < Logic.GetEntityMaxHealth(GetEntityId(Leibeigene[i])))then Move(Leibeigene[i],HoTM.entity) end Logic.HealEntity(Leibeigene[i],1) Logic.CreateEffect(GGL_Effects.FXSalimHeal,GetPosition(Leibeigene[i]).X,GetPosition(Leibeigene[i]).Y,1) end if IsEntitySelected(HoTM.entity)then Logic.CreateEffect(GGL_Effects.FXMaryDemoralize,pos.X,pos.Y,1) else Logic.CreateEffect(GGL_Effects.FXSalimHeal,pos.X,pos.Y,1) end Logic.HealEntity(HoTM.entity,3) Explore.Show("ShowHoTM",HoTM.entity,800) if (HoTM.bombetime < 40)then HoTM.bombetime = HoTM.bombetime + 1 else HoTM.bombetime = 40 end end end function NurHoTMSelektiert() if (IsEntitySelected(HoTM.entity))then local liste = {GUI.GetSelectedEntities()} if (table.getn(liste) == 1)then return true else return false end else return false end end
warrior1024
|
#6 24.06.2010 14:11 Beiträge: 345 |
Einrückungen
Ich würde ja nach Fehlern suchen, aber bei der Skriptlänge ohne Einrückungen ist das mehr als schwer!
Wenn du den Code richtig einrückst, kann ich helfen.
warrior1024
____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal
Seiten: 1