Levelsystem in Lua

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Levelsystem in Lua

      Heyho,

      weil bestimmt welche von euch für das Accountsystem von Map auch ein Levelsystem haben wollen
      aber es alleine vllt. nicht schaffen, zeige ich euch mal wie ihr soetwas macht.

      Was ihr braucht:
      N-Client: Download
      N-Server: Download
      Und einen Lua-Editor.

      Quellcode

      1. AddEventListener("OnClientEnter", "ClientEnter")
      2. AddEventListener("OnDie", "Kill")


      Fügt 2 EventListener hinzu, einmal OnClientEnter um den Namen beim joinen
      zu ändern und OnDie um die Kills abzurufen.

      Quellcode

      1. Exp = 0
      2. Level = 1
      3. OldName = ""


      Fügt 2 Integer hinzu, einmal Exp und Level jedoch mit einem Startwert von 1.
      Und einen String OldName, der später zum speichern des Namens benötigt wird.

      Quellcode

      1. iTick = 0
      2. function Tick(Time, ServerTick)
      3. iTick = iTick + 1
      4. end
      5. function TickDefered(Time, ServerTick)
      6. end
      7. function PostTick(Time, ServerTick)
      8. end


      Tick-Funktionen, die wir bei dem System aber nicht benötigen.

      Quellcode

      1. function ClientEnter(ClientID)
      2. OldName = GetPlayerName(ClientID)
      3. SetPlayerName(ClientID, "["..Level.."]".. GetPlayerName(ClientID))
      4. end


      Hier wird der Name in OldName gespeichert, und '[1]' vor den Namen
      gesetzt, wenn man den Server betritt.

      Quellcode

      1. function Kill(Killer, Victim, Weapon)
      2. if (Killer ~= Victim) then
      3. Exp = Exp + 1
      4. SendChatTarget(Killer, "Exp: "..Exp.."/"..Level)
      5. if (Exp > Level or Exp == Level) then
      6. Exp = 0
      7. Level = Level + 1
      8. SetPlayerName(Killer, OldName)
      9. SetPlayerName(Killer, "["..Level.."]"..GetPlayerName(Killer))
      10. SendChatTarget(Killer, "Level Up! You are now Level: "..Level)
      11. end
      12. end
      13. end
      Alles anzeigen

      Jetzt kommen wir zum Levelsystem. Zuerst wird abgefragt, ob man der Killer ist, also
      der Spieler der den anderen Spieler umgebracht hat. Wenn ja, wird Exp um 1 erhöht und
      eine Chatnachricht mit ein paar Info-Daten ausgegeben. Dann wird geprüft, ob Exp genauso
      hoch ist wie das Level oder etwas höher ist. Wenn das zutrifft, wird Exp auf Null gesetzt, das Level
      um 1 erhöht. Dann kommt OldName zum Einsatz, worin wir den Namen gespeichert haben. In diesem
      Fall dann "Toast". Dann erst wird vor den Namen wieder '[1]' gesetzt jedoch mit dem nächsten Wert
      in diesem Fall 2. Warum das ganze? Ganz einfach, weil sich das Level zwar erhöhen würde aber jedoch
      nicht so:

      Level 1: [1]Toast
      Level 2: [2]Toast

      sondern so:

      Level 1: [1]Toast
      Level 2: [2][1]Toast

      Zum Schluss wird eine letzte Nachricht ausgegeben mit der Info, dass der Spieler ein Level gestiegen ist
      und nun *Hier Level einfüg* Level hoch ist. Map hatte ja gesagt

      MAP94 schrieb:


      Auf grundlage dieser Mod/dieses Tutorials kann man mit ein bisschen übung eine ganze Levelmod programmieren.

      und ich habe euch die Arbeit somit erspart^^

      Und jetzt nochmal der ganze Code:

      Quellcode

      1. AddEventListener("OnClientEnter", "ClientEnter")
      2. AddEventListener("OnDie", "Kill")
      3. Exp = 0
      4. Level = 1
      5. OldName = ""
      6. iTick = 0
      7. function Tick(Time, ServerTick)
      8. iTick = iTick + 1
      9. end
      10. function TickDefered(Time, ServerTick)
      11. end
      12. function PostTick(Time, ServerTick)
      13. end
      14. function ClientEnter(ClientID)
      15. OldName = GetPlayerName(ClientID)
      16. SetPlayerName(ClientID, "["..Level.."]".. GetPlayerName(ClientID))
      17. end
      18. function Kill(Killer, Victim, Weapon)
      19. if (Killer ~= Victim) then
      20. Exp = Exp + 1
      21. SendChatTarget(Killer, "Exp: "..Exp.."/"..Level)
      22. if (Exp > Level or Exp == Level) then
      23. Exp = 0
      24. Level = Level + 1
      25. SetPlayerName(Killer, OldName)
      26. SetPlayerName(Killer, "["..Level.."]"..GetPlayerName(Killer))
      27. SendChatTarget(Killer, "Level Up! You are now Level: "..Level)
      28. end
      29. end
      30. end
      Alles anzeigen


      Ich hoffe euch hat das Tutorial gefallen, viel Spaß damit!

      lg.
    • Wenn ich mich nicht täusche bekommt jetzt aber derjenigeder getötet wurde den Namen des Spielers, der als letztes gejoint ist.
      Das sollte das Problem lösen, und hat obendrein weniger C++ Aufrufe ;)

      Quellcode

      1. AddEventListener("OnClientEnter", "ClientEnter")
      2. AddEventListener("OnDie", "Kill")
      3. Exp = 0
      4. Level = 1
      5. OldName = {}
      6. iTick = 0
      7. function Tick(Time, ServerTick)
      8. iTick = iTick + 1
      9. end
      10. function TickDefered(Time, ServerTick)
      11. end
      12. function PostTick(Time, ServerTick)
      13. end
      14. function ClientEnter(ClientID)
      15. if(OldName[ClientID] == nil) then
      16. OldName[ClientID] = ""
      17. end
      18. OldName[ClientID] = GetPlayerName(ClientID)
      19. SetPlayerName(ClientID, "["..Level.."]".. OldName[ClientID])
      20. end
      21. function Kill(Killer, Victim, Weapon)
      22. if (Killer ~= Victim) then
      23. Exp = Exp + 1
      24. SendChatTarget(Killer, "Exp: "..Exp.."/"..Level)
      25. if (Exp > Level or Exp == Level) then
      26. Exp = 0
      27. Level = Level + 1
      28. SetPlayerName(Killer, "["..Level.."]"..OldName[Killer])
      29. SendChatTarget(Killer, "Level Up! You are now Level: "..Level)
      30. end
      31. end
      32. end
      Alles anzeigen


      PS: ICha hab den Code nicht geprüft, bitte einfach PN an mich, falls was falsch ist und ich korrigiere es daraufhin gerne :)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Patafix ()

    • Ich denke, dass es nicht bei Levelmods bleiben wird. Mit lua kann man alles mögliche machen und ich denke es ist einfach praktischer so ein einfaches acc system zu haben. Stell dir mal race ohne top5 vor? Langweilig? JA!
      Ich glaube dass viele mods gescheitert sich weil sie kein gutes acc system geschafft haben. Das ist jetzt anders.

      Hoffen wir das beste :D