Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Suche liste aller Klassennamen

  1. #1
    Avatar von MagicStyle
    Registriert seit
    02.04.2013
    Ort
    Feuchtwangen

    Terminal Suche liste aller Klassennamen

    Hi, hoffe jemand kann mir helfen. Ich habe mir vor einigen Tagen mit dem Skelleton Grundgerüsts ein eigenen Gamemode erstellt um diverse wichtige Dinge zu üben. Dazu gehört natürlich auch das Spawnen von NPC's. Jedoch komme ich nicht weiter, da ich den Klassennamen für NPC's nicht weiss.

    Mit folgendem Code spawnt man ja ein Fass:
    Code:
    barrel=ents.Create("prop_physics")
    barrel:SetModel("models/props_c17/oildrum001.mdl")
    barrel:SetPos(Vector(0,0,0))
    barrel:Spawn()
    Also dachte ich mir ich kann genauso auch NPC's spawnen, nur leider weiss ich nicht was ich anstatt prop_physics nehmen muss? Gibt es da eine Liste mit allen verfügbaren Klassennamen? Ich finde keine

    So sieht mein Code bisher aus, der Auslöser ist ein Button in einem Fenster (bereits fertiggestellt):
    (cl_init.lua)
    Code:
    x = 0
    y = 0
    z = 0
    ent = ents.Create("prop_physics")
    local spawnpos = Vector(x,y,z)
    
    		function spawnnpc(ent)
    		    ent:SetPos(spawnpos)
    		    ent:Spawn()
    		end
    Wo finde ich eine Liste mit allen Namen die ich anstelle von prop_physics eintragen könnte, in der Hoffnung den richtigen zu finden. Danke für eure Hilfe!

  2. #2

    Standard AW: Suche liste aller Klassennamen

    There you go.
    Das ist neh Liste, mit allen Entity-Namen aus HL²:Ep2. Wenn du allerdings auch alle anderen Classnames haben willst, unter anderem von den Entities aus Sandbox und denen der AddOns, hau das in die Konsole:
    Lua Code:
    1. lua_run for k, v in pairs( scripted_ents.GetList() ) do print( v.ClassName ) end

  3. Folgender Benutzer sagt Danke zu RP-01 für den nützlichen Beitrag:


  4. #3
    Avatar von MagicStyle
    Registriert seit
    02.04.2013
    Ort
    Feuchtwangen

    Tick AW: Suche liste aller Klassennamen

    Ich Danke dir vielmals ! Es funktioniert!

    Edit: Mir ist gerade noch etwas zusätzliches eingefallen, funktioniert aber noch nicht. Ich habe jetzt bei cl_init.lua (Client) ein Fenster mit einem Button als Auslöser für den Spawn erstellt. Vielleicht kann mir da jemand helfen.

    Code:
    function spawnmenu()
    
    local ply = LocalPlayer()
    	local window = vgui.Create("DFrame")
    	local btn = vgui.Create("DLabel",window)
    	
    	window:SetPos(50,50)
    	window:Set.....
    	--gekürzt
    	
    	btn:SetFont("default")
    	btn:SetText("Spawn")
            btn:DoClick = function(btn)
    
    local spawnpos = Vector(0,0,0)
    	ent = ents.Create("npc_fastzombie")
    	ent:SetModel("models/player/zombiefast.mdl")
    	ent:SetPos(spawnpos)
    	ent:Spawn()
    
           end
    
    end
    Das GUI Funzt, aber wenn ich auf den Button drücke sagt die Konsole folgendes:
    [ERROR] gamemodes/testing/gamemode/cl_init.lua:101: attempt to call field 'Create' (a nil value)
    1. DoClick - gamemodes/testing/gamemode/cl_init.lua:101
    2. unknown - lua/vgui/dlabel.lua:206
    Geändert von MagicStyle (07.04.2013 um 22:59 Uhr)

  5. #4
    Huge Sponsor Avatar von isch
    Registriert seit
    08.12.2009
    Ort
    Graz

    Standard AW: Suche liste aller Klassennamen

    Dein Code ist leider schlecht/falsch eingerückt. Dadurch ist er schwer verständlich und man erkennt nicht schnell was er eigentlich tun soll.
    Code:
    function spawnmenu()
    	local ply = LocalPlayer()
    	local window = vgui.Create("DFrame")
    	local btn = vgui.Create("DLabel",window)
    	
    	window:SetPos(50,50)
    	--[[ gekürzt ]]--
    	btn:SetFont("default")
    	btn:SetText("Spawn")
            btn:DoClick = function(btn)
    		local spawnpos = Vector(0,0,0)
    		ent = ents.Create("npc_fastzombie")
    		ent:SetModel("models/player/zombiefast.mdl")
    		ent:SetPos(spawnpos)
    		ent:Spawn()
           end
    end
    Ich gehe davon aus, dass die rot markierte Zeile die Zeile 101 ist?
    Vielleicht hast du weiter oben schon die Variable "ents" überschrieben?

    Am einfachsten postest du einfach den Inhalt der gesamten Datei und nicht nur einen Ausschnitt.
    (Längere Codeauszüge bitte nicht direkt ins Forum. Bitte den Code auf beispielsweise Gist einzufügen und bei "Language" noch "Lua" auswählen. Dann noch auf "Create Public Gist" und dann den Link hier im Forum posten)

    Da du das Entity Client-seitig erstellst - Dir ist bewusst das es dann auch nur dieser eine Spieler sieht und die anderen nicht? Wenn du willst das es alle Spieler sehen musst du es Server-seitig erstellen.
    Zitat Zitat von Bier_Baron Beitrag anzeigen
    Und wer ist Garry?

  6. Folgender Benutzer sagt Danke zu isch für den nützlichen Beitrag:


  7. #5
    Avatar von MagicStyle
    Registriert seit
    02.04.2013
    Ort
    Feuchtwangen

    Standard AW: Suche liste aller Klassennamen

    Hi, Danke erstmal für deine Antwort. Ja, stimmt, beim nächsten mal mach ich es besser :/ Habe momentan keinen Zugriff auf meine Dateien da ich am Schul Pc bin, ich werde später den Code hier nach deiner Anleitung reinkopieren (so gegen 14 Uhr).

    Zitat Zitat von isch Beitrag anzeigen
    Da du das Entity Client-seitig erstellst - Dir ist bewusst das es dann auch nur dieser eine Spieler sieht und die anderen nicht? Wenn du willst das es alle Spieler sehen musst du es Server-seitig erstellen.
    Ups, das wusste ich nicht , danke für die Aufklärung, ich modde noch nicht sehr lange mit GMOD :/
    Aber kann ich das dann eigentlich so lösen (über den Client) das ein NPC per Buttonklick spawnt? Ist es möglich das komplette Derma Fenster in die Server datei (init.lua) zu schreiben? Um 14 Uhr poste ich mal den Code.
    Geändert von MagicStyle (08.04.2013 um 09:36 Uhr)

  8. #6
    Huge Sponsor Avatar von isch
    Registriert seit
    08.12.2009
    Ort
    Graz

    Standard AW: Suche liste aller Klassennamen

    Weil es mir gerade zufällig aufgefallen ist:
    Zitat Zitat von MagicStyle Beitrag anzeigen
    Code:
    local btn = vgui.Create("DLabel",window)
    Wieso ist der Button eigentlich ein "DLabel" und kein "DButton"?
    Das "btn:DoClick" wird (laut Wiki) vom Label nicht unterstützt sondern nur vom Button. (Siehe im Wiki unter "Methods")

    Zu deiner zweiten Frage - Lua ist zwar schon länger her und ich bin mir nicht sicher ob das die beste Lösung ist - grundsätzlich kannst du das jedoch über Console Commands lösen.
    Bei Klick auf den Button wird nicht direkt das Prop ausgeführt, der Button führt lediglich ein Console Command aus. Dieser Befehl wird dann am Server empfangen und ausgeführt.

    init.lua
    Code:
    function spawnMyZombie(ply, cmd, args, fullstring)
    --[[ hier das ents.Cretate ]]--
    end
    shared.lua
    Code:
    concommand.Add('spawn_zombie_command', function(ply, cmd, args, fullstring)
        // Wir müssen das Console Command sowohl am Server als auch am Client hinzufügen - sonst kennt der Client den Befehl nicht und kann ihn auch nicht richtig an den Server weitergeben.
        // Den Code zum Spawnen des Zombies wollen wir jedoch nur am Server ausführen. Hier wird überprüft ob wir gerade am Client oder am Server sind.
        // Am Server wird "spawnMyZombie" ausgeführt, am Client passiert einfach nichts
        if SERVER then
            spawnMyZombie(ply, cmd, args, fullstring)
        end
    end, null, 'Erstellt einen Zombie', FCVAR_NONE)
    cl_init.lua
    Code:
    // dein Code wie bisher, btn:DoClick dann jedoch folgendermaßen:
    btn:DoClick = function(btn)
        RunConsoleCommand('spawn_zombie_command')
    end
    Wenn du nun auf den Button Klickst wird der Befehl "spawn_zombie_command" ausgeführt. (cl_init.lua - Client)
    Der Befehl wird dann vom concommand.Add (shared.lua - Shared) abgefangen. Dies passiert am Server und Client gleichzeitig, daher wird geprüft ob es gerade am Server oder Client ausgeführt wird. Da wir das Entity ja am Server und nicht am Client erstellen wollen, wenn Client machen wir einfach nichts, wenn Server führen wir die Funktion "spawnMyZombie" aus.
    In "spawnMyZombie" (init.lua - Server) kommt dann der ganze Code mit dem "ents.Create".
    Geändert von isch (08.04.2013 um 11:00 Uhr)
    Zitat Zitat von Bier_Baron Beitrag anzeigen
    Und wer ist Garry?

  9. Folgender Benutzer sagt Danke zu isch für den nützlichen Beitrag:


  10. #7
    Avatar von MagicStyle
    Registriert seit
    02.04.2013
    Ort
    Feuchtwangen

    Standard AW: Suche liste aller Klassennamen

    Zitat Zitat von isch Beitrag anzeigen
    Weil es mir gerade zufällig aufgefallen ist:

    Wieso ist der Button eigentlich ein "DLabel" und kein "DButton"?
    Das "btn:DoClick" wird (laut Wiki) vom Label nicht unterstützt sondern nur vom Button. (Siehe im Wiki unter "Methods")
    Hi isch, das stimmt allerdings, ist mir wohl dummerweise beim rüberkopieren passiert , hab vergessen den Wert umzuschreiben :/ sorry .

    Vielen Dank für deine Ausführliche Hilfestellung, ich weiss deine Mühe wirklich zu schätzen . Ich werde gleich mal deine Variante versuchen und anschließend Bericht erstatten vom prinzip her habe ich es jetzt dank dir voll verstanden. Danke

    Edit: Es funktioniert ! Entlich!! Viele vielen Dank für eure Hilfsbereitschaft!!!
    Geändert von MagicStyle (08.04.2013 um 13:36 Uhr)

  11. #8
    Avatar von MagicStyle
    Registriert seit
    02.04.2013
    Ort
    Feuchtwangen

    Standard AW: Suche liste aller Klassennamen

    PS: Man könnte den Code auch etwas einfacher schreiben, ich versuche immer alles so unkompliziert wie möglich zu gestalten, also habe ich testweise einfach mal die Argumente komplett weggelassen und es funktioniert trotzdem tadellos, also:
    init.lua
    Code:
    function spawnMyZombie()
    --[[ hier das ents.Cretate ]]--
    end
    shared.lua
    Code:
    concommand.Add('spawn_zombie_command', function()
        if SERVER then
            spawnMyZombie()
        end
    end)
    Oder hat es einen wichtigen Grund das du das so gemacht hast
    Geändert von MagicStyle (08.04.2013 um 14:07 Uhr)

  12. Folgender Benutzer sagt Danke zu MagicStyle für den nützlichen Beitrag:


  13. #9
    Huge Sponsor Avatar von isch
    Registriert seit
    08.12.2009
    Ort
    Graz

    Standard AW: Suche liste aller Klassennamen

    Ja man kann die Argumente kann man weglassen, habe ich lediglich der Vollständigkeit halber hier eingefügt.
    Ob du sie brauchst oder nicht kommt dann auf den spezielle Anwendungsfall drauf an. In deinem Fall werden sie nicht benötigt. Willst du aber beispielsweise im Chat schreiben "[Spielername] hat einen Zombie gespawnt." benötigst du das ply Argument. Dort wird das Player-Objekt des Spielers übergeben, der den Befehl ausführt. Eine weitere Möglichkeit wäre, dass du dadurch überprüfst ob der Benutzer die ausreichenden Berechtigungen besitzt. (Admin-Befehle z.B.)

    Die Parameter die übergeben werden sind wie folgt:
    Parameter 1 - ply - Der Spieler der den Befehl ausgeführt hat
    Parameter 2 - cmd - Der Befehl selbst. Du könntest mehrere Befehle benutzen um die gleiche Funktion in Lua auszuführen. Dadurch kannst du dann innerhalb der Funktion sehen welcher Befehl eingegeben wurde
    Parameter 3 - args - Eine Liste/Tabelle mit den Parametern (durch Leerzeichen getrennt). z.B. könntest du noch die Koordinaten des Players übergeben und den Zombie unmittelbar vor dem Spieler spawnen
    Parameter 4 - fullstring - Einfach der komplette Befehl inklusive Parameter der eingegeben wurde als String

    Ich würde dir empfehlen den ersten Parameter zu übergeben und mithilfe vom ServerLog() zu loggen wenn ein Spieler einen Zombie spawnt. Ansonsten kann ein Spieler einfach spammen, für dich ist es aber nur schwer nachvollziehbar welcher Spieler das nun war.
    Geändert von isch (08.04.2013 um 14:11 Uhr)
    Zitat Zitat von Bier_Baron Beitrag anzeigen
    Und wer ist Garry?

  14. Folgender Benutzer sagt Danke zu isch für den nützlichen Beitrag:


  15. #10
    Avatar von Eddman
    Registriert seit
    07.04.2013
    Ort
    Bayern

    Standard AW: Suche liste aller Klassennamen

    Sehr verständlich, Ich seh schon von euch kann man so einiges Lernen! :)
    Geändert von Eddman (08.04.2013 um 15:03 Uhr)

Ähnliche Themen

  1. [SUCHE] Prob Bann Liste dür PHX
    Von qFischq im Forum Addons
    Antworten: 3
    Letzter Beitrag: 30.05.2010, 15:29
  2. Addon: Suche: STools von der Liste Verstecken
    Von cybersau im Forum Lua
    Antworten: 2
    Letzter Beitrag: 11.01.2010, 19:26
  3. Ausführliche Liste aller GMod.de Server und mehr...
    Von TheStargater im Forum Gameserver Zugangsdaten
    Antworten: 29
    Letzter Beitrag: 29.06.2009, 15:19
  4. Übersicht aller Wassertexturen
    Von Pac_187 im Forum Mapping
    Antworten: 16
    Letzter Beitrag: 26.04.2008, 19:04
  5. Liste aller Wichtigen Consolen Commands
    Von Andrey im Forum GMod Allgemein
    Antworten: 12
    Letzter Beitrag: 28.03.2008, 12:11

Berechtigungen

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