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:
Wir können allerdings auch eine externe Funktion benutzen die nicht gleich mit beim Hook dabei ist. Das ganze bevorzuge ich:
Nun kommen noch ein paar Screen Elemente dazu die wir verwenden werden. In dem Fall benutzen wir heute:
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.
Jetzt sieht das Script so aus:
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:
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.
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.
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.
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 ()