Dark Spawner Script
HomeGamesTrendingExecutors
Dark Spawner Script

The best community driven platform for finding the latest Roblox scripts. Create, share, and discover amazing scripts.

Scripts
328+
Games
242+
Votes cast
6,207+

Quick Links

  • How to Use
  • Games
  • Trending Scripts
  • Executors
  • FAQs

Community

Links coming soon.

Contact

  • [email protected]
  • Report a script

© 2026 Dark Spawner Script. All rights reserved.

About UsPrivacy PolicyDisclaimer
Home›Games›Lucky Scoop Order

Lucky Scoop Order Scanner DarkSpawner Hub: Remote Spy

Lucky Scoop Order•2 hours ago
1 views
Lucky Scoop Order Scanner DarkSpawner Hub: Remote Spy
No Key
  • 100% working(1 votes)
  • updated 2 hours ago
  • No key
  • tested on Delta, Xeno
T

Team Darkspawner

Hub: DarkSpawner Hub

Play Game Game Link

Description

Use this DarkSpawner hub for Lucky Scoop Order Roblox!! Now you can get features like Remote Spy, Session Recorder, Proximity Prompt Scanner, Leaderstats Watcher and Copy or Save Logs, and More!! This one is a data tool, not the auto farm. Press SCAN in the small purple panel and it lists every remote, prompt, click detector and workspace folder in the studio map, then copies the dump and saves it as LuckyScoop_scan.txt. Turn SPY on, hit REC START and play one order by hand, and every remote you fire, prompt you hold, tool you equip and coin change gets stamped against the big clock at the top of the screen. REC STOP copies the full log for you. We use these logs to build the real Lucky Scoop Order auto farm. No key on this one, so paste the loadstring and go!!

Features

  • +Workspace Scanner for Remotes, Prompts and Folders
  • +Remote Spy for FireServer and InvokeServer
  • +Session Recorder with On Screen Clock
  • +Proximity Prompt Hold Logger
  • +Leaderstats and Coin Change Watcher
  • +Tool Equip Logger
  • +Plot and Studio Owner Finder
  • +Copy to Clipboard and Save to File
  • +Anti AFK
Lucky Scoop Order

Lucky Scoop Order

Explore more scripts for this game (1)

Script

Raw Download
-- 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)

Similar Scripts

Car Dealership Tycoon Script Tora IsMe: Auto Race, Pumpkins

No Key • 44 minutes ago

Brainrot Evolution Tower Script RNDM: God Mode, Fly

No Key • 44 minutes ago

Queen Contest Tower Script RNDM: Fly, Noclip

No Key • 44 minutes ago

WYR Style Contest Tower Script RNDM: God Mode, Fly

No Key • 44 minutes ago

Bike For Egg! Script RVC Hub: Auto Collect Eggs, Auto Farm

Key System • 1 hour ago