-- Lucky Scoop Order : SCANNER + RECORDER (data collection only, not the farm) -- DarkSpawnerScript.com -- How to use: -- 1) Join Lucky Scoop Order, run this, press SCAN, then COPY (or SAVE). -- 2) Press SPY ON, then press REC START, and play one full order by hand -- (scoop marbles, collect products, pack, deliver, get paid, buy an upgrade). -- Keep the big clock visible in your screen recording. -- 3) Press REC STOP, then COPY LOG (or SAVE). Send me both texts + the video. local Players = game:GetService("Players") local UIS = game:GetService("UserInputService") local PPS = game:GetService("ProximityPromptService") local RS = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local LP = Players.LocalPlayer local GAME_TAG = "LuckyScoop" local scanText = "" local logLines = {} local recording = false local recStart = 0 local spyOn = false local lastLine, lastCount, lastT0 = nil, 0, 0 local conns = {} ---------------------------------------------------------------- helpers local function full(i) local ok, n = pcall(function() return i:GetFullName() end) return ok and n or tostring(i) end local function posOf(inst) local p = inst for _ = 1, 4 do if not p then break end if p:IsA("BasePart") then return p.Position end if p:IsA("Attachment") then return p.WorldPosition end if p:IsA("Model") then local ok, cf = pcall(function() return p:GetPivot() end) if ok then return cf.Position end end p = p.Parent end return nil end local function v3(v) if not v then return "?" end return string.format("(%.0f, %.0f, %.0f)", v.X, v.Y, v.Z) end local ser ser = function(v, depth) depth = depth or 0 local t = typeof(v) if t == "string" then if #v > 60 then v = v:sub(1, 60) .. "..." end return string.format("%q", v) elseif t == "number" or t == "boolean" or t == "nil" then return tostring(v) elseif t == "Instance" then return "<" .. v.ClassName .. " " .. full(v) .. ">" elseif t == "Vector3" then return "V3" .. v3(v) elseif t == "CFrame" then return "CF" .. v3(v.Position) elseif t == "buffer" then local ok, len = pcall(function() return buffer.len(v) end) return "buffer(" .. (ok and tostring(len) or "?") .. " bytes)" elseif t == "table" then if depth >= 2 then return "{...}" end local parts, n = {}, 0 for k, val in pairs(v) do n = n + 1 if n > 8 then parts[#parts + 1] = "..." break end parts[#parts + 1] = tostring(k) .. "=" .. ser(val, depth + 1) end return "{" .. table.concat(parts, ", ") .. "}" end return t .. "(" .. tostring(v) .. ")" end local function clock() return os.clock() - recStart end local function stamp(t) return string.format("%02d:%05.2f", math.floor(t / 60), t % 60) end local function flushRepeat() if lastLine and lastCount > 1 then logLines[#logLines] = logLines[#logLines] .. string.format(" x%d (%s to %s)", lastCount, stamp(lastT0), stamp(clock())) end end local function log(kind, msg) if not recording then return end local line = kind .. " | " .. msg if line == lastLine then lastCount = lastCount + 1 return end flushRepeat() lastLine, lastCount, lastT0 = line, 1, clock() logLines[#logLines + 1] = "[" .. stamp(clock()) .. "] " .. line end ---------------------------------------------------------------- SCAN local function scan() local out = {} local function add(s) out[#out + 1] = s end add("==== " .. GAME_TAG .. " SCAN | PlaceId " .. game.PlaceId .. " | " .. os.date("%Y-%m-%d %H:%M") .. " ====") -- remotes add("\n## REMOTES") local rc = 0 for _, d in ipairs(game:GetDescendants()) do if d:IsA("RemoteEvent") or d:IsA("RemoteFunction") or d:IsA("UnreliableRemoteEvent") then rc = rc + 1 if rc <= 400 then add(d.ClassName .. " " .. full(d)) end end end add("total remotes: " .. rc) -- prompts / click detectors add("\n## PROXIMITY PROMPTS") local pc = 0 for _, d in ipairs(workspace:GetDescendants()) do if d:IsA("ProximityPrompt") then pc = pc + 1 if pc <= 250 then add(string.format("[%s] [%s] hold=%.2f dist=%.0f at %s %s", d.ObjectText, d.ActionText, d.HoldDuration, d.MaxActivationDistance, v3(posOf(d.Parent)), full(d))) end end end add("total prompts: " .. pc) add("\n## CLICK DETECTORS") local cc = 0 for _, d in ipairs(workspace:GetDescendants()) do if d:IsA("ClickDetector") then cc = cc + 1 if cc <= 150 then add(v3(posOf(d.Parent)) .. " " .. full(d)) end end end add("total click detectors: " .. cc) -- workspace layout add("\n## WORKSPACE TOP LEVEL (children count)") for _, c in ipairs(workspace:GetChildren()) do if not c:IsA("Terrain") and not c:IsA("Camera") then add(c.ClassName .. " " .. c.Name .. " [" .. #c:GetChildren() .. "]") if (c:IsA("Folder") or c:IsA("Model")) and #c:GetChildren() <= 40 then for _, g in ipairs(c:GetChildren()) do add(" " .. g.ClassName .. " " .. g.Name .. " [" .. #g:GetChildren() .. "]") end end end end -- my plot / studio (anything tagged with my name or UserId) add("\n## THINGS THAT MENTION ME (plot / studio owner)") local mine = 0 for _, d in ipairs(workspace:GetDescendants()) do local hit = false if d:IsA("StringValue") and (d.Value == LP.Name or d.Value == tostring(LP.UserId)) then hit = true end if d:IsA("ObjectValue") and d.Value == LP then hit = true end if d:IsA("IntValue") and d.Value == LP.UserId then hit = true end local ok, attrs = pcall(function() return d:GetAttributes() end) if ok then for k, v in pairs(attrs) do if v == LP.Name or v == LP.UserId or v == tostring(LP.UserId) then hit = true end end end if hit then mine = mine + 1 if mine <= 40 then add(d.ClassName .. " " .. full(d)) end end end -- stats add("\n## LEADERSTATS + PLAYER ATTRIBUTES") local ls = LP:FindFirstChild("leaderstats") if ls then for _, v in ipairs(ls:GetChildren()) do add("leaderstat " .. v.Name .. " = " .. tostring(v.Value)) end else add("no leaderstats folder") end for k, v in pairs(LP:GetAttributes()) do add("attr " .. k .. " = " .. ser(v)) end for _, c in ipairs(LP:GetChildren()) do if c:IsA("Folder") or c:IsA("Configuration") then add("player folder " .. c.Name .. " [" .. #c:GetChildren() .. "]") for _, v in ipairs(c:GetChildren()) do if v:IsA("ValueBase") then add(" " .. v.Name .. " = " .. tostring(v.Value)) end end end end -- tools add("\n## TOOLS") local function tools(where) if not where then return end for _, t in ipairs(where:GetChildren()) do if t:IsA("Tool") then add(where.Name .. " -> " .. t.Name) end end end tools(LP:FindFirstChild("Backpack")) tools(LP.Character) -- gui buttons add("\n## MY GUI (visible ScreenGuis and their buttons)") local pg = LP:FindFirstChild("PlayerGui") if pg then for _, sg in ipairs(pg:GetChildren()) do if sg:IsA("ScreenGui") and sg.Name ~= "LSO_Scanner" then add("ScreenGui " .. sg.Name .. (sg.Enabled and "" or " (disabled)")) local b = 0 for _, d in ipairs(sg:GetDescendants()) do if d:IsA("GuiButton") then b = b + 1 if b <= 25 then local txt = d:IsA("TextButton") and d.Text or "" add(" " .. d.Name .. (txt ~= "" and (" '" .. txt:sub(1, 30) .. "'") or "")) end end end end end end -- replicated storage modules (names only) add("\n## REPLICATEDSTORAGE TOP LEVEL") for _, c in ipairs(RS:GetChildren()) do add(c.ClassName .. " " .. c.Name .. " [" .. #c:GetChildren() .. "]") end scanText = table.concat(out, "\n") return #out end ---------------------------------------------------------------- SPY (remote calls) local spyInstalled = false local function installSpy() if spyInstalled then return true end if not hookmetamethod or not getnamecallmethod then return false end local old local cc = checkcaller or function() return false end local wrap = newcclosure or function(f) return f end old = hookmetamethod(game, "__namecall", wrap(function(self, ...) local m = getnamecallmethod() if spyOn and not cc() and (m == "FireServer" or m == "InvokeServer") then local args = { ... } local parts = {} for i = 1, math.min(select("#", ...), 6) do parts[#parts + 1] = ser(args[i]) end local name = full(self) task.defer(log, "REMOTE", m .. " " .. name .. " (" .. table.concat(parts, ", ") .. ")") end return old(self, ...) end)) spyInstalled = true return true end ---------------------------------------------------------------- RECORD hooks local function hookStats() local ls = LP:FindFirstChild("leaderstats") if ls then for _, v in ipairs(ls:GetChildren()) do if v:IsA("ValueBase") then conns[#conns + 1] = v.Changed:Connect(function(nv) log("STAT", v.Name .. " = " .. tostring(nv)) end) end end end conns[#conns + 1] = LP.AttributeChanged:Connect(function(a) log("ATTR", a .. " = " .. ser(LP:GetAttribute(a))) end) end local function hookChar(char) conns[#conns + 1] = char.ChildAdded:Connect(function(c) if c:IsA("Tool") then log("EQUIP", c.Name) end end) conns[#conns + 1] = char.ChildRemoved:Connect(function(c) if c:IsA("Tool") then log("UNEQUIP", c.Name) end end) end local function startRec() logLines, lastLine, lastCount = {}, nil, 0 recStart = os.clock() recording = true logLines[1] = "==== " .. GAME_TAG .. " RECORDING | started " .. os.date("%H:%M:%S") .. " ====" hookStats() if LP.Character then hookChar(LP.Character) end conns[#conns + 1] = LP.CharacterAdded:Connect(hookChar) conns[#conns + 1] = PPS.PromptTriggered:Connect(function(p) log("PROMPT", "[" .. p.ObjectText .. "] [" .. p.ActionText .. "] " .. full(p)) end) conns[#conns + 1] = PPS.PromptButtonHoldBegan:Connect(function(p) log("HOLD", "[" .. p.ObjectText .. "] [" .. p.ActionText .. "]") end) conns[#conns + 1] = UIS.InputBegan:Connect(function(input, gpe) local t = input.UserInputType if t == Enum.UserInputType.MouseButton1 or t == Enum.UserInputType.Touch then if gpe then local pos = input.Position local ok, objs = pcall(function() return LP.PlayerGui:GetGuiObjectsAtPosition(pos.X, pos.Y) end) local hit = (ok and objs[1]) and full(objs[1]) or "gui" log("UI CLICK", hit) else local m = LP:GetMouse() log("WORLD CLICK", m.Target and full(m.Target) or "nothing") end elseif t == Enum.UserInputType.Keyboard and not gpe then log("KEY", input.KeyCode.Name) end end) -- things appearing / leaving under workspace folders (marbles, products, boxes, orders) for _, f in ipairs(workspace:GetChildren()) do if f:IsA("Folder") or f:IsA("Model") then conns[#conns + 1] = f.ChildAdded:Connect(function(c) log("SPAWN", f.Name .. " + " .. c.Name) end) conns[#conns + 1] = f.ChildRemoved:Connect(function(c) log("DESPAWN", f.Name .. " - " .. c.Name) end) end end local pg = LP:FindFirstChild("PlayerGui") if pg then conns[#conns + 1] = pg.DescendantAdded:Connect(function(d) if d:IsA("TextLabel") and d.Text ~= "" and #d.Text < 80 then log("GUI TEXT", d.Name .. " '" .. d.Text .. "'") end end) end end local function stopRec() flushRepeat() recording = false for _, c in ipairs(conns) do pcall(function() c:Disconnect() end) end conns = {} logLines[#logLines + 1] = "==== stopped at " .. stamp(clock()) .. " | " .. #logLines .. " lines ====" end ---------------------------------------------------------------- export local function export(text, fname) if setclipboard then pcall(setclipboard, text) end if fname and writefile then pcall(writefile, fname, text) end end ---------------------------------------------------------------- GUI local parent = (gethui and gethui()) or game:GetService("CoreGui") local old = parent:FindFirstChild("LSO_Scanner") if old then old:Destroy() end local sg = Instance.new("ScreenGui") sg.Name = "LSO_Scanner" sg.ResetOnSpawn = false sg.ZIndexBehavior = Enum.ZIndexBehavior.Sibling sg.Parent = parent local clockLbl = Instance.new("TextLabel") clockLbl.Size = UDim2.new(0, 240, 0, 50) clockLbl.Position = UDim2.new(0.5, -120, 0, 6) clockLbl.BackgroundColor3 = Color3.fromRGB(0, 0, 0) clockLbl.BackgroundTransparency = 0.3 clockLbl.TextColor3 = Color3.fromRGB(255, 255, 0) clockLbl.Font = Enum.Font.Code clockLbl.TextScaled = true clockLbl.Text = "REC 00:00.00" clockLbl.Parent = sg local panel = Instance.new("Frame") panel.Size = UDim2.new(0, 200, 0, 300) panel.Position = UDim2.new(0, 10, 0.3, 0) panel.BackgroundColor3 = Color3.fromRGB(25, 25, 30) panel.Active = true panel.Draggable = true panel.Parent = sg local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 26) title.BackgroundColor3 = Color3.fromRGB(120, 40, 160) title.TextColor3 = Color3.new(1, 1, 1) title.Font = Enum.Font.GothamBold title.TextSize = 14 title.Text = "DarkSpawnerScript.com Scanner" title.Parent = panel local status = Instance.new("TextLabel") status.Size = UDim2.new(1, -8, 0, 34) status.Position = UDim2.new(0, 4, 1, -36) status.BackgroundTransparency = 1 status.TextColor3 = Color3.fromRGB(200, 255, 200) status.TextWrapped = true status.Font = Enum.Font.Gotham status.TextSize = 12 status.Text = "Ready" status.Parent = panel local list = Instance.new("ScrollingFrame") list.Size = UDim2.new(1, -8, 1, -70) list.Position = UDim2.new(0, 4, 0, 30) list.BackgroundTransparency = 1 list.ScrollBarThickness = 6 list.AutomaticCanvasSize = Enum.AutomaticSize.Y list.CanvasSize = UDim2.new(0, 0, 0, 0) list.Parent = panel local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 4) layout.Parent = list local function button(text, cb) local b = Instance.new("TextButton") b.Size = UDim2.new(1, -8, 0, 32) b.BackgroundColor3 = Color3.fromRGB(50, 50, 60) b.TextColor3 = Color3.new(1, 1, 1) b.Font = Enum.Font.GothamBold b.TextSize = 13 b.Text = text b.Parent = list b.MouseButton1Click:Connect(function() local ok, err = pcall(cb, b) if not ok then status.Text = "Error: " .. tostring(err):sub(1, 80) end end) return b end button("SCAN", function() status.Text = "Scanning..." local n = scan() export(scanText, GAME_TAG .. "_scan.txt") status.Text = "Scan done: " .. n .. " lines (copied + saved)" end) button("COPY SCAN", function() export(scanText) status.Text = "Scan copied (" .. #scanText .. " chars)" end) button("SPY: OFF", function(b) if not installSpy() then status.Text = "Executor has no hookmetamethod, spy not available" return end spyOn = not spyOn b.Text = spyOn and "SPY: ON" or "SPY: OFF" status.Text = spyOn and "Spy on (logs remotes while REC runs)" or "Spy off" end) button("REC START", function() if recording then return end startRec() status.Text = "Recording... play one full order" end) button("REC STOP", function() if not recording then return end stopRec() local txt = table.concat(logLines, "\n") export(txt, GAME_TAG .. "_log.txt") status.Text = "Stopped: " .. #logLines .. " lines (copied + saved)" end) button("COPY LOG", function() export(table.concat(logLines, "\n")) status.Text = "Log copied (" .. #logLines .. " lines)" end) button("CLOSE", function() if recording then stopRec() end spyOn = false sg:Destroy() end) RunService.RenderStepped:Connect(function() if not sg.Parent then return end if recording then clockLbl.Text = "REC " .. stamp(clock()) clockLbl.TextColor3 = Color3.fromRGB(255, 80, 80) else clockLbl.TextColor3 = Color3.fromRGB(255, 255, 0) end end) -- anti AFK while you test pcall(function() local VU = game:GetService("VirtualUser") LP.Idled:Connect(function() VU:Button2Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) task.wait(1) VU:Button2Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame) end) end)