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

Drake
#5
24.06.2010 13:49
Beiträge: 132

Danke schön Mordred

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

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

Impressum