--!nonstrict --[[========================================================================= Optimizer -- nm-lib build Anti-lag + auto-collect, rewritten for throughput. Perf rules this file follows, in order of how much they actually bought: 1. Nothing scans the workspace on a frame. The part/pickup registries are maintained by DescendantAdded/DescendantRemoving as O(1) swap- remove dense arrays, so the hot loop walks a packed array with an integer cursor instead of pairs()-ing a dict full of dead refs. 2. Teleporting pickups is OFF by default. firetouchinterest does not need proximity; skipping the CFrame write removes two physics-graph writes per pickup, which is the single biggest win in this script. 3. Zero allocation in the hot loop: no closures, no per-part pcall, no per-part tables. One pcall wraps the whole batch. 4. Toggle values are mirrored into plain upvalues by their callbacks, so the loop never touches Library.Options.x.Value. 5. Every bulk operation (anti-lag apply, anti-lag revert, collect-all) runs through one chunked job runner, so a 60k-part map never hitches. 6. One Heartbeat connection total. Idle cost is three comparisons. 7. Property writes are guarded by a compare -- re-writing an identical Material still dirties the render + replication path. docs: https://nitaimaarek.com/nm =========================================================================]] local Library = loadstring(game:HttpGet("https://nitaimaarek.com/nm-lib"))() --========================================================================= -- locals: every hot symbol is pulled into a register slot up front --========================================================================= local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Players = game:GetService("Players") local Lighting = game:GetService("Lighting") local LocalPlayer = Players.LocalPlayer local Mouse = LocalPlayer:GetMouse() local Terrain = workspace.Terrain local Heartbeat = RunService.Heartbeat local fireTouch = firetouchinterest -- nil on stock clients local fireProx = fireproximityprompt local fireClick = fireclickdetector local table_move = table.move local table_create= table.create local table_clear = table.clear local math_min = math.min local string_match= string.match local string_find = string.find local string_lower= string.lower local format = string.format local MAT_SMOOTH = Enum.Material.SmoothPlastic local QUALITY_LOW = Enum.QualityLevel.Level01 local QUALITY_AUTO= Enum.QualityLevel.Automatic local MB1 = Enum.UserInputType.MouseButton1 local TAU = math.pi * 2 -- modern clients expose the assembly properties; older ones only the aliases -- Velocity first, deliberately. It is what every working ownership script -- uses; AssemblyLinearVelocity is only a fallback for clients that dropped -- the alias. Deviating from the proven property was one of the reasons the -- earlier build did nothing. local VEL_PROP, ANG_PROP = "Velocity", "RotVelocity" do local probe = Instance.new("Part") if not pcall(function() probe.Velocity = Vector3.new() end) then VEL_PROP, ANG_PROP = "AssemblyLinearVelocity", "AssemblyAngularVelocity" end probe:Destroy() end --========================================================================= -- dense set: O(1) insert, O(1) swap-remove, array-fast to iterate --========================================================================= local function newSet(reserve) return { items = table_create(reserve or 64), index = {}, n = 0 } end local function setAdd(s, v) if s.index[v] then return false end local n = s.n + 1 s.n = n s.items[n] = v s.index[v] = n return true end local function setRemove(s, v) local i = s.index[v] if not i then return false end local n = s.n local last = s.items[n] s.items[i] = last s.index[last] = i s.items[n] = nil s.index[v] = nil s.n = n - 1 return true end local function setClear(s) table_clear(s.items) table_clear(s.index) s.n = 0 end local partSet = newSet(8192) -- every BasePart in workspace local pickSet = newSet(2048) -- ...that carries a TouchInterest local selSet = newSet(256) -- selected parts (membership, not visuals) --========================================================================= -- anti-lag bookkeeping: parallel arrays, so nothing allocates per part --========================================================================= local touched = newSet(8192) -- parts we changed local oldMat = table_create(8192) local oldShadow = table_create(8192) local oldRefl = table_create(8192) local fxSet = newSet(512) -- effects we disabled local oldFx = table_create(512) local savedLight, savedTerrain, lightStash = {}, {}, nil local EFFECTS = { ParticleEmitter = true, Trail = true, Smoke = true, Fire = true, Sparkles = true, Beam = true, Explosion = true, PointLight = true, SpotLight = true, SurfaceLight = true, } local function recordTouched(part) if touched.index[part] then return end local n = touched.n + 1 touched.n = n touched.items[n] = part touched.index[part] = n oldMat[n] = part.Material oldShadow[n] = part.CastShadow oldRefl[n] = part.Reflectance end local function dropTouched(part) local i = touched.index[part] if not i then return end local n = touched.n local last = touched.items[n] touched.items[i] = last touched.index[last] = i oldMat[i], oldShadow[i], oldRefl[i] = oldMat[n], oldShadow[n], oldRefl[n] touched.items[n] = nil oldMat[n], oldShadow[n], oldRefl[n] = nil, nil, nil touched.index[part] = nil touched.n = n - 1 end --========================================================================= -- mirrored state -- the hot loop reads these, never Library.Options --========================================================================= local antiLagOn = false local collectOn = false local selectModeOn= false local teleportOn = false local perFrame = 120 local applyBudget = 1500 local filterMode = 1 -- 1 all | 2 selected only | 3 all but selected local boxCap = 150 local boxColor = Color3.fromRGB(96, 178, 235) local killParts = {} -- [part] = true, learned damaging parts local killCount = 0 local godOn = false local rootPart = nil -- cached; never FindFirstChild per frame local cursor = 1 --========================================================================= -- registry hooks --========================================================================= local function optimize(part) recordTouched(part) if part.Material ~= MAT_SMOOTH then part.Material = MAT_SMOOTH end if part.CastShadow then part.CastShadow = false end if part.Reflectance ~= 0 then part.Reflectance = 0 end end local activeNames = {} -- [baseName] = compiled pattern local boxes = {} -- [part] = SelectionBox local boxCount = 0 local function addBox(part) if boxes[part] or boxCount >= boxCap then return end local box = Instance.new("SelectionBox") box.Adornee = part box.Color3 = boxColor box.SurfaceColor3 = boxColor box.LineThickness = 0.04 box.SurfaceTransparency = 0.8 box.Parent = part boxes[part] = box boxCount = boxCount + 1 end local function dropBox(part) local box = boxes[part] if not box then return end box:Destroy() boxes[part] = nil boxCount = boxCount - 1 end local function onPartAdded(part) if not setAdd(partSet, part) then return end if antiLagOn then optimize(part) end if part:FindFirstChildOfClass("TouchTransmitter") then setAdd(pickSet, part) end -- a part streaming in joins a group that is already selected if next(activeNames) then local name = part.Name for _, pattern in pairs(activeNames) do if string_match(name, pattern) then setAdd(selSet, part) addBox(part) break end end end end local function onPartRemoved(part) setRemove(partSet, part) setRemove(pickSet, part) setRemove(selSet, part) dropTouched(part) dropBox(part) end --========================================================================= -- chunked job runner -- every bulk op goes through this, so nothing hitches --========================================================================= -- A queue, not a single slot: toggling anti-lag and a bypass in the same -- breath must not silently drop one of them. local jobs = {} local function startJob(items, n, budget, work, done, label) jobs[#jobs + 1] = { items = items, n = n, i = 1, budget = budget, work = work, done = done, label = label } end local function stepJob() local job = jobs[1] local items, work = job.items, job.work local i, n = job.i, job.n local stop = math_min(i + job.budget - 1, n) for k = i, stop do local item = items[k] if item then work(item) end end job.i = stop + 1 if job.i > n then table.remove(jobs, 1) if job.done then job.done() end end end local function snapshot(set) local n = set.n return table_move(set.items, 1, n, 1, table_create(n)), n end --========================================================================= -- anti-lag --========================================================================= local LIGHT_PROPS = { GlobalShadows = false, Brightness = 1, FogEnd = 1e6, EnvironmentDiffuseScale = 0, EnvironmentSpecularScale = 0, } local TERRAIN_PROPS = { WaterWaveSize = 0, WaterWaveSpeed = 0, WaterReflectance = 0, WaterTransparency = 0, } local function killEffects() for _, inst in ipairs(workspace:GetDescendants()) do if EFFECTS[inst.ClassName] and setAdd(fxSet, inst) then oldFx[fxSet.n] = inst.Enabled inst.Enabled = false end end end local function flattenLighting() for prop, value in pairs(LIGHT_PROPS) do pcall(function() savedLight[prop] = Lighting[prop] Lighting[prop] = value end) end for prop, value in pairs(TERRAIN_PROPS) do pcall(function() savedTerrain[prop] = Terrain[prop] Terrain[prop] = value end) end -- stash, never ClearAllChildren: Sky/Atmosphere/post FX must come back lightStash = Instance.new("Folder") for _, child in ipairs(Lighting:GetChildren()) do child.Parent = lightStash end pcall(function() settings().Rendering.QualityLevel = QUALITY_LOW end) end local function restoreLighting() for prop, value in pairs(savedLight) do pcall(function() Lighting[prop] = value end) end for prop, value in pairs(savedTerrain) do pcall(function() Terrain[prop] = value end) end table_clear(savedLight) table_clear(savedTerrain) if lightStash then for _, child in ipairs(lightStash:GetChildren()) do child.Parent = Lighting end lightStash:Destroy() lightStash = nil end for i = 1, fxSet.n do local fx = fxSet.items[i] if fx.Parent then fx.Enabled = oldFx[i] end end setClear(fxSet) table_clear(oldFx) pcall(function() settings().Rendering.QualityLevel = QUALITY_AUTO end) end local statusLabel, promptLabel, clickLabel local partsLabel, pickLabel, selLabel local function setAntiLag(on) if antiLagOn == on then return end antiLagOn = on if on then killEffects() flattenLighting() local items, n = snapshot(partSet) startJob(items, n, applyBudget, function(part) if part.Parent then optimize(part) end end, function() statusLabel:SetText("anti-lag: applied to " .. touched.n .. " parts") end, "anti-lag") else -- walk backwards: restore() swap-removes out from under the cursor local items, n = snapshot(touched) local mats = table_move(oldMat, 1, n, 1, table_create(n)) local shad = table_move(oldShadow, 1, n, 1, table_create(n)) local refl = table_move(oldRefl, 1, n, 1, table_create(n)) local k = 0 startJob(items, n, applyBudget, function(part) k = k + 1 if part.Parent then part.Material = mats[k] part.CastShadow = shad[k] part.Reflectance = refl[k] end end, function() setClear(touched) table_clear(oldMat); table_clear(oldShadow); table_clear(oldRefl) restoreLighting() statusLabel:SetText("anti-lag: off, map restored") end, "restore") end end --========================================================================= -- auto-collect -- -- One pcall guards the whole batch. Inside it there is no closure creation, -- no table churn, and no Options lookup -- just an integer cursor over a -- packed array. The mode branch is hoisted out of the loop. --========================================================================= local function fireBatch(root, budget) local items, n = pickSet.items, pickSet.n if n == 0 then return end if cursor > n then cursor = 1 end local rootCF = root.CFrame local index = selSet.index local mode = filterMode local tp = teleportOn local i = cursor for _ = 1, budget do local part = items[i] i = i + 1 if i > n then i = 1 end if part then local pass if mode == 1 then pass = true elseif mode == 2 then pass = index[part] ~= nil else pass = index[part] == nil end if pass and godOn and killParts[part] then pass = false end if pass then if tp then local home = part.CFrame part.CFrame = rootCF fireTouch(root, part, 0) fireTouch(root, part, 1) part.CFrame = home else fireTouch(root, part, 0) fireTouch(root, part, 1) end end end end cursor = i end local function stepCollect() local budget = perFrame local n = pickSet.n if budget > n then budget = n end pcall(fireBatch, rootPart, budget) end --========================================================================= -- prompts + click detectors -- -- Same discipline as the pickup registry. Everything the fire loop needs is -- resolved once at registration -- the owner BasePart, a pre-lowercased -- search string, and the untouched bypass properties -- so the loop reads -- three aligned arrays and does nothing else. --========================================================================= local promptSet = newSet(512) local promptOwner = table_create(512) -- BasePart the prompt hangs off local promptText = table_create(512) -- lowercased action/object/parent local oldHold = table_create(512) local oldPromptDist= table_create(512) local oldLOS = table_create(512) local clickSet = newSet(512) local clickOwner = table_create(512) local oldClickDist = table_create(512) local promptOn, clickOn = false, false local promptPerFrame, clickPerFrame = 40, 40 local promptMode, clickMode = 1, 1 local promptRangeSq, clickRangeSq = nil, nil local promptNeedle = nil local promptBypass, clickBypass = false, false local clickRight = false local promptCursor, clickCursor = 1, 1 local BIG_RANGE = 1e6 local function ownerPart(inst) local p = inst.Parent for _ = 1, 3 do -- prompt -> attachment -> part -> model if not p then return nil end if p:IsA("BasePart") then return p end p = p.Parent end return nil end local function applyPromptBypass(prompt) if prompt.HoldDuration ~= 0 then prompt.HoldDuration = 0 end if prompt.RequiresLineOfSight then prompt.RequiresLineOfSight = false end if prompt.MaxActivationDistance < BIG_RANGE then prompt.MaxActivationDistance = BIG_RANGE end end local function addPrompt(prompt) if promptSet.index[prompt] then return end local n = promptSet.n + 1 promptSet.n = n promptSet.items[n] = prompt promptSet.index[prompt] = n promptOwner[n] = ownerPart(prompt) local parent = prompt.Parent promptText[n] = string_lower( (prompt.ActionText or "") .. " " .. (prompt.ObjectText or "") .. " " .. (parent and parent.Name or "")) -- originals captured before we ever touch them oldHold[n] = prompt.HoldDuration oldPromptDist[n] = prompt.MaxActivationDistance oldLOS[n] = prompt.RequiresLineOfSight if promptBypass then applyPromptBypass(prompt) end end local function dropPrompt(prompt) local i = promptSet.index[prompt] if not i then return end local n = promptSet.n local last = promptSet.items[n] promptSet.items[i] = last promptSet.index[last] = i promptOwner[i], promptText[i] = promptOwner[n], promptText[n] oldHold[i], oldPromptDist[i], oldLOS[i] = oldHold[n], oldPromptDist[n], oldLOS[n] promptSet.items[n] = nil promptOwner[n], promptText[n] = nil, nil oldHold[n], oldPromptDist[n], oldLOS[n] = nil, nil, nil promptSet.index[prompt] = nil promptSet.n = n - 1 end local function addClick(cd) if clickSet.index[cd] then return end local n = clickSet.n + 1 clickSet.n = n clickSet.items[n] = cd clickSet.index[cd] = n clickOwner[n] = ownerPart(cd) oldClickDist[n] = cd.MaxActivationDistance if clickBypass and cd.MaxActivationDistance < BIG_RANGE then cd.MaxActivationDistance = BIG_RANGE end end local function dropClick(cd) local i = clickSet.index[cd] if not i then return end local n = clickSet.n local last = clickSet.items[n] clickSet.items[i] = last clickSet.index[last] = i clickOwner[i], oldClickDist[i] = clickOwner[n], oldClickDist[n] clickSet.items[n] = nil clickOwner[n], oldClickDist[n] = nil, nil clickSet.index[cd] = nil clickSet.n = n - 1 end -- The two fire loops. Identical shape to fireBatch: integer cursor over a -- packed array, every option hoisted, one pcall around the whole batch. local function promptBatch(budget) local items, owners, texts = promptSet.items, promptOwner, promptText local n = promptSet.n if n == 0 then return end if promptCursor > n then promptCursor = 1 end local index = selSet.index local mode = promptMode local needle = promptNeedle local r2 = promptRangeSq local rx, ry, rz = 0, 0, 0 if r2 then local pos = rootPart.Position rx, ry, rz = pos.X, pos.Y, pos.Z end local i = promptCursor for _ = 1, budget do local slot = i local prompt = items[slot] i = i + 1 if i > n then i = 1 end if prompt and prompt.Enabled then local pass = true if mode == 2 then pass = index[owners[slot]] ~= nil elseif mode == 3 then pass = index[owners[slot]] == nil end if pass and needle then pass = string_find(texts[slot], needle, 1, true) ~= nil end if pass and r2 then local owner = owners[slot] if owner then local pos = owner.Position local dx, dy, dz = pos.X - rx, pos.Y - ry, pos.Z - rz pass = (dx * dx + dy * dy + dz * dz) <= r2 else pass = false end end if pass then fireProx(prompt) end end end promptCursor = i end local function clickBatch(budget) local items, owners = clickSet.items, clickOwner local n = clickSet.n if n == 0 then return end if clickCursor > n then clickCursor = 1 end local index = selSet.index local mode = clickMode local r2 = clickRangeSq local ev = clickRight and "RightMouseClick" or nil local rx, ry, rz = 0, 0, 0 if r2 then local pos = rootPart.Position rx, ry, rz = pos.X, pos.Y, pos.Z end local i = clickCursor for _ = 1, budget do local slot = i local cd = items[slot] i = i + 1 if i > n then i = 1 end if cd then local pass = true if mode == 2 then pass = index[owners[slot]] ~= nil elseif mode == 3 then pass = index[owners[slot]] == nil end if pass and r2 then local owner = owners[slot] if owner then local pos = owner.Position local dx, dy, dz = pos.X - rx, pos.Y - ry, pos.Z - rz pass = (dx * dx + dy * dy + dz * dz) <= r2 else pass = false end end if pass then if ev then fireClick(cd, 0, ev) else fireClick(cd, 0) end end end end clickCursor = i end local function stepPrompts() local budget = promptPerFrame local n = promptSet.n if budget > n then budget = n end pcall(promptBatch, budget) end local function stepClicks() local budget = clickPerFrame local n = clickSet.n if budget > n then budget = n end pcall(clickBatch, budget) end local function setPromptBypass(on) if promptBypass == on then return end promptBypass = on local items, n = snapshot(promptSet) if on then startJob(items, n, 500, function(prompt) if prompt.Parent then applyPromptBypass(prompt) end end, nil, "prompt bypass") else startJob(items, n, 500, function(prompt) local i = promptSet.index[prompt] -- slot may have shuffled if i and prompt.Parent then prompt.HoldDuration = oldHold[i] prompt.MaxActivationDistance = oldPromptDist[i] prompt.RequiresLineOfSight = oldLOS[i] end end, nil, "prompt restore") end end local function setClickBypass(on) if clickBypass == on then return end clickBypass = on local items, n = snapshot(clickSet) if on then startJob(items, n, 500, function(cd) if cd.Parent and cd.MaxActivationDistance < BIG_RANGE then cd.MaxActivationDistance = BIG_RANGE end end, nil, "click bypass") else startJob(items, n, 500, function(cd) local i = clickSet.index[cd] if i and cd.Parent then cd.MaxActivationDistance = oldClickDist[i] end end, nil, "click restore") end end --========================================================================= -- remote finder + fuzzer -- -- State lives in three tables rather than forty upvalues -- a Lua chunk gets -- 200 locals and this file is already deep into them. -- -- The point of this tab is not the spamming, it is working out WHICH payload -- did something. So every fire is logged with the exact argument list, and -- leaderstats / Backpack are watched: when one of them moves, the last three -- payloads are printed as candidates (an effect lands a frame or two after -- the packet, so the immediate last one is not always the culprit). --========================================================================= local Remotes = { set = newSet(512), path = table_create(512), -- unique display path, aligned to the set cls = table_create(512), -- ClassName, aligned byPath = {}, -- [display path] = remote truncated = 0, excludes = {}, -- user exclusion substrings, lowercased blocked = 0, excluded = 0, -- silently dropped / user-dropped counts } local Fuzz = { running = false, dry = false, interval = 0.12, clock = 0, queue = {}, qn = 0, rIdx = 1, pIdx = 1, payloads = {}, pn = 0, log = {}, logN = 0, recent = {}, -- last 3 payload descriptions hits = {}, hitN = 0, watched = {}, -- instances already wired to the hit watch fired = 0, gen = 0, -- invalidates late InvokeServer returns -- everything off at startup: arming the fuzzer should be a deliberate -- act, not the default state of a freshly loaded hub cats = { nums = false, strings = false, bools = false, insts = false, tables = false, vectors = false, pairs2 = false, triples = false, vocab = false, players = false }, vocab = {}, vocabMax = 40, playerMax = 6, loop = false, laps = 0, jitter = 0, -- fraction of the interval added at random shuffle = false, skipErrors = true, -- drop a remote that only ever errors errCount = {}, -- [path] = consecutive errors startedAt = 0, } local FuzzUI = {} -- filled in when the tab is built local REMOTE_CLASSES = { RemoteEvent = true, RemoteFunction = true, UnreliableRemoteEvent = true, } local BINDABLE_CLASSES = { BindableEvent = true, BindableFunction = true } local SCAN_SERVICES = { "ReplicatedStorage", "ReplicatedFirst", "Workspace", "Lighting", "StarterGui", "StarterPack", "StarterPlayer", "SoundService", "Chat", "TextChatService", "MaterialService", } --------------------------------------------------------------- discovery -- Never-touch list. These are admin / anticheat client remotes: firing them is -- how you get logged, kicked or banned, and they are never what you are -- looking for. Filtered at registration so they never appear anywhere -- not -- in the dropdown, not in "run against all", not in the counts. local NEVER = { "hdadminhdclient", "hdadmin", "adonis", "kohl", "basicadmin", "antiexploit", "anticheat", "anti_cheat", "reportexploit", "banhammer", } local function isBlacklisted(lowerPath) for i = 1, #NEVER do if string_find(lowerPath, NEVER[i], 1, true) then return true end end return false end local function isExcluded(lowerPath) local list = Remotes.excludes for i = 1, #list do if string_find(lowerPath, list[i], 1, true) then return true end end return false end local function ancestryText(inst) local parts = { inst.Name } local node = inst.Parent for _ = 1, 8 do if not node then break end parts[#parts + 1] = node.Name node = node.Parent end local ok, full = pcall(function() return inst:GetFullName() end) if ok and full then parts[#parts + 1] = full end return string_lower(table.concat(parts, "/")) end local function addRemote(inst) if Remotes.set.index[inst] then return end local path = inst:GetFullName() local lower = ancestryText(inst) if isBlacklisted(lower) then Remotes.blocked = Remotes.blocked + 1 return end if isExcluded(lower) then Remotes.excluded = Remotes.excluded + 1 return end if Remotes.byPath[path] then -- same name, same parent local k = 2 while Remotes.byPath[path .. " #" .. k] do k = k + 1 end path = path .. " #" .. k end local n = Remotes.set.n + 1 Remotes.set.n = n Remotes.set.items[n] = inst Remotes.set.index[inst] = n Remotes.path[n] = path Remotes.cls[n] = inst.ClassName Remotes.byPath[path] = inst end local function scanRemotes(includeBindables, done) setClear(Remotes.set) table_clear(Remotes.path) table_clear(Remotes.cls) table_clear(Remotes.byPath) Remotes.truncated = 0 local roots = {} for _, name in ipairs(SCAN_SERVICES) do local ok, svc = pcall(game.GetService, game, name) if ok and svc then roots[#roots + 1] = svc end end if LocalPlayer then roots[#roots + 1] = LocalPlayer end local all = {} local n = 0 for _, root in ipairs(roots) do local ok, kids = pcall(root.GetDescendants, root) if ok then for _, inst in ipairs(kids) do n = n + 1 all[n] = inst end end end startJob(all, n, 3000, function(inst) local cls = inst.ClassName if REMOTE_CLASSES[cls] or (includeBindables and BINDABLE_CLASSES[cls]) then addRemote(inst) end end, done, "scan remotes") end --------------------------------------------------------------- payloads -- A dynamic value is a function resolved at fire time, so a respawned -- character or a per-remote parent is never a stale reference. -- Dynamic values, resolved at fire time so a respawn or a leaving player -- never leaves a stale reference. One table rather than seven upvalues -- -- this chunk is at Lua's 200-local ceiling. local DYN = { label = setmetatable({}, { __mode = "k" }) } function DYN.tag(label, fn) DYN.label[fn] = label return fn end DYN.player = function() return LocalPlayer end DYN.char = function() return LocalPlayer.Character end DYN.root = function() return rootPart end DYN.workspace = function() return workspace end DYN.parent = function(remote) return remote.Parent end local function describe(v) local t = type(v) if t == "string" then return '"' .. v .. '"' end if t == "table" then local parts = {} for i = 1, #v do parts[#parts + 1] = tostring(v[i]) end for k, val in pairs(v) do if type(k) ~= "number" then parts[#parts + 1] = tostring(k) .. "=" .. tostring(val) end end return "{" .. table.concat(parts, ",") .. "}" end if t == "function" then if v == DYN.player then return "LocalPlayer" end if v == DYN.char then return "Character" end if v == DYN.root then return "HumanoidRootPart" end if v == DYN.workspace then return "workspace" end if v == DYN.parent then return "remote.Parent" end return DYN.label[v] or "" end return tostring(v) end local function payload(...) local spec = table.pack(...) local labels = {} local dyn = false for i = 1, spec.n do labels[i] = describe(spec[i]) if type(spec[i]) == "function" then dyn = true end end spec.dyn = dyn spec.label = "(" .. table.concat(labels, ", ") .. ")" return spec end -- The game already told us its nouns. Tool names, prompt action text, model -- and folder names in ReplicatedStorage, shop button labels -- those are the -- strings a remote actually expects. BuyItem("hi") was never going to work; -- BuyItem("IronSword") might, and the word was sitting in the Backpack. function Fuzz.harvest() local seen, out = {}, {} local function take(word) if type(word) ~= "string" then return end word = word:gsub("^%s+", ""):gsub("%s+$", "") if #word < 2 or #word > 40 then return end if tonumber(word) then return end -- plain numbers are covered if seen[word] then return end if #out >= Fuzz.vocabMax then return end seen[word] = true out[#out + 1] = word end -- things you are holding or could hold local pack = LocalPlayer:FindFirstChild("Backpack") if pack then for _, tool in ipairs(pack:GetChildren()) do take(tool.Name) end end local char = LocalPlayer.Character if char then for _, tool in ipairs(char:GetChildren()) do if tool:IsA("Tool") then take(tool.Name) end end end local okStarter, starter = pcall(game.GetService, game, "StarterPack") if okStarter and starter then for _, tool in ipairs(starter:GetChildren()) do take(tool.Name) end end -- what the world invites you to do for i = 1, promptSet.n do local prompt = promptSet.items[i] if prompt.Parent then take(prompt.ActionText) take(prompt.ObjectText) if prompt.Parent then take(prompt.Parent.Name) end end end -- the game's own data folders, which is where item names usually live local okRS, rs = pcall(game.GetService, game, "ReplicatedStorage") if okRS and rs then for _, inst in ipairs(rs:GetChildren()) do take(inst.Name) if #out < Fuzz.vocabMax then for _, kid in ipairs(inst:GetChildren()) do take(kid.Name) end end end end -- and whatever the shop UI is calling things local gui = LocalPlayer:FindFirstChildOfClass("PlayerGui") if gui then for _, inst in ipairs(gui:GetDescendants()) do if inst:IsA("TextButton") or inst:IsA("TextLabel") then take(inst.Text) end if #out >= Fuzz.vocabMax then break end end end Fuzz.vocab = out if FuzzUI.vocab then FuzzUI.vocab:SetText(format("vocabulary: %d words%s", #out, #out > 0 and (" e.g. " .. table.concat(out, ", ", 1, math_min(4, #out))) or "")) end return out end local function buildPayloads() local out = {} local cats = Fuzz.cats local function push(...) out[#out + 1] = payload(...) end push() -- no arguments at all if cats.nums then for i = 1, 20 do push(i) end push(0); push(-1); push(0.5); push(100); push(1000); push(999999) push(math.huge) end if cats.strings then push("hi"); push(""); push("1"); push("true") push("Coin"); push("Buy"); push("all") end if cats.bools then push(true); push(false) end if cats.insts then push(DYN.player); push(DYN.char); push(DYN.root) push(DYN.workspace); push(DYN.parent) end if cats.tables then push({ 1, 2, 3 }); push({}); push({ 1 }) push({ Amount = 1 }); push({ "hi" }) end if cats.vectors then push(Vector3.new(0, 0, 0)); push(Vector3.new(1, 1, 1)); push(CFrame.new()) end if cats.vocab then local words = Fuzz.harvest() for i = 1, #words do push(words[i]) end end -- Other players, three ways, because a remote that takes a target might -- want the instance, the name, or the id -- and there is no telling which. if cats.players then local others = {} for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then others[#others + 1] = plr end end for i = 1, math_min(#others, Fuzz.playerMax) do local name = others[i].Name push(DYN.tag("Player(" .. name .. ")", function() return Players:FindFirstChild(name) end)) push(name) push(others[i].UserId) push(DYN.tag("Char(" .. name .. ")", function() local plr = Players:FindFirstChild(name) return plr and plr.Character end)) end end if cats.pairs2 then local heads = { 1, "hi", true, DYN.player, 20, 0, { 1, 2, 3 }, "all" } local tails = { 1, "hi", true, DYN.player, 2, 0, "1", 20 } for _, a in ipairs(heads) do for _, b in ipairs(tails) do push(a, b) end end end if cats.triples then push(1, 2, 3) push(1, "hi", true) push("hi", 1, true) push(DYN.player, 1, true) push(DYN.player, "hi", 1) push(1, DYN.player, 1) push("Buy", 1, 1) push(1, 1, 1) push(DYN.char, 1, "hi") push({ 1, 2, 3 }, 1, "hi") push(true, 1, "hi") push(0, 0, 0) end Fuzz.payloads = out Fuzz.pn = #out if FuzzUI.count then FuzzUI.count:SetText(format("payloads: %d", Fuzz.pn)) end end --------------------------------------------------------------- logging local function logLine(text) local n = Fuzz.logN + 1 Fuzz.logN = n Fuzz.log[n] = text if n > 400 then -- ring, keep it bounded table_move(Fuzz.log, n - 200, n, 1, Fuzz.log) for i = 202, n do Fuzz.log[i] = nil end Fuzz.logN = 201 end local labels = FuzzUI.lines if not labels then return end local total = Fuzz.logN for i = #labels, 1, -1 do local entry = Fuzz.log[total - (#labels - i)] labels[i]:SetText(entry or "") end end local function copyOut(text, what) if setclipboard then pcall(setclipboard, text) Library:Notify({ Title = "optimizer", Text = what .. " copied", Type = "success" }) else print(text) Library:Notify({ Title = "optimizer", Text = "no setclipboard -- dumped to console", Type = "warn" }) end end --------------------------------------------------------------- hit watch local function noteHit(what, detail) local candidates = table.concat(Fuzz.recent, " | ") local line = format("HIT %s %s\n candidates: %s", what, detail, candidates) local n = Fuzz.hitN + 1 Fuzz.hitN = n Fuzz.hits[n] = line logLine("*** " .. what .. " " .. detail) if FuzzUI.hit then FuzzUI.hit:SetText(format("hits: %d -- last: %s %s", n, what, detail)) end Library:Notify({ Title = "remote hit", Text = what .. " " .. detail, Type = "success" }) end -- Return values are useless here -- most remotes are RemoteEvents and hand -- back nothing. So the watcher does not read replies: it watches client-side -- state that the SERVER moves. Any *Value under the player (leaderstats is -- just the common case), the Backpack, and the Humanoid. When one of those -- shifts mid-run, the last three payloads are printed as candidates. -- -- It is a heuristic, not proof: passive income or another player's action -- will also trip it. That is what the candidate list and the interval are -- for -- widen the interval until each fire is individually attributable. local VALUE_CLASSES = { IntValue = true, NumberValue = true, StringValue = true, BoolValue = true, ObjectValue = true, IntConstrainedValue = true, } local function watchValue(obj) if Fuzz.watched[obj] then return end Fuzz.watched[obj] = true local last = obj.Value Library:Connect(obj.Changed, function(value) if Fuzz.running then noteHit(obj.Name, tostring(last) .. " -> " .. tostring(value)) end last = value end) end local function armHitWatch() for _, inst in ipairs(LocalPlayer:GetDescendants()) do if VALUE_CLASSES[inst.ClassName] then watchValue(inst) end end if not Fuzz.watched[LocalPlayer] then Fuzz.watched[LocalPlayer] = true Library:Connect(LocalPlayer.DescendantAdded, function(inst) if VALUE_CLASSES[inst.ClassName] then watchValue(inst) elseif inst.ClassName == "Tool" and Fuzz.running then noteHit("tool +", inst.Name) end end) end local char = LocalPlayer.Character local humanoid = char and char:FindFirstChildOfClass("Humanoid") if humanoid and not Fuzz.watched[humanoid] then Fuzz.watched[humanoid] = true local hp = humanoid.Health Library:Connect(humanoid.HealthChanged, function(value) if Fuzz.running then noteHit("Health", tostring(hp) .. " -> " .. tostring(value)) end hp = value end) for _, prop in ipairs({ "WalkSpeed", "JumpPower", "MaxHealth" }) do local ok, signal = pcall(humanoid.GetPropertyChangedSignal, humanoid, prop) if ok and signal then Library:Connect(signal, function() if Fuzz.running then noteHit(prop, "-> " .. tostring(humanoid[prop])) end end) end end end end --------------------------------------------------------------- the fuzzer local function resolveArgs(spec, remote) if not spec.dyn then return spec end local out = { n = spec.n } for i = 1, spec.n do local v = spec[i] if type(v) == "function" then v = v(remote) end out[i] = v end return out end local function fireRemote(remote, cls, args, path, label) if cls == "RemoteEvent" or cls == "UnreliableRemoteEvent" then local ok, err = pcall(remote.FireServer, remote, table.unpack(args, 1, args.n)) logLine(format("%s:FireServer%s %s", path, label, ok and "ok" or ("ERR " .. tostring(err)))) elseif cls == "RemoteFunction" then -- InvokeServer yields and can hang forever; never block the loop on it local gen = Fuzz.gen task.spawn(function() local ok, res = pcall(remote.InvokeServer, remote, table.unpack(args, 1, args.n)) if gen ~= Fuzz.gen then return end -- a late reply from a stopped run -- the reply is logged, but it is NOT a hit: a hit means observed -- state movement, and counting every non-nil return floods the list logLine(format("%s:InvokeServer%s %s", path, label, ok and ("-> " .. tostring(res)) or ("ERR " .. tostring(res)))) end) elseif cls == "BindableEvent" then local ok, err = pcall(remote.Fire, remote, table.unpack(args, 1, args.n)) logLine(format("%s:Fire%s %s", path, label, ok and "ok" or ("ERR " .. tostring(err)))) elseif cls == "BindableFunction" then local ok, res = pcall(remote.Invoke, remote, table.unpack(args, 1, args.n)) logLine(format("%s:Invoke%s %s", path, label, ok and ("-> " .. tostring(res)) or ("ERR " .. tostring(res)))) end end local function stopFuzz(reason) if not Fuzz.running then return end -- a finished lap restarts instead of stopping, when looping is on if reason == "finished" and Fuzz.loop and Fuzz.qn > 0 then Fuzz.laps = Fuzz.laps + 1 Fuzz.rIdx, Fuzz.pIdx = 1, 1 table_clear(Fuzz.errCount) logLine(format("-- lap %d done (%d fired), looping", Fuzz.laps, Fuzz.fired)) return end Fuzz.running = false Fuzz.gen = Fuzz.gen + 1 logLine("-- stopped: " .. reason .. " (" .. Fuzz.fired .. " fired)") if FuzzUI.status then FuzzUI.status:SetText(format("stopped -- %d fired, %d hits, %d laps", Fuzz.fired, Fuzz.hitN, Fuzz.laps)) end if Library.Options.fuzzrun then Library.Options.fuzzrun:SetValue(false, true) end end local function startFuzz(list, n) if n == 0 or Fuzz.pn == 0 then Library:Notify({ Title = "optimizer", Text = "pick at least one remote and one payload category", Type = "warn" }) return false end if Fuzz.shuffle then -- deterministic shuffle, no Math.random needed: walk the list with a -- stride that never revisits until it has covered everything local stride = n // 2 if stride < 1 then stride = 1 end while n % stride == 0 and stride > 1 do stride = stride - 1 end local out, at = {}, 1 for i = 1, n do out[i] = list[at] at = at + stride while at > n do at = at - n end end list = out end Fuzz.queue, Fuzz.qn = list, n Fuzz.rIdx, Fuzz.pIdx = 1, 1 Fuzz.fired = 0 Fuzz.laps = 0 Fuzz.clock = 0 Fuzz.startedAt = os.clock() table_clear(Fuzz.errCount) Fuzz.gen = Fuzz.gen + 1 Fuzz.running = true logLine(format("-- run: %d remotes x %d payloads = %d fires%s", n, Fuzz.pn, n * Fuzz.pn, Fuzz.dry and " (DRY RUN)" or "")) return true end local function stepFuzz(dt) Fuzz.clock = Fuzz.clock + dt if Fuzz.clock < Fuzz.interval then return end Fuzz.clock = 0 local path = Fuzz.queue[Fuzz.rIdx] local remote = path and Remotes.byPath[path] if not remote or not remote.Parent then Fuzz.rIdx = Fuzz.rIdx + 1 Fuzz.pIdx = 1 if Fuzz.rIdx > Fuzz.qn then stopFuzz("finished") end return end local spec = Fuzz.payloads[Fuzz.pIdx] local slot = Remotes.set.index[remote] local cls = slot and Remotes.cls[slot] or remote.ClassName table.insert(Fuzz.recent, 1, path .. spec.label) Fuzz.recent[4] = nil if Fuzz.dry then logLine(format("dry %s%s", path, spec.label)) else fireRemote(remote, cls, resolveArgs(spec, remote), path, spec.label) end Fuzz.fired = Fuzz.fired + 1 Fuzz.pIdx = Fuzz.pIdx + 1 if Fuzz.pIdx > Fuzz.pn then Fuzz.pIdx = 1 Fuzz.rIdx = Fuzz.rIdx + 1 if Fuzz.rIdx > Fuzz.qn then stopFuzz("finished") return end end if FuzzUI.status then FuzzUI.status:SetText(format("remote %d/%d payload %d/%d fired %d", Fuzz.rIdx, Fuzz.qn, Fuzz.pIdx, Fuzz.pn, Fuzz.fired)) end end --========================================================================= -- network ownership -- ring / fling / platform -- -- Why the earlier attempts did nothing: writing CFrame from the client is a -- suggestion the server discards, and AlignPosition/BodyPosition only help -- once the server already considers the part yours. Ownership is the whole -- problem, and it needs three things together: -- -- 1. LocalPlayer.ReplicationFocus = workspace -- stops the server centring replication on your character. -- 2. sethiddenproperty(LocalPlayer, "SimulationRadius", math.huge) EVERY -- frame -- the engine resets it constantly, so a throttle is not enough. -- 3. Continuously writing Velocity to the part. That write is what makes -- the server hand ownership over and keep it there. -- -- Once those hold, physics results replicate, so every mode below steers with -- Velocity and never touches CFrame. Zero density is what makes it strong: -- a massless part goes exactly where the velocity says instead of fighting -- gravity and its own inertia. --========================================================================= local Net = { running = false, mode = "Ring", targetName = "Me", parts = {}, index = {}, n = 0, home = {}, -- [part] = { cf, canCollide, props } source = "All unanchored", count = 1000, sizeCap = 0, -- 0 = no cap; the old hard 60 hid parts hold = true, -- keep ownership alive even when idle regather = 0, probePos = {}, probeMoved = 0, probeSample = 0, diagFocus = false, diagRadius = false, diagFn = false, range = 250, angle = 0, radius = 50, height = 100, speed = 1, pull = 1000, flingPower = 9000, platformDrop = 4, platformPart = nil, focusOn = false, status = "idle", } local ZERO_PROPS -- PhysicalProperties.new(0,0,0,0,0), built lazily local ZERO3 = Vector3.new(0, 0, 0) local cos, sin, sqrt, atan2, abs = math.cos, math.sin, math.sqrt, math.atan2, math.abs local function stillThere(part) return part and part.Parent ~= nil end -- Ownership, measured properly. -- -- ReceiveAge is the time since the server last sent us this part's physics. -- If the SERVER owns it, it refreshes constantly and the age sits at ~0 -- -- and everything we write is overridden, which is why an unowned part drifts -- a little (our local prediction) and then snaps back the instant we stop -- (the server's position was always the real one). -- If WE own it, the server stops sending updates and the age climbs. -- -- So age > 0 is the ownership test, and it is the only one a client can do. local OWNED_AGE = 0.05 local function isOwned(part) local ok, age = pcall(function() return part.ReceiveAge end) if not ok or age == nil then return true end -- no such property: assume yes return age > OWNED_AGE end local function targetPos() if Net.targetName == "Me" then return rootPart and rootPart.Position or nil end local plr = Players:FindFirstChild(Net.targetName) local char = plr and plr.Character local root = char and char:FindFirstChild("HumanoidRootPart") return root and root.Position or nil end -- Ownership reach. Cheap enough to run every frame, and it has to. -- Every one of these used to be a bare pcall with the result thrown away, so -- when the executor lacked sethiddenproperty -- or the client no longer has a -- SimulationRadius property at all -- the script silently did nothing and -- looked "client-sided". Now each primitive records whether it worked and the -- tab shows it. -- What did this executor actually give us? Every ownership primitive here is -- optional, and a free executor missing one of them fails silently -- which is -- indistinguishable from "the game refuses ownership" unless you look. local function ownershipCapabilities() local caps = {} caps[#caps + 1] = "sethiddenproperty " .. (type(sethiddenproperty) == "function" and "yes" or "NO") caps[#caps + 1] = "setsimulationradius " .. (type(setsimulationradius) == "function" and "yes" or "NO") local okAge = pcall(function() return Instance.new("Part").ReceiveAge end) caps[#caps + 1] = "ReceiveAge " .. (okAge and "yes" or "NO") local okFocus = pcall(function() local was = LocalPlayer.ReplicationFocus LocalPlayer.ReplicationFocus = was end) caps[#caps + 1] = "ReplicationFocus " .. (okFocus and "yes" or "NO") local okRadius = false if type(sethiddenproperty) == "function" then okRadius = pcall(function() sethiddenproperty(LocalPlayer, "SimulationRadius", math.huge) end) end caps[#caps + 1] = "SimulationRadius write " .. (okRadius and "yes" or "NO") return table.concat(caps, " | ") end local function holdOwnership() if not Net.focusOn then Net.focusOn = true Net.diagFocus = pcall(function() LocalPlayer.ReplicationFocus = workspace end) end if sethiddenproperty then Net.diagFn = true Net.diagRadius = pcall(function() sethiddenproperty(LocalPlayer, "SimulationRadius", math.huge) end) elseif setsimulationradius then Net.diagFn = true Net.diagRadius = pcall(function() setsimulationradius(math.huge) end) else Net.diagFn = false Net.diagRadius = false end -- some clients still accept the plain property if not Net.diagRadius then Net.diagRadius = pcall(function() LocalPlayer.MaximumSimulationRadius = math.huge LocalPlayer.SimulationRadius = math.huge end) end end -- Never touch a character: walk the ancestry rather than matching limb names, -- so R15 rigs, accessories and tool handles are all covered. local function isCharacterPart(part) local node = part for _ = 1, 4 do node = node.Parent if not node then return false end if node:FindFirstChildOfClass("Humanoid") then return true end if Players:GetPlayerFromCharacter(node) then return true end end return false end local function usable(part) if part.Anchored then return false end if not part.Parent then return false end local size = part.Size local cap = Net.sizeCap if cap > 0 and (size.X > cap or size.Y > cap or size.Z > cap) then return false end return not isCharacterPart(part) end -- Zero density is the point: a massless part is moved exactly by the velocity -- we write, instead of the server's gravity and inertia arguing with it. -- V4 zeroes density and drops collision on everything, which is exactly right -- for a ring: a weightless part goes where the velocity says and never snags. -- It is wrong for Fling, though -- a massless part carries no momentum, so it -- would pass through harmlessly. Fling and Platform keep their real weight. local function retain(part, collide, massless) if Net.index[part] then return end if not ZERO_PROPS then ZERO_PROPS = PhysicalProperties.new(0, 0, 0, 0, 0) end Net.home[part] = { canCollide = part.CanCollide, props = part.CustomPhysicalProperties or false, } pcall(function() if massless then part.CustomPhysicalProperties = ZERO_PROPS end part.CanCollide = collide and true or false end) local n = Net.n + 1 Net.n = n Net.parts[n] = part Net.index[part] = n end -- Release: give each part its collision and weight back and stop pushing it. -- Deliberately does NOT put parts back where they were -- that would be a -- CFrame write, which is the one thing that does not replicate, so it would -- only snap them locally and desync you from everyone else. local function restoreAll() for part, home in pairs(Net.home) do if stillThere(part) then pcall(function() part.CustomPhysicalProperties = home.props or nil part.CanCollide = home.canCollide part[VEL_PROP] = ZERO3 part[ANG_PROP] = ZERO3 end) end end table_clear(Net.home) table_clear(Net.parts) table_clear(Net.index) Net.n = 0 Net.platformPart = nil end -- Fling has to make contact, so those parts keep collision. Ring parts do not, -- or they snag on the map on the way round. local function wantsCollision() return Net.mode ~= "Ring" end local function wantsMassless() return Net.mode == "Ring" end local function gather() restoreAll() local collide, massless = wantsCollision(), wantsMassless() local origin = rootPart and rootPart.Position if Net.source == "Selection" then for i = 1, selSet.n do local part = selSet.items[i] if stillThere(part) and usable(part) then retain(part, collide, massless) end end elseif Net.source == "Nearest" and origin then local cand, cn = {}, 0 local limit = Net.range * Net.range for i = 1, partSet.n do local part = partSet.items[i] if usable(part) then local p = part.Position local dx, dy, dz = p.X - origin.X, p.Y - origin.Y, p.Z - origin.Z local d2 = dx * dx + dy * dy + dz * dz if d2 <= limit then cn = cn + 1 cand[cn] = { part = part, d = d2 } end end end table.sort(cand, function(a, b) return a.d < b.d end) for i = 1, math_min(cn, Net.count) do retain(cand[i].part, collide, massless) end else for i = 1, partSet.n do local part = partSet.items[i] if usable(part) then retain(part, collide, massless) if Net.n >= Net.count then break end end end end Net.status = format("holding %d parts", Net.n) return Net.n end --------------------------------------------------------------------- modes -- Steer by velocity toward the orbit point. Proportional, not a constant dash: -- a fixed-magnitude push overshoots the goal and the ring shakes itself apart. -- All three modes are the V4 loop: work out a target position for the part, -- then set Velocity to the UNIT direction times a constant strength. Nothing -- else. No CFrame, no movers, no ownership gate. -- -- The gate was the real killer: you claim ownership BY writing velocity, so -- refusing to write until you already own the part is a deadlock that can -- never resolve. ReceiveAge is now a readout only, never a condition. -- -- The angle comes from the part's OWN current position and is nudged by a -- small increment each frame, and the radius is capped at the part's current -- distance. That is what makes it smooth: a part orbits where it already is -- and eases inward, instead of being ordered to an absolute slot on the far -- side of the circle every frame. local function driveTo(part, tx, ty, tz, strength) local pos = part.Position local dx, dy, dz = tx - pos.X, ty - pos.Y, tz - pos.Z local len = sqrt(dx * dx + dy * dy + dz * dz) if len < 0.001 then return end part[VEL_PROP] = Vector3.new(dx / len * strength, dy / len * strength, dz / len * strength) end local function stepRing(_, centre) local step = math.rad(Net.speed) local radius, height, strength = Net.radius, Net.height, Net.pull local cx, cy, cz = centre.X, centre.Y, centre.Z for i = 1, Net.n do local part = Net.parts[i] if stillThere(part) and not part.Anchored then local pos = part.Position local ddx, ddz = pos.X - cx, pos.Z - cz local distance = sqrt(ddx * ddx + ddz * ddz) local newAngle = atan2(ddz, ddx) + step local r = math_min(radius, distance) local ty = cy + height * abs(sin((pos.Y - cy) / height)) driveTo(part, cx + cos(newAngle) * r, ty, cz + sin(newAngle) * r, strength) end end end local function stepFling(_, centre) local strength = Net.flingPower local cx, cy, cz = centre.X, centre.Y, centre.Z for i = 1, Net.n do local part = Net.parts[i] if stillThere(part) and not part.Anchored then driveTo(part, cx, cy, cz, strength) end end end local function platformScore(part) local size = part.Size if size.X < 4 or size.Z < 4 then return -1 end if size.Y > 12 then return -1 end return size.X * size.Z end local function stepPlatform(_, centre) local part = Net.platformPart if not stillThere(part) then local best, bestScore = nil, 0 for i = 1, Net.n do local candidate = Net.parts[i] if stillThere(candidate) then local score = platformScore(candidate) if score > bestScore then best, bestScore = candidate, score end end end if not best then Net.status = "platform: nothing wide enough to stand on" return end Net.platformPart = best part = best -- the one departure from V4: a massless, non-colliding part cannot -- hold you up, so the platform gets its collision and weight back pcall(function() part.CanCollide = true local home = Net.home[part] part.CustomPhysicalProperties = home and home.props or nil end) end driveTo(part, centre.X, centre.Y - Net.platformDrop, centre.Z, Net.pull) end -- Readout only. Counts how many of the parts we are pushing the server has -- stopped updating, i.e. handed to us. Never used as a condition. local function probeOwnership() local sample = math_min(Net.n, 24) local owned = 0 for i = 1, sample do local part = Net.parts[i] if stillThere(part) and isOwned(part) then owned = owned + 1 end end Net.probeMoved, Net.probeSample = owned, sample end local function stepNet(dt) holdOwnership() -- every frame, not throttled local centre = targetPos() if not centre then Net.status = "target has no character right now" return end -- re-gather periodically so parts that streamed in after the first pass -- are picked up; the old build gathered exactly once and never again Net.regather = Net.regather + dt if Net.n == 0 or Net.regather >= 3 then Net.regather = 0 if gather() == 0 then Net.status = "no usable parts in range" return end end local mode = Net.mode if mode == "Ring" then pcall(stepRing, dt, centre) elseif mode == "Fling" then pcall(stepFling, dt, centre) else pcall(stepPlatform, dt, centre) end probeOwnership() Net.status = format("%s | %d held | OWNED %d/%d | radius:%s focus:%s", Net.mode, Net.n, Net.probeMoved, Net.probeSample, Net.diagRadius and "ok" or "FAIL", Net.diagFocus and "ok" or "FAIL") end local function stopNet(reason) if not Net.running then return end Net.running = false Net.status = "stopped: " .. reason end --========================================================================= -- misc -- the universal switches -- -- Everything here leans only on engine primitives that exist in every place, -- so none of it needs to know anything about the game it is running in. --========================================================================= local Misc = { walkspeed = 16, jump = 50, applyMove = false, infJump = false, noclip = false, antiVoid = false, freeze = false, antiRagdoll = false, autoRespawn = false, autoEquip = false, antiFog = false, fullBright = false, antiAfk = false, maxZoom = false, lastSafe = nil, safeClock = 0, reapplyClock = 0, freezeCF = nil, keepPos = false, resetPos = nil, resetting = false, lastPos = nil, hiddenGuis = {}, coreWas = true, humanoid = nil, charParts = {}, touchLog = {}, -- [part] = os.clock() of the last touch savedLight = {}, conns = {}, } do -- Names that are killbricks in practically every game. Only a first guess -- -- the real list is learned below, by getting hurt once. local KILL_WORDS = { "kill", "lava", "damage", "spike", "trap", "acid", "death", "die", "hurt", "poison", "fire", "hazard", "laser", "saw", "void", } local function looksLethal(name) name = string_lower(name) for i = 1, #KILL_WORDS do if string_find(name, KILL_WORDS[i], 1, true) then return true end end return false end local function markKillbrick(part, why) if killParts[part] then return end killParts[part] = true killCount = killCount + 1 if Misc.killLabel then Misc.killLabel:SetText(format("killbricks avoided: %d (last: %s, %s)", killCount, part.Name, why)) end end --------------------------------------------------------------------- god -- God mode is layered, because no single method works everywhere: -- -- 1. the death state is disabled, so a local death never resolves -- 2. CanTouch is cleared on your own limbs -- a killbrick's Touched never -- fires server-side if the part that hit it cannot touch -- 3. health is restored on any drop, which is authoritative in the games -- that trust the client with it and harmless in the ones that do not -- 4. anything that damages you is LEARNED and added to the killbrick list, -- which auto-collect then refuses to fire touch interests on -- -- (4) is the one that matters for the collector: the whole point is not -- teleporting yourself onto a lava brick to grab the coin sitting on it. function Misc.applyGod(on) godOn = on local char = LocalPlayer.Character if not char then return end for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then pcall(function() part.CanTouch = not on end) end end local humanoid = Misc.humanoid if humanoid then pcall(function() humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, not on) if on then humanoid.BreakJointsOnDeath = false end end) end end local function onDamaged() if not godOn or Misc.resetting then return end local humanoid = Misc.humanoid if not humanoid then return end -- blame whatever touched us in the last half second local now = os.clock() for part, when in pairs(Misc.touchLog) do if now - when < 0.5 and part.Parent then markKillbrick(part, "damaged us") end if now - when > 2 then Misc.touchLog[part] = nil end end pcall(function() humanoid.Health = humanoid.MaxHealth end) end --------------------------------------------------------------- character function Misc.bind(char) table_clear(Misc.charParts) Misc.touchLog = {} Misc.humanoid = char:FindFirstChildOfClass("Humanoid") or char:WaitForChild("Humanoid", 5) local n = 0 for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then n = n + 1 Misc.charParts[n] = part Library:Connect(part.Touched, function(hit) Misc.touchLog[hit] = os.clock() if godOn and looksLethal(hit.Name) then markKillbrick(hit, "name") end end) end end local humanoid = Misc.humanoid if humanoid then Library:Connect(humanoid.HealthChanged, function(hp) if hp < humanoid.MaxHealth then onDamaged() end end) -- any death, not just our own reset button Library:Connect(humanoid.Died, function() if Misc.keepPos then Misc.resetPos = Misc.lastPos end end) if Misc.antiRagdoll then pcall(function() humanoid:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false) humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false) end) end end if godOn then Misc.applyGod(true) end Misc.lastSafe = nil if Misc.keepPos and Misc.resetPos then local want = Misc.resetPos Misc.resetPos = nil task.spawn(function() local root = char:FindFirstChild("HumanoidRootPart") or char:WaitForChild("HumanoidRootPart", 10) if root then for _ = 1, 6 do -- spawn logic can move you again pcall(function() root.CFrame = want end) RunService.Heartbeat:Wait() end end end) end end --------------------------------------------------------------- lighting local FOG_PROPS = { FogEnd = 1e6, FogStart = 0 } local BRIGHT_PROPS = { Brightness = 2, ClockTime = 14, GlobalShadows = false, Ambient = Color3.fromRGB(180, 180, 180), OutdoorAmbient = Color3.fromRGB(180, 180, 180), } local function saveLight(prop) if Misc.savedLight[prop] == nil then pcall(function() Misc.savedLight[prop] = Lighting[prop] end) end end local function applyLightSet(set, on) for prop, value in pairs(set) do if on then saveLight(prop) pcall(function() Lighting[prop] = value end) elseif Misc.savedLight[prop] ~= nil then pcall(function() Lighting[prop] = Misc.savedLight[prop] end) Misc.savedLight[prop] = nil end end end function Misc.applyAntiFog(on) applyLightSet(FOG_PROPS, on) for _, inst in ipairs(Lighting:GetDescendants()) do if inst:IsA("Atmosphere") then pcall(function() inst.Density = on and 0 or 0.3 end) elseif inst:IsA("BlurEffect") or inst:IsA("ColorCorrectionEffect") then pcall(function() inst.Enabled = not on end) end end end --------------------------------------------------------------- the loop function Misc.step(dt) local char = LocalPlayer.Character local humanoid = Misc.humanoid local root = rootPart -- noclip has to be re-asserted constantly; the engine restores collision if Misc.noclip and char then local parts = Misc.charParts for i = 1, #parts do local part = parts[i] if part.Parent and part.CanCollide then part.CanCollide = false end end end -- Freeze: pin you in place AND hold that exact spot even if the server -- teleports you elsewhere. Anchoring alone does not stop a server CFrame -- write, so we capture the spot on freeze and re-assert it every frame. if Misc.freeze and root then if not Misc.freezeCF then Misc.freezeCF = root.CFrame end if not root.Anchored then root.Anchored = true end -- if anything (the server) moved us off the frozen spot, go back if (root.Position - Misc.freezeCF.Position).Magnitude > 0.05 then pcall(function() root.CFrame = Misc.freezeCF end) end pcall(function() root.AssemblyLinearVelocity = Vector3.new(0, 0, 0) end) elseif root and Misc.wasFrozen then pcall(function() root.Anchored = false end) Misc.wasFrozen = false Misc.freezeCF = nil end -- remember the last spot we were actually standing on if Misc.keepPos and root then Misc.lastPos = root.CFrame end if Misc.antiVoid and root and humanoid then Misc.safeClock = Misc.safeClock + dt if Misc.safeClock >= 0.25 then Misc.safeClock = 0 if humanoid.FloorMaterial ~= Enum.Material.Air then Misc.lastSafe = root.CFrame end end if root.Position.Y < Misc.voidY and Misc.lastSafe then pcall(function() root.CFrame = Misc.lastSafe root.Velocity = Vector3.new(0, 0, 0) end) end end -- Speed / jump, EVERY frame -- not on a 0.4s timer. The timer let a game -- that re-writes WalkSpeed win for up to 0.4s at a time, which is what made -- it feel laggy and inconsistent. Per-frame with a compare-before-write is -- cheap and holds the value properly against a game that fights it. if Misc.applyMove and humanoid then pcall(function() if humanoid.WalkSpeed ~= Misc.walkspeed then humanoid.WalkSpeed = Misc.walkspeed end if humanoid.UseJumpPower then if humanoid.JumpPower ~= Misc.jump then humanoid.JumpPower = Misc.jump end else local h = Misc.jump / 10 if humanoid.JumpHeight ~= h then humanoid.JumpHeight = h end end end) end if godOn and not Misc.resetting and humanoid and humanoid.Health < humanoid.MaxHealth then pcall(function() humanoid.Health = humanoid.MaxHealth end) end end -- Instant reset. There is no universal way to shorten the RESPAWN -- that -- delay is Players.RespawnTime and the server owns it -- but the death itself -- is ours to trigger, because we own our character. So this skips the -- hold-the-menu-button dance entirely and dies on the spot. -- -- Health = 0 alone is refused by some games, so joints get broken too; between -- the two, something lands in practically every place. function Misc.instantReset() local char = LocalPlayer.Character if not char then return end if Misc.keepPos then Misc.resetPos = (rootPart and rootPart.CFrame) or Misc.lastPos end Misc.resetting = true -- so god mode does not undo the death local humanoid = Misc.humanoid -- each step in its own pcall: one wrapper means the first method this -- client happens not to expose blocks every method after it if humanoid then pcall(function() humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, true) end) pcall(function() humanoid.Health = 0 end) pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.Dead) end) end pcall(function() char:BreakJoints() end) task.delay(1, function() Misc.resetting = false end) end -- Hide the game's UI. Careful about two things: never hide our own window, -- and only re-enable what was actually enabled to begin with -- blanket -- re-enabling turns on menus the game had deliberately hidden. -- Hide the game's UI. -- -- Walks every PlayerGui container rather than FindFirstChildOfClass -- a real -- client has one, but nothing guarantees it and grabbing the wrong one hides -- nothing. Our own window lives under CoreGui/gethui, so restricting the sweep -- to PlayerGui excludes it structurally instead of by a name check. -- -- Only what was actually enabled gets re-enabled; blanket re-enabling would -- switch on menus the game had deliberately hidden. function Misc.hideGuis(on) if on then table_clear(Misc.hiddenGuis) for _, container in ipairs(LocalPlayer:GetChildren()) do if container:IsA("PlayerGui") then for _, gui in ipairs(container:GetDescendants()) do if (gui:IsA("ScreenGui") or gui:IsA("BillboardGui") or gui:IsA("SurfaceGui")) and gui.Enabled then Misc.hiddenGuis[gui] = true pcall(function() gui.Enabled = false end) end end end end pcall(function() local StarterGui = game:GetService("StarterGui") Misc.coreWas = StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.All) StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, false) end) else for gui in pairs(Misc.hiddenGuis) do if gui.Parent then pcall(function() gui.Enabled = true end) end end table_clear(Misc.hiddenGuis) pcall(function() local StarterGui = game:GetService("StarterGui") StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, Misc.coreWas ~= false) end) end end function Misc.applyBright(on) applyLightSet(BRIGHT_PROPS, on) end end --========================================================================= -- drag detectors -- -- DragDetector is the fourth interaction primitive, next to TouchInterest, -- ProximityPrompt and ClickDetector -- and it is the interesting one, because -- Roblox built it for client-authoritative dragging. Writing DragFrame is a -- sanctioned client move, so it replicates by design. No ownership transfer, -- no simulation radius, none of the fight the Network tab lost. -- -- DragFrame is an offset CFrame, and CFrame + Vector3 translates it, so we -- never need to know the detector's reference frame: nudge the offset by -- exactly the delta we want each frame and the part converges on the goal. --========================================================================= local Drag = { running = false, mode = "Fling", targetName = "Me", perFrame = 60, power = 1, radius = 20, shake = 40, angle = 0, cursor = 1, set = nil, parts = nil, vim = nil, phase = "pick", frames = 0, clock = 0, current = nil, currentPart = nil, originX = 0, originY = 0, lastX = nil, lastY = nil, moves = 0, offscreen = 0, aimed = 0, missed = 0, starts = 0, inset = nil, sweep = 360, holdFrames = 20, heading = -math.pi / 2, method = "Simulated mouse drag", strength = 400, physical = false, perFrame = 200, cursor2 = 1, wrote = 0, failed = 0, movedCount = 0, lastPos = {}, oldEnabled = nil, oldDist = nil, oldStyle = nil, prepped = false, status = "idle", } do Drag.set = newSet(256) Drag.parts = table_create(256) -- the BasePart each detector drives Drag.oldEnabled = table_create(256) Drag.oldDist = table_create(256) Drag.oldStyle = table_create(256) local BIG = 1e6 local function dragOwner(inst) local node = inst.Parent for _ = 1, 3 do if not node then return nil end if node:IsA("BasePart") then return node end node = node.Parent end return nil end function Drag.add(inst) if Drag.set.index[inst] then return end local n = Drag.set.n + 1 Drag.set.n = n Drag.set.items[n] = inst Drag.set.index[inst] = n Drag.parts[n] = dragOwner(inst) Drag.oldEnabled[n] = inst.Enabled -- the detector telling us a drag actually began pcall(function() Library:Connect(inst.DragStart, function() Drag.starts = Drag.starts + 1 end) end) pcall(function() Drag.oldDist[n] = inst.MaxActivationDistance end) pcall(function() Drag.oldStyle[n] = inst.ResponseStyle end) if Drag.prepped then Drag.prep(inst) end end function Drag.drop(inst) local i = Drag.set.index[inst] if not i then return end local n = Drag.set.n local last = Drag.set.items[n] Drag.set.items[i] = last Drag.set.index[last] = i Drag.parts[i] = Drag.parts[n] Drag.oldEnabled[i], Drag.oldDist[i], Drag.oldStyle[i] = Drag.oldEnabled[n], Drag.oldDist[n], Drag.oldStyle[n] Drag.set.items[n] = nil Drag.parts[n], Drag.oldEnabled[n], Drag.oldDist[n], Drag.oldStyle[n] = nil, nil, nil, nil Drag.set.index[inst] = nil Drag.set.n = n - 1 end -- Geometric response writes the CFrame straight through rather than going via -- forces, which is both stronger and immune to the part's mass. function Drag.prep(inst) pcall(function() inst.Enabled = true end) -- RunLocally is the game saying "this drag is cosmetic, do not replicate". -- If it is set, nothing else here can matter, so clear it first. pcall(function() inst.RunLocally = false end) pcall(function() inst.MaxActivationDistance = BIG end) pcall(function() inst.ResponseStyle = Drag.physical and Enum.DragDetectorResponseStyle.Physical or Enum.DragDetectorResponseStyle.Geometric end) end function Drag.setPrepped(on) Drag.prepped = on for i = 1, Drag.set.n do local inst = Drag.set.items[i] if inst.Parent then if on then Drag.prep(inst) else pcall(function() inst.Enabled = Drag.oldEnabled[i] end) pcall(function() inst.MaxActivationDistance = Drag.oldDist[i] end) pcall(function() inst.ResponseStyle = Drag.oldStyle[i] end) end end end end local function dragTargetPos() if Drag.targetName == "Me" then return rootPart and rootPart.Position or nil end local plr = Players:FindFirstChild(Drag.targetName) local char = plr and plr.Character local root = char and char:FindFirstChild("HumanoidRootPart") return root and root.Position or nil end -- Writing DragFrame does nothing without a live drag session -- the engine -- only listens to real input. So we make real input: press the mouse on the -- part, then throw the cursor around violently while it is held. -- -- A drag maps the cursor ray onto a plane, so screen distance IS world -- distance. Slamming the cursor thousands of pixels per frame, several times -- per frame, is what turns a drag into a fling. -- -- One cursor means one part at a time, so this cycles detectors rather than -- driving them all at once, and it does hijack your actual mouse while on. -- THE bug, found by instrumenting the detector's own events: mouse events -- take SCREEN coordinates, but WorldToViewportPoint returns viewport -- coordinates, which exclude the GUI inset. Feeding those straight in aims -- about 36 pixels above the part and misses it, so no drag ever started. local function screenOf(pos) local cam = workspace.CurrentCamera if not cam then return nil end local ok, point, onScreen = pcall(function() local p, v = cam:WorldToViewportPoint(pos) return p, v end) if not ok or not point then return nil end local inset = Drag.inset if not inset then local okI, got = pcall(function() return game:GetService("GuiService"):GetGuiInset() end) inset = (okI and got) or Vector2.new(0, 0) Drag.inset = inset end return { X = point.X + inset.X, Y = point.Y + inset.Y }, onScreen end local function mouseDown(x, y) pcall(function() Drag.vim:SendMouseButtonEvent(x, y, 0, true, game, 0) end) end local function mouseUp(x, y) pcall(function() Drag.vim:SendMouseButtonEvent(x, y, 0, false, game, 0) end) end local function mouseMove(x, y) pcall(function() Drag.vim:SendMouseMoveEvent(x, y, game) end) Drag.moves = Drag.moves + 1 end local function releaseCurrent() if Drag.phase == "drag" and Drag.lastX then mouseUp(Drag.lastX, Drag.lastY) end Drag.phase = "pick" Drag.frames = 0 Drag.current, Drag.currentPart = nil, nil end -- The batch methods write DragFrame straight onto EVERY detector at once -- -- no cursor, no line of sight, no one-at-a-time. They may be ignored outside -- a live drag session, which is exactly what the MOVED counter tells you. -- Simulated input is limited to one on-screen part but is known to land. -- "All at once" runs both, which is the strongest thing available. local function stepFrames(dt, restart) local n = Drag.set.n if n == 0 then return end if Drag.cursor2 > n then Drag.cursor2 = 1 end local centre = dragTargetPos() local strength = Drag.strength local budget = math_min(Drag.perFrame, n) local base = Drag.clock * 3 -- phase spread only; Drag.speed is gone local i = Drag.cursor2 for k = 1, budget do local slot = i local inst = Drag.set.items[slot] local part = Drag.parts[slot] i = i + 1 if i > n then i = 1 end if inst and inst.Parent and part and part.Parent then local pos = part.Position local dx, dy, dz if Drag.mode == "Drag to target" and centre then dx, dy, dz = centre.X - pos.X, centre.Y - pos.Y, centre.Z - pos.Z elseif Drag.mode == "Spin" then local a = base + slot dx, dy, dz = cos(a) * strength, 0, sin(a) * strength else local a = base * 3 + slot * 2.399 dx = cos(a) * strength dy = strength dz = sin(a * 1.31) * strength end if restart then pcall(function() inst:RestartDrag() end) end local ok = pcall(function() inst.DragFrame = inst.DragFrame + Vector3.new(dx, dy, dz) end) if ok then Drag.wrote = Drag.wrote + 1 local last = Drag.lastPos[slot] if last and (pos.X ~= last.X or pos.Y ~= last.Y or pos.Z ~= last.Z) then Drag.movedCount = Drag.movedCount + 1 end Drag.lastPos[slot] = pos else Drag.failed = Drag.failed + 1 end end end Drag.cursor2 = i end function Drag.step(dt) Drag.clock = Drag.clock + dt local method = Drag.method local all = (method == "All at once") local wantSim = all or (method == "Simulated mouse drag") if all or method == "DragFrame write" then stepFrames(dt, false) end if all or method == "RestartDrag + DragFrame" then stepFrames(dt, true) end if not wantSim then Drag.status = format("%s / %s | %d detectors | wrote %d fail %d MOVED %d", method, Drag.mode, Drag.set.n, Drag.wrote, Drag.failed, Drag.movedCount) return end if not Drag.vim then local ok, vim = pcall(game.GetService, game, "VirtualInputManager") if not ok or not vim then Drag.status = "no VirtualInputManager on this executor" return end Drag.vim = vim end local n = Drag.set.n if n == 0 then Drag.status = "no drag detectors in this game" return end if Drag.phase == "pick" then -- find the next detector whose part is actually on screen local tried = 0 while tried < n do if Drag.cursor > n then Drag.cursor = 1 end local slot = Drag.cursor Drag.cursor = Drag.cursor + 1 tried = tried + 1 local inst = Drag.set.items[slot] local part = Drag.parts[slot] if inst and inst.Parent and part and part.Parent then local point, onScreen = screenOf(part.Position) if point and onScreen then -- point at it now, confirm we are actually over it next -- frame, and only then press. Pressing blind is what made -- this silently do nothing before. Drag.current, Drag.currentPart = inst, part Drag.originX, Drag.originY = point.X, point.Y Drag.lastX, Drag.lastY = point.X, point.Y Drag.phase = "aim" Drag.frames = 0 -- mostly straight up (against gravity, and unmistakable), -- fanned a little so a pile does not all go one way Drag.heading = -math.pi / 2 + ((slot % 5) - 2) * 0.22 mouseMove(point.X, point.Y) return end end end Drag.offscreen = Drag.offscreen + 1 Drag.status = format("%d detectors, none on screen -- look at one", n) return end if Drag.phase == "aim" then local part = Drag.currentPart if not (part and part.Parent) then releaseCurrent() return end local hit = Mouse.Target if hit == part or (hit and hit:IsDescendantOf(part.Parent)) then Drag.aimed = Drag.aimed + 1 Drag.phase = "drag" Drag.frames = 0 mouseDown(Drag.originX, Drag.originY) else Drag.missed = Drag.missed + 1 Drag.phase = "pick" -- something is in the way; next one end return end -- Holding. This is a straight copy of what the probe proved: ONE move per -- frame, travelling monotonically in a single direction, staying inside the -- viewport, then release. -- -- The previous version oscillated the cursor with cos(a) * 3000, which was -- wrong three ways: the oscillation averages out to no net displacement, -- coordinates thousands of pixels off-screen are ignored by the engine, and -- input is processed once per frame so six moves in one frame collapse to -- the last one -- a random far-off point. "Maximum output" broke it. local part = Drag.currentPart if not (part and part.Parent) then releaseCurrent() return end Drag.frames = Drag.frames + 1 local t = Drag.frames / Drag.holdFrames local cx, cy = Drag.originX, Drag.originY local tx, ty = cx, cy if Drag.mode == "Drag to target" then local goal = dragTargetPos() local point = goal and screenOf(goal) if point then tx = cx + (point.X - cx) * t ty = cy + (point.Y - cy) * t end elseif Drag.mode == "Spin" then local a = t * TAU * 2 local r = Drag.sweep * 0.35 tx = cx + cos(a) * r ty = cy + sin(a) * r else -- Fling: accelerate along one heading so the cursor is moving fastest -- at the moment of release, which is what actually throws the part. local a = Drag.heading local d = Drag.sweep * t * t tx = cx + cos(a) * d ty = cy + sin(a) * d end -- off-screen coordinates do nothing, so stay inside the viewport local cam = workspace.CurrentCamera local vpx, vpy = 1280, 720 if cam then local size = cam.ViewportSize vpx, vpy = size.X, size.Y end if tx < 4 then tx = 4 elseif tx > vpx - 4 then tx = vpx - 4 end if ty < 4 then ty = 4 elseif ty > vpy - 4 then ty = vpy - 4 end mouseMove(tx, ty) Drag.lastX, Drag.lastY = tx, ty if Drag.frames >= Drag.holdFrames then releaseCurrent() end Drag.status = format("%s | %d found | STARTED %d | aimed %d miss %d | moves %d", Drag.mode, n, Drag.starts, Drag.aimed, Drag.missed, Drag.moves) end function Drag.stop() releaseCurrent() end end --========================================================================= -- carry-over -- the hub follows you between places and servers -- -- Deliberately NOT autoexec. Nothing is written to disk, so a Roblox crash or -- a fresh launch starts clean; the hub only survives a teleport, which is the -- one gap where you would otherwise lose it mid-farm. -- -- queueonteleport is the only hook that crosses a place change: the client is -- torn down and rebuilt, so nothing in memory carries over -- but a queued -- source string runs on the far side. That lets the settings ride along too, -- serialised into the queued script itself, which means this works even on -- executors with no file access at all. --========================================================================= local Persist = { survive = true, queued = false, status = "idle", url = "https://scripts.nitaimaarek.com/raw/3b07cf25", } do local queueTp = queueonteleport or queue_on_teleport or (syn and syn.queue_on_teleport) Persist.canQueue = type(queueTp) == "function" -- Build the script that will run on the other side: restore the settings we -- have right now, then load the hub again. local function carrySource() local blob = "" pcall(function() blob = game:GetService("HttpService"):JSONEncode(Library:GetState()) end) return table.concat({ "local s = ", string.format("%q", blob), "\n", "local env = (getgenv and getgenv()) or _G\n", "env.NMHUB_CARRY = s\n", "loadstring(game:HttpGet(", string.format("%q", Persist.url), "))()\n", }) end -- Arm exactly once per teleport. Each queueonteleport call appends another -- script, so arming on a timer would stack up dozens of copies of the hub on -- the far side. function Persist.arm(why) if not (Persist.survive and Persist.canQueue) then return false end if Persist.queued then return true end local ok = pcall(queueTp, carrySource()) if ok then Persist.queued = true Persist.status = "armed for teleport (" .. (why or "?") .. ")" -- if the teleport never happens, let it be armed again later task.delay(15, function() Persist.queued = false end) else Persist.status = "queueonteleport refused" end return ok end -- On the far side: pick up whatever the previous instance queued for us. function Persist.restore() local env = (getgenv and getgenv()) or _G local blob = env.NMHUB_CARRY env.NMHUB_CARRY = nil if type(blob) ~= "string" or blob == "" then Persist.status = Persist.canQueue and "fresh session" or "no queueonteleport on this executor" return false end local decoded local ok = pcall(function() decoded = game:GetService("HttpService"):JSONDecode(blob) end) if not ok or type(decoded) ~= "table" then Persist.status = "carried settings were unreadable" return false end pcall(function() Library:LoadState(decoded) end) Persist.status = "settings carried over from the last server" return true end function Persist.capabilities() return "queueonteleport: " .. (Persist.canQueue and "yes" or "NO -- the hub will not follow you") end end --========================================================================= -- selection --========================================================================= local function escapeMagic(s) return (s:gsub("([%(%)%.%%%+%-%*%?%[%]%^%$])", "%%%1")) end local function baseNameOf(name) local base = string_match(name, "^(.-)%d*$") return (base and base ~= "") and base or name end local function selectGroup(baseName) local pattern = "^" .. escapeMagic(baseName) .. "%d*$" activeNames[baseName] = pattern local items, n = partSet.items, partSet.n for i = 1, n do local part = items[i] if string_match(part.Name, pattern) then setAdd(selSet, part) addBox(part) end end end local function deselectGroup(baseName) local pattern = activeNames[baseName] if not pattern then return end activeNames[baseName] = nil for i = selSet.n, 1, -1 do -- backwards: setRemove swaps the tail in local part = selSet.items[i] if string_match(part.Name, pattern) then dropBox(part) setRemove(selSet, part) end end end local function clearSelection() for part in pairs(boxes) do boxes[part]:Destroy() end table_clear(boxes) boxCount = 0 setClear(selSet) table_clear(activeNames) end --========================================================================= -- character cache --========================================================================= local function bindCharacter(char) rootPart = nil task.spawn(function() local root = char:FindFirstChild("HumanoidRootPart") or char:WaitForChild("HumanoidRootPart", 10) if root then rootPart = root end end) end if LocalPlayer.Character then bindCharacter(LocalPlayer.Character) pcall(Misc.bind, LocalPlayer.Character) end --========================================================================= -- UI --========================================================================= local Window = Library:CreateWindow({ Title = "optimizer", Subtitle = "nm build", Size = UDim2.fromOffset(560, 400), ToggleKey = "Ctrl+H", Preset = "onyx", PreserveState = true, Layout = "topbar", Columns = 2, Resizable = true, }) local watermark = Library:Watermark({ Separator = " | " }) watermark:AddSegment("title", "optimizer", 1) watermark:AddSegment("fps", Library.Counters.fps, 2) watermark:AddSegment("ping", Library.Counters.ping, 3) watermark:AddSegment("parts", function() return partSet.n .. " parts / " .. pickSet.n .. " pickups" end, 4) --------------------------------------------------------------- performance do local Perf = Window:Tab("Performance", "speed") local Render = Perf:Section({ Name = "Render", Side = "Left" }) Render:Toggle({ Flag = "antilag", Text = "Anti-lag", Default = false, Callback = setAntiLag, }) Render:Slider({ Flag = "applybudget", Text = "Apply budget", Min = 250, Max = 8000, Default = 1500, Decimals = 0, Suffix = " parts/frame", Callback = function(v) applyBudget = v end, }) Render:Divider() Render:Label({ Text = "Everything anti-lag changes is recorded and put back on toggle-off, including Lighting children.", Muted = true, }) local Stats = Perf:Section({ Name = "Live", Side = "Right" }) partsLabel = Stats:Label({ Text = "parts: 0", Mono = true }) pickLabel = Stats:Label({ Text = "pickups: 0", Mono = true }) selLabel = Stats:Label({ Text = "selected: 0", Mono = true }) promptLabel = Stats:Label({ Text = "prompts: 0", Mono = true }) clickLabel = Stats:Label({ Text = "detectors: 0", Mono = true }) statusLabel = Stats:Label({ Text = "idle", Mono = true, Muted = true }) end ------------------------------------------------------------------- collect do local Collect = Window:Tab("Collect", "coins") local Auto = Collect:Section({ Name = "Auto-collect", Side = "Left" }) if not fireTouch then Auto:Label({ Text = "firetouchinterest missing on this executor.", Muted = true }) end Auto:Toggle({ Flag = "autocollect", Text = "Auto-collect", Default = false, Callback = function(on) if on and not fireTouch then Library:Notify({ Title = "optimizer", Text = "this executor has no firetouchinterest", Type = "error", }) Library.Options.autocollect:SetValue(false, true) return end collectOn = on end, }) Auto:Slider({ Flag = "perframe", Text = "Throughput", Min = 10, Max = 1000, Default = 120, Decimals = 0, Suffix = " /frame", Callback = function(v) perFrame = v end, }) Auto:Dropdown({ Flag = "filter", Text = "Filter", Values = { "Everything", "Selected only", "All but selected" }, Default = "Everything", Callback = function(value) filterMode = (value == "Selected only" and 2) or (value == "All but selected" and 3) or 1 end, }) Auto:Toggle({ Flag = "teleport", Text = "Teleport parts to me", Default = false, Callback = function(on) teleportOn = on end, }) Auto:Label({ Text = "Leave teleport off unless the game distance-checks the touch: it costs two physics writes per pickup and is the slowest thing here.", Muted = true, }) Auto:Divider() Auto:Button({ Text = "Collect once (full sweep)", Callback = function() if not (fireTouch and rootPart) then return end local items, n = snapshot(pickSet) local root = rootPart local rootCF = root.CFrame startJob(items, n, perFrame, function(part) if part.Parent then if teleportOn then local home = part.CFrame part.CFrame = rootCF pcall(fireTouch, root, part, 0) pcall(fireTouch, root, part, 1) part.CFrame = home else pcall(fireTouch, root, part, 0) pcall(fireTouch, root, part, 1) end end end, function() statusLabel:SetText("swept " .. n .. " pickups") end, "sweep") end, }) local Sel = Collect:Section({ Name = "Selection", Side = "Right" }) Sel:Toggle({ Flag = "selectmode", Text = "Select mode", Default = false, Callback = function(on) selectModeOn = on end, }) Sel:Label({ Text = "Click a part to select every part sharing its base name (Coin, Coin1, Coin27...). Click again to drop the group.", Muted = true, }) Sel:Slider({ Flag = "boxcap", Text = "Outline cap", Min = 0, Max = 600, Default = 150, Decimals = 0, Suffix = " boxes", Callback = function(v) boxCap = v end, }) Sel:Colorpicker({ Flag = "boxcolor", Text = "Outline colour", Default = boxColor, Callback = function(color) boxColor = color for _, box in pairs(boxes) do box.Color3 = color box.SurfaceColor3 = color end end, }) Sel:Button({ Text = "Clear selection", Callback = clearSelection }) end ------------------------------------------------------------------ interact do local Interact = Window:Tab("Interact", "target") local Prox = Interact:Section({ Name = "Proximity prompts", Side = "Left" }) if not fireProx then Prox:Label({ Text = "fireproximityprompt missing on this executor.", Muted = true }) end Prox:Toggle({ Flag = "autoprompt", Text = "Auto-fire prompts", Default = false, Callback = function(on) if on and not fireProx then Library:Notify({ Title = "optimizer", Text = "this executor has no fireproximityprompt", Type = "error" }) Library.Options.autoprompt:SetValue(false, true) return end promptOn = on end, }) Prox:Toggle({ Flag = "promptbypass", Text = "Bypass hold + range", Default = true, Callback = setPromptBypass, }) Prox:Slider({ Flag = "promptrate", Text = "Throughput", Min = 1, Max = 500, Default = 40, Decimals = 0, Suffix = " /frame", Callback = function(v) promptPerFrame = v end, }) Prox:Slider({ Flag = "promptrange", Text = "Range", Min = 0, Max = 2000, Default = 0, Decimals = 0, Suffix = " studs (0 = any)", Callback = function(v) promptRangeSq = (v > 0) and (v * v) or nil -- squared: no sqrt in the loop end, }) Prox:Dropdown({ Flag = "promptfilter", Text = "Filter", Values = { "Everything", "Selected only", "All but selected" }, Default = "Everything", Callback = function(value) promptMode = (value == "Selected only" and 2) or (value == "All but selected" and 3) or 1 end, }) Prox:Input({ Flag = "promptname", Text = "Name contains", Placeholder = "collect, harvest, ...", Finished = true, Callback = function(text) text = (text or ""):lower():gsub("^%s+", ""):gsub("%s+$", "") promptNeedle = (text ~= "") and text or nil end, }) Prox:Label({ Text = "Matched against ActionText, ObjectText and the parent name, all lowercased once at registration.", Muted = true, }) local Clicks = Interact:Section({ Name = "Click detectors", Side = "Right" }) if not fireClick then Clicks:Label({ Text = "fireclickdetector missing on this executor.", Muted = true }) end Clicks:Toggle({ Flag = "autoclick", Text = "Auto-click detectors", Default = false, Callback = function(on) if on and not fireClick then Library:Notify({ Title = "optimizer", Text = "this executor has no fireclickdetector", Type = "error" }) Library.Options.autoclick:SetValue(false, true) return end clickOn = on end, }) Clicks:Toggle({ Flag = "clickbypass", Text = "Bypass range", Default = true, Callback = setClickBypass, }) Clicks:Slider({ Flag = "clickrate", Text = "Throughput", Min = 1, Max = 500, Default = 40, Decimals = 0, Suffix = " /frame", Callback = function(v) clickPerFrame = v end, }) Clicks:Slider({ Flag = "clickrange", Text = "Range", Min = 0, Max = 2000, Default = 0, Decimals = 0, Suffix = " studs (0 = any)", Callback = function(v) clickRangeSq = (v > 0) and (v * v) or nil end, }) Clicks:Dropdown({ Flag = "clickfilter", Text = "Filter", Values = { "Everything", "Selected only", "All but selected" }, Default = "Everything", Callback = function(value) clickMode = (value == "Selected only" and 2) or (value == "All but selected" and 3) or 1 end, }) Clicks:Dropdown({ Flag = "clickbutton", Text = "Button", Values = { "Left", "Right" }, Default = "Left", Callback = function(value) clickRight = (value == "Right") end, }) Clicks:Divider() local Drags = Interact:Section({ Name = "Drag detectors", Side = "Left" }) Drags:Toggle({ Flag = "dragrun", Text = "Spam drag", Default = false, Callback = function(on) Drag.running = on if on then Drag.setPrepped(true) else Drag.stop() -- never leave the mouse button held down end end, }) Drags:Dropdown({ Flag = "dragmethod", Text = "Method", Values = { "Simulated mouse drag", "All at once", "DragFrame write", "RestartDrag + DragFrame" }, Default = "Simulated mouse drag", Callback = function(v) Drag.method = v Drag.stop() Drag.wrote, Drag.failed, Drag.movedCount, Drag.moves = 0, 0, 0, 0 Drag.starts, Drag.aimed, Drag.missed = 0, 0, 0 end, }) Drags:Slider({ Flag = "dragstrength", Text = "DragFrame strength", Min = 10, Max = 5000, Default = 400, Decimals = 0, Suffix = " studs", Callback = function(v) Drag.strength = v end, }) Drags:Slider({ Flag = "dragbatch", Text = "Detectors per frame", Min = 1, Max = 1000, Default = 200, Decimals = 0, Callback = function(v) Drag.perFrame = v end, }) Drags:Dropdown({ Flag = "dragmode", Text = "Mode", Values = { "Fling", "Spin", "Drag to target" }, Default = "Fling", Callback = function(v) Drag.mode = v Drag.stop() end, }) Drags:Dropdown({ Flag = "dragtarget", Text = "Target player", Values = { "Me" }, Default = "Me", Callback = function(v) Drag.targetName = v end, }) Drags:Button({ Text = "Refresh drag targets", Callback = function() local list = { "Me" } for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then list[#list + 1] = plr.Name end end Library.Options.dragtarget:SetValues(list, true) end, }) Drags:Slider({ Flag = "dragsweep", Text = "Sweep distance", Min = 60, Max = 1400, Default = 360, Decimals = 0, Suffix = " px", Callback = function(v) Drag.sweep = v end, }) Drags:Toggle({ Flag = "dragphysical", Text = "Physical response (momentum)", Default = false, Callback = function(on) Drag.physical = on Drag.setPrepped(Drag.prepped) end, }) Drags:Slider({ Flag = "draghold", Text = "Hold per part", Min = 2, Max = 240, Default = 20, Decimals = 0, Suffix = " frames", Callback = function(v) Drag.holdFrames = v end, }) Drags:Toggle({ Flag = "dragprep", Text = "Force detectors on (range + geometric)", Default = true, Callback = function(on) Drag.setPrepped(on) end, }) Drag.statusLabel = Drags:Label({ Text = "idle", Mono = true, Muted = true }) Drags:Label({ Text = "All at once is the strongest setting: it writes DragFrame on EVERY detector each frame -- no cursor, no line of sight, all parts -- and simultaneously runs a real simulated drag on whichever one is on screen. The batch writes may be ignored by the engine outside a live drag session; MOVED in the status is what tells you whether they did anything.", Muted = true, }) Drags:Label({ Text = "STARTED in the status is the real number -- it counts DragStart events the detector itself fired, so it cannot be faked by a part drifting. aimed/miss shows whether the cursor is landing on the part; misses mean something is in front of it or it moved.", Muted = true, }) Drags:Label({ Text = "Writing DragFrame does nothing on its own -- the engine only listens to real input -- so this presses the mouse on the part and then throws the cursor around while it is held. A drag maps the cursor ray onto a plane, so screen distance IS world distance: thousands of pixels per throw, several throws per frame, is what turns a drag into a fling.", Muted = true, }) Drags:Label({ Text = "One cursor means one part at a time, so it cycles detectors and only grabs parts that are ON SCREEN -- point at what you want thrown. It also drives your real mouse while running, so expect the cursor to fight you.", Muted = true, }) Drags:Label({ Text = "Force-on clears RunLocally (the game marking a drag client-only), raises MaxActivationDistance, and switches ResponseStyle to Geometric so a heavy part throws as fast as a light one. Originals restored on toggle-off.", Muted = true, }) Clicks:Label({ Text = "Both loops run off the same registry as auto-collect, so the Selected only / All but selected filters use the parts you picked in the Collect tab.", Muted = true, }) end ------------------------------------------------------------------- remotes do local Rem = Window:Tab("Remotes", "link") local Find = Rem:Section({ Name = "Find", Side = "Left" }) FuzzUI.found = Find:Label({ Text = "not scanned yet", Mono = true }) local function refreshRemoteList() local needle = (Library.Options.remotesearch and Library.Options.remotesearch.Value or ""):lower() local list, shown = {}, 0 local counts = {} for i = 1, Remotes.set.n do local path = Remotes.path[i] local cls = Remotes.cls[i] counts[cls] = (counts[cls] or 0) + 1 if needle == "" or path:lower():find(needle, 1, true) then if shown < 250 then shown = shown + 1 list[shown] = path end end end Remotes.truncated = 0 if Library.Options.remotelist then -- fresh list, nothing selected: never mass-fire by accident Library.Options.remotelist:SetValues(list, false) end local parts = {} for cls, n in pairs(counts) do parts[#parts + 1] = n .. " " .. cls end table.sort(parts) FuzzUI.found:SetText(format("%d found (%d blocked, %d excluded): %s%s", Remotes.set.n, Remotes.blocked, Remotes.excluded, #parts > 0 and table.concat(parts, ", ") or "none", shown < Remotes.set.n and format(" (listing %d)", shown) or "")) end Find:Button({ Text = "Scan for remotes", Callback = function() scanRemotes(Library.Options.bindables.Value, function() refreshRemoteList() armHitWatch() logLine("-- scan: " .. Remotes.set.n .. " remotes") end) end, }) Find:Toggle({ Flag = "bindables", Text = "Include bindables", Default = false, }) Find:Input({ Flag = "remotesearch", Text = "Search", Placeholder = "part of the name or path", Callback = refreshRemoteList, }) Find:Dropdown({ Flag = "remotelist", Text = "Remotes", Values = {}, Multi = true, }) Find:Input({ Flag = "remoteexclude", Text = "Exclude (comma separated)", Placeholder = "chat, damage, report", Finished = true, Callback = function(text) table_clear(Remotes.excludes) for word in tostring(text or ""):gmatch("[^,]+") do word = word:lower():gsub("^%s+", ""):gsub("%s+$", "") if #word > 0 then Remotes.excludes[#Remotes.excludes + 1] = word end end scanRemotes(Library.Options.bindables.Value, function() refreshRemoteList() logLine(format("-- rescan: %d kept, %d excluded, %d blocked", Remotes.set.n, Remotes.excluded, Remotes.blocked)) end) end, }) Find:Button({ Text = "Select all listed", Callback = function() local all = {} for _, path in ipairs(Library.Options.remotelist.Values) do all[#all + 1] = path end Library.Options.remotelist:SetValue(all) end, }) Find:Button({ Text = "Deselect all", Callback = function() Library.Options.remotelist:SetValue({}) end, }) Find:Label({ Text = "Admin and anticheat client remotes are dropped before they reach this list -- HD Admin, Adonis, Kohl's and anything named like an exploit reporter. Firing those is how you get logged and banned, and they are never what you are looking for.", Muted = true, }) Find:Label({ Text = "Every remote class the client can reach: RemoteEvent, RemoteFunction, UnreliableRemoteEvent, and optionally BindableEvent/BindableFunction (those are client-local, useful for reading a game's own plumbing).", Muted = true, }) local Bombard = Rem:Section({ Name = "Payloads", Side = "Right" }) FuzzUI.count = Bombard:Label({ Text = "payloads: 0", Mono = true }) FuzzUI.vocab = Bombard:Label({ Text = "vocabulary: 0 words", Mono = true, Muted = true }) local function catToggle(flag, text, key, default) Bombard:Toggle({ Flag = flag, Text = text, Default = default, Callback = function(on) Fuzz.cats[key] = on buildPayloads() end, }) end catToggle("catnums", "Numbers 1-20 + edges", "nums", false) catToggle("catstrings", "Strings", "strings", false) catToggle("catbools", "Booleans", "bools", false) catToggle("catinsts", "Instances (player, char, workspace)", "insts", false) catToggle("cattables", "Tables", "tables", false) catToggle("catvectors", "Vector3 / CFrame", "vectors", false) catToggle("catvocab", "Vocabulary (the game's own words)", "vocab", false) catToggle("catplayers", "Other players (instance / name / id)", "players", false) catToggle("catpairs", "Pairs (2 args)", "pairs2", false) catToggle("cattriples", "Triples (3 args)", "triples", false) Bombard:Slider({ Flag = "vocabmax", Text = "Vocabulary cap", Min = 5, Max = 200, Default = 40, Decimals = 0, Suffix = " words", Callback = function(v) Fuzz.vocabMax = v buildPayloads() end, }) Bombard:Slider({ Flag = "playermax", Text = "Players to target", Min = 1, Max = 30, Default = 6, Decimals = 0, Callback = function(v) Fuzz.playerMax = v buildPayloads() end, }) Bombard:Label({ Text = "Vocabulary harvests the game's own nouns -- tool names, prompt text, ReplicatedStorage folders, shop button labels -- and fires those instead of \"hi\". Players fires every other player in the server three ways, because a remote taking a target might want the instance, the name or the UserId and there is no telling which.", Muted = true, }) Bombard:Slider({ Flag = "fuzzinterval", Text = "Interval", Min = 10, Max = 2000, Default = 120, Decimals = 0, Suffix = " ms", Callback = function(v) Fuzz.interval = v / 1000 end, }) Bombard:Toggle({ Flag = "fuzzloop", Text = "Loop the run", Default = false, Callback = function(on) Fuzz.loop = on end, }) Bombard:Toggle({ Flag = "fuzzshuffle", Text = "Shuffle order", Default = false, Callback = function(on) Fuzz.shuffle = on end, }) Bombard:Toggle({ Flag = "fuzzskip", Text = "Skip remotes that only error", Default = true, Callback = function(on) Fuzz.skipErrors = on end, }) Bombard:Slider({ Flag = "fuzzjitter", Text = "Interval jitter", Min = 0, Max = 90, Default = 0, Decimals = 0, Suffix = " %", Callback = function(v) Fuzz.jitter = v / 100 end, }) Bombard:Toggle({ Flag = "fuzzdry", Text = "Dry run (log only, fire nothing)", Default = false, Callback = function(on) Fuzz.dry = on end, }) Bombard:Toggle({ Flag = "fuzzrun", Text = "Run", Default = false, Callback = function(on) if not on then stopFuzz("toggled off") return end local chosen = {} local n = 0 local sel = Library.Options.remotelist.Value if type(sel) == "table" then for path in pairs(sel) do n = n + 1 chosen[n] = path end end table.sort(chosen) armHitWatch() if not startFuzz(chosen, n) then Library.Options.fuzzrun:SetValue(false, true) end end, }) Bombard:Button({ Text = "Run against ALL found", Callback = function() local all = {} for i = 1, Remotes.set.n do all[i] = Remotes.path[i] end armHitWatch() if startFuzz(all, Remotes.set.n) then Library.Options.fuzzrun:SetValue(true, true) end end, }) FuzzUI.status = Bombard:Label({ Text = "idle", Mono = true, Muted = true }) FuzzUI.hit = Bombard:Label({ Text = "hits: 0", Mono = true }) Bombard:Label({ Text = "Blind firing is the loudest thing in this script -- a server that logs remote traffic will see it. Dry-run first, keep the interval wide enough that one fire is attributable, and expect some payloads to break your session's game state.", Muted = true, }) local LogSec = Rem:Section({ Name = "Log", Side = "Left" }) FuzzUI.lines = {} for i = 1, 12 do FuzzUI.lines[i] = LogSec:Label({ Text = "", Mono = true, Muted = i < 10 }) end LogSec:Divider() LogSec:Button({ Text = "Copy full log", Callback = function() copyOut(table.concat(Fuzz.log, "\n", 1, Fuzz.logN), "log") end, }) LogSec:Button({ Text = "Copy hits + candidates", Callback = function() if Fuzz.hitN == 0 then Library:Notify({ Title = "optimizer", Text = "no hits recorded", Type = "info" }) return end copyOut(table.concat(Fuzz.hits, "\n", 1, Fuzz.hitN), "hits") end, }) LogSec:Button({ Text = "Clear log", Callback = function() table_clear(Fuzz.log) Fuzz.logN = 0 table_clear(Fuzz.hits) Fuzz.hitN = 0 for _, label in ipairs(FuzzUI.lines) do label:SetText("") end FuzzUI.hit:SetText("hits: 0") end, }) buildPayloads() end ------------------------------------------------------------------- network do local NetTab = Window:Tab("Network", "globe") local Ctl = NetTab:Section({ Name = "Control", Side = "Left" }) Ctl:Dropdown({ Flag = "netmode", Text = "Mode", Values = { "Ring", "Fling", "Platform" }, Default = "Ring", Callback = function(value) Net.mode = value Net.platformPart = nil restoreAll() -- collision differs per mode; re-take end, }) Ctl:Dropdown({ Flag = "nettarget", Text = "Target player", Values = { "Me" }, Default = "Me", Callback = function(value) Net.targetName = value end, }) local function refreshTargets() local list = { "Me" } for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then list[#list + 1] = plr.Name end end if Library.Options.nettarget then Library.Options.nettarget:SetValues(list, true) end end Ctl:Button({ Text = "Refresh players", Callback = refreshTargets }) Ctl:Toggle({ Flag = "netrun", Text = "Run", Default = false, Callback = function(on) if not on then stopNet("toggled off") restoreAll() return end if not sethiddenproperty then Library:Notify({ Title = "network", Text = "this executor has no sethiddenproperty -- ownership will not hold", Type = "warn" }) end Net.running = true Net.status = "running: " .. Net.mode end, }) Ctl:Toggle({ Flag = "nethold", Text = "Keep ownership alive", Default = true, Callback = function(on) Net.hold = on end, }) Ctl:Slider({ Flag = "netsizecap", Text = "Ignore parts bigger than", Min = 0, Max = 300, Default = 0, Decimals = 0, Suffix = " studs (0 = no cap)", Callback = function(v) Net.sizeCap = v restoreAll() end, }) Ctl:Divider() Ctl:Dropdown({ Flag = "netsource", Text = "Parts", Values = { "All unanchored", "Nearest", "Selection" }, Default = "All unanchored", Callback = function(value) Net.source = value restoreAll() end, }) Ctl:Slider({ Flag = "netcount", Text = "Part cap", Min = 10, Max = 5000, Default = 1000, Decimals = 0, Callback = function(v) Net.count = v restoreAll() end, }) Ctl:Slider({ Flag = "netrange", Text = "Nearest range", Min = 20, Max = 2000, Default = 250, Decimals = 0, Suffix = " studs", Callback = function(v) Net.range = v restoreAll() end, }) Net.statusLabel = Ctl:Label({ Text = "idle", Mono = true, Muted = true }) Ctl:Label({ Text = ownershipCapabilities(), Mono = true, Muted = true }) Ctl:Label({ Text = "The line above is what YOUR executor provides. A 'NO' on sethiddenproperty or SimulationRadius write means the ownership calls are no-ops on this client and no amount of tuning in this tab will change that -- that is an executor limitation, not a script one.", Muted = true, }) Ctl:Label({ Text = "OWNED n/m is measured from BasePart.ReceiveAge and is a readout only -- it never gates the writes. It cannot: you claim ownership BY writing velocity, so refusing to write until you already own a part is a deadlock. Watch it climb after you enable a mode; that is ownership transferring.", Muted = true, }) Ctl:Label({ Text = "Roblox grants ownership of unanchored parts automatically, by proximity to your character, which is why Nearest is the default source. The simulation-radius trick that older ring scripts rely on was removed from Player years ago; the calls are still made for old or private builds, but on a current client 'radius:ok' does not mean you got anything.", Muted = true, }) Ctl:Label({ Text = "A game that calls SetNetworkOwner(nil) on its parts keeps them server-side permanently. In that game these modes cannot work at all, from any executor.", Muted = true, }) local Tune = NetTab:Section({ Name = "Tuning", Side = "Right" }) Tune:Slider({ Flag = "ringradius", Text = "Ring radius", Min = 1, Max = 1000, Default = 50, Decimals = 0, Suffix = " studs", Callback = function(v) Net.radius = v end, }) Tune:Slider({ Flag = "ringheight", Text = "Ring height", Min = 1, Max = 400, Default = 100, Decimals = 0, Callback = function(v) Net.height = v end, }) Tune:Slider({ Flag = "ringspeed", Text = "Ring speed", Min = 0, Max = 30, Default = 1, Decimals = 1, Suffix = " deg/frame", Callback = function(v) Net.speed = v end, }) Tune:Slider({ Flag = "ringpull", Text = "Attraction strength", Min = 50, Max = 10000, Default = 1000, Decimals = 0, Callback = function(v) Net.pull = v end, }) Tune:Divider() Tune:Slider({ Flag = "flingpower", Text = "Fling strength", Min = 500, Max = 100000, Default = 9000, Decimals = 0, Callback = function(v) Net.flingPower = v end, }) Tune:Divider() Tune:Slider({ Flag = "platformdrop", Text = "Platform drop", Min = 1, Max = 15, Default = 4, Decimals = 1, Suffix = " studs", Callback = function(v) Net.platformDrop = v end, }) Tune:Label({ Text = "Every mode is the same loop: work out a target position, then set Velocity to the unit direction times a strength. Ring takes each part's own current angle and nudges it, capping the radius at the part's current distance, so parts orbit where they already are instead of being flung to a fixed slot.", Muted = true, }) Library:Connect(Players.PlayerAdded, function() if Fuzz.cats.players then buildPayloads() end end) Library:Connect(Players.PlayerRemoving, function() if Fuzz.cats.players then buildPayloads() end end) Library:Connect(Players.PlayerAdded, refreshTargets) Library:Connect(Players.PlayerRemoving, refreshTargets) refreshTargets() end --------------------------------------------------------------------- misc do local MiscTab = Window:Tab("Misc", "sliders") local Move = MiscTab:Section({ Name = "Movement", Side = "Left" }) Move:Toggle({ Flag = "movemod", Text = "Apply speed / jump", Default = false, Callback = function(on) Misc.applyMove = on if not on and Misc.humanoid then pcall(function() Misc.humanoid.WalkSpeed = 16 if Misc.humanoid.UseJumpPower then Misc.humanoid.JumpPower = 50 else Misc.humanoid.JumpHeight = 7.2 end end) end end, }) Move:Slider({ Flag = "walkspeed", Text = "WalkSpeed", Min = 1, Max = 500, Default = 16, Decimals = 0, Callback = function(v) Misc.walkspeed = v end, }) Move:Slider({ Flag = "jumppower", Text = "Jump", Min = 1, Max = 500, Default = 50, Decimals = 0, Callback = function(v) Misc.jump = v end, }) Move:Toggle({ Flag = "infjump", Text = "Infinite jump", Default = false, Callback = function(on) Misc.infJump = on end, }) Move:Toggle({ Flag = "noclip", Text = "Noclip", Default = false, Callback = function(on) Misc.noclip = on if not on then for _, part in ipairs(Misc.charParts) do pcall(function() part.CanCollide = true end) end end end, }) Move:Toggle({ Flag = "antivoid", Text = "Anti-void", Default = false, Callback = function(on) Misc.antiVoid = on end, }) Move:Toggle({ Flag = "freeze", Text = "Freeze in place", Default = false, Callback = function(on) Misc.freeze = on if on then Misc.wasFrozen = true Misc.freezeCF = rootPart and rootPart.CFrame or nil elseif rootPart then pcall(function() rootPart.Anchored = false end) Misc.freezeCF = nil end end, }) Move:Label({ Text = "Freeze pins you where you are and HOLDS that exact spot -- if the server teleports you (a round start, a shove), it puts you straight back. Anti-void remembers the last ground you stood on and restores you if you fall past the void. Speed and jump apply every frame now, so a game that fights WalkSpeed cannot win.", Muted = true, }) --------------------------------------------------------------- survival local Live = MiscTab:Section({ Name = "Survival", Side = "Right" }) Live:Toggle({ Flag = "godmode", Text = "God mode", Default = false, Callback = Misc.applyGod, }) Misc.killLabel = Live:Label({ Text = "killbricks avoided: 0", Mono = true }) Live:Label({ Text = "Four layers: the death state is disabled, CanTouch is cleared on your limbs so a killbrick's Touched never fires, health is restored on any drop, and anything that hurts you is LEARNED -- auto-collect then refuses to fire touch on it, so it stops teleporting you onto lava to reach a coin.", Muted = true, }) Live:Button({ Text = "Clear learned killbricks", Callback = function() table_clear(killParts) killCount = 0 Misc.killLabel:SetText("killbricks avoided: 0") end, }) Live:Button({ Text = "Instant reset", Callback = function() Misc.instantReset() end, }) Live:Toggle({ Flag = "keeppos", Text = "Keep position through reset", Default = false, Callback = function(on) Misc.keepPos = on end, }) Live:Label({ Text = "Reset dies on the spot instead of holding the menu button. The respawn delay itself is Players.RespawnTime and the server owns it -- no client can shorten that. Keep-position applies to ANY death -- falling, killed, the Roblox reset button -- not just the button above.", Muted = true, }) Live:Toggle({ Flag = "antiragdoll", Text = "Anti-ragdoll", Default = false, Callback = function(on) Misc.antiRagdoll = on local humanoid = Misc.humanoid if humanoid then pcall(function() humanoid:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, not on) humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown, not on) end) end end, }) Live:Toggle({ Flag = "autoequip", Text = "Auto-equip tools", Default = false, Callback = function(on) Misc.autoEquip = on end, }) Live:Toggle({ Flag = "antiafk", Text = "Anti-AFK", Default = false, Callback = function(on) Misc.antiAfk = on end, }) --------------------------------------------------------------- visual local View = MiscTab:Section({ Name = "Visual & session", Side = "Left" }) View:Toggle({ Flag = "antifog", Text = "Anti-fog", Default = false, Callback = function(on) Misc.antiFog = on Misc.applyAntiFog(on) end, }) View:Toggle({ Flag = "fullbright", Text = "Full bright", Default = false, Callback = function(on) Misc.fullBright = on Misc.applyBright(on) end, }) View:Toggle({ Flag = "misclag", Text = "Anti-lag", Default = false, Callback = function(on) -- one source of truth: drive the Performance tab's toggle rather than -- keeping a second copy of the same global state local opt = Library.Options.antilag if opt and opt.Value ~= on then opt:SetValue(on) end end, }) View:Toggle({ Flag = "hideguis", Text = "Hide all GUIs", Default = false, Callback = function(on) Misc.hideGuis(on) end, }) View:Toggle({ Flag = "maxzoom", Text = "Unlock camera zoom", Default = false, Callback = function(on) Misc.maxZoom = on pcall(function() LocalPlayer.CameraMaxZoomDistance = on and 2000 or 128 end) end, }) View:Divider() View:Button({ Text = "Rejoin same server", Callback = function() -- TeleportToPlaceInstance with our own JobId puts us back in THIS -- server, not a random one. It can fail if the instance shut down or -- filled while we were leaving, so say so rather than silently -- dumping you somewhere else. Persist.arm("rejoin") local ok, err = pcall(function() game:GetService("TeleportService") :TeleportToPlaceInstance(game.PlaceId, game.JobId, LocalPlayer) end) if not ok then Library:Notify({ Title = "rejoin", Text = "same-server rejoin failed: " .. tostring(err), Type = "error", }) end end, }) View:Button({ Text = "Rejoin (any server)", Callback = function() Persist.arm("rejoin") pcall(function() game:GetService("TeleportService"):Teleport(game.PlaceId, LocalPlayer) end) end, }) View:Button({ Text = "Server hop (smallest server)", Callback = function() task.spawn(function() local ok, err = pcall(function() local TS = game:GetService("TeleportService") local url = "https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100" local body = game:HttpGet(url) local best, bestPlayers -- no JSON decode dependency: pull the fields straight out for id, playing, maxp in body:gmatch( '"id":"([^"]+)".-"playing":(%d+).-"maxPlayers":(%d+)') do playing, maxp = tonumber(playing), tonumber(maxp) if id ~= game.JobId and playing < maxp then if not bestPlayers or playing < bestPlayers then best, bestPlayers = id, playing end end end if not best then error("no other server with room") end Persist.arm("server hop") TS:TeleportToPlaceInstance(game.PlaceId, best, LocalPlayer) end) if not ok then Library:Notify({ Title = "server hop", Text = tostring(err), Type = "error" }) end end) end, }) end ------------------------------------------------------------------- teleport do local TweenService = game:GetService("TweenService") local TP = { method = "Tween", -- Tween | Direct speed = 120, -- studs/sec for tween waypoints = {}, -- [name] = CFrame order = {}, -- name order for the dropdown tweening = nil, } local function tpRoot() return rootPart or (LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")) end -- Direct sets CFrame instantly. Tween slides you there at a fixed speed, which -- reads as fast travel rather than a teleport and slips past some naive -- position-delta checks. It cancels a tween already in flight. local function goTo(targetCF) local root = tpRoot() if not (root and targetCF) then return false end if TP.tweening then pcall(function() TP.tweening:Cancel() end) TP.tweening = nil end if TP.method == "Direct" then pcall(function() root.CFrame = targetCF end) return true end local dist = (targetCF.Position - root.Position).Magnitude local time = math.max(dist / math.max(TP.speed, 1), 0.05) local ok, tw = pcall(function() return TweenService:Create(root, TweenInfo.new(time, Enum.EasingStyle.Linear), { CFrame = targetCF }) end) if ok and tw then TP.tweening = tw ; tw:Play() end return true end local function playerCF(name) local plr = Players:FindFirstChild(name) local char = plr and plr.Character local root = char and char:FindFirstChild("HumanoidRootPart") if not root then return nil end -- land just beside them, facing them, not clipped inside return root.CFrame * CFrame.new(0, 0, 4) end local Tab = Window:Tab("Teleport", "portal") local Way = Tab:Section({ Name = "Waypoints", Side = "Left" }) TP.wpName = Way:Input({ Flag = "tpwpname", Text = "Name", Placeholder = "base, spawn, ...", Default = "", }) local function refreshWaypoints() if TP.wpList then TP.wpList:SetValues(TP.order, true) end if TP.wpLabel then TP.wpLabel:SetText("saved: " .. #TP.order) end end Way:Button({ Text = "Save current spot", Callback = function() local root = tpRoot() if not root then return end local name = (Library.Options.tpwpname and Library.Options.tpwpname.Value or "") name = tostring(name):gsub("^%s+", ""):gsub("%s+$", "") if name == "" then name = "wp" .. (#TP.order + 1) end if not TP.waypoints[name] then TP.order[#TP.order + 1] = name end TP.waypoints[name] = root.CFrame refreshWaypoints() Library:Notify({ Title = "teleport", Text = "saved '" .. name .. "'", Type = "success" }) end, }) TP.wpList = Way:Dropdown({ Flag = "tpwp", Text = "Waypoint", Values = {}, }) Way:Button({ Text = "Teleport to waypoint", Callback = function() local sel = Library.Options.tpwp and Library.Options.tpwp.Value local cf = sel and TP.waypoints[sel] if cf then goTo(cf) else Library:Notify({ Title = "teleport", Text = "pick a waypoint", Type = "warn" }) end end, }) Way:Button({ Text = "Delete waypoint", Callback = function() local sel = Library.Options.tpwp and Library.Options.tpwp.Value if sel and TP.waypoints[sel] then TP.waypoints[sel] = nil for i, n in ipairs(TP.order) do if n == sel then table.remove(TP.order, i) break end end refreshWaypoints() end end, }) TP.wpLabel = Way:Label({ Text = "saved: 0", Mono = true, Muted = true }) local Ppl = Tab:Section({ Name = "Players", Side = "Right" }) Ppl:Dropdown({ Flag = "tpmethod", Text = "Method", Values = { "Tween", "Direct" }, Default = "Tween", Callback = function(v) TP.method = v end, }) Ppl:Slider({ Flag = "tpspeed", Text = "Tween speed", Min = 20, Max = 500, Default = 120, Decimals = 0, Suffix = " studs/s", Callback = function(v) TP.speed = v end, }) Ppl:Dropdown({ Flag = "tptarget", Text = "Player", Values = { "" }, }) local function refreshPlayers() local list = {} for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then list[#list + 1] = plr.Name end end if Library.Options.tptarget then Library.Options.tptarget:SetValues(list, true) end end Ppl:Button({ Text = "Refresh players", Callback = refreshPlayers }) Ppl:Button({ Text = "Teleport to player", Callback = function() local sel = Library.Options.tptarget and Library.Options.tptarget.Value local cf = sel and playerCF(sel) if cf then goTo(cf) else Library:Notify({ Title = "teleport", Text = "no target / they have no character", Type = "warn" }) end end, }) Ppl:Toggle({ Flag = "tpfollow", Text = "Follow player", Default = false, Callback = function(on) TP.follow = on end, }) Ppl:Label({ Text = "Tween slides you over at a set speed (looks like fast travel, slips past simple distance checks); Direct snaps instantly. Follow keeps re-teleporting to the target -- with Tween that trails them, with Direct it locks onto them.", Muted = true, }) Library:Connect(Players.PlayerAdded, refreshPlayers) Library:Connect(Players.PlayerRemoving, refreshPlayers) refreshPlayers() -- follow loop local followClock = 0 Library:Connect(RunService.Heartbeat, function(dt) if not TP.follow then return end followClock = followClock + dt if followClock < (TP.method == "Direct" and 0.1 or 0.4) then return end followClock = 0 local sel = Library.Options.tptarget and Library.Options.tptarget.Value local cf = sel and playerCF(sel) if cf then goTo(cf) end end) end ------------------------------------------------------------------ settings do local Settings = Window:Tab("Settings", "gear") local Binds = Settings:Section({ Name = "Keybinds", Side = "Left" }) Binds:Keybind({ Flag = "collectkey", Text = "Toggle collect", Default = "Ctrl+G", Mode = "Toggle", Callback = function() local opt = Library.Options.autocollect opt:SetValue(not opt.Value) end, }) Binds:Keybind({ Flag = "antilagkey", Text = "Toggle anti-lag", Default = "Ctrl+L", Mode = "Toggle", Callback = function() local opt = Library.Options.antilag opt:SetValue(not opt.Value) end, }) Binds:Keybind({ Flag = "panickey", Text = "Stop everything", Default = "Ctrl+Shift+S", Mode = "Toggle", Callback = function() Library.Options.autocollect:SetValue(false) Library.Options.autoprompt:SetValue(false) Library.Options.autoclick:SetValue(false) stopFuzz("panic key") stopNet("panic key") Drag.running = false pcall(Drag.stop) if Library.Options.dragrun then Library.Options.dragrun:SetValue(false, true) end restoreAll() if Library.Options.netrun then Library.Options.netrun:SetValue(false, true) end stopNet("panic key") releaseParts() if Library.Options.netrun then Library.Options.netrun:SetValue(false, true) end Library:Notify({ Title = "optimizer", Text = "everything off", Type = "warn" }) end, }) local Session = Settings:Section({ Name = "Session", Side = "Right" }) Session:Input({ Flag = "configname", Text = "Config", Default = "optimizer" }) Session:Button({ Text = "Save", Callback = function() local ok = Library:SaveConfig(Library.Options.configname.Value) Library:Notify({ Title = "config", Text = ok and "saved" or "failed", Type = ok and "success" or "error" }) end, }) Session:Button({ Text = "Load", Callback = function() local ok = Library:LoadConfig(Library.Options.configname.Value) Library:Notify({ Title = "config", Text = ok and "loaded" or "failed", Type = ok and "success" or "error" }) end, }) Session:Divider() Session:Toggle({ Flag = "surviveteleport", Text = "Follow me between servers", Default = true, Callback = function(on) Persist.survive = on Persist.queued = false end, }) Persist.statusLabel = Session:Label({ Text = "idle", Mono = true, Muted = true }) Session:Label({ Text = Persist.capabilities(), Mono = true, Muted = true }) Session:Label({ Text = "Deliberately not autoexec: nothing is written to disk, so a crash or a fresh Roblox launch starts clean. The hub only rides through a teleport -- place changes, server hops, rejoins -- carrying your current settings inside the queued script, so it works even with no file access.", Muted = true, }) Session:Divider() Session:Button({ Text = "Unload", Callback = function() Library:Unload() end }) end --========================================================================= -- workspace scan -- chunked, so loading into a 60k-part map costs no hitch --========================================================================= do local all = workspace:GetDescendants() local n = #all startJob(all, n, 4000, function(inst) if inst:IsA("BasePart") then setAdd(partSet, inst) if inst:FindFirstChildOfClass("TouchTransmitter") then setAdd(pickSet, inst) end elseif inst:IsA("ProximityPrompt") then addPrompt(inst) elseif inst:IsA("ClickDetector") then addClick(inst) elseif inst:IsA("DragDetector") then Drag.add(inst) end end, function() statusLabel:SetText(format("indexed %d parts, %d prompts, %d detectors", partSet.n, promptSet.n, clickSet.n)) -- nm-lib applies a toggle's Default silently, so a Default = true -- never fires its callback. Sync the bypasses here rather than at -- construction: this is the first moment the registry is populated. if Library.Options.promptbypass.Value then setPromptBypass(true) end if Library.Options.clickbypass.Value then setClickBypass(true) end end, "index") end Library:Connect(workspace.DescendantAdded, function(inst) if inst:IsA("BasePart") then onPartAdded(inst) elseif inst:IsA("TouchTransmitter") then -- fires on the transmitter itself, so no task.defer race local parent = inst.Parent if parent and partSet.index[parent] then setAdd(pickSet, parent) end elseif inst:IsA("ProximityPrompt") then addPrompt(inst) elseif inst:IsA("ClickDetector") then addClick(inst) elseif inst:IsA("DragDetector") then Drag.add(inst) elseif antiLagOn and EFFECTS[inst.ClassName] then if setAdd(fxSet, inst) then oldFx[fxSet.n] = inst.Enabled inst.Enabled = false end end end) Library:Connect(workspace.DescendantRemoving, function(inst) if inst:IsA("BasePart") then onPartRemoved(inst) elseif inst:IsA("TouchTransmitter") then local parent = inst.Parent if parent then setRemove(pickSet, parent) end elseif inst:IsA("ProximityPrompt") then dropPrompt(inst) elseif inst:IsA("ClickDetector") then dropClick(inst) elseif inst:IsA("DragDetector") then Drag.drop(inst) end end) --========================================================================= -- input --========================================================================= Library:Connect(UserInputService.InputBegan, function(input, gameProcessed) if gameProcessed or not selectModeOn then return end if input.UserInputType ~= MB1 then return end local target = Mouse.Target if not (target and target:IsA("BasePart")) then return end local baseName = baseNameOf(target.Name) if activeNames[baseName] then deselectGroup(baseName) else selectGroup(baseName) end end) Library:Connect(LocalPlayer.OnTeleport, function() Persist.arm("teleport started") end) Library:Connect(LocalPlayer.CharacterAdded, function(char) cursor = 1 bindCharacter(char) pcall(Misc.bind, char) armHitWatch() -- new Humanoid to watch end) Library:Connect(LocalPlayer.CharacterAdded, function(char) if Misc.autoRespawn then end end) Library:Connect(LocalPlayer.CharacterRemoving, function() rootPart = nil -- the loop's only liveness check end) --========================================================================= -- the one loop --========================================================================= local uiClock = 0 -- The network engine gets its OWN Heartbeat, the way the reference does. -- Sharing one callback across six engines means a throw anywhere upstream -- -- a job's work function, a prompt batch, a label write -- aborts the rest of -- the frame, and the network tab dies silently while everything still reports -- healthy. That failure mode is indistinguishable from "ownership refused", -- which is exactly the wrong thing to be unable to tell apart. Library:Connect(Heartbeat, function(dt) if Net.hold then holdOwnership() end if Net.running then stepNet(dt) end end) Library:Connect(Heartbeat, function(dt) pcall(Misc.step, dt) end) Library:Connect(Heartbeat, function(dt) if Drag.running then pcall(Drag.step, dt) end end) Library:Connect(UserInputService.JumpRequest, function() if not Misc.infJump then return end local humanoid = Misc.humanoid if humanoid then pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end) end end) Library:Connect(LocalPlayer.Idled, function() if not Misc.antiAfk then return end pcall(function() local vu = game:GetService("VirtualUser") vu:CaptureController() vu:ClickButton2(Vector2.new()) end) end) Library:Connect(Heartbeat, function(dt) -- each engine isolated, so one bad part cannot take the others down if jobs[1] then pcall(stepJob) end if rootPart then if collectOn then pcall(stepCollect) end if promptOn then pcall(stepPrompts) end if clickOn then pcall(stepClicks) end end if Fuzz.running then pcall(stepFuzz, dt) end uiClock = uiClock + dt if uiClock >= 0.5 then uiClock = 0 pcall(function() partsLabel:SetText(format("parts: %d", partSet.n)) pickLabel:SetText(format("pickups: %d", pickSet.n)) selLabel:SetText(format("selected: %d (%d outlined)", selSet.n, boxCount)) promptLabel:SetText(format("prompts: %d", promptSet.n)) clickLabel:SetText(format("detectors: %d", clickSet.n)) if Net.statusLabel then Net.statusLabel:SetText(Net.status) end if Persist.statusLabel then Persist.statusLabel:SetText(Persist.status) end if Drag.statusLabel then Drag.statusLabel:SetText(Drag.status) end local job = jobs[1] if job then statusLabel:SetText(format("%s: %d/%d (%d queued)", job.label, job.i - 1, job.n, #jobs - 1)) end end) end end) --========================================================================= -- teardown -- nm-lib kills its own connections; these are ours --========================================================================= Library:OnUnload(function() collectOn, promptOn, clickOn = false, false, false Fuzz.running = false Fuzz.gen = Fuzz.gen + 1 stopNet("unload") restoreAll() Drag.running = false pcall(Drag.stop) pcall(Drag.setPrepped, false) pcall(Misc.hideGuis, false) pcall(function() Misc.applyGod(false) Misc.applyAntiFog(false) Misc.applyBright(false) Misc.noclip, Misc.freeze, Misc.applyMove = false, false, false if rootPart then rootPart.Anchored = false end end) stopNet("unload") releaseParts() table_clear(jobs) clearSelection() if promptBypass then for i = 1, promptSet.n do local prompt = promptSet.items[i] if prompt.Parent then prompt.HoldDuration = oldHold[i] prompt.MaxActivationDistance = oldPromptDist[i] prompt.RequiresLineOfSight = oldLOS[i] end end end if clickBypass then for i = 1, clickSet.n do local cd = clickSet.items[i] if cd.Parent then cd.MaxActivationDistance = oldClickDist[i] end end end if antiLagOn then for i = 1, touched.n do local part = touched.items[i] if part.Parent then part.Material = oldMat[i] part.CastShadow = oldShadow[i] part.Reflectance = oldRefl[i] end end restoreLighting() end end) Persist.restore() Library:Notify({ Title = "optimizer", Text = "loaded. Ctrl+H menu, Ctrl+G collect, Ctrl+L anti-lag, Ctrl+Shift+S panic.", Type = "success", })