it can be effective, just learn how exploits and roblox internally works, youll be able to stop more than 99% of exploiters with just a client sided ac
All it takes is one person who bypasses, then it is spread to the noobs who dont know how to bypass themselves. so that mentality is never a good approach. Eg a game like bedwars. Has an anticheat. So, when a smart exploiter finds a way to bypass it , the script will get to the noobs and they will use it too!
for it to be patched in 1 day, then another month of trying to bypass. not worth it
So the exploiter will obsufucate the script then what?
Pardon my spelling im on mobile
Obfuscation wonât stop analyzing the script. Thats how game owners stop exploits
i wouldnât say you should FULLY rely on this detection as your only anti-cheat method but i wouldnât say you should completely disregard it either, youâre better off automatically whitelisting your scripts to avoid false triggers as much as you can, this is how i do it
local WhitelistedScripts = {}
local function PopulateWhitelist()
for _, v in pairs(game:GetDescendants()) do
if v:IsA("LocalScript") or v:IsA("Script") or v:IsA("ModuleScript") then
WhitelistedScripts[v] = true
end
end
end
PopulateWhitelist()
local function GetInstanceMemory()
local succ, err = pcall(function()
game:GetService("Stats"):GetMemoryUsageMbForTag("Script")
end)
if err then
-- ban them here
else
return game:GetService("Stats"):GetMemoryUsageMbForTag("Script")
end
end
local val = 0
local Paused = false
local TimeThreshold = 5
local LastScrAdded = 0
local runtimeval = GetInstanceMemory()
game.DescendantAdded:Connect(function(v)
if (v:IsA("LocalScript") or v:IsA("Script") or v:IsA("ModuleScript")) and not WhitelistedScripts[v] then
Paused = true
LastScrAdded = tick()
repeat Stepped:Wait()
runtimeval = GetInstanceMemory()
if not Paused then Paused = true end
until runtimeval == val
if not Paused and runtimeval ~= val then runtimeval = GetInstanceMemory() end
Paused = false
end
end)
game.DescendantRemoving:Connect(function(v)
if (v:IsA("LocalScript") or v:IsA("Script") or v:IsA("ModuleScript")) and not WhitelistedScripts[v] then
Paused = true
LastScrAdded = tick()
repeat Stepped:Wait()
runtimeval = GetInstanceMemory()
if not Paused then Paused = true end
until runtimeval == val
if not Paused and runtimeval ~= val then runtimeval = GetInstanceMemory() end
Paused = false
end
end)
task.spawn(function()
pcall(function()
while true do
task.wait(0.5)
local CurrentTime = tick()
local TimeDiff = math.abs(CurrentTime - LastScrAdded)
val = GetInstanceMemory()
if not val then val = runtimeval + 5 end
if val ~= runtimeval and not Paused and (TimeDiff > TimeThreshold and runtimeval < val) and not IsStudio then
-- ban them here
runtimeval = GetInstanceMemory()
end
end
end)
end)
i canât really confirm whether or not this is reliable to use in a big production game but i will say iâve been using this for around 2 weeks and itâs only gotten to false trigger once but thatâs probably because of how my game is coded, in conclusion
â No, you should not use this so long as you use Fluffs for your game as a decompile counter
This should NOT be used, memory is unpredictable and could spike randomly.