• Creating Derma = Fail
    22 replies, posted
I'm trying to send a umsg from the server to the client to make a Derma menu... this is autorun/server/anti_cheat.lua [lua]require("gatekeeper") include("echo.lua") AddCSLuaFile("autorun/client/anti_cheat_derma.lua") -- Let them know function AntiCheat( ply ) if ply:IsAdmin() and !ply:IsSuperAdmin() then ply:SetNWInt("WarningLevel", 0) elseif ply:IsSuperAdmin() then ply:SetNWInt("WarningLevel", 0) else ply:SetNWInt("WarningLevel", 5) end umsg.Start("ACInfo", ply) umsg.End() end hook.Add( "PlayerInitialSpawn", "FirstSpawn", AntiCheat ) function Disagree( um ) local ply = um:ReadEntity() require("gatekeeper") gatekeeper.Drop(ply:UserID(), "You must agree to the Anti-Cheat system to play here") end usermessage.Hook("ACDisagree", Disagree) require("slog") SLOGBlocked = { "dump_hooks", "soundscape_flush", "hammer_update_entity", "physics_constraints", "physics_debug_entity", "physics_select", "physics_budget", "sv_soundemitter_flush", "rr_reloadresponsesystems", "sv_soundemitter_filecheck", "sv_soundscape_printdebuginfo", "dumpentityfactories", "dump_globals", "dump_entity_sizes", "dumpeventqueue", "dbghist_addline", "dbghist_dump", "groundlist", "report_simthinklist", "report_entities", "server_game_time", "npc_thinknow" } local DontShow = { "headcrab", "say", "gmt_", "gtower_", "gm_", "dr_", "st_", "rp_", "rs_", "wire_", "gms_", "status", "kill", "myinfo", "phys_swap", "+ass_menu", "-ass_menu", "explode", "suitzoom", "feign_death", "gm_showhelp", "gm_showteam", "gm_showspare1", "gm_showspare2", "+gm_special", "-gm_special", "vban", "vmodenable", "se auth", "ulib_cl_ready", "noclip", "kill", "undo", "jukebox", "debugplayer", "gmod_undo", "cnc", "_xgui", "xgui", "_u", "ulib_update_cvar", "ulx" } function Cmd_RecvCommand(Name, Buffer) local Ply = false for k,v in ipairs(player.GetAll()) do if IsValid(v) && v:Name() == Name then Ply = v break end end // don't bother with any commands executed by a NULL player, including say or crash commands if !IsValid(Ply) then return true end local clean = string.Trim(Buffer) local lower = string.lower(clean) // don't log these commands for k,v in ipairs(DontShow) do if string.sub(lower, 1, string.len(v)) == string.lower(v) then return false else end end local name = Ply:Name() local steamid = Ply:SteamID() local blocked = false local printmessage = nil for k,v in pairs(SLOGBlocked) do if lower == v || string.find(lower, v) != nil then blocked = true printmessage = "#Blocked Command: "..string.format("%s (%s) ran '%s'\n", name, steamid, clean) if Ply:IsAdmin() and !Ply:IsSuperAdmin() then Ply:SetNWInt("WarningLevel", Ply:GetNWInt("WarningLevel") + 2) else Ply:SetNWInt("WarningLevel", 10) end break end end local log = string.format("[%s] %s (%s) ran '%s'\n", os.date("%c"), name, steamid, clean) AppendLog(string.Replace(steamid, ":", "_"), log) if blocked then AppendLog("Blocked", log) if Ply:GetNWInt("WarningLevel") >= 10 then local Banned_SteamID = Ply:SteamID() local Banned_Nick = Ply:Nick() gatekeeper.Drop(Ply:UserID(), "Banned for 1 day; Warning Level exceeded. You CAN NOT appeal this ban") RunConsoleCommand("ulx", "banid", Banned_SteamID, 1440, Banned_Nick .. ": Warning Level exceeded") end else printmessage = "#"..log end if printmessage then for k,v in ipairs(player.GetAll()) do if IsValid(v) && v:IsSuperAdmin() then if blocked then v:PrintMessage(HUD_PRINTTALK, printmessage) else v:PrintMessage(HUD_PRINTCONSOLE, printmessage) end end end end if string.find(lower, "lua_run_cl") && ( string.find(lower, "select v from ratings") || string.find(lower, "http") || string.find(lower, "slob") || string.find(lower, "runstring") ) then gatekeeper.Drop(Ply:UserID(), "Malicious bind; type 'key_findbinding lua_run_cl' and rebind those keys") return true end -- ADMIN NOTICES --AEcho("[" .. os.date("%c") .. "]" .. Ply:Nick() .. " ran '" .. lower .. "'.") return blocked end hook.Add("SetupMove", "InfAngleGuard", function(ply, cmd) local ang = cmd:GetMoveAngles() if not (ang.p >= 0 or ang.p <= 0) or not (ang.y >= 0 or ang.y <= 0) or not (ang.r >= 0 or ang.r <= 0) then cmd:SetMoveAngles(Angle(0, 0, 0)) ply:SetEyeAngles(Angle(0, 0, 0)) end end)[/lua] autorun/client/anti_cheat_derma.lua [lua]function ShowAntiCheatInfo() local F = vgui.Create("DFrame") F:SetSize(400, 175) F:SetBackgroundBlur(true) F:ShowCloseButton(false) F:SetDraggable(false) F:Center(true) F:SetTitle("Anti-Cheat Information") F:MakePopup() -- tabs local Tabs = vgui.Create( "DPropertySheet", F ) Tabs:SetPos( 5, 25 ) Tabs:SetSize( 390, 125 ) local sheet1 = vgui.Create( "DPanel" ) --local sheet2 = vgui.Create( "DPanel" ) local AI = vgui.Create( "DLabel", sheet1 ) --By putting sheet1 here, you are setting the parent of DLabel to sheet1 if LocalPlayer():IsAdmin() and !LocalPlayer():IsSuperAdmin() then local Warning = vgui.Create("DImage", sheet1) Warning:SetImage("gui/silkicons/exclamation") Warning:SizeToContents() AI:SetText("As an admin, you have a higher tolerance for hacking bans.") elseif LocalPlayer():IsSuperAdmin() then local OK = vgui.Create("DImage", sheet1) OK:SetImage("gui/silkicons/check_on") OK:SizeToContents() OK:SetPos( 5, 5 ) AI:SetText("Since you are a super admin, you can not be banned for hacking.") else local Warning = vgui.Create("DImage", sheet1) Warning:SetImage("gui/silkicons/exclamation") Warning:SizeToContents() AI:SetText("As a client of our server, you get 1 warning before being banned for hacking.") end AI:SetColor(Color(0, 0, 0)) AI:SetPos(25, 5) AI:SizeToContents() -- about the anti cheat local About = vgui.Create("DLabel", sheet1) About:SetText("The Anti-Cheat on this server will give you one chance to save yourself, so if\nyou accidently press a bind, you're safe. If you press another cheat bind, or\nenter a cheat command, you will be banned for cheating.\n\nYou MAY NOT appeal bans from our Anti-Cheat system.") About:SetColor(Color(0, 0, 0)) About:SizeToContents() About:SetPos(5, 25) print("WHAT IS THIS?!") /* local SheetItemTwo = vgui.Create( "DCheckBoxLabel" , sheet2 ) SheetItemTwo:SetText( "Use SENTs?" ) SheetItemTwo:SetConVar( "some_convar" ) SheetItemTwo:SetValue( 1 ) SheetItemTwo:SizeToContents() */ -- I agree button local Agree = vgui.Create("DButton", F) Agree:SetText("I agree to the above") Agree:SetPos(5, 155) Agree:SetSize(180, 15) Agree.DoClick = function() F:SetVisible(false) AI:SetVisible(false) Tabs:SetVisible(false) sheet1:SetVisible(false) chat.AddText(Color(255, 255, 255), "Enjoy your stay ", Color(0, 255, 0), LocalPlayer():Nick(), Color(255, 255, 255), "!") chat.PlaySound() RunConsoleCommand("escape") end -- I do not agree button local Disagree = vgui.Create("DButton", F) Disagree:SetText("I do not agree to the above") Disagree:SetPos(215, 155) Disagree:SetSize(180, 15) Disagree.DoClick = function() umsg.Start("ACDisagree", LocalPlayer()) umsg.Entity(LocalPlayer()) umsg.End() end --You then use the DPanels (sheet1, sheet2) for the AddSheet. All controls (buttons, checkboxes, etc. should be parented to them (sheet1,sheet2) and NOT the DPropertySheet (Tabs) Tabs:AddSheet( "Information", sheet1, "gui/silkicons/user", false, false, "Anti-Hack Information" ) --Tabs:AddSheet( "About", sheet2, "gui/silkicons/group", false, false, "About the Anti-Hack" ) end usermessage.Hook("ACInfo", ShowAntiCheatInfo) --chat.AddText(Color(255, 255, 255), "Good afternoon ", Color(0, 255, 0), LocalPlayer():Nick(), Color(255, 255, 255), "! We think it's only fair if you understand how we feel against hacking, so here's a nice explanation.")[/lua] [autorun\client\anti_cheat_derma.lua:20] attempt to call
Try, Changing the LocalPlayer: thing to pl or ply and up at the top by the function in parenthesis put pl or ply so like this. line 20: if pl:IsAdmin() and !pl:IsSuperAdmin() then function part: function ShowAntiCheatInfo(pl) I don't know just a suggestion.
Just tried, same error. Thanks for the response though.
Maybe try making it a client side file.
The second one causing the error is the autorun/client/anti_cheat_derma.lua is clientside
[lua] if ply:IsAdmin() and !ply:IsSuperAdmin() then [/lua] Why would you do that? Try it without !ply:IsSuperAdmin()
Because Supers == owners on my server, and they all have ESPs to . Tried your suggestion, failed. The usermessage is unhanded, and my debug print is never ran.
It seems that IsAdmin() works either shared or server-side, not exclusively client-side.
[b][url=http://wiki.garrysmod.com/?title=Player.IsAdmin]Player.IsAdmin [img]http://wiki.garrysmod.com/favicon.ico[/img][/url][/b] says shared, not sure what you're getting at sorry
I did a little test where I used the function in a client lua file, and it didn't work. The same test in a shared function worked (my test message showed up in the client console) I don't know. I'm fucking confused.
Wait, what the hell? You got it working by running the clientside file on the client where on the client it doesn't work and therefor tried again on the client while running as the client? Seriously, you got it working? How?
Got it. You can't run the function too early. Apparently it takes a second to load up the info or something. When I use the function on init, it gives me the same error in OP. If I use it afterwards, it works. Try going in your console and doing "lua_run_cl print(LocalPlayer():IsAdmin())". It will work.
So what should I do, add a timer?
[QUOTE=Banana Lord.;25215615]So what should I do, add a timer?[/QUOTE] Maybe do a if(CLIENT) in GM:InitPostEntity() , which is a shared function that runs after everything is loaded up edit:yeah, I tested it and that works [LUA] function GM:InitPostEntity() if (CLIENT) then if(LocalPlayer():IsAdmin()) then print("LOLOLOLOL POOPS") end end end [/LUA] edit:assuming this is a gamemode. if not,you probably know this already, but instead of an override you could hook it like the example [URL=http://wiki.garrysmod.com/?title=Gamemode.InitPostEntity]here[/URL]
I'm not following how you would incorporate that into the entire script...sorry.
No problem. What if you replace line 76 in the client-side file: [Lua]usermessage.Hook("ACInfo", ShowAntiCheatInfo) [/Lua] with: [Lua]hook.Add( "InitPostEntity", "ACInfo", ShowAntiCheatInfo )[/Lua] Then you could get rid of the ACInfo usermessage @ line 14-15 server-side assuming that it only needs to run once on initpostentity
First one worked. If I was gay, I would love you more than I do right now, if possible. <3
hah, glad it worked. I don't know what the hell I'm doing 99% of the time, but I have a knack for figuring things out
[QUOTE=iRzilla;25218553]Did any of you read his code? There is still a massive error. He's trying to send umsgs to the server from the client, use concommands![/QUOTE] For the gatekeeper part, that's what I ended up doing. Although I seriously hate using them.
[QUOTE=iRzilla;25218553]Did any of you read his code? There is still a massive error. He's trying to send umsgs to the server from the client, use concommands![/QUOTE] I saw that, then continued to scroll to bottom of the thread to post about it but I came across your post.
Check if hes admin on server side and if hes admin set hes NWBool to true and then do if LocalPlayer():GetNWBool("admin") then
Sorry, you need to Log In to post a reply to this thread.