Garry's Mod Lua | Kapitel 3: Erster Start mit Clientseitigen Code / Teil A

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

    • Garry's Mod Lua | Kapitel 3: Erster Start mit Clientseitigen Code / Teil A

      Anleitung Garry’s Mod Lua

      Kapitel 3: Erster Start mit Clientseitigen Code Teil A

      Name: Garry’s Mod Lua
      Thema: Erster Start mit Clientseitigen Code / Teil A
      Version: 1.0.0
      Autor: crocstar47

      © 2016 crocstar47


      Websites:
      http://wiki.garrysmod.com/page/Main_Page
      http://wiki.garrysmod.com/page/GM/HUDPaint
      http://wiki.garrysmod.com/page/GM/HUDShouldDraw
      http://wiki.garrysmod.com/page/draw/RoundedBox
      http://wiki.garrysmod.com/page/surface/CreateFont
      http://wiki.garrysmod.com/page/draw/SimpleText
      http://wiki.garrysmod.com/page/Global/ScrH
      http://wiki.garrysmod.com/page/Global/ScrW


      Disclaimer:
      Ich übernehme keine Haftung für schäden an irgendwelchen Gegenständen von euch wie euren PC oder eurem Garry’s Mod Spiel. Das ganze macht ihr auf eigene Verantwortung!

      In diesem Kapitel werden wir nur die Clientseitigen Funktionen kennenlernen. Wir werden heute das Standard HUD entfernen und es durch ein schöneres und selbst programmiertes ersetzen. Als erstes werden wir mal im Garry’s Mod Wiki nach den passenden Hooks suchen. Ich habe dazu zwei Hooks gefunden die wir verwenden werden: “HUDPaint” und “HUDShouldDraw”. Der HUDPaint Hook ist dafür da 2D Objekte auf dem Bildschirm vom Spieler anzeigen zu lassen. Also genau richtig für unsere Zwecke!. Den HUDShouldDraw Hook benutzen wir um die Standard HUD Elemente wie die Lebensenergie zu deaktivieren.

      Also als erstes öffnen wir unser Garry’s Mod Verzeichnis und erstellen eine Lua Datei im Lua Ordner. Ich nenne die Datei “cl_hud.lua. Bitte beachtet dass es zu Leistungsproblemen kommen kann wenn ihr sehr viele Elemente benutzt. Bitte benutzt nur die Elemente die ich ebenfalls verwende. Einen Spieler Avatar anzeigen zu lassen ist auf normalem Wege zwar möglich aber auch sehr Ressourcenfressend. Nun öffnet ihr euren Texteditor in meinem Fall Sublime Text und es geht los.

      Um jetzt die benötigten Hooks hinzuzufügen schreiben wir:


      -- Hier werden Objekte zum Bildschirm hinzugefügt
      hook.Add(“HUDPaint”, “MyFirstHUD”, function()
      -- Do Something :)
      end)

      -- Hier werde die Standard Garry’s Mod HUD Objekte entfernt
      hook.Add(“HUDShouldDraw”, “HideDefaultComponents”, function(name)
      -- Disable Something :)
      end)



      Wir können allerdings auch eine externe Funktion benutzen die nicht gleich mit beim Hook dabei ist. Das ganze bevorzuge ich:

      -- Funktion für HUDPaint
      function DrawAllElementsOnScreen()
      -- Do Something :)
      end

      -- Hook um die Objekte auf dem Bildschirm des Client anzuzeigen
      hook.Add(“HUDPaint”, “MyFirstHUD”, DrawAllElementsOnScreen)

      -- Funktion für HUDShouldDraw
      function DisableDefaultComponents()
      -- Disable Something :)
      end

      -- Hook um die Standard Garry’s Mod Objekte zu deaktivieren
      hook.Add(“HUDShouldDraw”, “DisableDefaultElements”, DisableDefaultComponents)



      Nun kommen noch ein paar Screen Elemente dazu die wir verwenden werden. In dem Fall benutzen wir heute:

      draw.RoundedBox( number cornerRadius, number x, number y, number width, number height, table color )


      surface.CreateFont( string fontName, table fontData)


      draw.SimpleText( string text, string font="DermaDefault", number x=0, number y=0, table color=Color( 255, 255, 255, 255 ), number xAlign=TEXT_ALIGN_LEFT, number yAlign=TEXT_ALIGN_TOP )


      Noch einmal zur Erklärung warum man vorsichtig mit solchen Hooks umgeht ist weil z.B. der HUDShouldDraw Hook Hundertmal pro Sekunde ausgeführt wird. Das ganze wird mehr als Fünf mal die Sekunde pro Frame im Durschnitt ausgeführt.
      Aber nun zum wesentlichen. Wir benutzen jetzt die Draw Library und erstellen eine Runde Box auf dem Bildschirm. Das ganze wird auf den Koordinaten X = 10 und Y = 10 angezeigt. Die Größe der Box beträgt 100x100. Die Farbe ist ein Blau und die Box ist nicht rund.
      Jetzt fügen wir noch dem HUDShouldDraw eine Schleife hinzu um die Standard HUD Komponenten zu deaktivieren. In der Schleife gehen wir durch eine Tabelle wo die HUD Komponenten sind und fragen ab ob der Name vom Objekt mit einem Objekt in der Tabelle übereinstimmt. Trifft das zu wird nichts zurückgegeben und damit werden dann auch nicht die Objekte angezeigt.

      -- Funktion für HUDPaint
      function DrawAllElementsOnScreen()
      -- Draw Rounded Box
      draw.RoundedBox(0, 10, 10, 100, 100, Color(42, 148, 184))
      end

      -- Hook um die Objekte auf dem Bildschirm des Client anzuzeigen
      hook.Add(“HUDPaint”, “MyFirstHUD”, DrawAllElementsOnScreen)


      -- Funktion für HUDShouldDraw
      function DisableDefaultComponents(name)
      for key, value in pairs({“CHudHealth”, “CHudBattery”}) do
      if(name == value) then
      return false
      end
      end
      end

      -- Hook um die Standard Garry’s Mod Objekte zu deaktivieren
      hook.Add(“HUDShouldDraw”, “DisableDefaultElements”, DisableDefaultComponents)



      Jetzt sieht das Script so aus:

      -- Funktion für HUDPaint
      function DrawAllElementsOnScreen()
      draw.RoundedBox(0, 10, 10, 100, 100, Color(42, 148, 184))
      end

      -- Hook um die Objekte auf dem Bildschirm des Client anzuzeigen
      hook.Add(“HUDPaint”, “MyFirstHUD”, DrawAllElementsOnScreen)

      -- Funktion für HUDShouldDraw
      function DisableDefaultComponents(name)
      for key, value in pairs({“CHudHealth”, “CHudBattery”}) do
      if(name == value) then
      return false
      end
      end
      end

      -- Hook um die Standard Garry’s Mod Objekte zu deaktivieren
      hook.Add(“HUDShouldDraw”, “DisableDefaultElements”, DisableDefaultComponents)



      Um das Script auszuführen müssen wir nun ein Singleplayer Spiel starten und dann die Developer Konsole öffnen. Dort tragen wir nun folgendes ein:

      lua_openscript_cl cl_hud.lua


      Jetzt sehen wir dass die Standard Lebensanzeige weg ist sowie die Rüstungsanzeige. Außerdem ist nun auch eine 2D Box aufgetaucht auf dem Bildschirm.
      Um nun die Box auf den Bildschirm anzupassen und auch unten links anzuzeigen öffnen wir wieder unser Script und editieren den Teil mit der gerundeten Box.

      [IMG:https://lh5.googleusercontent.com/xyucOvlMHDR8wilnynVcHq-s9VQrHVbMofqbRNTVXOGJ-gzTyCE76qCRWvP3imkoVOuXdSwvD-DHPHwRU4YfUVuAuE07UsL68Drfx-feIdWlr7XYRpy_cIWbgFRQFj4m5FKMvc3r]
      Um nun die Box auf den Bildschirm anzupassen und auch unten links anzuzeigen öffnen wir wieder unser Script und editieren den Teil mit der gerundeten Box.

      -- Funktion für HUDPaint
      function DrawAllElementsOnScreen()
      draw.RoundedBox(0, 10, 10, 100, 100, Color(42, 148, 184))
      end



      Um das HUD für jede Monitorgröße nutzbar zu machen werden wir nun zwei neue Objekte kennenlernen: ScrH() und ScrW(). Wie die Namen schon verraten ist ScrH() um die Höhe vom dem Garry’s Mod Fenster in Pixeln zu bekommen und ScrW() ist dafür da die Breite von dem Garry’s Mod Fenster in Pixeln zu bekommen.

      Das ganze benutzen wir um das HUD für alle Monitorgrößen verfügbar zu machen. In unserem Fall wollen wir das HUD unten links platzieren. Dafür nehmen wir die Fenstergröße und rechnen sie minus 60 dann müsste die Rounded Box an einer geeigneten Stelle für Y sein. Dann setzen wir die Position X auf 10. Die Breite der Rounded Box setzen wir auf 300 und die Höhe auf 50. Die Farbe lassen wir vorerst gleich.

      -- Funktion für HUDPaint
      function DrawAllElementsOnScreen()
      draw.RoundedBox(0, 10, ScrH() - 60, 300, 50, Color(42, 148, 184))
      end



      Das ganze sieht dann im Spiel wie folgt aus:

      [IMG:https://lh3.googleusercontent.com/x95u1TGoMCFH-sAMoG9EdzaILT9xNRDL8ISCCi_Msx8kcRTQ9IqapadCwK79BVgowKelF7s4OTLrbCfW5wo-kw77xjBN1VstYOKTYwd7oicjaJFgA0mbjPgN2h8TgBdGDXMsQrbv]

      ------------------------------------------------------------------------------------------------------------------------
      © 2016 crocstar47
      ------------------------------------------------------------------------------------------------------------------------

      Bitte nun zu Teil B gehen! xD
      Ich darf nur maximal 10.000 Zeichen Posten.
      The Cake is not a Lie!

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