Weil es mir gerade zufällig aufgefallen ist:

Zitat von
MagicStyle
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".