+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 20 von 21
  1. #1
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard Effekte destroyen/ löschen

    Über das Skript kann ich ja diese Funktion erstellen und über Reward_MapScriptFunktion aufrufen.
    Code:
    function Feuer1()
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 50917, 36527 )   ---immer Position ( x, y ) eingeben
            
    end
    Dieses Feuer würde jetzt bis zum Ende des Spiels brennen. Wie bekomme ich das wieder weg?

    Danke
    Geändert von Netsurfer (08.03.2009 um 11:24 Uhr) Grund: Titel korrigiert
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  2. #2
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von mattizwo Beitrag anzeigen
    Über das Skript kann ich ja diese Funktion erstellen und über Reward_MapScriptFunktion aufrufen.
    Code:
    function Feuer1()
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 50917, 36527 )   ---immer Position ( x, y ) eingeben
            
    end
    Dieses Feuer würde jetzt bis zum Ende des Spiels brennen. Wie bekomme ich das wieder weg?
    Die Funktion Logic.CreateEffect() liefert eine ID des erstellten/ erzeugten Effekts zurück:
    Code:
    function Feuer1()
            EffectID_Feuer1 = Logic.CreateEffect(EGL_Effects.XF_Fire01, 50917, 36527 )   ---immer Position ( x, y ) eingeben
            
    end
    Diese musst du dir "merken" (oder eben einfach in einer globalen Variable speichern). Mit Hilfe dieser (Effekt-)ID kann man den Effekt dann per
    Code:
    Logic.DestroyEffect(EffectID_Feuer1)
    wieder destroyen/ löschen.

    Gunther
    ___________________________


    ___________________________

  3. #3
    Fischer Avatar von ernie
    Registriert seit
    23.03.2008
    Ort
    Mitten in Lippe
    Beiträge
    210

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von mattizwo Beitrag anzeigen
    Über das Skript kann ich ja diese Funktion erstellen und über Reward_MapScriptFunktion aufrufen.
    Code:
    function Feuer1()
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 50917, 36527 )   ---immer Position ( x, y ) eingeben
            
    end
    Dieses Feuer würde jetzt bis zum Ende des Spiels brennen. Wie bekomme ich das wieder weg?

    Danke
    function Feuer1()

    Feuer = Logic.CreateEffect(EGL_Effects.XF_Fire01, 50917, 36527 ) ---immer Position ( x, y ) eingeben

    end



    function Feuer1Aus()

    Logic.DestroyEffect(Feuer)

    end

  4. #4
    Wirt
    Registriert seit
    04.10.2007
    Beiträge
    875

    Standard AW: Effekte destroyen/ löschen

    Wäre vielleicht auch mal eine neue Belohnung wert: Reward_CreateEffect/Reprisal_DestroyEffect. Der Name ist dann frei wählbar.

  5. #5
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Blinzeln AW: Effekte destroyen/ löschen

    Zitat Zitat von Old McDonald Beitrag anzeigen
    Wäre vielleicht auch mal eine neue Belohnung wert: Reward_CreateEffect/Reprisal_DestroyEffect. Der Name ist dann frei wählbar.
    Ja prima!
    Was hindert dich?

    Darf ich das dann schon mal auf die Liste der neuen Features der Version 3 beta 6 setzen?
    ___________________________


    ___________________________

  6. #6
    Wirt
    Registriert seit
    04.10.2007
    Beiträge
    875

    Standard AW: Effekte destroyen/ löschen

    Ich denke, den Betastatus können wir dann weglassen, also Version 3.6

  7. #7
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard AW: Effekte destroyen/ löschen

    Ich habe das jetzt so gemacht:
    Code:
    function Feuer1()
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46346, 27276 ) --1
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 45549, 27850 ) --2
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 44983, 29185 ) --3
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 49263, 30824 ) --4
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48650, 29948 ) --5
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47979, 29895 ) --6
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47589, 31032 ) --7
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47391, 30618 ) --8
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47093, 31397 ) --9
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47156, 30750 ) --10
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47512, 29960 ) --11
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48073, 29516 ) --12
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47093, 31397 ) --13  
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46989, 30322 ) --14
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46917, 29733 ) --15
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46735, 31027 ) --16
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46436, 30784 ) --17
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46669, 31858 ) --18
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46558, 30111 ) --19   
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46917, 29733 ) --20
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47637, 29417 ) --21
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48530, 29196 ) --22
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48909, 28892 ) --23
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47582, 29155 ) --24
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48298, 28951 ) --25   
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46035, 30627 ) --26
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 45724, 30208 ) --27
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46026, 29413 ) --28
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46445, 29745 ) --29
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46946, 29290 ) --30
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46626, 28950 ) --31  
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 47358, 28794 ) --32
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48006, 28279 ) --33
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 49491, 27415 ) --34
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46998, 28022 ) --35
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 45724, 30208 ) --36
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 45166, 30848 ) --37   
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 45123, 31422 ) --38
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48186, 27282 ) --39
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 48172, 26377 ) --40
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 46943, 26023 ) --41
            Logic.CreateEffect(EGL_Effects.XF_Fire01, 42199, 26683 ) --42
                    
    end
    
    function Feuer1Aus()
          
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46346, 27276 ) --1
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 45549, 27850 ) --2
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 44983, 29185 ) --3
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 49263, 30824 ) --4
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48650, 29948 ) --5
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47979, 29895 ) --6
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47589, 31032 ) --7
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47391, 30618 ) --8
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47093, 31397 ) --9
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47156, 30750 ) --10
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47512, 29960 ) --11
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48073, 29516 ) --12
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47093, 31397 ) --13  
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46989, 30322 ) --14
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46917, 29733 ) --15
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46735, 31027 ) --16
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46436, 30784 ) --17
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46669, 31858 ) --18
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46558, 30111 ) --19   
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46917, 29733 ) --20
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47637, 29417 ) --21
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48530, 29196 ) --22
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48909, 28892 ) --23
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47582, 29155 ) --24
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48298, 28951 ) --25   
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46035, 30627 ) --26
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 45724, 30208 ) --27
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46026, 29413 ) --28
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46445, 29745 ) --29
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46946, 29290 ) --30
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46626, 28950 ) --31  
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 47358, 28794 ) --32
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48006, 28279 ) --33
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 49491, 27415 ) --34
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46998, 28022 ) --35
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 45724, 30208 ) --36
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 45166, 30848 ) --37   
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 45123, 31422 ) --38
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48186, 27282 ) --39
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 48172, 26377 ) --40
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 46943, 26023 ) --41
            Logic.DestroyEffect(EGL_Effects.XF_Fire01, 42199, 26683 ) --42
    
    end
    Die Feuer sind alle da, aber das Löschen klappt nicht. Was habe ich falsch gemacht?
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  8. #8
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von mattizwo Beitrag anzeigen
    Die Feuer sind alle da, aber das Löschen klappt nicht. Was habe ich falsch gemacht?
    Du liest nicht richtig!
    Du kannst einen so erstellten Effekt nicht mittels der Position wieder destroyen (1), sondern nur anhand der beim createn zurückgelieferten (Effekt-)ID!

    Das steht aber auch lang und breit in meiner ersten Antwort und auch in Ernies Beispiel!

    Und immer wenn man x-mal die selben Codezeilen hintereinander schreibt, sollten bei einem die Glocken klingeln, und man sollte sich überlegen, wie man das bspw. anhand einer kleinen Funktion vereinfachen kann!

    (1) Man kann auch 100 Effekte an derselben Position erstellen. Welcher sollte dann mittels der Position gelöscht werden? Also ist das System mit ID/Effekt schon sehr sinnvoll.
    Geändert von Netsurfer (15.03.2009 um 09:23 Uhr)
    ___________________________


    ___________________________

  9. #9
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard AW: Effekte destroyen/ löschen

    Danke, aber das ist mir alles zu kompliziert. Lass ich die Feuer eben brennen.
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  10. #10
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Cool AW: Effekte destroyen/ löschen

    Zitat Zitat von mattizwo Beitrag anzeigen
    Danke, aber das ist mir alles zu kompliziert. Lass ich die Feuer eben brennen.
    Hier mal ein sehr einfaches Beispiel genau für deinen Fall (also nicht universell verwendbar):
    Code:
    function Feuer_1_an()
      Feuer_1_EffectIDs = {}
      local EffectPos = {
        46346, 27276,
        45549, 27850,
      }
      for i=1, #EffectPos, 2 do
        local EffektID = Logic.CreateEffect(EGL_Effects.XF_Fire01, EffectPos[i], EffectPos[i+1])
        table.insert(Feuer_1_EffectIDs, EffektID)
      end
    end
    
    function Feuer_1_aus()
      if #Feuer_1_EffectIDs > 0 then
        for i=1, #Feuer_1_EffectIDs do
          Logic.DestroyEffect(Feuer_1_EffectIDs[i])
        end
      end
    end
    In das Table EffectPos musst du noch deine restlichen Positonen eintragen (der Übersicht halber würde ich jedes Paar aus X- und Y-Koordinate jeweils in Zeile schreiben und das Komma am Ende nicht vergessen!).
    Geändert von Netsurfer (23.03.2009 um 09:07 Uhr) Grund: (Tipp-)Fehler in der Funktion korrigiert
    ___________________________


    ___________________________

  11. #11
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von Netsurfer Beitrag anzeigen

    Hier mal ein sehr einfaches Beispiel genau für deinen Fall (also nicht universell verwendbar):
    Code:
    function Feuer_1_an()
      Feuer_1_EffectIDs = {}
      local EffectPos = {
        46346, 27276,
        45549, 27850,
      }
      for i=1, #EffectPos, 2 do
        local EffektID = Logic.CreateEffect(EGL_Effects.XF_Fire01, EffectPos[i], EffectPos[i+1])
        table.insert{Feuer_1_EffectIDs, EffektID}
      end
    end
    
    function Feuer_1_aus()
      if #Feuer_1_EffectIDs > 0 then
        for i=1, #Feuer_1_EffectIDs do
          Logic.DestroyEffect(Feuer_1_EffectIDs[i])
        end
      end
    end
    In das Table EffectPos musst du noch deine restlichen Positonen eintragen (der Übersicht halber würde ich jedes Paar aus X- und Y-Koordinate jeweils in Zeile schreiben und das Komma am Ende nicht vergessen!).
    Ich habe versucht das mal umzusetzen.
    Code:
    function Feuer_1_an ()
      Feuer_1_EffectIDs = {}
      local EffectPos = {
        46346, 27276,
        45549, 27850,
        44983, 29185, --3
        49263, 30824, --4
        48650, 29948, --5
        47979, 29895, --6
        47589, 31032, --7
        47391, 30618, --8
        47093, 31397, --9
        47156, 30750, --10
        47512, 29960, --11
        48073, 29516, --12
        47093, 31397, --13  
        46989, 30322, --14
        46917, 29733, --15
        46735, 31027, --16
        46436, 30784, --17
        46669, 31858, --18
        46558, 30111, --19   
        46917, 29733, --20
        47637, 29417, --21
        48530, 29196, --22
        48909, 28892, --23
        47582, 29155, --24
        48298, 28951, --25   
        46035, 30627, --26
        45724, 30208, --27
        46026, 29413, --28
        46445, 29745, --29
        46946, 29290, --30
        46626, 28950, --31  
        47358, 28794, --32
        48006, 28279, --33
        49491, 27415, --34
        46998, 28022, --35
        45724, 30208, --36
        45166, 30848, --37   
        45123, 31422, --38
        48186, 27282, --39
        48172, 26377, --40
        46943, 26023, --41
        42199, 26683, --42
        }        
        for i=1, #EffectPos, 2 do
        local EffektID = Logic.CreateEffect(EGL_Effects.XF_Fire01, EffectPos[i], EffectPos[i+1])
        table.insert{Feuer_1_EffectIDs, EffektID}
        end
        
    end
    
    function Feuer_1_aus()
      if #Feuer_1_EffectIDs > 0 then
        for i=1, #Feuer_1_EffectIDs do
          Logic.DestroyEffect(Feuer_1_EffectIDs[i])
        end
      end
    end
    Es funktioniert leider noch nicht. Die Feuer werden noch nicht mal gesetzt. Ich werde mal weiter probieren.
    Geändert von mattizwo (23.03.2009 um 07:22 Uhr)
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  12. #12
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard AW: Effekte destroyen/ löschen

    Das ist die Fehlermeldung dazu:
    Die taucht etliche Male mit verschiedenen Zahlen auf.

    Code:
    Assertion failed!
    
    Expression: Lua Error
    Error: LUA_ERRRUN: [string "Global Map Script"]:1149: wrong number of arguments to 'insert'
    Stacklevel: 0 Type: C Function: "(null)"
    Stacklevel: 1 Type: C Function: "insert"
    Stacklevel: 2 Type: Lua File: Global Map Script Function: "(null)" Line: 1149
    Locals:
        Local: 1    Name: EffectPos    Table
        Local: 2    Name: (for index)    Number:    1
        Local: 3    Name: (for limit)    Number:    84
        Local: 4    Name: (for step)    Number:    2
        Local: 5    Name: i    Number:    1
        Local: 6    Name: EffektID    Number:    65549
    Stacklevel: 3 Type: tail
    Stacklevel: 4 Type: tail
    Stacklevel: 5 Type: tail
    Stacklevel: 6 Type: Lua File: Script\Global\ScriptSystems\GlobalQuestSystem.lua Function: "(null)" Line: 533
    Locals:
        Local: 1    Name: _arguments    Number:    44
        Local: 2    Name: self    Table
        Local: 3    Name: (for index)    Number:    1
        Local: 4    Name: (for limit)    Number:    1
        Local: 5    Name: (for step)    Number:    1
        Local: 6    Name: i    Number:    1
    
    Current stack:
    
    
    Additional info: Game turn 79 (0:07)
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  13. #13
    Schmied Avatar von KuschelUschi
    Registriert seit
    25.11.2008
    Beiträge
    462

    Standard AW: Effekte destroyen/ löschen

    Tausch doch in der Funktion Feuer_1_an() mal bei table.insert die geschweiften Klammern gegen runde aus.
    Code:
    table.insert(Feuer_1_EffectIDs, EffektID)
    Die Kuh is über'n fence gejumped und hat dabei den Benz gerammt.

  14. #14
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Daumen hoch AW: Effekte destroyen/ löschen

    Zitat Zitat von KuschelUschi Beitrag anzeigen
    Tausch doch in der Funktion Feuer_1_an() mal bei table.insert die geschweiften Klammern gegen runde aus.
    Code:
    table.insert(Feuer_1_EffectIDs, EffektID)
    Hi Rene - danke für den Hinweis!
    Ist natürlich vollkommen richtig und ein Tippfehler meinerseits (ist korrigiert).

    @Mattizwo: Falls du das öfter in deiner Map brauchst (an verschiedenen Stellen und/ oder mit verschiedenen Effekten), dann kann man das auch leicht so umbauen, dass die Funktion jeweils auf ein extern (außerhalb der Funktion) definiertes Table zurückgreift.

    Aber freut mich, dass du es doch versuchst!

    Gunther
    Geändert von Netsurfer (23.03.2009 um 09:08 Uhr)
    ___________________________


    ___________________________

  15. #15
    Schmied Avatar von KuschelUschi
    Registriert seit
    25.11.2008
    Beiträge
    462

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von Netsurfer Beitrag anzeigen
    Hi Rene - danke für den Hinweis!
    Bitteschön! Ich freu mich ja, wenn ich nach und nach mehr Durchblick kriege.

    Die Klammern sind aber auch extrem schwer zu unterscheiden. Hier im Code/Zitat als auch in NotePad++.
    Die Kuh is über'n fence gejumped und hat dabei den Benz gerammt.

  16. #16
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard AW: Effekte destroyen/ löschen

    Danke. Jetzt funktionieren das Setzen und das Löschen reibungslos.
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  17. #17
    Alchimist Avatar von mattizwo
    Registriert seit
    01.10.2007
    Beiträge
    2,759

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von Netsurfer Beitrag anzeigen
    @Mattizwo: Falls du das öfter in deiner Map brauchst (an verschiedenen Stellen und/ oder mit verschiedenen Effekten), dann kann man das auch leicht so umbauen, dass die Funktion jeweils auf ein extern (außerhalb der Funktion) definiertes Table zurückgreift.

    Aber freut mich, dass du es doch versuchst!

    Gunther
    Das wirft ja nun die nächste Frage auf. Wie macht man so etwas?
    Wäre der Editor eine SPS, würde sie sicherlich niemand kaufen.



    http://www.gedichte-oase.de/gedicht/...ssen_22_17583/


    [SIGPIC][/SIGPIC]

  18. #18
    Schmied Avatar von KuschelUschi
    Registriert seit
    25.11.2008
    Beiträge
    462

    Standard AW: Effekte destroyen/ löschen

    Du legst die Tables ausserhalb der Funktion an. Ohne local davor.

    Gunther, korrigier mich bitte falls nötig!
    Die Kuh is über'n fence gejumped und hat dabei den Benz gerammt.

  19. #19
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Standard AW: Effekte destroyen/ löschen

    Zitat Zitat von mattizwo Beitrag anzeigen
    Das wirft ja nun die nächste Frage auf. Wie macht man so etwas?
    Zitat Zitat von KuschelUschi Beitrag anzeigen
    Du legst die Tables ausserhalb der Funktion an. Ohne local davor.
    Das könnte man machen. Also jeweils ein globales Table erstellen, sodass die Funktion dann auch auf das jeweilige Table zugreifen/ zurückgreifen kann.

    Wenn man aber bspw. nur mehrere "Sammlungen" von Einträgen hat, von denen bei jedem Aufruf der Funktion nur jeweils eine bestimmte Sammlung benutzt werden soll, und diese Sammlungen nur (ausschließlich) von dieser Funktion verwendet werden sollen, dann kann man es auch anders machen.

    2 mögliche Varianten:
    1. Man legt innerhalb der Funktion mehrere lokale Tables an.
    2. Man legt innerhalb der Funktion ein lokales Table an und separiert die Daten innrhalb des Tables, bspw. durch unterschiedliche Keys (Indizes).
    zu 1 (Pseudo-Code):
    Code:
    function blabla()
      local Feuer_1 = {
        46346, 27276,
        45549, 27850,
      }
      local Feuer_2 = {
        42346, 25276,
        42549, 25850,
      }
      ...
    end
    zu 2 (Pseudo-Code):
    Code:
    function blabla()
      local Feuer = {}
      Feuer[1]={46346, 27276, 45549, 27850}
      Feuer[2]={42346, 25276, 42549, 25850}
      ...
    end
    Je "universeller" eine Funktion vom Prinzip her sein soll, umso aufwendiger/ umfangreicher muss natürlich der interne Aufwand innerhalb der Funktion sein. Der große Vorteil liegt aber u.a. darin, dass ich nicht 100 verschiedene Funktionen schreiben muss (was ja auch Aufwand darstellt, aber vor allem auch total unübersichtlich ist), sondern nur vlt. 5!

    Wenn die Funktion also schon mal verschiedene "Positions-Table" verarbeiten können soll, müssen noch ein paar Änderungen vorgenommen werden.
    • Die Funktion muss um einen Parameter erweitert werden, der die Information enthält, welches Table denn verwendet werden soll
      Code:
      function Feuer_an(UseTableIndex)
      Wie der Parameter aussehen muss, hängt jetzt natürlich von dem zuvor gewählten Format für die verschiedenen Sets ab (s.o.)!
    Nehmen wir einmal an, du hast dich für Variante 2 entschieden.
    Dann musst du der Funktion beim Aufruf nur die entsprechende Index-Nummer übergeben - also z.B. so:
    Code:
    function Feuer_an(2)
    und innerhalb der Funktion dann:
    Code:
    function Feuer_an(UseTableIndex)
      local Feuer = {}
      Feuer[1]={46346, 27276, 45549, 27850}
      Feuer[2]={42346, 25276, 42549, 25850}
      Feuer_EffectIDs = Feuer_EffectIDs or {}
      if not Feuer_EffectIDs[UseTableIndex] then
        Feuer_EffectIDs[UseTableIndex] = {}
      end
      for i=1, #Feuer[UseTableIndex], 2 do
        local EffektID = Logic.CreateEffect(EGL_Effects.XF_Fire01, Feuer[UseTableIndex][i], Feuer[UseTableIndex][i+1])
        table.insert(Feuer_EffectIDs[UseTableIndex], EffektID)
      end
    end
    Natürlich müssen wir auch das Format für die Feuer_aus Funktion entsprechend anpassen, damit diese Funktion genauso universell zu verwenden ist:
    Code:
    function Feuer_aus(UseTableIndex)
      if #Feuer_EffectIDs[UseTableIndex] > 0 then
        for i=1, #Feuer_EffectIDs[UseTableIndex] do
          Logic.DestroyEffect(Feuer_EffectIDs[UseTableIndex][i])
        end
      end
    end
    Der Übersichtlichkeit halber fehlen jetzt natürlich noch so einige Dinge zur Fehlerprüfung, bzw. zum Abfangen von Fehlern, aber das hat Zeit.

    Versuch' erstmal das "System" hinter dem Beispiel zu verstehen. Du wirst sehen, ist gar nicht so schwer.

    Im nächsten Schritt könnte man das Ganze dann auch noch so erweitern, dass man verschiedene Effekte generieren lassen kann.

    Kannst du ja mal versuchen, wenn du Lust hast.

    Gunther
    ___________________________


    ___________________________

  20. #20
    Fischer Avatar von Peermanent
    Registriert seit
    10.07.2005
    Ort
    Moers
    Beiträge
    223

    Standard AW: Effekte destroyen/ löschen

    Es sollte auch mal das verhalten speichern laden geprüft werden, da ich es von Siedler 5 kenne, dass einige Effekte eine Spielabsturz verursachten (gerade Feuereffekte)

    Gruß
    Peermanent


LinkBacks (?)

  1. Hits: 5
    24.05.2009, 23:20

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Wie kommt man an die Parameter der Funktionen?
    Von Zweispeer im Forum S6 Scriptecke
    Antworten: 7
    Letzter Beitrag: 06.04.2012, 22:00
  2. Highscores regelmässig löschen
    Von Gerhard im Forum Spielhalle Minispiele
    Antworten: 5
    Letzter Beitrag: 02.10.2008, 22:14
  3. Alte Speicherstände löschen
    Von saturn1975 im Forum Siedler 5 DEdK Allgemein
    Antworten: 0
    Letzter Beitrag: 15.09.2008, 06:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein