pastebin - collaborative debugging tool
kpaste.net RSS


SethHack V4.3 Source Code
Posted by aerika on Sat 26th May 2012 14:07
raw | new post

  1. -- LOL LOL LOL HAVE ALL THIS FUN FROM GEOFFYREY THE GIRAFFE
  2. -- SethHack V4
  3. -- Coded by Seth - seth@smartseth.co.uk - www.seth.im - www.sxz.be
  4.  
  5. if(not CLIENT) then return; end
  6. print("SethHack V4.3 Loaded!");
  7.  
  8. TEAM_CONNECTING = 0;
  9. TEAM_UNASSIGNED = 1001;
  10. TEAM_SPECTATOR  = 1002;
  11.  
  12. NOTIFY_GENERIC = 0;
  13.  
  14. local gjreerhrtjhgerg=1;
  15. local gjregerhrterge=1;
  16. local gjregergghtry=1;
  17. local gjregerrthg=1;
  18. local gjrerthrgerg=1;
  19. local gjrerthgerg=1;
  20. local gjrerthrtgerg=1;
  21. local gjregtrhtrherg=1;
  22. local gjrerthrthgerg=1;
  23. local gjregtrhrtherg=1;
  24. local gjregeerghtrg=1;
  25. local gjretrhrtjuykgerg=1;
  26. local gjreulitugerg=1;
  27. local gjregwefgtheerg=1;
  28. local gjregqfrtjerg=1;
  29. local gjregeqwfjterg=1;
  30. local gjregerg=1;
  31. local gjrtrehtuykegerg=1;
  32. local gjrwefghteegerg=1;
  33. local gjrwefgehtregerg=1;
  34. local gjrwgreyrjegerg=1;
  35.  
  36. local shsv = _G.SH_SETCVAR;
  37. local shsn = _G.SH_SETNAME;
  38. local shpc = _G.SH_PURECC;
  39. local shlr = _G.SH_LUARUN;
  40. local shss = _G.SH_SETSPEED;
  41. local shcn = _G.SH_COMMANDNUMBER;
  42. local shid = _G.SH_ISDORMANT;
  43. local shmv = _G.SH_MODVER;
  44. local shrf = _G.SH_READFILE;
  45. local shwf = _G.SH_WRITEFILE;
  46. local shsl = _G.SH_SUPPRESSIPLOGS;
  47. local shrs = _G.SH_RUNSCRIPTS;
  48. local shrr = _G.SH_REGREAD;
  49. local shrw = _G.SH_REGWRITE;
  50. local hl2gp = _G.SH_hl2_ucmd_getprediction;
  51. local hl2si = _G.SH_hl2_shotmanip;
  52.  
  53. _G.SH_SETCVAR, _G.SH_SETNAME, _G.SH_PURECC, _G.SH_LUARUN, _G.SH_SETSPEED, _G.SH_COMMANDNUMBER = nil;
  54. _G.SH_ISDORMANT, _G.SH_MODVER, _G.SH_READFILE, _G.SH_WRITEFILE, _G.SH_SUPPRESSIPLOGS, _G.SH_RUNSCRIPTS = nil;
  55. _G.SH_REGREAD, _G.SH_REGWRITE = nil;
  56. _G.hl2_ucmd_getprediction, _G.hl2_shotmanip = nil;
  57. _G.SH_hl2_ucmd_getprediction, _G.SH_hl2_shotmanip = nil;
  58.  
  59. include("includes/init.lua");
  60. include("includes/extensions/table.lua");
  61. include("includes/extensions/string.lua");
  62. include("includes/extensions/math.lua");
  63. include("derma/derma_utils.lua");
  64. require("datastream");
  65.  
  66. local g = table.Copy(_G);
  67. local r = table.Copy(_R);
  68. local d = table.Copy(_G);
  69.  
  70. g.SH_SETCVAR = shsv;
  71. g.SH_SETNAME = shsn;
  72. g.SH_PURECC = shpc;
  73. g.SH_LUARUN = shlr;
  74. g.SH_SETSPEED = shss;
  75. g.SH_COMMANDNUMBER = shcn;
  76. g.SH_ISDORMANT = shid;
  77. g.SH_MODVER = shmv;
  78. g.SH_READFILE = shrf;
  79. g.SH_WRITEFILE = shwf;
  80. g.SH_SUPPRESSIPLOGS = shsl;
  81. g.SH_RUNSCRIPTS = shrs;
  82. g.SH_REGREAD = shrr;
  83. g.SH_REGWRITE = shrw;
  84. g.SH_hl2_ucmd_getprediction = hl2gp;
  85. g.SH_hl2_shotmanip = hl2si;
  86.  
  87. local me = nil;
  88. local g_ents = {};
  89. local g_players = {};
  90.  
  91. local SH = {
  92.         vars = {},
  93.         cmds = {},
  94.         hooks = {},
  95.         binds = {},
  96.         funcs = {},
  97.         data = {},
  98.         custe = {},
  99.         tvars = {},
  100.         cvars = {},
  101.         badfiles = {},
  102.         traitors = {},
  103.         admins = {},
  104.         spect = {},
  105.         aimmodels = {},
  106.         aimfriends = {},
  107.         aimteams = {},
  108.         teamlist = {},
  109.         configs = {},
  110.         blockccs = {},
  111.         fnlogs = {},
  112.         fnblock = {},
  113.         CP = nil
  114. };
  115.  
  116. local menu = { aimtab = {} };
  117.  
  118. SH.cvars = {
  119.         {"sh_enabled", 1}, -- Hack should load
  120.         {"sh_panicmode", 0}, -- Panicmode (hooks don't run)
  121.         {"sh_logging_console", 0}, -- Log functions
  122.         {"sh_logging_file", 1}, -- Log functions
  123.         {"sh_blockrcc", 0}, -- Block RunConsoleCommand/:ConCommand()
  124.         {"sh_wallhack", 1}, -- Self explanatory
  125.         {"sh_wallhack_dist", 4092}, -- Max distance to see players
  126.         {"sh_wireframe", 1}, -- Wireframe wallhack
  127.         {"sh_solids", 0}, -- Solid chams
  128.         {"sh_esp", 1}, -- Self explanatory
  129.         {"sh_esp_showdist", 0}, -- Show player's distance on ESP
  130.         {"sh_esp_dist", 4092}, -- Max distance to see players
  131.         {"sh_esp_font", "DefaultFixedDropShadow"}, -- ESP Font
  132.         {"sh_esp_showgangs", 1}, -- Show gangwars gangs
  133.         {"sh_esp_col_r", 255}, -- ESP Color - Red
  134.         {"sh_esp_col_g", 0}, -- ESP Color - Green
  135.         {"sh_esp_col_b", 0}, -- ESP Color - Blue
  136.         {"sh_esp_col_a", 255}, -- ESP Color - Alpha
  137.         {"sh_lasereyes", 1}, -- Laser eye traces
  138.         {"sh_lasersights", 1}, -- Lser sight traces
  139.         {"sh_showadmins", 1}, -- Show admin list
  140.         {"sh_showdruggy", 1}, -- Show PERP drug info
  141.         {"sh_speedhack_speed", 2.5}, -- Speed of the speedhack
  142.         {"sh_targettraitors", 0}, -- Only target traitors
  143.         {"sh_ignoretraitors", 0}, -- Ignore traitors if you're a traitor
  144.         {"sh_ignoreadmins", 0}, -- Ignore admins
  145.         {"sh_targetplayers", 1}, -- Target players
  146.         {"sh_targetnpcs", 1}, -- Target NPCs
  147.         {"sh_targetents", 0}, -- Target ESP Ents
  148.         {"sh_ignorefriends", 0}, -- Ignore friends
  149.         {"sh_ignorenowep", 0}, -- Ignore players with no weapon
  150.         {"sh_dclos", 0}, -- Don't check LOS
  151.         {"sh_targetbones", 0}, -- Target bones
  152.         {"sh_aimbone", "Head"}, -- Bone to target when sh_targetbones = 1
  153.         {"sh_aimoffset_vert", 0}, -- Vertical aim offset
  154.         {"sh_aimoffset_hoz", 0}, -- Horizontal aim offset
  155.         {"sh_friendisenemy", 0}, -- Friends list is enemy list
  156.         {"sh_teamisenemy", 0}, -- Teams list is enemy list
  157.         {"sh_ulxungag", 0}, -- Bypass ulx gag
  158.         {"sh_fov", 0}, -- Zoooooom
  159.         {"sh_bhop", 0}, -- Bunnyhopping?
  160.         {"sh_friendlyfire", 1}, -- Target teammates
  161.         {"sh_nospread", 1}, -- Nospread
  162.         {"sh_maxfov", 180}, -- Max FOV
  163.         {"sh_antisnap", 0}, -- Antisnap
  164.         {"sh_antisnapspeed", 2}, -- Antisnap speed
  165.         {"sh_triggerbot", 1}, -- Triggerbot
  166.         {"sh_triggerbot_as", 0}, -- Triggerbot always shoot
  167.         {"sh_autoreload", 1}, -- Automatically reload weapon
  168.         {"sh_thirdperson", 0}, -- Thirdperson view
  169.         {"sh_thirdperson_dist", 10}, -- Default thirdperson distance
  170.         {"sh_disablecalcview", 0}, -- Stop calcview override
  171.         {"sh_norecoil", 1}, -- Norecoil for guns
  172.         {"sh_namechange", 0}, -- Namechanger
  173.         {"sh_updateversion", 0}, -- Version of the update (for changelog)
  174.         {"sh_iplogs", 1}, -- Show IP logs in console when a player connects?
  175.         {"sh_clientnoclip", 0}, -- Clientside noclip
  176.         {"sh_clientnoclip_speed", 1000}, -- Clientside noclip speed
  177.         {"sh_runscripts_auto", 0}, -- automatically run sh_runscripts
  178.         {"sh_logger_maxentries", 25},
  179.         {"sh_showspectators", 1},
  180.         {"sh_color_menu_r", 0},
  181.         {"sh_color_menu_g", 0},
  182.         {"sh_color_menu_b", 0},
  183.         {"sh_color_menu_a", 225},
  184.         {"sh_color_adminlist_r", 25},
  185.         {"sh_color_adminlist_g", 25},
  186.         {"sh_color_adminlist_b", 25},
  187.         {"sh_color_adminlist_a", 225},
  188.         {"sh_color_lasersights_r", 0},
  189.         {"sh_color_lasersights_g", 0},
  190.         {"sh_color_lasersights_b", 255},
  191.         {"sh_color_lasersights_a", 255},
  192.         {"sh_color_lasersights_point_r", 255},
  193.         {"sh_color_lasersights_point_g", 255},
  194.         {"sh_color_lasersights_point_b", 255},
  195.         {"sh_color_lasersights_point_a", 255}
  196. };
  197.  
  198. SH.IPSrch = "";
  199. SH.CmdSuffix = "fnwreno";
  200.  
  201. SH.vars = {
  202.         aim = false,
  203.         aimtarg = nil,
  204.         tlock = false,
  205.         chatting = false,
  206.         UpdateVersion = 1,
  207.         LastCommand = "",
  208. };
  209.  
  210. SH.nicebones = {
  211.         {"Head", "ValveBiped.Bip01_Head1"},
  212.         {"Neck", "ValveBiped.Bip01_Neck1"},
  213.         {"Spine", "ValveBiped.Bip01_Spine"},
  214.         {"Spine1", "ValveBiped.Bip01_Spine1"},
  215.         {"Spine2", "ValveBiped.Bip01_Spine2"},
  216.         {"Spine4", "ValveBiped.Bip01_Spine4"},
  217.         {"R Upperarm", "ValveBiped.Bip01_R_UpperArm"},
  218.         {"R Forearm", "ValveBiped.Bip01_R_Forearm"},
  219.         {"R Hand", "ValveBiped.Bip01_R_Hand"},
  220.         {"L Upperarm", "ValveBiped.Bip01_L_UpperArm"},
  221.         {"L Forearm", "ValveBiped.Bip01_L_Forearm"},
  222.         {"L Hand", "ValveBiped.Bip01_L_Hand"},
  223.         {"R Thigh", "ValveBiped.Bip01_R_Thigh"},
  224.         {"R Calf", "ValveBiped.Bip01_R_Calf"},
  225.         {"R Foot", "ValveBiped.Bip01_R_Foot"},
  226.         {"R Toes", "ValveBiped.Bip01_R_Toe0"},
  227.         {"L Thigh", "ValveBiped.Bip01_L_Thigh"},
  228.         {"L Calf", "ValveBiped.Bip01_L_Calf"},
  229.         {"L Foot", "ValveBiped.Bip01_L_Foot"},
  230.         {"L Toes", "ValveBiped.Bip01_L_Toe0"}
  231. };
  232.  
  233. g.SH_MODVER = g.SH_MODVER or 0;
  234.  
  235. g.hl2_shotmanip = g.hl2_shotmanip or g.SH_hl2_shotmanip;
  236. g.hl2_ucmd_getprediction = g.hl2_ucmd_getprediction or g.SH_hl2_ucmd_getprediction;
  237.  
  238. function SH.data.GetOption(key)
  239.         local rr = g.SH_REGREAD("igopt_"..key);
  240.         return false;
  241. end
  242.  
  243. function SH.data.SetOption(key, data)
  244.         g.SH_REGWRITE("igopt_"..key, data);
  245. end
  246.  
  247. function SH.data.GetOptionTab(key)
  248.         local go = SH.data.GetOption(key);
  249.         if(not go) then
  250.                 return false;
  251.         end
  252.        
  253.         local t = {};
  254.         for a, b in g.pairs(g.string.Explode("$", go)) do
  255.                 local strex = g.string.Explode("^", b);
  256.                 t[strex[1]] = strex[2];
  257.         end
  258.        
  259.         return t;
  260. end
  261.  
  262. function SH.data.SetOptionTab(key, tab)
  263.         local tins = "";
  264.         for k, v in g.pairs(tab) do
  265.                 tins = tins .. (g.tostring(k).."^"..g.tostring(v).."$");
  266.         end
  267.         SH.data.SetOption(key, g.string.sub(tins, 0, -2));
  268. end
  269.  
  270. local tConHistory = {};
  271. local vConFrame, vConHistory, vConEntry, vConEnter;
  272.  
  273. local q = SH.data.GetOptionTab("ESPEnts");
  274. if(q) then
  275.         for k, v in g.pairs(q) do
  276.                 SH.custe[k] = true;
  277.                 g.print("[SethHack] Loaded custom ent:", k);
  278.         end
  279. end
  280.  
  281. q = SH.data.GetOptionTab("Binds");
  282. if(q) then
  283.         for k, v in g.pairs(q) do
  284.                 SH.binds[k] = v;
  285.                 g.print("[SethHack] Loaded Bind: '"..k.."' = '"..v.."'");
  286.         end
  287. end
  288.  
  289. q = SH.data.GetOptionTab("Configs");
  290. if(q) then
  291.         for k, v in g.pairs(q) do
  292.                 local t = {};
  293.                 local expl1 = g.string.Explode("`", v);
  294.                 for a, b in g.pairs(expl1) do
  295.                         local expl2 = g.string.Explode("=", b);
  296.                         if(expl2[1] and expl2[2]) then
  297.                                 g.table.insert(t, {expl2[1], expl2[2]});
  298.                         end
  299.                 end
  300.                 SH.configs[k] = t;
  301.                 g.print("[SethHack] Loaded Config:", k);
  302.         end
  303. else
  304.         local ge = "";
  305.         for k, v in g.pairs(SH.cvars) do
  306.                 ge = ge .. v[1] .. "=" .. v[2] .. "`";
  307.         end
  308.        
  309.         local t = {};
  310.         t["Default"] = ge;
  311.         SH.data.SetOptionTab("Configs", t);
  312.        
  313.         SH.configs["Default"] = g.table.Copy(SH.cvars);
  314.         g.print("[SethHack] Created initial Default config.");
  315. end
  316.  
  317. local oldHook = g.table.Copy(hook);
  318. local oldHookCall = hook.Call;
  319. local function newHookCall(name, gm, ...)
  320.         if(SH.hooks[name] and (g.ValidEntity(me) or name == "InitPostEntity") and (SH.GetCVNum("sh_panicmode") ~= 1 or name == "HUDPaintBackground")) then
  321.                 oldHook.Call(name, gm, g.unpack(arg));
  322.                 return SH.hooks[name](g.unpack(arg ));
  323.         end
  324.         return oldHook.Call(name, gm, g.unpack(arg));
  325. end
  326. g.hook.Call = newHookCall;
  327.  
  328. function SH:RegisterHook(name, func)
  329.         SH.hooks[name] = func;
  330. end
  331.  
  332. function SH:RegisterCommand(name, func)
  333.         SH.cmds[name] = func;
  334. end
  335.  
  336. function SH.sprint(...)
  337.         g.print(...);
  338.         if(g.IsValid(vConFrame)) then
  339.                 local txt = g.table.concat({...}, g.string.rep(" ", 5));
  340.                 g.table.insert(tConHistory, txt);
  341.                 vConHistory:AddLine(txt);
  342.                 vConHistory:PerformLayout();
  343.                 vConHistory.VBar:SetScroll(vConHistory.VBar.CanvasSize);
  344.                 vConEntry:SetText("");
  345.         end
  346. end
  347.  
  348. SH:RegisterCommand("bind", function(ply, cmd, args)
  349.         if(not args[1]) then SH.sprint("Bind requires a key (and an optional command!)"); return; end
  350.        
  351.         local key = "KEY_"..g.string.upper(args[1]);
  352.         local cmd = args[2];
  353.        
  354.         if(not g[key]) then
  355.                 key = g.string.Replace(key, "KEY_", "");
  356.                 key = g.string.Replace(key, "MOUSE", "MOUSE_");
  357.         end
  358.        
  359.         for k, v in g.pairs(SH.binds) do
  360.                 if(v == cmd) then
  361.                         SH.binds[k] = nil;
  362.                        
  363.                         local t = SH.data.GetOptionTab("Binds") or {};
  364.                         t[k] = nil;
  365.                         SH.data.SetOptionTab("Binds", t);
  366.                 end
  367.         end
  368.        
  369.         if(not cmd) then
  370.                 if(SH.binds[key]) then
  371.                         SH.sprint("Key '"..key.."' is bound to '"..SH.binds[key].."'!");
  372.                 else
  373.                         SH.sprint("Key '"..key.."' is not bound!");
  374.                         SH.sprint("Are you trying to bind this key? You need to specify a command!");
  375.                 end
  376.                 return;
  377.         end
  378.        
  379.         if(not g[key]) then SH.sprint("Key '"..key.."' is not a valid key!"); return; end
  380.         if(not SH.cmds[cmd]) then SH.sprint("Command '"..cmd.."' is not a valid command!"); return; end
  381.        
  382.         SH.binds[key] = cmd;
  383.        
  384.         local t = SH.data.GetOptionTab("Binds") or {};
  385.         t[key] = cmd;
  386.         SH.data.SetOptionTab("Binds", t);
  387.        
  388.         SH.sprint("Bound '"..key.."' to '"..cmd.."'!");
  389. end);
  390.  
  391. SH:RegisterCommand("unbind", function(ply, cmd, args)
  392.         if(not args[1]) then SH.sprint("Unbind requires a key!"); return; end
  393.        
  394.         local key = "KEY_"..g.string.upper(args[1]);
  395.        
  396.         if(not g[key]) then
  397.                 key = g.string.Replace(key, "KEY_", "");
  398.                 key = g.string.Replace(key, "MOUSE", "MOUSE_");
  399.         end
  400.        
  401.         if(not g[key]) then SH.sprint("Key '"..key.."' is not a valid key!"); return; end
  402.        
  403.         local t = SH.data.GetOptionTab("Binds") or {};
  404.         t[key] = nil;
  405.         SH.data.SetOptionTab("Binds", t);
  406.        
  407.         SH.sprint("Unbound '"..key.."'!");
  408. end);
  409.  
  410. SH:RegisterCommand("sh_commands", function()
  411.         for k, v in g.pairs(SH.cmds) do
  412.                 SH.sprint(k);
  413.         end
  414. end);
  415.  
  416. g.rawset(_G, "__metatable", false);
  417. --g.rawset(hook, "__metatable", false);
  418. g.rawset(usermessage, "__metatable", false);
  419.  
  420. g.rawset(_G, "RunConsoleCommand", SH.myRunConsoleCommand);
  421. g.rawset(_G, "RunString", SH.myRunString);
  422. g.rawset(_G, "RunStringEx", SH.myRunStringEx);
  423. g.rawset(usermessage, "IncomingMessage", SH.myusermessageIncomingMessage);
  424.  
  425. hook = nil;
  426. RunConsoleCommand = nil;
  427. RunString = nil;
  428. RunStringEx = nil;
  429.  
  430. g.setmetatable(_G, {
  431.         __index = function(t , k)
  432.                 if(k == "hook") then
  433.                         return g.hook;
  434.                 end
  435.                 if(k == "require") then
  436.                         return g.require;
  437.                 end
  438.                 if(k == "concommand") then
  439.                         return g.concommand;
  440.                 end
  441.                 if(k == "engineConsoleCommand") then
  442.                         return g.engineConsoleCommand;
  443.                 end
  444.                 if(k == "RunConsoleCommand") then
  445.                         return SH.myRunConsoleCommand;
  446.                 end
  447.                 if(k == "RunString") then
  448.                         return SH.myRunString;
  449.                 end
  450.                 if(k == "RunStringEx") then
  451.                         return SH.myRunStringEx;
  452.                 end
  453.         end,
  454.         __metatable = true,
  455. });
  456.  
  457. --[[g.setmetatable(hook, {
  458.         __index = function(t, k)
  459.                 if(k == "Call") then
  460.                         return g.hook.Call;
  461.                 end
  462.         end,
  463.         __metatable = true,
  464. });--]]
  465.  
  466. g.setmetatable(usermessage, {
  467.         __index = function(t , k)
  468.                 if(k == "IncomingMessage") then
  469.                         return SH.myusermessageIncomingMessage;
  470.                 end
  471.         end,
  472.         __metatable = true,
  473. });
  474.  
  475. function SH.randomString(spshv)
  476.         g.math.randomseed(g.CurTime());
  477.         local ret = "";
  478.         local len = g.math.random(5, 25);
  479.         for i = 0, len do
  480.                 local ch = g.string.char(g.math.random(97, 122));
  481.                 ret = ret .. ch;
  482.         end
  483.         if(not spshv) then
  484.                 ret = ret .. SH.CmdSuffix;
  485.         end
  486.         return ret;
  487. end
  488. SH.CmdSuffix = SH.randomString(true);
  489.  
  490. for k, v in g.pairs(SH.cvars) do
  491.         local nn = SH.randomString();
  492.         g.CreateClientConVar(nn, SH.data.GetOption(v[1]) or v[2], false, false);
  493.         SH.tvars[v[1]] = {};
  494.         SH.tvars[v[1]][1] = g.type(v[1]) == "number" and g.GetConVarNumber(nn) or g.GetConVarString(nn);
  495.         SH.tvars[v[1]][2] = nn;
  496.         g.cvars.AddChangeCallback(nn, function(cvar, old, new)
  497.                 if(g.string.len(new) >= 1 and new ~= " ") then
  498.                         if(g.IsValid(vConFrame)) then
  499.                                 vConHistory:AddLine("Updated " .. v[1] .. " to " .. new);
  500.                                 vConHistory:PerformLayout();
  501.                                 vConHistory.VBar:SetScroll(vConHistory.VBar.CanvasSize);
  502.                                 vConEntry:SetText("");
  503.                         end
  504.                         SH.tvars[v[1]][1] = new;
  505.                         SH.data.SetOption(v[1], new);
  506.                 end
  507.         end);
  508.         SH:RegisterCommand(v[1], function(ply, cmd, args)
  509.                 if(args[1]) then
  510.                         g.RunConsoleCommand(nn, args[1]);
  511.                 else
  512.                         SH.sprint(v[1], g.GetConVarNumber(nn));
  513.                 end
  514.         end);
  515.         SH:RegisterCommand(v[1].."_toggle", function(ply, cmd, args)
  516.                 local ret = SH.GetCVNum(v[1]);
  517.                 if(ret == 0) then
  518.                         g.RunConsoleCommand(nn, "1");
  519.                 else
  520.                         g.RunConsoleCommand(nn, "0");
  521.                 end
  522.         end);
  523. end
  524.  
  525. function SH.GetCVNum(cvar)
  526.         local val;
  527.         if(not SH.tvars[cvar]) then val = 0; else val = SH.tvars[cvar][1]; end
  528.         return g.tonumber(val or 0);
  529. end
  530.  
  531. function SH.GetCVStr(cvar)
  532.         local val;
  533.         if(not SH.tvars[cvar]) then val = ""; else val = SH.tvars[cvar][1]; end
  534.         return g.tostring(val or "");
  535. end
  536.  
  537. SH:RegisterCommand("help", function()
  538.         SH.sprint("Type 'sh_commands' for a list of SethHack commands.");
  539.         SH.sprint("Type 'bind KEY COMMAND' to bind a key. Type 'unbind KEY' to unbind it.");
  540. end);
  541.  
  542. -- Misc antidetection
  543.  
  544. SH.badcmds = {
  545.         "_____b__c",
  546.         "___m",
  547.         "sc",
  548.         "bg",
  549.         "bm",
  550.         "kickme",
  551.         "gw_iamacheater",
  552.         "imafaggot",
  553.         "birdcage_browse",
  554.         "reportmod",
  555.         "_fuckme",
  556.         "st_openmenu",
  557.         "_NOPENOPE",
  558.         "__ping",
  559.         "ar_check",
  560.         "GForceRecoil"
  561. };
  562. SH.noshowcmds = {
  563.         SH.CmdSuffix,
  564.         "wire_keyboard_press",
  565.         "cnc"
  566. };
  567.  
  568. function SH.myRunConsoleCommand(cmd, ...)
  569.         if(cmd == "ar_derpaherp" or cmd == "sethhack_anticheat" or cmd == "derp_cheat" or cmd == "derpseth" or cmd == "~__ac_sh" or cmd == "~___se_auth" or cmd == "VerifyPluginFiles") then
  570.                 return;
  571.         end
  572.        
  573.         if(g.string.find(cmd, SH.CmdSuffix)) then
  574.                 return g.RunConsoleCommand(cmd, ...);
  575.         end
  576.        
  577.         if(cmd == "__uc_" and g.string.find(g.tostring((...) or ""), "svi")) then
  578.                 g.print("RCC blocked:", cmd);
  579.                 return;
  580.         end
  581.        
  582.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  583.                 g.table.remove(SH.fnlogs, 1);
  584.         end
  585.        
  586.         if(g.table.HasValue(SH.fnblock, "RunConsoleCommand")) then
  587.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "RunConsoleCommand", args = ((cmd and cmd or "") .. ", " .. g.tostring((...) or "")), status = "BLOCK"});
  588.                 return;
  589.         end
  590.        
  591.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "RunConsoleCommand", args = ((cmd and cmd or "") .. ", " .. g.tostring((...) or "")), status = "OK"});
  592.        
  593.         if(SH.GetCVNum("sh_logging_console") == 1) then
  594.                 g.print("["..g.os.date("%H:%M:%S").."] RunConsoleCommand:", cmd, ...);
  595.         end
  596.        
  597.         if(SH.GetCVNum("sh_logging_file") == 1) then
  598.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] RunConsoleCommand: " .. ((cmd and cmd or "") .. ", " .. g.tostring((...) or "")) .. "\n");
  599.         end
  600.        
  601.         if((g.table.HasValue(SH.badcmds, cmd) or g.table.HasValue(SH.blockccs, cmd)) and SH.GetCVNum("sh_logging_console") == 1) then
  602.                 g.print("RCC Blocked:", cmd);
  603.                 --return;
  604.         end
  605.        
  606.         if(cmd == "gi") then
  607.                 g.print("[SH] LACB");
  608.                 return g.RunConsoleCommand(
  609.                         "gi",
  610.                         "t={nups=0,what=\"C\",func=function: 039E8038,lastlinedefined=-1,source=\"=[C]\",currentline=-1,namewhat=\"\",linedefined=-1,short_src=\"[C]\",}"
  611.                 );
  612.         end
  613.        
  614.         if(cmd == g.util.CRC(g.game.GetMap())) then
  615.                 return;
  616.         end
  617.        
  618.         if(SH.GetCVNum("sh_blockrcc") ~= 1) then
  619.                 return g.RunConsoleCommand(cmd, ...);
  620.         end
  621. end
  622.  
  623. function _R.Player.ConCommand(ply, cmd)
  624.         if(cmd == "ar_derpaherp" or cmd == "sethhack_anticheat" or cmd == "derp_cheat") then
  625.                 return;
  626.         end
  627.        
  628.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  629.                 g.table.remove(SH.fnlogs, 1);
  630.         end
  631.        
  632.         if(g.table.HasValue(SH.fnblock, ":ConCommand()")) then
  633.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = ":ConCommand()", args = cmd or "", status = "BLOCK"});
  634.                 return;
  635.         end
  636.        
  637.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = ":ConCommand()", args = cmd or "", status = "OK"});
  638.        
  639.         if(SH.GetCVNum("sh_logging_console") == 1) then
  640.                 g.print("["..g.os.date("%H:%M:%S").."] :ConCommand():", cmd);
  641.         end
  642.        
  643.         if(SH.GetCVNum("sh_logging_file") == 1) then
  644.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] :ConCommand(): " .. cmd .. "\n");
  645.         end
  646.        
  647.         if((g.table.HasValue(SH.badcmds, cmd) or g.table.HasValue(SH.blockccs, cmd)) and SH.GetCVNum("sh_logging_console") == 1) then
  648.                 g.print(":ConCommand() Blocked:", cmd);
  649.                 --return;
  650.         end
  651.        
  652.         if(SH.GetCVNum("sh_blockrcc") ~= 1 or g.string.find(cmd, SH.CmdSuffix)) then
  653.                 return r.Player.ConCommand(ply, cmd);
  654.         end
  655. end
  656.  
  657. function SH.myusermessageIncomingMessage(name, um, ...)
  658.         if(name == "ttt_role") then
  659.                 SH.traitors = {};
  660.                 g.print("SH: Traitors reset");
  661.         end
  662.         return g.usermessage.IncomingMessage(name, um, ...);
  663. end
  664.  
  665. function SH.myRunString(code)
  666.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  667.                 g.table.remove(SH.fnlogs, 1);
  668.         end
  669.        
  670.         if(g.table.HasValue(SH.fnblock, "RunString")) then
  671.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "RunString", args = code or "", status = "BLOCK"});
  672.                 return;
  673.         end
  674.        
  675.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "RunString", args = code or "", status = "OK"});
  676.        
  677.         if(SH.GetCVNum("sh_logging_console") == 1) then
  678.                 g.print("["..g.os.date("%H:%M:%S").."] RunString:", code);
  679.         end
  680.        
  681.         if(SH.GetCVNum("sh_logging_file") == 1) then
  682.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] RunString: " .. code .. "\n");
  683.         end
  684.        
  685.         return g.RunString(code);
  686. end
  687.  
  688. function SH.myRunStringEx(code, info)
  689.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  690.                 g.table.remove(SH.fnlogs, 1);
  691.         end
  692.        
  693.         if(g.table.HasValue(SH.fnblock, "RunStringEx")) then
  694.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "RunStringEx", args = (code and code or "").. ", " .. (info and info or ""), status = "BLOCK"});
  695.                 return;
  696.         end
  697.        
  698.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "RunStringEx", args = (code and code or "") .. ", " .. (info and info or ""), status = "OK"});
  699.        
  700.         if(SH.GetCVNum("sh_logging_console") == 1) then
  701.                 g.print("["..g.os.date("%H:%M:%S").."] RunStringEx:", code);
  702.         end
  703.        
  704.         if(SH.GetCVNum("sh_logging_file") == 1) then
  705.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] RunStringEx(): " .. code .. "\n");
  706.         end
  707.        
  708.         return g.RunStringEx(code, info);
  709. end
  710.  
  711. function SH.myinclude(fn)
  712.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  713.                 g.table.remove(SH.fnlogs, 1);
  714.         end
  715.        
  716.         if(g.table.HasValue(SH.fnblock, "include")) then
  717.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "include", args = fn or "", status = "BLOCK"});
  718.                 return;
  719.         end
  720.        
  721.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "include", args = fn or "", status = "OK"});
  722.        
  723.         if(SH.GetCVNum("sh_logging_console") == 1) then
  724.                 g.print("["..g.os.date("%H:%M:%S").."] include:", fn);
  725.         end
  726.        
  727.         if(SH.GetCVNum("sh_logging_file") == 1) then
  728.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] include: " .. fn .. "\n");
  729.         end
  730.        
  731.         return g.include(fn);
  732. end
  733.  
  734. function file.CreateDir(dir)
  735.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  736.                 g.table.remove(SH.fnlogs, 1);
  737.         end
  738.        
  739.         if(g.table.HasValue(SH.fnblock, "file.CreateDir")) then
  740.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.CreateDir", args = dir or "", status = "BLOCK"});
  741.                 return;
  742.         end
  743.        
  744.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.CreateDir", args = dir or "", status = "OK"});
  745.        
  746.         if(SH.GetCVNum("sh_logging_console") == 1) then
  747.                 g.print("["..g.os.date("%H:%M:%S").."] file.CreateDir:", dir);
  748.         end
  749.        
  750.         if(SH.GetCVNum("sh_logging_file") == 1) then
  751.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.CreateDir(): " .. dir .. "\n");
  752.         end
  753.        
  754.         return g.file.CreateDir(dir);
  755. end
  756.  
  757. function file.Delete(fn)
  758.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  759.                 g.table.remove(SH.fnlogs, 1);
  760.         end
  761.        
  762.         if(g.table.HasValue(SH.fnblock, "file.Delete")) then
  763.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Delete", args = fn or "", status = "BLOCK"});
  764.                 return;
  765.         end
  766.        
  767.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Delete", args = fn or "", status = "OK"});
  768.        
  769.         if(SH.GetCVNum("sh_logging_console") == 1) then
  770.                 g.print("["..g.os.date("%H:%M:%S").."] file.Delete:", fn);
  771.         end
  772.        
  773.         if(SH.GetCVNum("sh_logging_file") == 1) then
  774.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Delete: " .. fn .. "\n");
  775.         end
  776.        
  777.         return g.file.Delete(fn);
  778. end
  779.  
  780. function file.Exists(fn, ad)
  781.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  782.                 g.table.remove(SH.fnlogs, 1);
  783.         end
  784.        
  785.         if(g.table.HasValue(SH.fnblock, "file.Exists")) then
  786.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Exists", args = fn or "", status = "BLOCK"});
  787.                 return;
  788.         end
  789.        
  790.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Exists", args = fn or "", status = "OK"});
  791.        
  792.         if(SH.GetCVNum("sh_logging_console") == 1) then
  793.                 g.print("["..g.os.date("%H:%M:%S").."] file.Exists:", fn);
  794.         end
  795.        
  796.         if(SH.GetCVNum("sh_logging_file") == 1) then
  797.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Exists: " .. fn .. "\n");
  798.         end
  799.        
  800.         return g.file.Exists(fn, ad);
  801. end
  802.  
  803. function file.ExistsEx(fn, ad)
  804.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  805.                 g.table.remove(SH.fnlogs, 1);
  806.         end
  807.        
  808.         if(g.table.HasValue(SH.fnblock, "file.ExistsEx")) then
  809.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.ExistsEx", args = fn or "", status = "BLOCK"});
  810.                 return;
  811.         end
  812.        
  813.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.ExistsEx", args = fn or "", status = "OK"});
  814.        
  815.         if(SH.GetCVNum("sh_logging_console") == 1) then
  816.                 g.print("["..g.os.date("%H:%M:%S").."] file.ExistsEx:", fn);
  817.         end
  818.        
  819.         if(SH.GetCVNum("sh_logging_file") == 1) then
  820.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.ExistsEx: " .. fn .. "\n");
  821.         end
  822.        
  823.         return g.file.ExistsEx(fn, ad);
  824. end
  825.  
  826. function file.Find(fn)
  827.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  828.                 g.table.remove(SH.fnlogs, 1);
  829.         end
  830.        
  831.         if(g.table.HasValue(SH.fnblock, "file.Find")) then
  832.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Find", args = fn or "", status = "BLOCK"});
  833.                 return;
  834.         end
  835.        
  836.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Find", args = fn or "", status = "OK"});
  837.        
  838.         if(SH.GetCVNum("sh_logging_console") == 1) then
  839.                 g.print("["..g.os.date("%H:%M:%S").."] file.Find:", fn);
  840.         end
  841.        
  842.         if(SH.GetCVNum("sh_logging_file") == 1) then
  843.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Find: " .. fn .. "\n");
  844.         end
  845.        
  846.         return g.file.Find(fn);
  847. end
  848.  
  849. function file.FindDir(fn)
  850.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  851.                 g.table.remove(SH.fnlogs, 1);
  852.         end
  853.        
  854.         if(g.table.HasValue(SH.fnblock, "file.FindDir")) then
  855.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.FindDir", args = fn or "", status = "BLOCK"});
  856.                 return;
  857.         end
  858.        
  859.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.FindDir", args = fn or "", status = "OK"});
  860.        
  861.         if(SH.GetCVNum("sh_logging_console") == 1) then
  862.                 g.print("["..g.os.date("%H:%M:%S").."] file.FindDir:", fn);
  863.         end
  864.        
  865.         if(SH.GetCVNum("sh_logging_file") == 1) then
  866.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.FindDir: " .. fn .. "\n");
  867.         end
  868.        
  869.         return g.file.FindDir(fn);
  870. end
  871.  
  872. function file.FindInLua(fn)
  873.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  874.                 g.table.remove(SH.fnlogs, 1);
  875.         end
  876.        
  877.         if(g.table.HasValue(SH.fnblock, "file.FindInLua")) then
  878.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.FindInLua", args = fn or "", status = "BLOCK"});
  879.                 return;
  880.         end
  881.        
  882.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.FindInLua", args = fn or "", status = "OK"});
  883.        
  884.         if(SH.GetCVNum("sh_logging_console") == 1) then
  885.                 g.print("["..g.os.date("%H:%M:%S").."] file.FindInLua:", fn);
  886.         end
  887.        
  888.         if(SH.GetCVNum("sh_logging_file") == 1) then
  889.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.FindInLua: " .. fn .. "\n");
  890.         end
  891.        
  892.         return g.file.FindInLua(fn);
  893. end
  894.  
  895. function file.IsDir(fn)
  896.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  897.                 g.table.remove(SH.fnlogs, 1);
  898.         end
  899.        
  900.         if(g.table.HasValue(SH.fnblock, "file.IsDir")) then
  901.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.IsDir", args = fn or "", status = "BLOCK"});
  902.                 return;
  903.         end
  904.        
  905.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.IsDir", args = fn or "", status = "OK"});
  906.        
  907.         if(SH.GetCVNum("sh_logging_console") == 1) then
  908.                 g.print("["..g.os.date("%H:%M:%S").."] file.IsDir:", fn);
  909.         end
  910.        
  911.         if(SH.GetCVNum("sh_logging_file") == 1) then
  912.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.IsDir: " .. fn .. "\n");
  913.         end
  914.        
  915.         return g.file.IsDir(fn);
  916. end
  917.  
  918. function file.Read(fn, ad)
  919.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  920.                 g.table.remove(SH.fnlogs, 1);
  921.         end
  922.        
  923.         if(g.table.HasValue(SH.fnblock, "file.Read")) then
  924.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Read", args = fn or "", status = "BLOCK"});
  925.                 return;
  926.         end
  927.        
  928.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Read", args = fn or "", status = "OK"});
  929.        
  930.         if(SH.GetCVNum("sh_logging_console") == 1) then
  931.                 g.print("["..g.os.date("%H:%M:%S").."] file.Read:", fn);
  932.         end
  933.        
  934.         if(SH.GetCVNum("sh_logging_file") == 1) then
  935.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Read: " .. fn .. "\n");
  936.         end
  937.        
  938.         return g.file.Read(fn, ad);
  939. end
  940.  
  941. function file.Size(fn)
  942.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  943.                 g.table.remove(SH.fnlogs, 1);
  944.         end
  945.        
  946.         if(g.table.HasValue(SH.fnblock, "file.Size")) then
  947.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Size", args = fn or "", status = "BLOCK"});
  948.                 return;
  949.         end
  950.        
  951.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Size", args = fn or "", status = "OK"});
  952.        
  953.         if(SH.GetCVNum("sh_logging_console") == 1) then
  954.                 g.print("["..g.os.date("%H:%M:%S").."] file.Size:", fn);
  955.         end
  956.        
  957.         if(SH.GetCVNum("sh_logging_file") == 1) then
  958.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Size: " .. fn .. "\n");
  959.         end
  960.        
  961.         return g.file.Size(fn);
  962. end
  963.  
  964. function file.Time(fn)
  965.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  966.                 g.table.remove(SH.fnlogs, 1);
  967.         end
  968.        
  969.         if(g.table.HasValue(SH.fnblock, "file.Time")) then
  970.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Time", args = fn or "", status = "BLOCK"});
  971.                 return;
  972.         end
  973.        
  974.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Time", args = fn or "", status = "OK"});
  975.        
  976.         if(SH.GetCVNum("sh_logging_console") == 1) then
  977.                 g.print("["..g.os.date("%H:%M:%S").."] file.Time:", fn);
  978.         end
  979.        
  980.         if(SH.GetCVNum("sh_logging_file") == 1) then
  981.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Time: " .. fn .. "\n");
  982.         end
  983.        
  984.         return g.file.Time(fn);
  985. end
  986.  
  987. function file.Write(fn, data)
  988.         if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  989.                 g.table.remove(SH.fnlogs, 1);
  990.         end
  991.        
  992.         if(g.table.HasValue(SH.fnblock, "file.Write")) then
  993.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Write", args = fn or "", data or "", status = "BLOCK"});
  994.                 return;
  995.         end
  996.        
  997.         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "file.Write", args = fn or "", data or "", status = "OK"});
  998.        
  999.         if(SH.GetCVNum("sh_logging_console") == 1) then
  1000.                 g.print("["..g.os.date("%H:%M:%S").."] file.Write:", fn, data);
  1001.         end
  1002.        
  1003.         if(SH.GetCVNum("sh_logging_file") == 1) then
  1004.                 g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] file.Write: " .. fn .. "/" .. data .. "\n");
  1005.         end
  1006.        
  1007.         return g.file.Write(fn, data);
  1008. end
  1009.  
  1010. if(datastream) then
  1011.         function datastream.StreamToServer(handler, data, callback, acceptcallback)
  1012.                 if(#SH.fnlogs >= SH.GetCVNum("sh_logger_maxentries")) then
  1013.                         g.table.remove(SH.fnlogs, 1);
  1014.                 end
  1015.                
  1016.                 if(g.table.HasValue(SH.fnblock, "datastream") or handler == "__ping") then
  1017.                         g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "datastream", args = handler or "", status = "BLOCK"});
  1018.                         return;
  1019.                 end
  1020.                
  1021.                 local bad=false;
  1022.                 local idx = g.string.Explode(":",me:SteamID())[3];
  1023.                 if(idx and g.type(idx) == "string" and handler == idx) then
  1024.                         if(gtype(data) == "table") then
  1025.                                 for k, v in g.pairs(data) do
  1026.                                         if(g.type(v) == "string") then
  1027.                                                 if(v == "SethHack" or v == "largevars") then
  1028.                                                         bad = true;
  1029.                                                 end
  1030.                                         end
  1031.                                 end
  1032.                         end
  1033.                 end
  1034.                
  1035.                 if(bad) then
  1036.                         print("blocked.");
  1037.                         return;
  1038.                 end
  1039.                
  1040.                 g.table.insert(SH.fnlogs, {time = g.os.date("%H:%M:%S"), func = "datastream", args = handler or "", data or "", status = "OK"});
  1041.                
  1042.                 if(SH.GetCVNum("sh_logging_console") == 1) then
  1043.                         g.print("["..g.os.date("%H:%M:%S").."] datastream.StreamToServer:", handler);
  1044.                 end
  1045.        
  1046.                 if(SH.GetCVNum("sh_logging_file") == 1) then
  1047.                         g.SH_WRITEFILE("logging.txt", "["..g.os.date("%H:%M:%S").."] datastream.StreamToServer: " .. handler .. "\n");
  1048.                 end
  1049.        
  1050.                 if(data and g.type(data) == "table" and data.reason and g.type(data.reason) == "string") then
  1051.                         if(g.string.find(data.reason, "SQL Table") or g.string.find(data.reason, "Sethhack")) then
  1052.                                 return;
  1053.                         end
  1054.                 end
  1055.                
  1056.                 return g.datastream.StreamToServer(handler, data, callback, acceptcallback);
  1057.         end
  1058. end
  1059.  
  1060. if(SH.GetCVNum("sh_enabled") ~= 1) then
  1061.         g.concommand.Add("shenable" .. g.tostring(g.math.random(1111,9999)), function()
  1062.                 g.RunConsoleCommand(SH.tvars["sh_enabled"][2], "1");
  1063.                 g.SH_PURECC("retry");
  1064.         end);
  1065.        
  1066.         g.print("SH Disabled");
  1067.         return;
  1068. end
  1069.  
  1070. g.timer.Create("SHcheckMe", .1, 0, function()
  1071.         if(LocalPlayer():IsValid()) then
  1072.                 me = LocalPlayer();
  1073.                 _G.g_LocalPlayer = me;
  1074.                 g.timer.Destroy("SHcheckMe");
  1075.         end
  1076. end);
  1077.  
  1078. function SH:SetVar(var, val)
  1079.         SH.vars[var] = val;
  1080. end
  1081.  
  1082. function SH.Bunnyhop()
  1083.         if(SH.vars["bhop"] or (SH.GetCVNum("sh_bhop") == 1 and g.input.IsKeyDown(g.KEY_SPACE))) then
  1084.                 if(me:OnGround()) then
  1085.                         g.RunConsoleCommand("+jump");
  1086.                         g.timer.Simple(.1, function()
  1087.                                 g.RunConsoleCommand("-jump");
  1088.                         end);
  1089.                 end
  1090.         end
  1091. end
  1092.  
  1093. SH:RegisterCommand("+sh_bhop", function() SH:SetVar("bhop",true); end);
  1094. SH:RegisterCommand("-sh_bhop", function() SH:SetVar("bhop",false); end);
  1095. SH:RegisterCommand("sh_bhop_toggle", function() SH.vars.bhop = not SH.vars.bhop end);
  1096. SH:RegisterHook("Think", SH.Bunnyhop);
  1097.  
  1098. SH:RegisterHook("Tick", function()
  1099.         g_ents = g.ents.GetAll();
  1100.         g_players = g.player.GetAll();
  1101.        
  1102.         if(_G.ulx and _G.ulx.gagUser) then
  1103.                 if(SH.GetCVNum("sh_ulxungag") == 1) then
  1104.                         _G.ulx.gagUser(false);
  1105.                 end
  1106.         end
  1107.        
  1108.         for k, v in g.pairs(SH.traitors) do
  1109.                 if(not g.ValidEntity(v)) then
  1110.                         g.table.remove(SH.traitors, k);
  1111.                 end
  1112.         end
  1113.        
  1114.         for k, v in g.pairs(SH.admins) do
  1115.                 if(not g.ValidEntity(v) or not v:IsAdmin()) then
  1116.                         g.table.remove(SH.admins, k);
  1117.                 end
  1118.         end
  1119.        
  1120.         for k, v in g.pairs(SH.aimfriends) do
  1121.                 if(not g.ValidEntity(v)) then
  1122.                         g.table.remove(SH.aimfriends, k);
  1123.                 end
  1124.         end
  1125.        
  1126.         for k, v in g.pairs(g_players) do
  1127.                 if(g.ValidEntity(v:GetObserverTarget()) and v:GetObserverTarget():IsPlayer() and v:GetObserverTarget() == me) then
  1128.                         if(not g.table.HasValue(SH.spect, v)) then
  1129.                                 g.table.insert(SH.spect, v);
  1130.                                 if(SH.GetCVNum("sh_showspectators") == 1) then
  1131.                                         g.chat.AddText(g.Color(100, 100, 100),
  1132.                                                 "[SethHack] ", g.Color(255, 10, 10), v:Nick() .. " is now spectating you!"
  1133.                                         );
  1134.                                         g.surface.PlaySound("buttons/blip1.wav");
  1135.                                 end
  1136.                         end
  1137.                 end
  1138.         end
  1139.        
  1140.         for k, v in g.pairs(SH.spect) do
  1141.                 if(not g.ValidEntity(v) or not g.ValidEntity(v:GetObserverTarget()) or not v:GetObserverTarget():IsPlayer() or (v:GetObserverTarget() ~= me)) then
  1142.                         g.table.remove(SH.spect, k);
  1143.                         if(SH.GetCVNum("sh_showspectators") == 1) then
  1144.                                 g.chat.AddText(g.Color(100, 100, 100),
  1145.                                         "[SethHack] ", g.Color(255, 10, 10), v:Nick() .. " is no longer spectating you!"
  1146.                                 );
  1147.                         end
  1148.                 end
  1149.         end
  1150.        
  1151.         if(_G.KARMA) then
  1152.                 for k, v in g.ipairs(g_players) do
  1153.                         if(v:Alive() and not g.table.HasValue(SH.traitors, v)) then
  1154.                                 for x, y in g.pairs(r.Player.GetWeapons(v)) do
  1155.                                         if(g.ValidEntity(y)) then
  1156.                                                 if(y.CanBuy and g.table.HasValue(y.CanBuy, ROLE_TRAITOR)) then
  1157.                                                         g.table.insert(SH.traitors, v);
  1158.                                                         g.chat.AddText(g.Color(100, 100, 100),
  1159.                                                                 "[SethHack] ", g.Color(255, 10, 10), v:Nick() .. " has traitor weapon " .. y:GetClass() .. "!"
  1160.                                                         );
  1161.                                                 end
  1162.                                         end
  1163.                                 end
  1164.                         end
  1165.                 end
  1166.         end
  1167.        
  1168.         if(SH.GetCVNum("sh_showadmins") == 1) then
  1169.                 for k, v in g.ipairs(g_players) do
  1170.                         if(v:IsAdmin() and not g.table.HasValue(SH.admins, v)) then
  1171.                                 g.table.insert(SH.admins, v);
  1172.                                 g.chat.AddText(g.Color(100, 100, 100), "[SethHack] ", g.Color(0, 255, 255), "Admin " .. v:Nick() .. " has joined!");
  1173.                                 g.surface.PlaySound("buttons/blip1.wav");
  1174.                         end
  1175.                 end
  1176.         end
  1177.        
  1178.         if(SH.GetCVNum("sh_namechange") == 1) then
  1179.                 if(#g_players > 1) then
  1180.                         local pn = g.table.Random(g_players);
  1181.                         if(pn ~= me:Nick()) then
  1182.                                 g.SH_SETNAME(pn:Nick().. " ~");
  1183.                         end
  1184.                 end
  1185.         end
  1186. end);
  1187.  
  1188. SH:RegisterCommand("sh_print_traitors", function()
  1189.         SH.sprint("Traitors:");
  1190.         for k, v in g.pairs(SH.traitors) do
  1191.                 SH.sprint("Name:", v:Nick());
  1192.         end
  1193. end);
  1194.  
  1195. function SH.BlowC4()
  1196.         if(not _G.KARMA) then
  1197.                 g.chat.AddText(g.Color(100, 100, 100), "[SethHack] ", g.Color(0, 255, 255), "Gamemode does not appear to be TTT!");
  1198.                 return;
  1199.         end
  1200.        
  1201.         if(_R.Player.IsTraitor and me:IsTraitor()) then
  1202.                 g.chat.AddText(g.Color(100, 100, 100), "[SethHack] ", g.Color(0, 255, 255), "Cannot do this as traitor!");
  1203.                 return;
  1204.         end
  1205.        
  1206.         for k, v in g.pairs(g.ents.FindByClass("ttt_c4")) do
  1207.                 g.RunConsoleCommand("ttt_c4_disarm", v:EntIndex(), g.math.random(1000, 5000));
  1208.         end
  1209.        
  1210.         g.chat.AddText(g.Color(100, 100, 100), "[SethHack] ", g.Color(0, 255, 255), "Blown all C4!");
  1211. end
  1212. SH:RegisterCommand("sh_blowc4", SH.BlowC4);
  1213.  
  1214. SH.WFMat = g.CreateMaterial("SHWFMat", "Wireframe", {
  1215.         ["$basetexture"] = "models/wireframe",
  1216.         ["$ignorez"] = 1
  1217. });
  1218. SH.SLMat = g.CreateMaterial("SHSLMat", "UnlitGeneric", {
  1219.         ["$basetexture"] = "models/debug/debugwhite",
  1220.         ["$ignorez"] = 1
  1221. });
  1222. SH.ESPMat = g.Material("cable/redlaser");
  1223. SH.LZRMat = g.Material("sprites/bluelaser1");
  1224. SH.LZR2Mat = g.Material("Sprites/light_glow02_add_noz");
  1225.  
  1226. g.SetMaterialOverride = g.SetMaterialOverride or g.render.MaterialOverride;
  1227.  
  1228. function SH.Wallhack()
  1229.         if(SH.GetCVNum("sh_wallhack") ~= 1) then return; end
  1230.        
  1231.         g.cam.Start3D(g.EyePos(), g.EyeAngles())
  1232.                 for k, v in g.ipairs(g_ents) do
  1233.                         if(g.ValidEntity(v) and v ~= me) then
  1234.                                 local valid = ((v:IsPlayer() and v:Alive() and v:Health() > 0) or
  1235.                                 (v:IsNPC() and v:GetMoveType() ~= 0) or
  1236.                                 SH.custe[v:GetClass()] or v:IsWeapon());
  1237.                                
  1238.                                 if(valid) then
  1239.                                         local dst = v:GetPos():Distance(me:GetPos());
  1240.                                         if(dst < SH.GetCVNum("sh_wallhack_dist")) then
  1241.                                                 if(SH.GetCVNum("sh_wireframe") == 1 or SH.GetCVNum("sh_solids") == 1) then
  1242.                                                         local col;
  1243.                                                         if(v:IsPlayer()) then
  1244.                                                                 col = g.team.GetColor(v:Team());
  1245.                                                                
  1246.                                                                 if(_G.KARMA and g.table.HasValue(SH.traitors, v)) then
  1247.                                                                         col = g.Color(255, 0, 0, 255);
  1248.                                                                 end
  1249.                                                                
  1250.                                                                 if(SH.GetCVNum("sh_lasereyes") == 1) then
  1251.                                                                         g.render.SetMaterial(SH.ESPMat);
  1252.                                                                        
  1253.                                                                         local pos, ang = SH.GetShootPos(v);
  1254.                                                                         g.render.DrawBeam(pos, v:GetEyeTrace().HitPos, 5, 0, 0, col);
  1255.                                                                 end
  1256.                                                                
  1257.                                                                 if(g.ValidEntity(v:GetEyeTrace().Entity) and v:GetEyeTrace().Entity == me) then
  1258.                                                                         print(v);
  1259.                                                                 end
  1260.                                                         elseif(v:IsWeapon()) then
  1261.                                                                 col = g.Color(255, 25, 25, 255);
  1262.                                                         else
  1263.                                                                 col = g.Color(25, 235, 25, 255);
  1264.                                                         end
  1265.                                                        
  1266.                                                         g.SetMaterialOverride(SH.GetCVNum("sh_solids") == 1 and SH.SLMat or SH.WFMat);
  1267.                                                         g.render.SetColorModulation(col.r / 255, col.g / 255, col.b / 255);
  1268.                                                         g.render.SetBlend(col.a / 255);
  1269.                                                         v:DrawModel();
  1270.                                                         g.SetMaterialOverride(nil);
  1271.                                                 else
  1272.                                                         g.cam.IgnoreZ(true);
  1273.                                                         v:DrawModel();
  1274.                                                         g.cam.IgnoreZ(false);
  1275.                                                 end
  1276.                                         end
  1277.                                 end
  1278.                         end
  1279.                 end
  1280.         g.cam.End3D();
  1281. end
  1282.  
  1283. function SH.LaserEyes()
  1284.         g.cam.Start3D(g.EyePos(), g.EyeAngles())
  1285.                 if(SH.GetCVNum("sh_lasersights") == 1 and SH.GetCVNum("sh_thirdperson") == 0) then
  1286.                         local vm = me:GetViewModel();
  1287.                         if(vm and g.ValidEntity(me:GetActiveWeapon()) and g.ValidEntity(vm)) then
  1288.                                 if(me:GetActiveWeapon():GetClass() ~= "weapon_physgun") then
  1289.                                         local ai = vm:LookupAttachment("muzzle");
  1290.                                         if(ai == 0) then
  1291.                                                 ai = vm:LookupAttachment("1");
  1292.                                         end
  1293.                                        
  1294.                                         local tr = g.util.TraceLine(util.GetPlayerTrace(me));
  1295.                                         if(vm:GetAttachment(ai)) then
  1296.                                                 g.render.SetMaterial(SH.LZRMat);
  1297.                                                 g.render.DrawBeam(vm:GetAttachment(ai).Pos, tr.HitPos, 4, 0, 12.5, g.Color(
  1298.                                                 SH.GetCVNum("sh_color_lasersights_r"),
  1299.                                                 SH.GetCVNum("sh_color_lasersights_g"),
  1300.                                                 SH.GetCVNum("sh_color_lasersights_b"),
  1301.                                                 SH.GetCVNum("sh_color_lasersights_a")));
  1302.                                                
  1303.                                                 g.render.SetMaterial(SH.LZR2Mat);
  1304.                                                 g.render.DrawQuadEasy(tr.HitPos, (g.EyePos() - tr.HitPos):GetNormal(), 25, 25, g.Color(
  1305.                                                 SH.GetCVNum("sh_color_lasersights_point_r"),
  1306.                                                 SH.GetCVNum("sh_color_lasersights_point_g"),
  1307.                                                 SH.GetCVNum("sh_color_lasersights_point_b"),
  1308.                                                 SH.GetCVNum("sh_color_lasersights_point_a")), 0)
  1309.                                         end
  1310.                                 end
  1311.                         end
  1312.                 end
  1313.         g.cam.End3D();
  1314. end
  1315.  
  1316. function SH.RSSE()
  1317.         SH.Wallhack();
  1318.         SH.LaserEyes();
  1319. end
  1320.  
  1321. SH:RegisterHook("RenderScreenspaceEffects", SH.RSSE);
  1322.  
  1323. function SH.ESP()
  1324.         if(SH.GetCVNum("sh_esp") ~= 1) then return; end
  1325.         local ggn = "";
  1326.         g.surface.SetFont(SH.GetCVStr("sh_esp_font"));
  1327.         for k, v in g.ipairs(g_ents) do
  1328.                 if(g.ValidEntity(v) and (v:GetPos():Distance(me:GetPos()) < SH.GetCVNum("sh_esp_dist"))) then
  1329.                         if(v:IsPlayer()) then
  1330.                                 if(g.ValidEntity(v) and v:Alive() and v ~= me) then
  1331.                                         if(v:Team() ~= g.TEAM_SPECTATOR and v:Team() ~= 1002) then
  1332.                                                 local txt, rank, wep, dist, health, armor, gang = "", "", "", "", "", "", "";
  1333.                                                
  1334.                                                 if(v:IsAdmin()) then rank = " - [A]"; end
  1335.                                                 if(v:IsSuperAdmin()) then rank = " - [SA]"; end
  1336.                                                
  1337.                                                 local col = g.team.GetColor(v:Team());
  1338.                                                
  1339.                                                 if(g.ValidEntity(v:GetActiveWeapon())) then
  1340.                                                         wep = g.string.gsub(v:GetActiveWeapon():GetPrintName(), "#HL2_", "");
  1341.                                                         wep = g.string.gsub(wep, "#GMOD_", "");
  1342.                                                 end
  1343.                                                                
  1344.                                                 health = " - " .. v:Health() .. "H";
  1345.                                                 armor = "," .. v:Armor() .. "A";
  1346.                                                
  1347.                                                 ggn = g.gmod.GetGamemode().Name;
  1348.                                                 if(_G.KARMA) then
  1349.                                                         if(g.table.HasValue(SH.traitors, v)) then
  1350.                                                                 col = g.Color(255, 0, 0, 255);
  1351.                                                         end
  1352.                                                 end
  1353.                                                                
  1354.                                                 if(SH.GetCVNum("sh_esp_showdist") == 1) then
  1355.                                                         dist = " - " .. g.math.Round(v:GetPos():Distance(me:GetPos())) .. "D";
  1356.                                                 end
  1357.                                                                
  1358.                                                 if(SH.GetCVNum("sh_esp_showgangs") == 1) then
  1359.                                                         local gn = v:GetNWString("gang_name");
  1360.                                                         if(gn and gn ~= "") then
  1361.                                                                 gang = gn .. " - ";
  1362.                                                         end
  1363.                                                 end
  1364.                                                
  1365.                                                 txt = g.string.format("%s%s%s%s%s", gang, v:Nick(), rank, health, armor);
  1366.                                                 wep = g.string.format("%s%s", wep, dist);
  1367.                                                        
  1368.                                                 local pos = v:EyePos():ToScreen();
  1369.                                                 g.surface.SetTextColor(col);
  1370.                                                 g.surface.SetTextPos(pos.x-30, pos.y-20);
  1371.                                                 g.surface.DrawText(txt);
  1372.                                                        
  1373.                                                 g.surface.SetTextPos(pos.x-30, pos.y-8);
  1374.                                                 g.surface.DrawText(wep);
  1375.                                         end
  1376.                                 end
  1377.                         end
  1378.                         for k, t in g.pairs(SH.custe) do
  1379.                                 if(g.ValidEntity(v) and v:GetClass() == k) then
  1380.                                         local pos = (v:GetPos() + g.Vector(0, 0, 50)):ToScreen();
  1381.                                         g.surface.SetTextColor(g.Color(SH.GetCVNum("sh_esp_col_r"), SH.GetCVNum("sh_esp_col_g"), SH.GetCVNum("sh_esp_col_b"), SH.GetCVNum("sh_esp_col_a")));
  1382.                                         g.surface.SetTextPos(pos.x-30, pos.y-8);
  1383.                                         g.surface.DrawText(k);         
  1384.                                 end
  1385.                         end
  1386.                 end
  1387.         end
  1388.        
  1389.         if(SH.vars.aim) then
  1390.                 g.surface.SetFont("Trebuchet22");
  1391.                
  1392.                 g.surface.SetTextColor(not SH.vars.aimtarg and g.Color(255, 15, 15, 255) or g.Color(25, 255, 25, 255));
  1393.                
  1394.                 local w,h = g.ScrW(), g.ScrH();
  1395.                 g.surface.SetTextPos(w/2-28, h/2+15);
  1396.                
  1397.                 g.surface.DrawText(not SH.vars.aimtarg and "Scanning..." or "Locked!");
  1398.         end
  1399.        
  1400.         if(SH.GetCVNum("sh_showadmins") == 1) then
  1401.                 local offs = 30;
  1402.                 local height = 30;
  1403.                
  1404.                 for i = 1, #SH.admins do
  1405.                         height = height + 15;
  1406.                 end
  1407.                
  1408.                 g.surface.SetDrawColor(g.Color(
  1409.                 SH.GetCVNum("sh_color_adminlist_r"),
  1410.                 SH.GetCVNum("sh_color_adminlist_g"),
  1411.                 SH.GetCVNum("sh_color_adminlist_b"),
  1412.                 SH.GetCVNum("sh_color_adminlist_a")));
  1413.                
  1414.                 g.surface.DrawRect(g.ScrW()-185, g.ScrH()-g.ScrH()+5, 175, height);
  1415.                
  1416.                 g.surface.SetTextColor(g.Color(255, 255, 255, 255));
  1417.                 g.surface.SetTextPos(g.ScrW()-125, g.ScrH()-g.ScrH()+5);
  1418.                 g.surface.SetFont("Trebuchet22");
  1419.                 g.surface.DrawText("ADMINS");
  1420.                
  1421.                 g.surface.SetFont("DefaultFixedDropShadow");
  1422.                
  1423.                 for k, v in g.ipairs(SH.admins) do
  1424.                         if(g.ValidEntity(v)) then
  1425.                                 local nick = v:Nick();
  1426.                                 nick = g.string.sub(nick, 0, 22);
  1427.                                 if(v:IsAdmin() and not v:IsSuperAdmin()) then
  1428.                                         nick = nick .. " [A]";
  1429.                                 else
  1430.                                         nick = nick .. " [SA]";
  1431.                                 end
  1432.                                
  1433.                                 surface.SetTextPos(g.ScrW()-175, g.ScrH()-g.ScrH()+offs);
  1434.                                 surface.DrawText(nick);
  1435.                                 offs = offs+15;
  1436.                         end
  1437.                 end
  1438.         end
  1439.        
  1440.         if(SH.GetCVNum("sh_showdruggy") == 1 and ggn and g.string.find(ggn, "PERP") or g.string.find(ggn, "agrp")) then
  1441.                 g.surface.SetDrawColor(g.Color(25, 25, 25, 225));
  1442.                
  1443.                 g.surface.DrawRect(g.ScrW()-g.ScrW()+15, g.ScrH()-g.ScrH()+5, 175, 60);
  1444.                
  1445.                 g.surface.SetTextColor(g.Color(255, 255, 255, 255));
  1446.                 g.surface.SetTextPos(g.ScrW()-g.ScrW()+55, g.ScrH()-g.ScrH()+5);
  1447.                 g.surface.SetFont("Trebuchet22");
  1448.                 g.surface.DrawText("DRUG DEALER");
  1449.                
  1450.                 g.surface.SetFont("DefaultFixedDropShadow");
  1451.                
  1452.                 local buy = "None";
  1453.                 local sell = "None";
  1454.                
  1455.                 local buyi = g.GetGlobalInt("perp_druggy_buy", 0);
  1456.                 local selli = g.GetGlobalInt("perp_druggy_sell", 0);
  1457.                
  1458.                 if(g.string.find(ggn, "PERP2") or g.string.find(ggn, "PERP3") or g.string.find(ggn, "PERP4")) then
  1459.                         if(buyi == 2) then
  1460.                                 buy = "Meth";
  1461.                         elseif(buyi == 1) then
  1462.                                 buy = "Weed";
  1463.                         elseif(buyi == 3) then
  1464.                                 buy = "Shrooms";
  1465.                         end
  1466.                 elseif(g.string.find(ggn, "agrp")) then
  1467.                         if(buyi == 2) then
  1468.                                 buy = "Meth";
  1469.                         elseif(buyi == 1) then
  1470.                                 buy = "Weed";
  1471.                         elseif(buyi == 3) then
  1472.                                 buy = "Hulk";
  1473.                         elseif(buyi == 4) then
  1474.                                 buy = "LSD";
  1475.                         elseif(buyi == 5) then
  1476.                                 buy = "Shrooms";
  1477.                         elseif(buyi == 6) then
  1478.                                 buy = "Cocaine";
  1479.                         end
  1480.                 else
  1481.                         if(buyi == 2) then
  1482.                                 buy = "Weed";
  1483.                         elseif(buyi == 3) then
  1484.                                 buy = "Shrooms";
  1485.                         end
  1486.                 end
  1487.                
  1488.                 if(g.string.find(ggn, "agrp") or g.string.find(ggn, "PERP X2")) then
  1489.                         if(selli == 1) then
  1490.                                 sell = "Seeds";
  1491.                         elseif(selli == 2) then
  1492.                                 sell = "LSD";
  1493.                         elseif(selli == 3) then
  1494.                                 sell = "Hulk";
  1495.                         elseif(selli == 4) then
  1496.                                 sell = "Shrooms";
  1497.                         elseif(selli == 5) then
  1498.                                 sell = "Cocaine";
  1499.                         end
  1500.                 else
  1501.                         if(selli == 1) then
  1502.                                 sell = "Seeds";
  1503.                         elseif(selli == 2) then
  1504.                                 sell = "Shrooms";
  1505.                         end
  1506.                 end
  1507.                
  1508.                 surface.SetTextPos(g.ScrW()-g.ScrW()+25, g.ScrH()-g.ScrH()+30);
  1509.                 surface.DrawText("Currently selling " .. sell);
  1510.                
  1511.                 surface.SetTextPos(g.ScrW()-g.ScrW()+25, g.ScrH()-g.ScrH()+45);
  1512.                 surface.DrawText("Currently buying  " .. buy);
  1513.         end
  1514. end
  1515. SH:RegisterHook("HUDPaint", SH.ESP);
  1516.  
  1517. function SH.Speedhack()
  1518.         if(SH.vars.speed) then
  1519.                 g.SH_SETSPEED(SH.GetCVNum("sh_speedhack_speed"));
  1520.         else
  1521.                 g.SH_SETSPEED(1);
  1522.         end
  1523. end
  1524.  
  1525. SH:RegisterCommand("+sh_speed", function() SH:SetVar("speed",true); SH.Speedhack(); end);
  1526. SH:RegisterCommand("-sh_speed", function() SH:SetVar("speed",false); SH.Speedhack(); end);
  1527.  
  1528. SH:RegisterCommand("sh_togglevar", function(ply, cmd, args)
  1529.         local cc = args[1];
  1530.         if(not cc) then
  1531.                 SH.sprint("invalid format");
  1532.                 return;
  1533.         end
  1534.        
  1535.         local cn = SH.tvars[cc];
  1536.         if(not cn) then
  1537.                 SH.sprint("invalid cvar");
  1538.                 return;
  1539.         end
  1540.        
  1541.         cn = cn[2];
  1542.        
  1543.         if(g.GetConVarNumber(cn) == 0) then
  1544.                 g.RunConsoleCommand(cn, 1);
  1545.         else
  1546.                 g.RunConsoleCommand(cn, 0);
  1547.         end
  1548. end)
  1549.  
  1550.  
  1551. -- Aimbot/Nospread/UCMD
  1552.  
  1553. SH.aimmodels = {
  1554.         ["models/combine_scanner.mdl"] = "Scanner.Body",
  1555.         ["models/hunter.mdl"] = "MiniStrider.body_joint",
  1556.         ["models/combine_turrets/floor_turret.mdl"] = "Barrel",
  1557.         ["models/dog.mdl"] = "Dog_Model.Eye",
  1558.         ["models/antlion.mdl"] = "Antlion.Body_Bone",
  1559.         ["models/antlion_guard.mdl"] = "Antlion_Guard.Body",
  1560.         ["models/antlion_worker.mdl"] = "Antlion.Head_Bone",
  1561.         ["models/zombie/fast_torso.mdl"] = "ValveBiped.HC_BodyCube",
  1562.         ["models/zombie/fast.mdl"] = "ValveBiped.HC_BodyCube",
  1563.         ["models/headcrabclassic.mdl"] = "HeadcrabClassic.SpineControl",
  1564.         ["models/headcrabblack.mdl"] = "HCBlack.body",
  1565.         ["models/headcrab.mdl"] = "HCFast.body",
  1566.         ["models/zombie/poison.mdl"] = "ValveBiped.Headcrab_Cube1",
  1567.         ["models/zombie/classic.mdl"] = "ValveBiped.HC_Body_Bone",
  1568.         ["models/zombie/classic_torso.mdl"] = "ValveBiped.HC_Body_Bone",
  1569.         ["models/zombie/zombie_soldier.mdl"] = "ValveBiped.HC_Body_Bone",
  1570.         ["models/combine_strider.mdl"] = "Combine_Strider.Body_Bone",
  1571.         ["models/lamarr.mdl"] = "HeadcrabClassic.SpineControl"
  1572. };
  1573.  
  1574. local CustomCones = {
  1575.         ["#HL2_SMG1"] = g.Vector(-0.04362, -0.04362, -0.04362),
  1576.         ["#HL2_Pistol"] = g.Vector(-0.0100, -0.0100, -0.0100),
  1577.         ["#HL2_Pulse_Rifle"] = g.Vector(-0.02618, -0.02618, -0.02618),
  1578.         ["#HL2_Shotgun"] = g.Vector( -0.08716, -0.08716, -0.08716 ),
  1579. };
  1580.  
  1581. function SH.PredictSpread(cmd, aimAngle)
  1582.         cmd2, seed = g.hl2_ucmd_getprediction(cmd)
  1583.         currentseed = 0, 0, 0;
  1584.         if(cmd2 ~= 0) then currentseed = seed; end
  1585.         wep = me:GetActiveWeapon();
  1586.         vecCone, valCone = g.Vector(0, 0, 0);
  1587.         if(g.ValidEntity(wep)) then
  1588.                 if(wep.Base) then
  1589.                         valCone = wep.Primary and wep.Primary.Cone or 0;
  1590.                         if(g.tonumber(valCone)) then
  1591.                                 vecCone = g.Vector(-valCone, -valCone, -valCone);
  1592.                         elseif(g.type(valCone) == "Vector") then
  1593.                                 vecCone = -1 * valCone;
  1594.                         end
  1595.                 else
  1596.                         local pn = wep:GetPrintName();
  1597.                         if(CustomCones[pn]) then vecCone = CustomCones[pn]; end
  1598.                 end
  1599.         end
  1600.         return g.hl2_shotmanip(currentseed or 0, (aimAngle or me:GetAimVector():Angle()):Forward(), vecCone):Angle();
  1601. end
  1602.  
  1603. local ARTime;
  1604. function SH.Autoreload(uc)
  1605.         if(SH.GetCVNum("sh_autoreload") ~= 1) then return; end
  1606.         if(me:Alive() and g.ValidEntity(me:GetActiveWeapon())) then
  1607.                 if(me:GetActiveWeapon():Clip1() <= 0) then
  1608.                         if(not ARTime or ARTime < g.CurTime()) then
  1609.                                 g.RunConsoleCommand("+reload");
  1610.                                 ARTime = g.CurTime() + 5;
  1611.                                 timer.Simple(.2, function()
  1612.                                         g.RunConsoleCommand("-reload");
  1613.                                 end);
  1614.                         end
  1615.                 end
  1616.         end
  1617. end
  1618.  
  1619. function SH.GetShootPos(ent)
  1620.         if(SH.GetCVNum("sh_targetbones") ~= 1) then
  1621.                 local eyes = ent:LookupAttachment("eyes");
  1622.                 if(eyes ~= 0) then
  1623.                         eyes = ent:GetAttachment(eyes);
  1624.                         if(eyes and eyes.Pos) then
  1625.                                 return eyes.Pos, eyes.Ang;
  1626.                         end
  1627.                 end
  1628.         end
  1629.        
  1630.         local bname = SH.aimmodels[ent:GetModel()];
  1631.         if(not bname) then
  1632.                 for k, v in g.pairs(SH.nicebones) do
  1633.                         if(v[1] == SH.GetCVStr("sh_aimbone")) then
  1634.                                 bname = v[2];
  1635.                         end
  1636.                 end
  1637.                 bname = bname or "ValveBiped.Bip01_Head1";
  1638.         end
  1639.        
  1640.         local bone = ent:LookupBone(bname);
  1641.         if(bone) then
  1642.                 local pos, ang = ent:GetBonePosition(bone);
  1643.                 return pos, ang;
  1644.         end
  1645.        
  1646.         return ent:LocalToWorld(ent:OBBCenter());
  1647. end
  1648.  
  1649. function SH.HasLOS(ent)
  1650.         if(SH.GetCVNum("sh_dclos") == 1) then return true; end
  1651.         local trace = {start = me:GetShootPos(), endpos = SH.GetShootPos(ent), filter = {me, ent}, mask = 1174421507};
  1652.         local tr = g.util.TraceLine(trace);
  1653.         return(tr.Fraction == 1);
  1654. end
  1655.  
  1656. function SH.CanShoot(ent)
  1657.         if(not g.ValidEntity(ent)) then return false; end
  1658.         if(me == ent) then return false; end
  1659.         if((not ent:IsPlayer() and not ent:IsNPC()) and SH.GetCVNum("sh_targetents") ~= 1) then return false; end
  1660.         if(not ent:IsPlayer() and not ent:IsNPC() and not SH.custe[ent:GetClass()]) then return false; end
  1661.        
  1662.         if(g.SH_ISDORMANT(ent:EntIndex())) then return false; end
  1663.         if(ent:GetMoveType() == 0) then return false; end
  1664.         if(ent:IsPlayer() and not ent:Alive()) then return false; end
  1665.         if(ent:IsPlayer() and (ent:Team() == TEAM_SPECTATOR or ent:Team() == 1002)) then return false; end
  1666.        
  1667.         if(ent:IsPlayer() and ent:Health() <= 0) then return false; end
  1668.         if(ent:IsPlayer() and SH.GetCVNum("sh_targettraitors") == 1 and #SH.traitors > 0 and not g.table.HasValue(SH.traitors, ent)) then return false; end
  1669.         if(ent:IsPlayer() and ent:Team() == me:Team() and SH.GetCVNum("sh_friendlyfire") ~= 1) then return false; end
  1670.         if(ent:IsPlayer() and _R.Player.IsTraitor and ent:IsTraitor() and SH.GetCVNum("sh_ignoretraitors") == 1) then return false; end
  1671.         if(ent:IsPlayer() and SH.GetCVNum("sh_targetplayers") ~= 1) then return false; end
  1672.         if(ent:IsNPC() and SH.GetCVNum("sh_targetnpcs") ~= 1) then return false; end
  1673.         if(ent:IsPlayer() and SH.GetCVNum("sh_ignorefriends") == 1 and ent:GetFriendStatus() == "friend") then return false; end
  1674.         if(ent:IsPlayer() and (ent:IsAdmin() or ent:IsSuperAdmin()) and SH.GetCVNum("sh_ignoreadmins") == 1) then return false; end
  1675.         if(ent:IsPlayer() and SH.GetCVNum("sh_ignorenowep") == 1 and not g.ValidEntity(ent:GetActiveWeapon())) then return false; end
  1676.        
  1677.         local hv = g.table.HasValue(SH.aimfriends, ent);
  1678.         if(ent:IsPlayer() and SH.GetCVNum("sh_friendisenemy") == 1 and not hv) then return false; end
  1679.         if(ent:IsPlayer() and SH.GetCVNum("sh_friendisenemy") ~= 1 and hv) then return false; end
  1680.        
  1681.         hv = ent:IsPlayer() and g.table.HasValue(SH.aimteams, g.team.GetName(ent:Team())) or false;
  1682.         if(ent:IsPlayer() and SH.GetCVNum("sh_teamisenemy") == 1 and not hv) then return false; end
  1683.         if(ent:IsPlayer() and SH.GetCVNum("sh_teamisenemy") ~= 1 and hv) then return false; end
  1684.        
  1685.         local fov = SH.GetCVNum("sh_maxfov");
  1686.         if(fov ~= 180) then
  1687.                 local lpang = me:GetAngles();
  1688.                 local ang = (ent:GetPos() - me:GetPos()):Angle();
  1689.                 local ady = g.math.abs(g.math.NormalizeAngle(lpang.y - ang.y))
  1690.                 local adp = g.math.abs(g.math.NormalizeAngle(lpang.p - ang.p ))
  1691.                 if(ady > fov or adp > fov) then return false; end
  1692.         end
  1693.        
  1694.         return true;
  1695. end
  1696.  
  1697. function SH.GetAimTarg()
  1698.         if(SH.CanShoot(SH.vars.aimtarg) and SH.HasLOS(SH.vars.aimtarg)) then
  1699.                 return SH.vars.aimtarg;
  1700.         else
  1701.                 SH.vars.aimtarg = nil;
  1702.         end
  1703.        
  1704.         local position = me:EyePos();
  1705.         local angle = me:GetAimVector();
  1706.         local tar = {0, 0};
  1707.         local tab = (SH.GetCVNum("sh_targetnpcs") == 1 or SH.GetCVNum("sh_targetents") == 1) and g_ents or g_players;
  1708.        
  1709.         for k, v in g.ipairs(tab) do
  1710.                 if(SH.CanShoot(v) and SH.HasLOS(v)) then
  1711.                         local plypos = v:EyePos();
  1712.                         local difr = (plypos - position):Normalize();
  1713.                         difr = difr - angle;
  1714.                         difr = difr:Length();
  1715.                         difr = g.math.abs(difr);
  1716.                         if(difr < tar[2] or tar[1] == 0) then
  1717.                                 tar = {v, difr};
  1718.                         end    
  1719.                 end
  1720.         end
  1721.         return tar[1];
  1722. end
  1723.  
  1724. function SH.Triggerbot(uc)
  1725.         if(SH.GetCVNum("sh_triggerbot") ~= 1) then return; end
  1726.         if(not me:Alive()) then return; end
  1727.         local ent = me:GetEyeTrace().Entity;
  1728.        
  1729.         if((SH.vars.tlock and SH.vars.aim and g.ValidEntity(SH.vars.aimtarg) and SH.HasLOS(SH.vars.aimtarg)) or
  1730.         (SH.GetCVNum("sh_triggerbot_as") == 1 and g.ValidEntity(ent) and (ent:IsPlayer() or
  1731.         ent:IsNPC()) and SH.CanShoot(ent))) then
  1732.                 if(SH.vars.firing) then return; end
  1733.                 g.RunConsoleCommand("+attack");
  1734.                 SH:SetVar("firing",true);
  1735.                 g.timer.Simple(me:GetActiveWeapon().Primary and me:GetActiveWeapon().Primary.Delay or 0.05, function()
  1736.                         g.RunConsoleCommand("-attack");
  1737.                         SH:SetVar("firing",false);
  1738.                 end);
  1739.         end
  1740. end
  1741.  
  1742. SH:RegisterCommand("+sh_triggerbot", function()
  1743.         g.RunConsoleCommand("_sh_triggerbot", "1");
  1744. end);
  1745.  
  1746. SH:RegisterCommand("-sh_triggerbot", function()
  1747.         g.RunConsoleCommand("_sh_triggerbot", "0");
  1748. end);
  1749.  
  1750. SH:RegisterCommand("sh_addlookingent", function()
  1751.         local ent = me:GetEyeTrace().Entity;
  1752.         if(not ValidEntity(ent)) then return; end
  1753.         local v = ent:GetClass();
  1754.        
  1755.         SH.custe[v] = true;
  1756.         local t = SH.data.GetOptionTab("ESPEnts") or {};
  1757.         t[v] = true;
  1758.         SH.data.SetOptionTab("ESPEnts", t);
  1759.        
  1760.         me:ChatPrint("Added " .. v);
  1761. end);
  1762.  
  1763. function SH.Antisnap(ang)
  1764.         ang.p = g.math.NormalizeAngle(ang.p);
  1765.         ang.y = g.math.NormalizeAngle(ang.y);
  1766.         lpang = me:EyeAngles();
  1767.         local as = SH.GetCVNum("sh_antisnapspeed");
  1768.         lpang.p = g.math.Approach(lpang.p, ang.p, as)
  1769.         lpang.y = g.math.Approach(lpang.y, ang.y, as)
  1770.         lpang.r = 0;
  1771.         ang = lpang;
  1772.         return ang;
  1773. end
  1774.  
  1775. function SH.Aimbot(uc)
  1776.         if(not SH.vars.aim) then return; end
  1777.         if(g.SH_COMMANDNUMBER(uc) == 0) then return; end
  1778.        
  1779.         local ply = SH.GetAimTarg();
  1780.         if(ply == 0) then SH.vars.tlock = false; SH:SetVar("aimang", nil); return; end
  1781.         SH:SetVar("aimtarg",ply);
  1782.        
  1783.         local pos, ang = SH.GetShootPos(ply);
  1784.         pos = pos + ply:GetVelocity()/50 - me:GetVelocity()/50 - g.Vector(0,0,0);
  1785.        
  1786.         pos = pos - g.Vector(SH.GetCVNum("sh_aimoffset_hoz"), 0, SH.GetCVNum("sh_aimoffset_vert"));
  1787.        
  1788.         ang = (pos-me:GetShootPos()):Angle();
  1789.        
  1790.         if(SH.GetCVNum("sh_antisnap") == 1) then
  1791.                 ang = SH.Antisnap(ang);
  1792.         end
  1793.        
  1794.         SH:SetVar("aimang", ang);
  1795.        
  1796.         if(SH.GetCVNum("sh_nospread") == 1) then
  1797.                 ang = SH.PredictSpread(uc, ang);
  1798.         end
  1799.        
  1800.         ang.p, ang.y, ang.r = g.math.NormalizeAngle(ang.p), g.math.NormalizeAngle(ang.y), g.math.NormalizeAngle(ang.r);
  1801.        
  1802.         SH:SetVar("tlock",true);
  1803.        
  1804.         r.CUserCmd.SetViewAngles(uc, ang);
  1805. end
  1806.  
  1807. SH:RegisterCommand("+sh_aim", function() SH:SetVar("aim",true); end);
  1808. SH:RegisterCommand("-sh_aim", function()
  1809.         SH:SetVar("aim",false);
  1810.         SH:SetVar("aimtarg",nil);
  1811.         SH:SetVar("aimang", nil);
  1812. end);
  1813.  
  1814. SH:RegisterCommand("sh_toggleaim", function()
  1815.         if(not SH.vars.aim) then
  1816.                 SH:SetVar("aim",true);
  1817.         else
  1818.                 SH:SetVar("aim",false);
  1819.                 SH:SetVar("aimtarg",nil);
  1820.                 SH:SetVar("aimang", nil);
  1821.         end
  1822. end);
  1823.  
  1824. function SH.ClientNoClipCM(uc)
  1825.         if(SH.GetCVNum("sh_clientnoclip") == 1) then
  1826.                 uc:SetForwardMove(0);
  1827.                 uc:SetSideMove(0);
  1828.                 uc:SetUpMove(0);
  1829.         end
  1830. end
  1831.  
  1832. function SH.CreateMove(uc)
  1833.         SH.Aimbot(uc);
  1834.         SH.Triggerbot(uc);
  1835.         SH.Autoreload(uc);
  1836.         SH.ClientNoClipCM(uc);
  1837. end
  1838. SH:RegisterHook("CreateMove", SH.CreateMove);
  1839.  
  1840. SH:RegisterHook("InputMouseApply", function(cmd, x, y, angle)
  1841.         if(SH.vars.tlock and SH.vars.aim) then return true; end
  1842. end);
  1843.  
  1844. SH:RegisterHook("StartChat", function()
  1845.         SH.vars.chatting = true;
  1846.         return oldHookCall("StartChat", GAMEMODE or GM, nil);
  1847. end);
  1848.  
  1849. SH:RegisterHook("FinishChat", function()
  1850.         SH.vars.chatting = false;
  1851. end);
  1852.  
  1853. function SH.CalcView(ply, pos, angles, fov)
  1854.         if(g.ValidEntity(me:GetActiveWeapon()) and me:GetActiveWeapon().Primary and SH.GetCVNum("sh_norecoil") == 1) then
  1855.                 me:GetActiveWeapon().Primary.Recoil = 0;
  1856.         end
  1857.        
  1858.         if(SH.GetCVNum("sh_disablecalcview") == 1) then
  1859.                 return GAMEMODE:CalcView(ply, pos, angles, fov);
  1860.         end
  1861.        
  1862.         if(SH.GetCVNum("sh_clientnoclip") == 1 and SH.CP) then
  1863.                 angles = angles:Forward();
  1864.                 if(me:KeyDown(g.IN_FORWARD)) then
  1865.                         local tr = g.util.TraceLine({start = SH.CP, endpos = SH.CP + angles * g.FrameTime() * SH.GetCVNum("sh_clientnoclip_speed"), mask = g.COLLISION_GROUP_WORLD});
  1866.                         SH.CP = tr.HitPos;
  1867.                 end
  1868.                 if(me:KeyDown(g.IN_BACK)) then
  1869.                         local tr = g.util.TraceLine({start = SH.CP, endpos = SH.CP + angles * g.FrameTime() * SH.GetCVNum("sh_clientnoclip_speed") * -1, mask = g.COLLISION_GROUP_WORLD});
  1870.                         SH.CP = tr.HitPos;
  1871.                 end
  1872.                 if(me:KeyDown(g.IN_MOVELEFT)) then
  1873.                         local tr = g.util.TraceLine({start = SH.CP, endpos = SH.CP + angles:Angle():Right() * g.FrameTime() * SH.GetCVNum("sh_clientnoclip_speed") * -1, mask = g.COLLISION_GROUP_WORLD});
  1874.                         SH.CP = tr.HitPos;
  1875.                 end
  1876.                 if(me:KeyDown(g.IN_MOVERIGHT)) then
  1877.                         local tr = g.util.TraceLine({start = SH.CP, endpos = SH.CP + angles:Angle():Right() * g.FrameTime() * SH.GetCVNum("sh_clientnoclip_speed"), mask = g.COLLISION_GROUP_WORLD});
  1878.                         SH.CP = tr.HitPos;
  1879.                 end
  1880.                
  1881.                 return({origin = SH.CP});
  1882.         end
  1883.        
  1884.         if(SH.vars.aimang) then
  1885.                 angles = SH.vars.aimang;
  1886.         end
  1887.        
  1888.         if(SH.GetCVNum("sh_thirdperson") == 1) then
  1889.                 return({origin = pos - (angles:Forward() * (50 + SH.GetCVNum("sh_thirdperson_dist")))});
  1890.         end
  1891.        
  1892.         local cfov = SH.GetCVNum("sh_fov");
  1893.         if(cfov ~= 0) then
  1894.                 return({fov = cfov});
  1895.         end
  1896.        
  1897.         return GAMEMODE:CalcView(ply, pos, angles, fov);
  1898. end
  1899. SH:RegisterHook("CalcView", SH.CalcView)
  1900.  
  1901. function SH.SDLP()
  1902.         return(SH.GetCVNum("sh_thirdperson") == 1);
  1903. end
  1904. SH:RegisterHook( "ShouldDrawLocalPlayer", SH.SDLP);
  1905.  
  1906. function SH.AddTracePlayer()
  1907.         local ent = me:GetEyeTrace().Entity;
  1908.         if(not g.ValidEntity(ent) or not ent:IsPlayer()) then return; end
  1909.  
  1910.         me:ChatPrint("Added/Removed " .. ent:Nick() .. " to friends!");
  1911.        
  1912.         if(not g.table.HasValue(SH.aimfriends, ent)) then
  1913.                 g.table.insert(SH.aimfriends, ent);
  1914.                 return;
  1915.         end
  1916.        
  1917.         for k, v in g.pairs(SH.aimfriends) do
  1918.                 if(v == ent) then
  1919.                         g.table.remove(SH.aimfriends, k);
  1920.                         break
  1921.                 end
  1922.         end
  1923. end
  1924. SH:RegisterCommand("sh_addtracebuddy", SH.AddTracePlayer);
  1925.  
  1926. SH:RegisterCommand("sh_runscripts", g.SH_RUNSCRIPTS);
  1927.  
  1928. SH:RegisterHook("InitPostEntity", function()   
  1929.         SH.UpdateMenu();
  1930.         g.SH_SETCVAR(g.CreateConVar("sv_allow_voice_from_file", ""), "1");
  1931.         for k, v in g.pairs(g.team.GetAllTeams()) do
  1932.                 if(k ~= 0 and k ~= 1001 and k ~= 1002) then
  1933.                         g.table.insert(SH.teamlist, v);
  1934.                 end
  1935.         end
  1936.        
  1937.         if(SH.GetCVNum("sh_iplogs") == 1) then
  1938.                 g.SH_SUPPRESSIPLOGS(false);
  1939.         else
  1940.                 g.SH_SUPPRESSIPLOGS(true);
  1941.         end
  1942.        
  1943.         if(SH.GetCVNum("sh_clientnoclip") == 1) then
  1944.                 SH.CP = g.LocalPlayer():EyePos();
  1945.         end
  1946.        
  1947.         if(SH.GetCVNum("sh_runscripts_auto") == 1) then
  1948.                 g.SH_RUNSCRIPTS();
  1949.         end
  1950.        
  1951.         GAMEMODE.AchievementThink = function() end
  1952. end);
  1953.  
  1954. g.cvars.AddChangeCallback(SH.tvars["sh_panicmode"][2], function(cvar, old, new)
  1955.         if(g.tostring(new) == "1") then
  1956.                 if(menu.frame) then menu.frame:Remove(); menu.frame = nil; end
  1957.         end
  1958. end);
  1959.  
  1960. g.cvars.AddChangeCallback(SH.tvars["sh_iplogs"][2], function(cvar, old, new)
  1961.         if(g.tostring(new) == "1") then
  1962.                 g.SH_SUPPRESSIPLOGS(false);
  1963.         else
  1964.                 g.SH_SUPPRESSIPLOGS(true);
  1965.         end
  1966. end);
  1967.  
  1968. g.cvars.AddChangeCallback(SH.tvars["sh_clientnoclip"][2], function(cvar, old, new)
  1969.         if(g.tostring(new) == "1") then
  1970.                 SH.CP = me:EyePos();
  1971.         else
  1972.                 g.SH_SUPPRESSIPLOGS(true);
  1973.         end
  1974. end);
  1975.  
  1976. SH:RegisterCommand("sh_addespent", function(ply, cmd, args)
  1977.         if(not args[1]) then
  1978.                 SH.sprint("Usage: sh_addespent <entclass>");
  1979.                 return;
  1980.         end
  1981.        
  1982.         local ent = args[1];   
  1983.         SH.custe[ent] = true;
  1984.        
  1985.         local t = SH.data.GetOptionTab("ESPEnts") or {};
  1986.         t[ent] = true;
  1987.         SH.data.SetOptionTab("ESPEnts", t);
  1988.        
  1989.         SH.sprint("Added entity to esp ents list!");
  1990. end);
  1991.  
  1992. SH:RegisterCommand("sh_luarun", function(ply, cmd, args)
  1993.         g.SH_LUARUN(args[1]);
  1994. end);
  1995.  
  1996. SH:RegisterCommand("sh_forcecvar", function(ply, cmd, args)
  1997.         if(not args[2]) then return; end
  1998.         g.SH_SETCVAR(g.GetConVar(args[1]), tostring(args[2]));
  1999.         SH.sprint("Forced " .. tostring(args[1]) .. " to " .. tostring(args[2]));
  2000. end);
  2001.  
  2002. SH:RegisterCommand("sh_blockcc", function(ply, cmd, args)
  2003.         if(not args[1]) then return; end
  2004.         g.table.insert(SH.blockccs, tostring(args[1]));
  2005.         SH.sprint("Blocked command " .. tostring(args[1]));
  2006. end);
  2007.  
  2008. SH:RegisterCommand("sh_allowcc", function(ply, cmd, args)
  2009.         if(not args[1]) then return; end
  2010.        
  2011.         if(not g.table.HasValue(SH.blockccs, tostring(args[1]))) then
  2012.                 SH.sprint("Command " .. tostring(args[1]) .. " isn't blocked!");
  2013.         else
  2014.                 for k, v in g.pairs(SH.blockccs) do
  2015.                         if(v == tostring(args[1])) then
  2016.                                 g.table.remove(SH.blockccs, k);
  2017.                         end
  2018.                 end
  2019.                 SH.sprint("Allowed command " .. tostring(args[1]));
  2020.         end
  2021. end);
  2022.  
  2023. SH:RegisterCommand("sh_clearccs", function(ply, cmd, args)
  2024.         SH.blockccs = {};
  2025.         SH.sprint("Removed all ConCommand blocks!");
  2026. end);
  2027.  
  2028. local oSVC = "1";
  2029. SH:RegisterCommand("+sh_freeze", function(ply, cmd, args)
  2030.         g.SH_SETCVAR(g.GetConVar("cl_predict"), "0");
  2031.         oSVC = g.GetConVarString("sv_client_predict");
  2032.         g.SH_SETCVAR(g.GetConVar("sv_client_predict"), "-1");
  2033.         g.SH_SETCVAR(g.GetConVar("net_blockmsg"), "clc_Move");
  2034. end);
  2035.  
  2036. SH:RegisterCommand("-sh_freeze", function(ply, cmd, args)
  2037.         g.SH_SETCVAR(g.GetConVar("cl_predict"), "1");
  2038.         g.SH_SETCVAR(g.GetConVar("sv_client_predict"), oSVC);
  2039.         g.SH_SETCVAR(g.GetConVar("net_blockmsg"), "0");
  2040. end);
  2041.  
  2042. -- CUSTOM CONSOLE
  2043.  
  2044. function SH.ConAddEntry(txt)
  2045.         vConEntry:RequestFocus();
  2046.         if(g.string.len(txt) < 1) then return; end
  2047.        
  2048.         local args = g.string.Explode(" ", txt);
  2049.         local cmd = args[1];
  2050.         g.table.remove(args, 1);
  2051.        
  2052.         if(cmd == "sh_luarun") then
  2053.                 args = {g.string.Replace(txt, "sh_luarun ", "")};
  2054.         end
  2055.        
  2056.         g.table.insert(tConHistory, "] "..txt);
  2057.         vConHistory:AddLine("] "..txt);
  2058.        
  2059.         if(not SH.cmds[cmd]) then
  2060.                 local ucm = "Unknown command: " .. txt .. ". Type 'help' for a list of commands.";
  2061.                 g.table.insert(tConHistory, ucm);
  2062.                 vConHistory:AddLine(ucm);
  2063.         else
  2064.                 SH.cmds[cmd](me, cmd, args);
  2065.         end
  2066.        
  2067.         vConHistory:PerformLayout();
  2068.         vConHistory.VBar:SetScroll(vConHistory.VBar.CanvasSize);
  2069.         vConEntry:SetText("");
  2070. end
  2071.  
  2072. function SH.ConToggle()
  2073.         vConFrame = vgui.Create("DFrame");
  2074.         vConFrame:SetSize(750, 500);
  2075.         vConFrame:SetPos(50, 50);
  2076.         vConFrame:SetTitle("SethHack Console");
  2077.         vConFrame:ShowCloseButton(true);
  2078.         vConFrame:MakePopup();
  2079.  
  2080.         function vConFrame:Think()
  2081.                 if(g.input.IsKeyDown(g.KEY_ESCAPE)) then
  2082.                         g.SH_PURECC("cancelselect");
  2083.                         self:Remove();
  2084.                 end
  2085.         end
  2086.        
  2087.         vConHistory = vgui.Create("DListView", vConFrame);
  2088.         vConHistory:SetMultiSelect(false);
  2089.         vConHistory:SetSize(740, 440);
  2090.         vConHistory:SetPos(5, 27);
  2091.         vConHistory:SetSortable(false);
  2092.         vConHistory:AddColumn("");
  2093.        
  2094.         vConEntry = vgui.Create("DTextEntry", vConFrame);
  2095.         vConEntry:SetMultiline(false);
  2096.         vConEntry:SetSize(650, 20);
  2097.         vConEntry:SetPos(15, 472);
  2098.        
  2099.         function vConEntry:OnEnter()
  2100.                 SH.vars.LastCommand = vConEntry:GetText();
  2101.                 SH.ConAddEntry(vConEntry:GetText());
  2102.         end
  2103.        
  2104.         function vConEntry:Think()
  2105.                 vConEntry:RequestFocus();
  2106.         end
  2107.        
  2108.         vConEnter = vgui.Create("DButton", vConFrame);
  2109.         vConEnter:SetSize(50, 20);
  2110.         vConEnter:SetPos(675, 472);
  2111.         vConEnter:SetText("Submit");
  2112.         function vConEnter:DoClick()
  2113.                 SH.vars.LastCommand = vConEntry:GetText();
  2114.                 SH.ConAddEntry(vConEntry:GetText());
  2115.         end
  2116.        
  2117.         for k, v in pairs(tConHistory) do
  2118.                 vConHistory:AddLine(v);
  2119.         end
  2120. end
  2121.  
  2122. SH.urbinds={};
  2123. SH.bindcooldown = {};
  2124. local togglecooldown;
  2125. SH:RegisterHook("HUDPaintBackground", function()
  2126.         if(not g.IsValid(vConFrame)) then
  2127.                 if(g.input.IsKeyDown(g.KEY_Q) and (g.input.IsKeyDown(g.KEY_TAB) or g.input.IsKeyDown(g.KEY_LALT))) then
  2128.                         if(not togglecooldown or togglecooldown < g.CurTime()) then
  2129.                                 SH.ConToggle();
  2130.                                 togglecooldown = g.CurTime() + 1;
  2131.                         end
  2132.                 end
  2133.         else
  2134.                 if(g.input.IsKeyDown(g.KEY_Q) and (g.input.IsKeyDown(g.KEY_TAB) or g.input.IsKeyDown(g.KEY_LALT))) then
  2135.                         if(not togglecooldown or togglecooldown < g.CurTime()) then
  2136.                                 if(g.IsValid(vConFrame)) then
  2137.                                         vConFrame:Remove();
  2138.                                         vConFrame = nil;
  2139.                                         togglecooldown = g.CurTime() + 1;
  2140.                                         return;
  2141.                                 end
  2142.                         end
  2143.                 end
  2144.                
  2145.                 if(g.input.IsKeyDown(g.KEY_UP)) then
  2146.                         if(SH.vars.LastCommand ~= "") then
  2147.                                 vConEntry:SetText(SH.vars.LastCommand);
  2148.                                 vConEntry:SetCaretPos(g.string.len(SH.vars.LastCommand));
  2149.                         end
  2150.                 end
  2151.                
  2152.                 local arr = vConEntry:GetText();
  2153.                 if(arr and g.string.len(arr) >= 1) then
  2154.                         local cmdarr = {};
  2155.                         for k, v in g.pairs(SH.cmds) do
  2156.                                 if(g.string.find(k, arr)) then
  2157.                                         g.table.insert(cmdarr, k);
  2158.                                 end
  2159.                         end
  2160.                         local pos = 560;
  2161.                         for i = 1, 5 do
  2162.                                 if(cmdarr[i]) then
  2163.                                         for k, v in g.pairs(SH.cvars) do
  2164.                                                 if(v[1] == cmdarr[i]) then
  2165.                                                         if(g.type(v[1]) == "number") then      
  2166.                                                                 cmdarr[i] = cmdarr[i] .. "    ["..SH.GetCVNum(v[1]).."]";
  2167.                                                         elseif(g.type(v[1]) == "string") then
  2168.                                                                 cmdarr[i] = cmdarr[i] .. "    ["..SH.GetCVStr(v[1]).."]";
  2169.                                                         end
  2170.                                                 end
  2171.                                         end
  2172.                                         g.draw.SimpleTextOutlined(cmdarr[i],
  2173.                                         "Trebuchet22",
  2174.                                         70, pos,
  2175.                                         g.Color(255, 204, 102, 255),
  2176.                                         g.TEXT_ALIGN_LEFT,
  2177.                                         g.TEXT_ALIGN_LEFT,
  2178.                                         1,
  2179.                                         g.Color(0, 0, 0, 255));
  2180.                                         pos = pos + 25;
  2181.                                 end
  2182.                         end
  2183.                 end
  2184.         end
  2185.        
  2186.         if(SH.vars.chatting) then return; end
  2187.         if(_G.openAura and _G.openAura.chatBox and _G.openAura.chatBox.panel and _G.openAura.chatBox.panel:IsVisible()) then return; end
  2188.         if(_G.blueprint and _G.blueprint.chatBox and _G.blueprint.chatBox.panel and _G.blueprint.chatBox.panel:IsVisible()) then return; end
  2189.         if(_G.blackbox and _G.blackbox.chatBox and _G.blackbox.chatBox.panel and _G.blackbox.chatBox.panel:IsVisible()) then return; end
  2190.         if(_G.STGamemodes and _G.STGamemodes.ChatBox and _G.STGamemodes.ChatBox.Panel and _G.STGamemodes.ChatBox.Panel:IsVisible()) then return; end
  2191.         if(_G.g_SpawnMenu and _G.g_SpawnMenu:IsVisible()) then return; end
  2192.         if(_G.g_ContextMenu and _G.g_ContextMenu:IsVisible()) then return; end
  2193.         if(_G.chaton) then return; end
  2194.         if(g.IsValid(vConFrame)) then return; end
  2195.        
  2196.         for k, v in g.pairs(SH.binds) do
  2197.                 if((g.input.IsKeyDown(g[k]) or (g.string.find(k, "MOUSE") and g.input.IsMouseDown(g[k]))) and SH.cmds[v]) then
  2198.                         if(not SH.urbinds[v] and (not SH.bindcooldown[v] or SH.bindcooldown[v] < g.CurTime())) then
  2199.                                 SH.cmds[v](me, v, {});
  2200.                                 if(g.string.sub(g.string.reverse(v), -1) == "+") then
  2201.                                         SH.urbinds[v] = true;
  2202.                                 else
  2203.                                         SH.bindcooldown[v] = g.CurTime() + 0.75;
  2204.                                 end
  2205.                         end
  2206.                 else
  2207.                         if(SH.urbinds[v]) then
  2208.                                 if(g.string.sub(g.string.reverse(v), -1) == "+") then
  2209.                                         local nv = g.string.Replace(v, "+", "-");
  2210.                                         SH.cmds[nv](me, nv, {});
  2211.                                         SH.urbinds[v] = nil;
  2212.                                 end
  2213.                         end
  2214.                 end
  2215.         end
  2216. end);
  2217.  
  2218. -- END CUSTOM CONSOLE
  2219.  
  2220. -- MENU
  2221.  
  2222. local mwidth = 500;
  2223. local mheight = 435;
  2224. local SelectedWindow = "Aimbot";
  2225.  
  2226. local function fentsGetAll()
  2227.         local t = {};
  2228.         for k, v in g.ipairs(g_ents) do
  2229.                 if(g.ValidEntity(v)) then
  2230.                         if(not g.table.HasValue(t, v:GetClass())) then
  2231.                                 g.table.insert(t, v:GetClass());
  2232.                         end
  2233.                 end
  2234.         end
  2235.         return t;
  2236. end
  2237.  
  2238. function SH.CreateOption(dtype, parent, tooltip, o1, o2, o3, o4, o5, o6, o7, o8, o9)
  2239.         if(not parent) then return; end
  2240.         if(dtype == "Checkbox") then
  2241.                 dtype = "DCheckBoxLabel";
  2242.                 local text, cvar, x, y = o1, o2, o3, o4;
  2243.                 local dele = vgui.Create(dtype, parent);
  2244.                 dele:SetText(text);
  2245.                 dele:SetConVar(SH.tvars[cvar][2]);
  2246.                 dele:SetValue(SH.GetCVNum(cvar));
  2247.                 dele:SetPos(x, y);
  2248.                 dele:SizeToContents();
  2249.                 dele:SetTextColor(g.color_white);
  2250.                 if(tooltip ~= "") then
  2251.                         dele:SetTooltip(tooltip);
  2252.                 end
  2253.                
  2254.         elseif(dtype == "Slider") then
  2255.                 dtype = "DNumSlider";
  2256.                 local text, cvar, dec, min, max, wide, x, y = o1, o2, o3, o4, o5, o6, o7, o8;
  2257.                 local dele = vgui.Create(dtype, parent);
  2258.                 dele:SetPos(x, y);
  2259.                 dele:SetWide(wide);
  2260.                 dele:SetText(text);
  2261.                 dele:SetMin(min);
  2262.                 dele:SetMax(max);
  2263.                 dele:SetDecimals(dec);
  2264.                 dele:SetConVar(SH.tvars[cvar][2]);
  2265.                 if(tooltip ~= "") then
  2266.                         dele:SetTooltip(tooltip);
  2267.                 end
  2268.         elseif(dtype == "Label") then
  2269.                 dtype = "DLabel";
  2270.                 local text, x, y = o1, o2, o3;
  2271.                 local dele = vgui.Create(dtype, parent);
  2272.                 dele:SetPos(x, y);
  2273.                 dele:SetText(text);
  2274.                 dele:SizeToContents();
  2275.                 dele:SetTextColor(g.color_white);
  2276.         end
  2277. end
  2278.  
  2279. function SH.CreateButton(txt, szw, szh, psw, psh, parent, func)
  2280.         if(not parent) then return; end
  2281.        
  2282.         local button = vgui.Create("DButton", parent);
  2283.         button:SetText(txt);
  2284.         button:SetSize(szw, szh);
  2285.         button:SetPos(psw, psh);
  2286.         button:SetVisible(true);
  2287.         function button:Paint()
  2288.                 g.draw.RoundedBox(8, 0, 0, self:GetWide(), self:GetTall(), Color(104, 104, 104, 225));
  2289.         end
  2290.         button.DoClick = func or function()
  2291.                 SelectedWindow = txt;
  2292.                 SH.Menu();
  2293.                 g.surface.PlaySound("ambient/levels/canals/drip4.wav");
  2294.         end
  2295.        
  2296.         local panel;
  2297.         if(txt == SelectedWindow) then
  2298.                 panel = vgui.Create("DPanel", menu.frame);
  2299.                 panel:SetPos(135,85);
  2300.                 panel:SetSize(345,335);
  2301.                 function panel:Paint() end
  2302.         end
  2303.        
  2304.         return button, panel;
  2305. end
  2306.  
  2307. local SKIN = g.setmetatable({}, {
  2308.         __index = function(t, k)
  2309.                 return derma.GetDefaultSkin()[k];
  2310.         end,
  2311. });
  2312.  
  2313. function SKIN:PaintCheckBox(panel)
  2314.         local w, h = panel:GetSize();
  2315.         draw.RoundedBox(4, 1, 1, w-2, h-2, g.Color(210, 210, 210, 205));
  2316. end
  2317.  
  2318. function SKIN:SchemeCheckBox(panel)
  2319.         panel:SetTextColor(g.Color(0, 85, 255, 255));
  2320.         DSysButton.ApplySchemeSettings(panel);
  2321. end
  2322.  
  2323. function SKIN:SchemeSlider(panel)
  2324.         panel.Knob:SetImageColor(g.Color(0, 85, 255, 255));
  2325. end
  2326.  
  2327. g.surface.CreateFont("coolvetica", 64, 500, true, false, "shmenufont");
  2328. function SH.Menu()
  2329.         if(menu.frame) then menu.frame:Remove(); end
  2330.        
  2331.         menu.frame = vgui.Create("DFrame");
  2332.         menu.frame:SetPos(g.ScrW()/2-184, g.ScrH()/2-155);
  2333.         menu.frame:SetSize(mwidth, mheight);
  2334.         menu.frame:SetTitle("");
  2335.         menu.frame:SetVisible(true);
  2336.         menu.frame:SetDraggable(false);
  2337.         menu.frame:SetSizable(false);
  2338.         menu.frame:ShowCloseButton(false);
  2339.         menu.frame:MakePopup();
  2340.        
  2341.         function menu.frame:GetSkin()
  2342.                 return SKIN;
  2343.         end
  2344.        
  2345.         function menu.frame:Paint()
  2346.                 g.draw.RoundedBox(7, 0, 0, self:GetWide(), self:GetTall(), g.Color(
  2347.                 SH.GetCVNum("sh_color_menu_r"),
  2348.                 SH.GetCVNum("sh_color_menu_g"),
  2349.                 SH.GetCVNum("sh_color_menu_b"),
  2350.                 SH.GetCVNum("sh_color_menu_a")));
  2351.                
  2352.                 g.draw.SimpleText("SethHack", "shmenufont", 215, 10, g.Color(210, 210, 210, 235), TEXT_ALIGN_CENTER);
  2353.                 g.draw.SimpleText("V4", "shmenufont", 365, 10, g.Color(0, 192, 255, 235), TEXT_ALIGN_CENTER);
  2354.                 g.draw.SimpleText("sethhack.net", "DefaultBold", 355, 60, g.Color(210, 210, 210, 235), TEXT_ALIGN_CENTER);
  2355.         end
  2356.        
  2357.         menu.aimbutton, menu.aimpanel = SH.CreateButton("Aimbot", 75, 20, 15, 85, menu.frame);
  2358.         menu.friendsbutton, menu.friendspanel = SH.CreateButton("Friends", 75, 20, 15, 125, menu.frame);
  2359.         menu.teamsbutton, menu.teamspanel = SH.CreateButton("Teams", 75, 20, 15, 165, menu.frame);
  2360.         menu.custebutton, menu.custepanel = SH.CreateButton("Custom Ents", 75, 20, 15, 205, menu.frame);
  2361.         menu.espbutton, menu.esppanel = SH.CreateButton("ESP/Wallhack", 75, 20, 15, 245, menu.frame);
  2362.         menu.miscbutton, menu.miscpanel = SH.CreateButton("Misc", 75, 20, 15, 285, menu.frame);
  2363.         menu.configbutton, menu.configpanel = SH.CreateButton("Configurations", 75, 20, 15, 325, menu.frame);
  2364.         menu.iplogbutton, menu.iplogpanel = SH.CreateButton("IP Logs", 75, 20, 15, 365, menu.frame);
  2365.         menu.loggerbutton, menu.loggerpanel = SH.CreateButton("Logger", 75, 20, 15, 405, menu.frame);
  2366.        
  2367.         SH.CreateOption("Checkbox", menu.aimpanel, "Automatically fires when locked on to an enemy", "Triggerbot", "sh_triggerbot", 0, 0);
  2368.         SH.CreateOption("Checkbox", menu.aimpanel,
  2369.         "Automatically fires when looking at an enemy (does not require aimbot)",
  2370.         "Triggerbot (Always Shoot)", "sh_triggerbot_as", 0, 20);
  2371.         SH.CreateOption("Checkbox", menu.aimpanel, "Predicts the spread on weapons, making them more accurate", "Nospread", "sh_nospread", 0, 40);
  2372.         SH.CreateOption("Checkbox", menu.aimpanel, "Smoothly turns your aim to face the target", "Antisnap", "sh_antisnap", 0, 60);
  2373.         SH.CreateOption("Checkbox", menu.aimpanel, "Allows the aimbot to target members of your team", "Friendly Fire", "sh_friendlyfire", 0, 80);
  2374.         SH.CreateOption("Checkbox", menu.aimpanel, "Allows the aimbot to target players", "Target Players", "sh_targetplayers", 0, 100);
  2375.         SH.CreateOption("Checkbox", menu.aimpanel, "Allows the aimbot to target NPCs", "Target NPCs", "sh_targetnpcs", 0, 120);
  2376.         SH.CreateOption("Checkbox", menu.aimpanel, "Allows the aimbot to target custom entities on the ESP Entities list", "Target Entities", "sh_targetents", 0, 140);
  2377.         SH.CreateOption("Checkbox", menu.aimpanel, "Stops the aimbot from targetting Steam friends", "Ignore Steam Friends", "sh_ignorefriends", 0, 160);
  2378.         SH.CreateOption("Checkbox", menu.aimpanel, "Do not target players who don't have a weapon", "Ignore Weaponless Players", "sh_ignorenowep", 0, 180);
  2379.         SH.CreateOption("Checkbox", menu.aimpanel, "Allows the aimbot to target people through walls and other objects", "Don't check LOS", "sh_dclos", 0, 200);
  2380.         SH.CreateOption("Checkbox", menu.aimpanel, "Forces the aimbot to target bones instead of attachments. Required for bone selection.", "Target Bones", "sh_targetbones", 0, 220);
  2381.         SH.CreateOption("Checkbox", menu.aimpanel, "Aimbot ignores admins/superadmins.", "Ignore Admins", "sh_ignoreadmins", 0, 240);
  2382.        
  2383.         SH.CreateOption("Checkbox", menu.aimpanel, "Do not target other traitors (if you're a traitor)", "Ignore Traitors (TTT)", "sh_ignoretraitors", 185, 0);
  2384.         SH.CreateOption("Checkbox", menu.aimpanel, "Do not target other innocents (if you're innocent)", "Ignore Innocents (TTT)", "sh_targettraitors", 185, 20);
  2385.        
  2386.         SH.CreateOption("Slider", menu.aimpanel, "Targets a certain amount left/right from the target's head", "Aim Offset (Hrzntl.)", "sh_aimoffset_hoz", 1, -50, 50, 150, 180, 165);
  2387.         SH.CreateOption("Slider", menu.aimpanel, "Targets a certain amount down from the target's head", "Aim Offset (Vertical)", "sh_aimoffset_vert", 1, -50, 50, 150, 180, 205);
  2388.         SH.CreateOption("Slider", menu.aimpanel, "Controls how far around your aimbot can target people (degrees)", "Max FOV", "sh_maxfov", 0, 1, 180, 150, 180, 245);
  2389.         SH.CreateOption("Slider", menu.aimpanel, "Controls the speed of the Antisnap", "Antisnap Speed", "sh_antisnapspeed", 1, 0, 20, 150, 180, 285);
  2390.        
  2391.         SH.CreateOption("Label", menu.aimpanel, nil, "Bone:", 46, 285);
  2392.        
  2393.         SH.CreateOption("Label", menu.friendspanel, nil, "Players", 30, 0);
  2394.         SH.CreateOption("Label", menu.friendspanel, nil, "Friends", 250, 0);
  2395.        
  2396.         SH.CreateOption("Label", menu.teamspanel, nil, "Teams", 25, 0);
  2397.         SH.CreateOption("Label", menu.teamspanel, nil, "Whitelist", 250, 0);
  2398.        
  2399.         SH.CreateOption("Label", menu.custepanel, nil, "Entities", 25, 0);
  2400.         SH.CreateOption("Label", menu.custepanel, nil, "List", 250, 0);
  2401.        
  2402.         SH.CreateOption("Checkbox", menu.esppanel, "Show player's name, health, weapon, and more above their head", "ESP", "sh_esp", 0, 0);
  2403.         SH.CreateOption("Checkbox", menu.esppanel, "Allows you to see players and NPCs through walls and other objects", "Wallhack", "sh_wallhack", 0, 20);
  2404.         SH.CreateOption("Checkbox", menu.esppanel, "Turns players, props, weapons, and more into wireframe", "Wireframe Chams", "sh_wireframe", 0, 40);
  2405.         SH.CreateOption("Checkbox", menu.esppanel, "Turns players, props, weapons, and more into solid chams", "Solid Chams", "sh_solids", 0, 60);
  2406.         SH.CreateOption("Checkbox", menu.esppanel, "Shows a list of admins and superadmins in the top right of the screen", "Show Admins", "sh_showadmins", 0, 80);
  2407.         SH.CreateOption("Checkbox", menu.esppanel, "Shows a list of what the drug dealer is current buying/selling in the top left of the screen", "Show Druggy Stock (PERP)", "sh_showdruggy", 0, 100);
  2408.         SH.CreateOption("Checkbox", menu.esppanel, "Shows a players distance on the esp", "Show Distance", "sh_esp_showdist", 0, 120);
  2409.         SH.CreateOption("Checkbox", menu.esppanel, "Shows players GangWars gangs", "Show GangWars Gangs", "sh_esp_showgangs", 0, 140);
  2410.         SH.CreateOption("Checkbox", menu.esppanel, "Shows a laser eye trace to player's view positions", "Laser Eyes", "sh_lasereyes", 0, 160);
  2411.         SH.CreateOption("Checkbox", menu.esppanel, "Shows a laser eye trace from your weapon to your hit position", "Laser Sights", "sh_lasersights", 0, 180);
  2412.        
  2413.         SH.CreateOption("Slider", menu.esppanel, "The maximum distance that players can be for the ESP to show them",
  2414.         "Max ESP Dist", "sh_esp_dist", 0, 1, 25000, 150, 180, 245);
  2415.         SH.CreateOption("Slider", menu.esppanel, "The maximum distance that players can be for the Wallhack to show them",
  2416.         "Max Wallhack Dist", "sh_wallhack_dist", 0, 1, 25000, 150, 180, 285);
  2417.        
  2418.         SH.CreateOption("Checkbox", menu.miscpanel, "Automatically reloads your weapon when you have no ammo", "Autoreload", "sh_autoreload", 0, 0);
  2419.         SH.CreateOption("Checkbox", menu.miscpanel, "Blocks RunConsoleCommand and :ConCommand() from being used", "Block RunConsoleCommand", "sh_blockrcc", 0, 20);
  2420.         SH.CreateOption("Checkbox", menu.miscpanel, "Puts your view into thirdperson mode", "Thirdperson", "sh_thirdperson", 0, 40);
  2421.         SH.CreateOption("Checkbox", menu.miscpanel, "Logs functions such as RunConsoleCommand and file.Exists", "Console Logging", "sh_logging_console", 0, 60);
  2422.         SH.CreateOption("Checkbox", menu.miscpanel, "Disables custom view", "Disable CalcView", "sh_disablecalcview", 0, 80);
  2423.         SH.CreateOption("Checkbox", menu.miscpanel, "Bypass ULX's gag (voicemute) system", "Bypass ULX Gag", "sh_ulxungag", 0, 100);
  2424.         SH.CreateOption("Checkbox", menu.miscpanel, "Turn off every single SethHack feature", "Panic Mode", "sh_panicmode", 0, 120);
  2425.         SH.CreateOption("Checkbox", menu.miscpanel, "Disable recoil for weapons. Needs a respawn to disable.", "No-Recoil", "sh_norecoil", 0, 140);
  2426.         SH.CreateOption("Checkbox", menu.miscpanel, "Randomly change your name to that of other players.", "Name-Changer", "sh_namechange", 0, 160);
  2427.         SH.CreateOption("Checkbox", menu.miscpanel, "Jump the moment you touch the ground if you are holding space", "Bunnyhop", "sh_bhop", 0, 180);
  2428.         SH.CreateOption("Checkbox", menu.miscpanel, "Shows connecting player's IP in your console", "IP Logging", "sh_iplogs", 0, 200);
  2429.         SH.CreateOption("Checkbox", menu.miscpanel, "Enables a clientside noclip", "Client Noclip", "sh_clientnoclip", 0, 220);
  2430.         SH.CreateOption("Checkbox", menu.miscpanel, "Prints into chatbox when an admin spectates you!", "Show Spectators", "sh_showspectators", 0, 240);
  2431.        
  2432.         SH.CreateOption("Slider", menu.miscpanel, "Speed of the clientside noclip", "Client Noclip Speed", "sh_clientnoclip_speed", 0, 200, 2000, 150, 180, 165);
  2433.         SH.CreateOption("Slider", menu.miscpanel, "Your view's field-of-view (FOV). Set to 0 to disable", "Field-Of-View", "sh_fov", 0, 0, 90, 150, 180, 205);
  2434.         SH.CreateOption("Slider", menu.miscpanel,
  2435.         "The distance that the thirdperson camera is from yourself",
  2436.         "Thirdperson Distance", "sh_thirdperson_dist", 0, 0, 200, 150, 180, 245);
  2437.         SH.CreateOption("Slider", menu.miscpanel, "The speed of the speedhack", "Speedhack Speed", "sh_speedhack_speed", 2, 1, 25, 150, 180, 285);
  2438.        
  2439.         SH.CreateButton("Blow C4s (TTT)", 85, 20, 0, 290, menu.miscpanel, SH.BlowC4);
  2440.        
  2441.         SH.CreateOption("Checkbox", menu.friendspanel, "Makes the friends list an enemy list", "Friends List is Enemy List", "sh_friendisenemy", 95, 255);
  2442.         SH.CreateOption("Checkbox", menu.teamspanel, "Makes the teams list an enemy list", "Teams List is Enemy List", "sh_teamisenemy", 95, 255);
  2443.        
  2444.         SH.CreateOption("Label", menu.configpanel, nil, [[
  2445.                 Custom configurations allow you to save all SethHack settings
  2446.                 under a specified name, and restore the exact same settings
  2447.                 at a later time!]], 5, 260);
  2448.                
  2449.         SH.CreateOption("Label", menu.friendspanel, nil, [[
  2450.                 Players added to the friends list will not be targetted
  2451.                 by the aimbot. If the above box is checked, only players
  2452.                 on this list will be targetted.]], 15, 280);
  2453.                
  2454.         SH.CreateOption("Label", menu.teamspanel, nil, [[
  2455.                 Players on teams added to the friends list will not be
  2456.                 targetted by the aimbot. If the above box is checked,
  2457.                 only players on teams on this list will be targetted.]], 15, 280);
  2458.                
  2459.         SH.CreateOption("Label", menu.custepanel, nil, [[
  2460.                 Entities added to this list will be shown on the ESP.]], 15, 290);
  2461.                
  2462.         if(menu.aimpanel) then
  2463.                 local List = vgui.Create("DMultiChoice", menu.aimpanel);
  2464.                 List:SetPos(0, 300);
  2465.                 List:SetSize(125, 20);
  2466.                
  2467.                 for k, v in g.pairs(SH.nicebones) do
  2468.                         List:AddChoice(v[1]);
  2469.                 end
  2470.                
  2471.                 List:SetConVar(SH.tvars["sh_aimbone"][2]);
  2472.                 g.timer.Simple(0.01, function()
  2473.                         List:SetText(SH.GetCVStr("sh_aimbone"));
  2474.                 end);
  2475.                 List:SetEditable(false);
  2476.         end
  2477.        
  2478.         local FriendsList, TeamList, EntsList;
  2479.        
  2480.         local CloseButton = vgui.Create("DSysButton", menu.frame);
  2481.         CloseButton:SetType("close");
  2482.         CloseButton:SetPos(481, 2);
  2483.         CloseButton:SetSize(15, 15);
  2484.         CloseButton.DoClick = function() if(menu.frame) then menu.frame:Remove(); menu.frame = nil; end end;
  2485.        
  2486.         if(menu.friendspanel) then
  2487.                 --[[ Friends List --]]
  2488.                 local FriendsList;
  2489.                 local function FList()
  2490.                         FriendsList = vgui.Create("DComboBox", menu.friendspanel)
  2491.                         FriendsList:SetPos(0, 25);
  2492.                         FriendsList:SetSize(110, 180);
  2493.                         FriendsList:SetMultiple(false);
  2494.                         for k, v in g.pairs(g_players) do
  2495.                                 if(v ~= me and not g.table.HasValue(SH.aimfriends, v)) then
  2496.                                         local i = FriendsList:AddItem(v:Nick());
  2497.                                         i:SetTooltip(v:Nick());
  2498.                                 end
  2499.                         end
  2500.                 end
  2501.                 FList();
  2502.                
  2503.                 local FriendsListC;
  2504.                 local function FListC()
  2505.                         FriendsListC = vgui.Create("DComboBox", menu.friendspanel);
  2506.                         FriendsListC:SetPos(225, 25);
  2507.                         FriendsListC:SetSize(110, 180);
  2508.                         FriendsListC:SetMultiple(false);
  2509.                         for k, v in g.pairs(SH.aimfriends) do
  2510.                                 local i = FriendsListC:AddItem(v:Nick());
  2511.                                 i:SetTooltip(v:Nick());
  2512.                         end    
  2513.                 end
  2514.                 FListC()
  2515.                
  2516.                 local FriendsListAdd = vgui.Create("DButton", menu.friendspanel);
  2517.                 FriendsListAdd:SetPos(20, 215);
  2518.                 FriendsListAdd:SetText("Add");
  2519.                 FriendsListAdd.DoClick = function()
  2520.                         if(FriendsList:GetSelectedItems() and FriendsList:GetSelectedItems()[1]) then
  2521.                                 for k, v in g.pairs(g_players) do
  2522.                                         if(v:Nick() == FriendsList:GetSelectedItems()[1]:GetValue()) then
  2523.                                                 g.table.insert(SH.aimfriends, v);
  2524.                                                 me:ChatPrint("Added " .. v:Nick());
  2525.                                         end    
  2526.                                 end    
  2527.                         end
  2528.                         FList();
  2529.                         FListC();
  2530.                 end
  2531.                        
  2532.                 local FriendsListRem = vgui.Create("DButton", menu.friendspanel);
  2533.                 FriendsListRem:SetPos(240, 215);
  2534.                 FriendsListRem:SetText("Remove");
  2535.                 FriendsListRem.DoClick = function()
  2536.                         if(FriendsListC:GetSelectedItems() and FriendsListC:GetSelectedItems()[1]) then
  2537.                                 for k, v in g.pairs(SH.aimfriends) do
  2538.                                         if(v:Nick() == FriendsListC:GetSelectedItems()[1]:GetValue()) then
  2539.                                                 g.table.remove(SH.aimfriends, k);
  2540.                                                 me:ChatPrint("Removed " .. v:Nick());
  2541.                                         end    
  2542.                                 end
  2543.                         end
  2544.                         FListC();
  2545.                         FList();
  2546.                 end
  2547.         end
  2548.        
  2549.         if(menu.teamspanel) then
  2550.                 local function TList()
  2551.                         TeamList = vgui.Create("DComboBox", menu.teamspanel);
  2552.                         TeamList:SetPos(0, 25);
  2553.                         TeamList:SetSize(110, 180);
  2554.                         TeamList:SetMultiple(false);
  2555.                         for k, v in g.pairs(SH.teamlist) do
  2556.                                 if(not g.table.HasValue(SH.aimteams,v.Name)) then
  2557.                                         local i = TeamList:AddItem(v.Name);
  2558.                                         i:SetTooltip(v.Name);
  2559.                                 end    
  2560.                         end
  2561.                 end
  2562.                 TList()
  2563.                
  2564.                 local TeamListC
  2565.                 local function TListC()
  2566.                         TeamListC = vgui.Create("DComboBox", menu.teamspanel);
  2567.                         TeamListC:SetPos(225, 25);
  2568.                         TeamListC:SetSize(110, 180);
  2569.                         TeamListC:SetMultiple(false);
  2570.                         for k, v in g.pairs(SH.aimteams) do
  2571.                                 local i = TeamListC:AddItem(v);
  2572.                                 i:SetTooltip(v);
  2573.                         end
  2574.                 end
  2575.                        
  2576.                 TListC();
  2577.                        
  2578.                 local TeamListAdd = vgui.Create("DButton", menu.teamspanel);
  2579.                 TeamListAdd:SetPos(20, 215);
  2580.                 TeamListAdd:SetText("Add");
  2581.                 TeamListAdd.DoClick = function()
  2582.                         if(TeamList:GetSelectedItems() and TeamList:GetSelectedItems()[1]) then
  2583.                                 for k, v in g.pairs(SH.teamlist) do
  2584.                                         if(v.Name == TeamList:GetSelectedItems()[1]:GetValue()) then
  2585.                                                 g.table.insert(SH.aimteams, v.Name);
  2586.                                                 me:ChatPrint("Added " .. v.Name);
  2587.                                         end    
  2588.                                 end    
  2589.                         end
  2590.                         TList();
  2591.                         TListC();
  2592.                 end
  2593.                        
  2594.                 local TeamListRem = vgui.Create("DButton", menu.teamspanel);
  2595.                 TeamListRem:SetPos(240, 215);
  2596.                 TeamListRem:SetText("Remove");
  2597.                 TeamListRem.DoClick = function()
  2598.                         if(TeamListC:GetSelectedItems() and TeamListC:GetSelectedItems()[1]) then
  2599.                                 for k, v in g.pairs(SH.aimteams) do
  2600.                                         if(v == TeamListC:GetSelectedItems()[1]:GetValue()) then
  2601.                                                 table.remove(SH.aimteams, k );
  2602.                                                 me:ChatPrint("Removed " .. v);
  2603.                                         end
  2604.                                 end    
  2605.                         end
  2606.                         TListC();
  2607.                         TList();
  2608.                 end
  2609.         end
  2610.        
  2611.         if(menu.custepanel) then
  2612.                 local function EList()
  2613.                         EntsList = vgui.Create("DComboBox", menu.custepanel)
  2614.                         EntsList:SetPos(0, 25);
  2615.                         EntsList:SetSize(110, 180);
  2616.                         EntsList:SetMultiple(false);
  2617.                         for k, v in g.pairs(fentsGetAll()) do
  2618.                                 if(not SH.custe[v]) then
  2619.                                         local i = EntsList:AddItem(v);
  2620.                                         i:SetTooltip(v);
  2621.                                 end    
  2622.                         end
  2623.                 end
  2624.                 EList();
  2625.                
  2626.                 local EntsListC;
  2627.                 local function EListC()
  2628.                         EntsListC = vgui.Create("DComboBox", menu.custepanel);
  2629.                         EntsListC:SetPos(225, 25);
  2630.                         EntsListC:SetSize(110, 180);
  2631.                         EntsListC:SetMultiple(false);
  2632.                         for k, v in g.pairs(SH.custe) do
  2633.                                 local i = EntsListC:AddItem(k);
  2634.                                 i:SetTooltip(k);
  2635.                         end
  2636.                 end
  2637.                
  2638.                 EListC();
  2639.                
  2640.                 local EntsListAdd = vgui.Create("DButton", menu.custepanel);
  2641.                 EntsListAdd:SetPos(20, 215);
  2642.                 EntsListAdd:SetText("Add");
  2643.                 EntsListAdd.DoClick = function()
  2644.                         if(EntsList:GetSelectedItems() and EntsList:GetSelectedItems()[1]) then
  2645.                                 for k, v in g.pairs(fentsGetAll()) do
  2646.                                         if(v == EntsList:GetSelectedItems()[1]:GetValue()) then
  2647.                                                 SH.custe[v] = true;
  2648.                                                
  2649.                                                 local t = SH.data.GetOptionTab("ESPEnts") or {};
  2650.                                                 t[v] = true;
  2651.                                                 SH.data.SetOptionTab("ESPEnts", t);
  2652.                                                
  2653.                                                 me:ChatPrint("Added " .. v);
  2654.                                         end    
  2655.                                 end    
  2656.                         end
  2657.                         EList();
  2658.                         EListC();
  2659.                 end
  2660.                        
  2661.                 local EntsListRem = vgui.Create("DButton", menu.custepanel);
  2662.                 EntsListRem:SetPos(240, 215);
  2663.                 EntsListRem:SetText("Remove");
  2664.                 EntsListRem.DoClick = function()
  2665.                         if(EntsListC:GetSelectedItems() and EntsListC:GetSelectedItems()[1]) then
  2666.                                 for k, v in g.pairs(SH.custe) do
  2667.                                         if(k == EntsListC:GetSelectedItems()[1]:GetValue()) then
  2668.                                                 SH.custe[k] = nil;
  2669.                                                
  2670.                                                 local t = SH.data.GetOptionTab("ESPEnts") or {};
  2671.                                                 t[k] = nil;
  2672.                                                 SH.data.SetOptionTab("ESPEnts", t);
  2673.                                                
  2674.                                                 me:ChatPrint("Removed " .. k);
  2675.                                         end
  2676.                                 end
  2677.                         end
  2678.                         EListC();
  2679.                         EList();
  2680.                 end
  2681.                
  2682.                 local EntsListClr = vgui.Create("DButton", menu.custepanel);
  2683.                 EntsListClr:SetPos(135, 145);
  2684.                 EntsListClr:SetText("Clear");
  2685.                 EntsListClr.DoClick = function()
  2686.                         SH.custe = {};
  2687.                         SH.data.SetOptionTab("ESPEnts", SH.custe);
  2688.                         EListC();
  2689.                         EList();
  2690.                 end
  2691.         end
  2692.        
  2693.         if(menu.configpanel) then
  2694.                 local ConfigList;
  2695.                 local function CList()
  2696.                         ConfigList = vgui.Create("DComboBox", menu.configpanel)
  2697.                         ConfigList:SetPos(0, 25);
  2698.                         ConfigList:SetSize(305, 175);
  2699.                         ConfigList:SetMultiple(false);
  2700.                         for k, v in g.pairs(SH.configs) do
  2701.                                 ConfigList:AddItem(k);
  2702.                         end
  2703.                 end
  2704.                 CList();
  2705.                
  2706.                 local ConfigListUse = vgui.Create("DButton", menu.configpanel);
  2707.                 ConfigListUse:SetPos(5, 215);
  2708.                 ConfigListUse:SetSize(85, 20);
  2709.                 ConfigListUse:SetText("Use Selected");
  2710.                 ConfigListUse.DoClick = function()
  2711.                         if(ConfigList:GetSelectedItems() and ConfigList:GetSelectedItems()[1]) then
  2712.                                 local txt = ConfigList:GetSelectedItems()[1]:GetText();
  2713.                                 if(SH.configs[txt]) then
  2714.                                         for k, v in g.pairs(SH.configs[txt]) do
  2715.                                                 if(SH.tvars[v[1]] and SH.tvars[v[1]][2]) then
  2716.                                                         g.RunConsoleCommand(SH.tvars[v[1]][2], v[2]);
  2717.                                                 end
  2718.                                         end
  2719.                                         me:ChatPrint("Enabled " .. txt .. " config!");
  2720.                                 end
  2721.                         end
  2722.                 end
  2723.                
  2724.                 local ConfigListDelete = vgui.Create("DButton", menu.configpanel);
  2725.                 ConfigListDelete:SetPos(110, 215);
  2726.                 ConfigListDelete:SetSize(85, 20);
  2727.                 ConfigListDelete:SetText("Delete Selected");
  2728.                 ConfigListDelete.DoClick = function()
  2729.                         if(ConfigList:GetSelectedItems() and ConfigList:GetSelectedItems()[1]) then
  2730.                                 local txt = ConfigList:GetSelectedItems()[1]:GetText();
  2731.                                 if(txt == "Default") then
  2732.                                         me:ChatPrint("You can't delete the default configuration!");
  2733.                                         return;
  2734.                                 end
  2735.                                
  2736.                                 local t = SH.data.GetOptionTab("Configs") or {};
  2737.                                 t[txt] = nil;
  2738.                                 SH.data.SetOptionTab("Configs", t);
  2739.                                
  2740.                                 SH.configs[txt] = nil;
  2741.                                 me:ChatPrint("Deleted config " .. txt);
  2742.                                 CList();
  2743.                         end
  2744.                 end
  2745.                
  2746.                 local ConfigListSave = vgui.Create("DButton", menu.configpanel);
  2747.                 ConfigListSave:SetPos(215, 215);
  2748.                 ConfigListSave:SetSize(85, 20);
  2749.                 ConfigListSave:SetText("Save Current");
  2750.                 ConfigListSave.DoClick = function()
  2751.                         g.gui.EnableScreenClicker(true);
  2752.                         SH.vars.chatting = true;
  2753.                         g.Derma_StringRequest("Config Name", "Enter a name for this configuration.",
  2754.                         ((ConfigList:GetSelectedItems() and ConfigList:GetSelectedItems()[1]) and ConfigList:GetSelectedItems()[1]:GetText()) or "",
  2755.                         function(n)
  2756.                                 g.gui.EnableScreenClicker(false);
  2757.                                 SH.vars.chatting = false;
  2758.                                
  2759.                                 if(not n or g.string.len(n) < 2) then
  2760.                                         me:ChatPrint("Please enter a config name!");
  2761.                                         return;
  2762.                                 end
  2763.                                
  2764.                                 local ge = "";
  2765.                                 for k, v in g.pairs(SH.tvars) do
  2766.                                         ge = ge .. k .. "=" .. v[1] .. "`";
  2767.                                 end
  2768.                                
  2769.                                 local t = SH.data.GetOptionTab("Configs") or {};
  2770.                                 t[n] = ge;
  2771.                                 SH.data.SetOptionTab("Configs", t);
  2772.                                
  2773.                                 local t = {};
  2774.                                 for k, v in g.pairs(SH.tvars) do
  2775.                                         g.table.insert(t, {k, v[1]});
  2776.                                 end
  2777.                                 SH.configs[n] = t;
  2778.                                 me:ChatPrint("Saved config " .. n);
  2779.                                 CList();
  2780.                         end, function() g.gui.EnableScreenClicker(false); SH.vars.chatting = false; end, "Submit", "Cancel");
  2781.                 end
  2782.         end
  2783.        
  2784.         if(menu.iplogpanel) then               
  2785.                 local IPSearch = vgui.Create("DTextEntry", menu.iplogpanel);
  2786.                 IPSearch:SetPos(0, 0);
  2787.                 IPSearch:SetSize(250, 20);
  2788.                 IPSearch:SetEditable(false);
  2789.                 IPSearch:SetText("Filtered by: " .. (SH.IPSrch ~= "" and SH.IPSrch or "None"));
  2790.                
  2791.                 local IPEdit = vgui.Create("DButton", menu.iplogpanel);
  2792.                 IPEdit:SetText("Edit");
  2793.                 IPEdit:SetPos(252, 0);
  2794.                 IPEdit:SetSize(52, 20);
  2795.                 IPEdit.DoClick = function()
  2796.                         g.gui.EnableScreenClicker(true);
  2797.                         SH.vars.chatting = true;
  2798.                        
  2799.                         g.Derma_StringRequest("Name Filter", "Enter a name to filter the IP logs with.\nLeave blank for no filter.", SH.IPSrch, function(txt)
  2800.                                 SH.IPSrch = txt;
  2801.                                 SH.BuildIPLogList();
  2802.                                 g.gui.EnableScreenClicker(false);
  2803.                                 SH.vars.chatting = false;
  2804.                                
  2805.                                 g.timer.Simple(.01, function() if(not menu.frame) then SH.Menu(); end end);
  2806.                         end,
  2807.                         function(txt)
  2808.                                 g.gui.EnableScreenClicker(false); SH.vars.chatting = false;
  2809.                                 g.timer.Simple(.01, function() if(not menu.frame) then SH.Menu(); end end);
  2810.                         end,
  2811.                         "Filter", "Cancel");   
  2812.                 end
  2813.                
  2814.                 local IPLogList = vgui.Create("DListView", menu.iplogpanel);
  2815.                 IPLogList:SetPos(0, 25);
  2816.                 IPLogList:SetSize(305, 300);
  2817.                 IPLogList:SetMultiSelect(false);
  2818.                 IPLogList:AddColumn("Name");
  2819.                 IPLogList:AddColumn("IP/Port");
  2820.                 IPLogList.OnClickLine = function(prnt, line, sel)
  2821.                         g.SetClipboardText(line:GetValue(2));
  2822.                         me:ChatPrint("Copied IP to clipboard!");
  2823.                 end
  2824.                
  2825.                 function SH.BuildIPLogList()
  2826.                         IPLogList:Clear();
  2827.                        
  2828.                         local IPLT = {};
  2829.                        
  2830.                         for k, v in g.pairs(g.string.Explode("\n", g.SH_READFILE("iplog.txt"))) do
  2831.                                 if(g.string.find(v, "Player")) then
  2832.                                         if(g.string.find(g.string.lower(v), g.string.lower(SH.IPSrch))) then
  2833.                                                 local expl = g.string.Explode(" connected from ", v);
  2834.                                                 if(expl and expl[1] and expl[2]) then
  2835.                                                         expl[1] = g.string.Replace(expl[1], "Player ", "");
  2836.                                                         if(not g.table.HasValue(IPLT, expl[1])) then
  2837.                                                                 IPLogList:AddLine(expl[1], expl[2]);
  2838.                                                                 g.table.insert(IPLT, expl[1]);
  2839.                                                         end
  2840.                                                 end
  2841.                                         end
  2842.                                 end
  2843.                         end
  2844.                 end
  2845.                
  2846.                 SH.BuildIPLogList();
  2847.         end
  2848.        
  2849.         if(menu.loggerpanel) then
  2850.                 local FnLogList = vgui.Create("DListView", menu.loggerpanel);
  2851.                 FnLogList:SetPos(0, 25);
  2852.                 FnLogList:SetSize(305, 300);
  2853.                 FnLogList:SetMultiSelect(false);
  2854.                 local ColTime = FnLogList:AddColumn("Time");
  2855.                 local ColFn = FnLogList:AddColumn("Function");
  2856.                 local ColArgs = FnLogList:AddColumn("Arguments");
  2857.                 local ColStat = FnLogList:AddColumn("Status");
  2858.                 FnLogList.OnClickLine = function(prnt, line, sel)
  2859.                         if(g.table.HasValue(SH.fnblock, line:GetValue(2))) then
  2860.                                 for k, v in g.pairs(SH.fnblock) do
  2861.                                         if(v == line:GetValue(2)) then
  2862.                                                 g.table.remove(SH.fnblock, k);
  2863.                                                 me:ChatPrint("Function " .. line:GetValue(2) .. " unblocked.");
  2864.                                         end
  2865.                                 end
  2866.                         else
  2867.                                 g.table.insert(SH.fnblock, line:GetValue(2));
  2868.                                 me:ChatPrint("Function " .. line:GetValue(2) .. " blocked.");
  2869.                         end
  2870.                 end
  2871.                
  2872.                 ColTime:SetFixedWidth(50);
  2873.                 ColFn:SetFixedWidth(125);
  2874.                 ColArgs:SetFixedWidth(65);
  2875.                 ColStat:SetFixedWidth(50);
  2876.                
  2877.                 for k, v in g.pairs(SH.fnlogs) do
  2878.                         local ln = FnLogList:AddLine(v.time, v.func, v.args, v.status);
  2879.                         ln:SetTooltip("Time: " .. v.time .. "\nFunction: " .. v.func .. "\nArguments: " .. v.args .. "\nStatus: " .. v.status);
  2880.                 end
  2881.                
  2882.                 timer.Simple(0, FnLogList.VBar.SetScroll, FnLogList.VBar, 20000000)
  2883.         end
  2884. end
  2885.  
  2886. SH:RegisterCommand("+sh_menu", SH.Menu);
  2887. SH:RegisterCommand("-sh_menu", function()
  2888.         --SelectedWindow = "Aimbot";
  2889.         if(menu.frame) then
  2890.                 menu.frame:Remove();
  2891.                 menu = {};
  2892.         end
  2893.        
  2894.         g.gui.EnableScreenClicker(false);
  2895.         local dframe = vgui.Create("DFrame");
  2896.         dframe:SetSize(0,0);
  2897.         dframe:SetVisible(true);
  2898.         dframe:MakePopup();
  2899.         g.timer.Simple(.1, function()
  2900.                 dframe:Remove();
  2901.         end);
  2902. end);
  2903.  
  2904. function SH.UpdateMenu()
  2905.         --if(SH.GetCVNum("sh_updateversion") < SH.vars.UpdateVersion) then
  2906.         if(g.SH_MODVER < 23) then
  2907.                 --g.RunConsoleCommand(SH.tvars["sh_updateversion"][2], tostring(SH.vars.UpdateVersion));
  2908.                 local umenu = vgui.Create("DFrame");
  2909.                 umenu:SetSize(500, 550);
  2910.                 umenu:SetPos(10, 10);
  2911.                 umenu:ShowCloseButton(false);
  2912.                 umenu:SetTitle("SethHack Update");
  2913.                 umenu:MakePopup();
  2914.  
  2915.                 local ulabel = vgui.Create("DTextEntry", umenu);
  2916.                 ulabel:SetPos(10, 25);
  2917.                 ulabel:SetSize(480, 450);
  2918.                 ulabel:SetEditable(false);
  2919.                 ulabel:SetMultiline(true);
  2920.  
  2921.                 local ubutton = vgui.Create("DButton", umenu);
  2922.                 ubutton:SetPos(25, 485);
  2923.                 ubutton:SetSize(450, 50);
  2924.                 ubutton:SetText("Close");
  2925.                 function ubutton:DoClick()
  2926.                         umenu:Remove();
  2927.                         umenu = nil;
  2928.                         g.SH_PURECC("exit");
  2929.                 end
  2930.  
  2931.                 ulabel:SetText([[
  2932.                         Hello!
  2933.                         There's a small update, it fixes a few things with the data saving in the registry.
  2934.                        
  2935.                         Please redownload your injector.
  2936.                        
  2937.                         You will also need to re-make your settings and binds. Sorry, it's unavoidable.
  2938.                 ]]);
  2939.         end
  2940. end
  2941.  
  2942. --[[_CG = nil;
  2943. ACT_DOD_CROUCHWALK_AIM_PSCHRECK = 784;--]]

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at