local getinfo = getinfo or debug.getinfo local hooked = {} local detected, kill setthreadidentity(2) for i, v in getgc(true) do if typeof(v) == "table" then local detect_func = rawget(v, "Detected") local kill_func = rawget(v, "Kill") if typeof(detect_func) == "function" and not detected then detected = detect_func local old old = hookfunction(detected, function(action, info, no_crash) if action ~= "_" then end return true end) table.insert(hooked, {func = detected, old = old}) end local vars = rawget(v, "Variables") if vars and typeof(vars) == "table" and vars.Adonis then kill = kill_func end end end for _, v in pairs(getgc(true)) do if type(v) == "table" and pcall(function() return rawget(v, "indexInstance") end) then local index_inst = rawget(v, "indexInstance") if type(index_inst) == "table" and #index_inst >= 2 and type(index_inst[2]) == "function" then if index_inst[1] == "kick" or index_inst[1]:lower():find("namecall") then hookfunction(index_inst[2], function(...) return false end) end end end end local plr = game:GetService("Players").LocalPlayer local mt = getrawmetatable(game) local old_namecall = mt.__namecall local newcclosure = newcclosure or syn_newcclosure setreadonly(mt, false) mt.__namecall = newcclosure(function(self, ...) local method = getnamecallmethod() local args = {...} if method == "Kick" and self == plr and not checkcaller() then return end return old_namecall(self, ...) end) setreadonly(mt, true) local old_getinfo = getinfo hookfunction(getinfo, function(...) local args = {...} local level = args[2] or 2 if detected and level == 2 then return coroutine.yield(coroutine.running()) end return old_getinfo(...) end)