
Steal Or Die Script – Xeno Work
-- Steal or Die | Ultra Light v3.4
-- Монстр: IsEntity + EntityKind | Лут: $500+ золото, вес kg, дальняя дистанция
local Players = game:GetService("Players")
local Lighting = game:GetService("Lighting")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local HttpService = game:GetService("HttpService")
local CoreGui = game:GetService("CoreGui")
local LocalPlayer = Players.LocalPlayer
local env = (getgenv and getgenv()) or _G
if env.SOD_Unload then pcall(env.SOD_Unload) end
local Config = {
ItemESP = true,
MonsterESP = true,
PlayerESP = true,
FullBright = true,
InfStamina = true,
InstantPrompt = true,
MonsterWarn = true,
ItemFilter = "",
ItemColor = Color3.fromRGB(80, 255, 120),
HighValueColor = Color3.fromRGB(255, 215, 0),
MonsterColor = Color3.fromRGB(255, 55, 55),
PlayerColor = Color3.fromRGB(70, 170, 255),
HighValue = 500,
MaxDistance = 400,
MaxItems = 20,
MaxMonsters = 5,
WarnDistance = 50,
HideDisabledPrompts = true,
HideInvisible = true,
StaleSeconds = 20,
SpawnRadius = 50,
MonsterBlacklist = {},
ESPInterval = 0.2,
}
local running = true
local connections = {}
local function connect(signal, fn)
local c = signal:Connect(fn)
connections[#connections + 1] = c
return c
end
local CONFIG_FILE = "SOD_Ultra_config.json"
local saveKeys = {"ItemESP", "MonsterESP", "PlayerESP", "FullBright", "InfStamina", "InstantPrompt", "MonsterWarn", "ItemFilter"}
local savedWinPos, dirtyAt = nil, nil
local function markDirty() dirtyAt = os.clock() end
pcall(function()
if isfile and readfile and isfile(CONFIG_FILE) then
local data = HttpService:JSONDecode(readfile(CONFIG_FILE))
if type(data) == "table" then
for _, k in ipairs(saveKeys) do
if data[k] ~= nil and type(data[k]) == type(Config[k]) then Config[k] = data[k] end
end
if type(data.WinPos) == "table" and #data.WinPos == 4 then savedWinPos = data.WinPos end
end
end
end)
local function getGuiParent()
local ok, h = pcall(function() return gethui and gethui() end)
if ok and h then return h end
return CoreGui
end
local gui = Instance.new("ScreenGui")
gui.Name = "SOD_Ultra"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
if not pcall(function() gui.Parent = getGuiParent() end) then
gui.Parent = LocalPlayer:WaitForChild("PlayerGui")
end
local espFolder = Instance.new("Folder")
espFolder.Name = "ESP"
espFolder.Parent = gui
local warnFrame = Instance.new("Frame")
warnFrame.Size = UDim2.new(1, 0, 1, 0)
warnFrame.BackgroundTransparency = 1
warnFrame.Visible = false
warnFrame.Active = false
warnFrame.Parent = gui
local warnStroke = Instance.new("UIStroke")
warnStroke.Color = Color3.fromRGB(255, 30, 30)
warnStroke.Thickness = 14
warnStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
warnStroke.Transparency = 0.6
warnStroke.Parent = warnFrame
local warnText = Instance.new("TextLabel")
warnText.Size = UDim2.new(0, 300, 0, 28)
warnText.Position = UDim2.new(0.5, -150, 0, 40)
warnText.BackgroundTransparency = 1
warnText.TextColor3 = Color3.fromRGB(255, 70, 70)
warnText.TextStrokeTransparency = 0.3
warnText.Font = Enum.Font.GothamBold
warnText.TextSize = 20
warnText.Text = ""
warnText.Parent = warnFrame
local main = Instance.new("Frame")
main.Size = UDim2.new(0, 195, 0, 332)
main.Position = UDim2.new(0, 15, 0.4, 0)
main.BackgroundColor3 = Color3.fromRGB(15, 15, 18)
main.BorderSizePixel = 0
main.Parent = gui
Instance.new("UICorner", main).CornerRadius = UDim.new(0, 8)
if savedWinPos then
pcall(function()
main.Position = UDim2.new(savedWinPos[1], savedWinPos[2], savedWinPos[3], savedWinPos[4])
end)
end
local top = Instance.new("Frame")
top.Size = UDim2.new(1, 0, 0, 30)
top.BackgroundColor3 = Color3.fromRGB(24, 24, 30)
top.BorderSizePixel = 0
top.Parent = main
Instance.new("UICorner", top).CornerRadius = UDim.new(0, 8)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -8, 1, 0)
title.Position = UDim2.new(0, 8, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Steal or Die [RShift]"
title.TextColor3 = Color3.fromRGB(235, 235, 240)
title.Font = Enum.Font.GothamBold
title.TextSize = 13
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = top
do
local dragging, dragStart, startPos = false, nil, nil
connect(top.InputBegan, function(i)
if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then
dragging, dragStart, startPos = true, i.Position, main.Position
end
end)
connect(UserInputService.InputChanged, function(i)
if dragging and (i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch) then
local d = i.Position - dragStart
main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y)
end
end)
connect(UserInputService.InputEnded, function(i)
if dragging and (i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch) then
dragging = false
markDirty()
end
end)
end
connect(UserInputService.InputBegan, function(i, gp)
if not gp and i.KeyCode == Enum.KeyCode.RightShift then
main.Visible = not main.Visible
end
end)
local COLOR_ON = Color3.fromRGB(30, 100, 50)
local COLOR_OFF = Color3.fromRGB(30, 30, 36)
local function makeToggle(name, y, key, onChange)
local b = Instance.new("TextButton")
b.Size = UDim2.new(1, -12, 0, 26)
b.Position = UDim2.new(0, 6, 0, y)
b.Text = ""
b.AutoButtonColor = false
b.Parent = main
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 5)
local t = Instance.new("TextLabel")
t.Size = UDim2.new(1, -42, 1, 0)
t.Position = UDim2.new(0, 9, 0, 0)
t.BackgroundTransparency = 1
t.Text = name
t.TextColor3 = Color3.fromRGB(225, 225, 230)
t.Font = Enum.Font.GothamMedium
t.TextSize = 12
t.TextXAlignment = Enum.TextXAlignment.Left
t.Parent = b
local s = Instance.new("TextLabel")
s.Size = UDim2.new(0, 34, 1, 0)
s.Position = UDim2.new(1, -38, 0, 0)
s.BackgroundTransparency = 1
s.Font = Enum.Font.GothamBold
s.TextSize = 11
s.Parent = b
local function paint()
local on = Config[key]
b.BackgroundColor3 = on and COLOR_ON or COLOR_OFF
s.Text = on and "ON" or "OFF"
s.TextColor3 = on and Color3.fromRGB(100, 255, 130) or Color3.fromRGB(130, 130, 140)
end
paint()
connect(b.MouseButton1Click, function()
Config[key] = not Config[key]
paint()
markDirty()
if onChange then pcall(onChange, Config[key]) end
end)
end
local status = Instance.new("TextLabel")
status.Size = UDim2.new(1, -12, 0, 16)
status.Position = UDim2.new(0, 6, 0, 310)
status.BackgroundTransparency = 1
status.Text = "Загрузка..."
status.TextColor3 = Color3.fromRGB(85, 190, 110)
status.Font = Enum.Font.Gotham
status.TextSize = 10
status.Parent = main
local function saveNow()
if not writefile then return end
pcall(function()
local data = {}
for _, k in ipairs(saveKeys) do data[k] = Config[k] end
local p = main.Position
data.WinPos = {p.X.Scale, p.X.Offset, p.Y.Scale, p.Y.Offset}
writefile(CONFIG_FILE, HttpService:JSONEncode(data))
end)
end
local lightProps = {"Brightness", "ClockTime", "FogEnd", "GlobalShadows", "OutdoorAmbient", "Ambient"}
local origLighting = {}
for _, p in ipairs(lightProps) do origLighting[p] = Lighting[p] end
local fbValues = {
Brightness = 2, ClockTime = 14, FogEnd = 1e6, GlobalShadows = false,
OutdoorAmbient = Color3.fromRGB(160, 160, 160), Ambient = Color3.fromRGB(140, 140, 140),
}
local function applyFullBright()
for k, v in pairs(fbValues) do if Lighting[k] ~= v then Lighting[k] = v end end
end
local function restoreLighting()
for k, v in pairs(origLighting) do Lighting[k] = v end
end
local origHold = setmetatable({}, {__mode = "k"})
local function setInstant(prompt, on)
pcall(function()
if on then
if origHold[prompt] == nil then origHold[prompt] = prompt.HoldDuration end
if prompt.HoldDuration ~= 0 then prompt.HoldDuration = 0 end
elseif origHold[prompt] ~= nil then
prompt.HoldDuration = origHold[prompt]
origHold[prompt] = nil
end
end)
end
local blacklist = {
"door", "vent", "locker", "closet", "button", "switch", "barricade",
"exit", "gate", "wall", "floor", "light", "chair", "table", "desk",
"bed", "shelf", "cabinet", "plant", "trash", "pipe", "stair", "sign",
"handle", "hitbox", "attachment"
}
local goodWords = {
"phone", "wallet", "gold", "laptop", "safe", "bar", "watch", "key",
"tablet", "camera", "painting", "statue", "jewelry", "console",
"headphones", "cash", "ring", "drive", "usb", "bag", "purse",
"loot", "item", "pickup"
}
local genericNames = {
handle = true, part = true, main = true, root = true,
primarypart = true, hitbox = true, meshpart = true, attachment = true
}
local valueKeys = {"Value", "Price", "Worth", "Cash", "Amount"}
local weightKeys = {"Weight", "Mass", "Kg", "KG", "CarryWeight", "ItemWeight"}
local monsterWords = {"entity", "monster", "locust", "hollow", "hunter", "creature", "killer", "beast", "wendell", "rictus"}
local function hasWord(name, list)
for _, w in ipairs(list) do
if name:find(w, 1, true) then return true end
end
return false
end
local function hasValueAttr(inst)
if not inst then return false end
return inst:GetAttribute("Value") ~= nil
or inst:GetAttribute("Rarity") ~= nil
or inst:GetAttribute("Price") ~= nil
end
local function isLoot(inst, nameLower)
if not inst then return false end
if nameLower and hasWord(nameLower, blacklist) then return false end
if hasValueAttr(inst) then return true end
if nameLower and hasWord(nameLower, goodWords) then return true end
local par = inst.Parent
if par and par ~= workspace then
if hasValueAttr(par) then return true end
local pn = par.Name:lower()
if not hasWord(pn, blacklist) and hasWord(pn, goodWords) then return true end
end
return false
end
local function readNumberAttr(o, keys)
if not o then return nil end
for _, k in ipairs(keys) do
local v = o:GetAttribute(k)
if typeof(v) == "number" then return v end
local nv = o:FindFirstChild(k)
if nv and (nv:IsA("NumberValue") or nv:IsA("IntValue")) then return nv.Value end
end
return nil
end
local function getValue(inst)
local v = readNumberAttr(inst, valueKeys)
if v then return v end
local par = inst and inst.Parent
if par and par ~= workspace then return readNumberAttr(par, valueKeys) end
return nil
end
local function getWeight(inst)
local w = readNumberAttr(inst, weightKeys)
if w then return w end
local par = inst and inst.Parent
if par and par ~= workspace then return readNumberAttr(par, weightKeys) end
return nil
end
local function fmt(n)
local s = tostring(math.floor(n + 0.5))
local r = s:reverse():gsub("(%d%d%d)", "%1,"):reverse()
return (r:gsub("^,", ""))
end
local function fmtWeight(w)
if w >= 10 then return tostring(math.floor(w + 0.5)) end
local s = string.format("%.1f", w)
if s:sub(-2) == ".0" then return s:sub(1, -3) end
return s
end
local function resolvePart(prompt)
local p = prompt.Parent
if not p then return nil end
if p:IsA("BasePart") then return p end
if p:IsA("Attachment") then
local pp = p.Parent
return (pp and pp:IsA("BasePart")) and pp or nil
end
if p:IsA("Model") then
return p.PrimaryPart or p:FindFirstChildWhichIsA("BasePart", true)
end
return p:FindFirstChildWhichIsA("BasePart", true)
end
local function displayName(inst)
local base = inst
if inst:IsA("Attachment") and inst.Parent then base = inst.Parent end
if base:IsA("BasePart") and genericNames[base.Name:lower()]
and base.Parent and base.Parent ~= workspace then
return base.Parent.Name
end
return base.Name
end
local prompts, monsters, spawnPoints = {}, {}, {}
local function addPrompt(prompt)
if prompts[prompt] then return end
local inst = prompt.Parent
if not inst then return end
local name = displayName(inst)
local nameLower = name:lower()
local loot = isLoot(inst, nameLower)
prompts[prompt] = {
inst = inst,
part = resolvePart(prompt),
name = name,
nameLower = nameLower,
loot = loot,
}
if loot and Config.InstantPrompt then setInstant(prompt, true) end
end
local function handleDescendant(d)
if d:IsA("ProximityPrompt") then
addPrompt(d)
elseif d:IsA("Humanoid") then
local m = d.Parent
if m and m:IsA("Model") then monsters[m] = true end
elseif d:IsA("SpawnLocation") then
spawnPoints[#spawnPoints + 1] = d.Position
end
end
local function handleChild(obj)
if obj:IsA("Model") then
if obj:GetAttribute("EntityKind") ~= nil or hasWord(obj.Name:lower(), monsterWords) then
monsters[obj] = true
end
end
end
connect(workspace.DescendantAdded, function(d) pcall(handleDescendant, d) end)
connect(workspace.DescendantRemoving, function(d)
if d:IsA("ProximityPrompt") then
setInstant(d, false)
prompts[d] = nil
elseif d:IsA("Humanoid") then
if d.Parent then monsters[d.Parent] = nil end
end
end)
connect(workspace.ChildAdded, function(c) pcall(handleChild, c) end)
task.spawn(function()
for _, c in ipairs(workspace:GetChildren()) do pcall(handleChild, c) end
local n = 0
for _, d in ipairs(workspace:GetDescendants()) do
if not running then return end
pcall(handleDescendant, d)
n += 1
if n % 400 == 0 then task.wait() end
end
end)
-- ==================== МОНСТРЫ (IsEntity / EntityKind) ====================
local posTrack = setmetatable({}, {__mode = "k"})
local function nearSpawn(pos)
for _, sp in ipairs(spawnPoints) do
if (sp - pos).Magnitude <= Config.SpawnRadius then return true end
end
return false
end
local function isMonsterPlayer(plr)
if not plr or plr == LocalPlayer then return false end
if plr:GetAttribute("IsEntity") == true then return true end
local kind = plr:GetAttribute("EntityKind")
if kind ~= nil and kind ~= "" then return true end
local char = plr.Character
if char then
if char:GetAttribute("IsEntity") == true then return true end
if char:GetAttribute("EntityKind") ~= nil then return true end
end
return false
end
local function getEntityLabel(model, plr)
local kind = model and model:GetAttribute("EntityKind")
if not kind and plr then kind = plr:GetAttribute("EntityKind") end
if typeof(kind) == "string" and kind ~= "" then
if plr then return plr.Name .. " [" .. kind .. "]" end
return tostring(kind)
end
if plr then return plr.Name .. " [ENTITY]" end
return (model and model.Name) or "ENTITY"
end
local function isStale(model, part, now)
local hum = model:FindFirstChildOfClass("Humanoid")
if hum and hum.Health <= 0 then return true end
if model:GetAttribute("EntityKind") ~= nil then return false end
local owner = Players:GetPlayerFromCharacter(model)
if owner and (owner:GetAttribute("IsEntity") == true or owner:GetAttribute("EntityKind") ~= nil) then
return false
end
if Config.HideInvisible then
local parts, visible = 0, 0
for _, c in ipairs(model:GetChildren()) do
if c:IsA("BasePart") and c.Name ~= "HumanoidRootPart" then
parts += 1
if c.Transparency < 0.95 then visible += 1 break end
end
end
if parts > 0 and visible == 0 then return true end
end
if not owner then
local pos = part.Position
local tr = posTrack[model]
if not tr then
tr = {pos = pos, t = now}
posTrack[model] = tr
elseif (pos - tr.pos).Magnitude > 0.5 then
tr.pos, tr.t = pos, now
end
local limit = part.Anchored and 8 or Config.StaleSeconds
if now - tr.t > limit and nearSpawn(pos) then return true end
end
return false
end
-- ==================== ESP UI ====================
local function newTag(color, height)
local bb = Instance.new("BillboardGui")
bb.Size = UDim2.new(0, 150, 0, height)
bb.StudsOffset = Vector3.new(0, 2.5, 0)
bb.AlwaysOnTop = true
bb.MaxDistance = Config.MaxDistance
bb.Enabled = false
bb.Parent = espFolder
local l = Instance.new("TextLabel")
l.Size = UDim2.new(1, 0, 1, 0)
l.BackgroundTransparency = 1
l.TextColor3 = color
l.TextStrokeTransparency = 0.4
l.Font = Enum.Font.GothamBold
l.TextSize = 11
l.Parent = bb
return {bb = bb, label = l}
end
local function setTag(tag, part, text, color)
if not part or not part.Parent then return end
local bb = tag.bb
if bb.Adornee ~= part then bb.Adornee = part end
if tag.label.Text ~= text then tag.label.Text = text end
if color and tag.label.TextColor3 ~= color then tag.label.TextColor3 = color end
if not bb.Enabled then bb.Enabled = true end
end
local function hideTag(tag)
if tag.bb.Enabled then tag.bb.Enabled = false tag.bb.Adornee = nil end
end
local function hidePoolFrom(pool, from)
for i = from, #pool do hideTag(pool[i]) end
end
local itemPool, monsterPool, monsterHL, playerTags = {}, {}, {}, {}
local function getPoolTag(pool, i, color, height)
if not pool[i] then pool[i] = newTag(color, height) end
return pool[i]
end
local function getHighlight(i)
if not monsterHL[i] then
local h = Instance.new("Highlight")
h.FillTransparency = 0.7
h.OutlineTransparency = 0
h.FillColor = Color3.fromRGB(255, 40, 40)
h.OutlineColor = Color3.fromRGB(255, 80, 80)
h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
h.Enabled = false
h.Parent = espFolder
monsterHL[i] = h
end
return monsterHL[i]
end
connect(Players.PlayerRemoving, function(plr)
if playerTags[plr] then
pcall(function() playerTags[plr].bb:Destroy() end)
playerTags[plr] = nil
end
end)
-- Stamina
local staminaList, seenMax, stamWarned = {}, setmetatable({}, {__mode = "k"}), false
local function isStaminaName(n)
n = n:lower()
return n:find("stamina", 1, true) and not n:find("max", 1, true)
and not n:find("regen", 1, true) and not n:find("drain", 1, true) and not n:find("cost", 1, true)
end
local function scanStamina()
table.clear(staminaList)
local char = LocalPlayer.Character
local holders = {LocalPlayer}
if char then
holders[#holders + 1] = char
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then holders[#holders + 1] = hum end
end
for _, h in ipairs(holders) do
for k, v in pairs(h:GetAttributes()) do
if typeof(v) == "number" and isStaminaName(k) then
staminaList[#staminaList + 1] = {kind = "attr", obj = h, key = k}
end
end
end
local function checkVal(o)
if (o:IsA("NumberValue") or o:IsA("IntValue")) and isStaminaName(o.Name) then
staminaList[#staminaList + 1] = {kind = "val", obj = o}
end
end
if char then for _, d in ipairs(char:GetDescendants()) do checkVal(d) end end
for _, c in ipairs(LocalPlayer:GetChildren()) do
checkVal(c)
if c:IsA("Folder") then for _, cc in ipairs(c:GetChildren()) do checkVal(cc) end end
end
end
local function bumpMax(obj, key, cur, extra)
local t = seenMax[obj]
if not t then t = {} seenMax[obj] = t end
local m = math.max(t[key] or 0, cur, extra or 0)
t[key] = m
return m
end
local function fillStamina()
for _, e in ipairs(staminaList) do
local o = e.obj
if o and o.Parent then
if e.kind == "attr" then
local cur = o:GetAttribute(e.key)
if typeof(cur) == "number" then
local extra = o:GetAttribute("MaxStamina")
local m = bumpMax(o, e.key, cur, typeof(extra) == "number" and extra or nil)
if cur < m then o:SetAttribute(e.key, m) end
end
else
local m = bumpMax(o, "Value", o.Value)
if o.Value < m then o.Value = m end
end
end
end
end
env.SOD_Dump = function()
print("======== SOD_Dump ========")
for _, plr in ipairs(Players:GetPlayers()) do
print("---", plr.Name)
print(" IsEntity:", plr:GetAttribute("IsEntity"))
print(" EntityKind:", plr:GetAttribute("EntityKind"))
print(" isMonsterPlayer:", isMonsterPlayer(plr))
if plr.Character then
print(" char.EntityKind:", plr.Character:GetAttribute("EntityKind"))
print(" char.IsEntity:", plr.Character:GetAttribute("IsEntity"))
end
end
print("--- workspace EntityKind ---")
for _, obj in ipairs(workspace:GetChildren()) do
if obj:IsA("Model") and obj:GetAttribute("EntityKind") ~= nil then
print(" ", obj.Name, obj:GetAttribute("EntityKind"))
end
end
print("==========================")
end
local found, mons, monPlr = {}, {}, {}
local lastStatus, warnDist, startPosSaved = "", nil, false
local function sortByDist(a, b) return a.dist < b.dist end
local function tryAddMonster(model, origin, maxDist, now, label)
if not model or not model.Parent then return end
local part = model:FindFirstChild("HumanoidRootPart") or model.PrimaryPart or model:FindFirstChildWhichIsA("BasePart")
if not part or not part.Parent then return end
if isStale(model, part, now) then return end
local dist = (part.Position - origin).Magnitude
if dist > maxDist or dist < 2 then return end
for i = 1, #mons do
if mons[i].model == model then return end
end
mons[#mons + 1] = {model = model, part = part, dist = dist, label = label or model.Name}
end
local function hideWarn()
warnDist = nil
warnFrame.Visible = false
end
local function refreshESP()
local char = LocalPlayer.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then
hidePoolFrom(itemPool, 1)
hidePoolFrom(monsterPool, 1)
for _, h in ipairs(monsterHL) do h.Enabled = false h.Adornee = nil end
for _, t in pairs(playerTags) do hideTag(t) end
hideWarn()
return
end
local origin = root.Position
local maxDist = Config.MaxDistance
local now = os.clock()
if not startPosSaved then
startPosSaved = true
spawnPoints[#spawnPoints + 1] = origin
end
-- ITEMS
local itemsShown, itemsTotal = 0, 0
if Config.ItemESP then
table.clear(found)
local filter = Config.ItemFilter
for prompt, e in pairs(prompts) do
if e.loot and (not Config.HideDisabledPrompts or prompt.Enabled)
and (filter == "" or e.nameLower:find(filter, 1, true)) then
local part = e.part
if not part or not part.Parent then
part = resolvePart(prompt)
e.part = part
end
if part and part.Parent then
local dist = (part.Position - origin).Magnitude
if dist <= maxDist then
found[#found + 1] = {part = part, inst = e.inst, name = e.name, dist = dist}
end
end
end
end
itemsTotal = #found
table.sort(found, sortByDist)
itemsShown = math.min(itemsTotal, Config.MaxItems)
for i = 1, itemsShown do
local d = found[i]
local v = getValue(d.inst)
local w = getWeight(d.inst)
local hi = v and v >= Config.HighValue
local line2 = {}
if v then line2[#line2 + 1] = "$" .. fmt(v) end
if w then line2[#line2 + 1] = fmtWeight(w) .. "kg" end
line2[#line2 + 1] = math.floor(d.dist) .. "m"
local text = (hi and "★ " or "") .. d.name .. "\n" .. table.concat(line2, " | ")
setTag(getPoolTag(itemPool, i, Config.ItemColor, 34), d.part, text,
hi and Config.HighValueColor or Config.ItemColor)
end
end
hidePoolFrom(itemPool, itemsShown + 1)
-- MONSTERS
table.clear(mons)
table.clear(monPlr)
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and isMonsterPlayer(plr) and plr.Character then
monPlr[plr] = true
tryAddMonster(plr.Character, origin, maxDist, now, getEntityLabel(plr.Character, plr))
end
end
for _, obj in ipairs(workspace:GetChildren()) do
if obj:IsA("Model") and obj:GetAttribute("EntityKind") ~= nil then
local plr = Players:GetPlayerFromCharacter(obj)
if plr ~= LocalPlayer then
if plr then monPlr[plr] = true end
tryAddMonster(obj, origin, maxDist, now, getEntityLabel(obj, plr))
end
end
end
for model in pairs(monsters) do
if not model.Parent then
monsters[model] = nil
posTrack[model] = nil
elseif not Players:GetPlayerFromCharacter(model)
and not Config.MonsterBlacklist[model.Name] then
if model:GetAttribute("EntityKind") ~= nil or hasWord(model.Name:lower(), monsterWords) then
tryAddMonster(model, origin, maxDist, now, getEntityLabel(model, nil))
end
end
end
table.sort(mons, sortByDist)
local monShown = 0
if Config.MonsterESP then
for i = 1, math.min(#mons, Config.MaxMonsters) do
local d = mons[i]
monShown += 1
setTag(getPoolTag(monsterPool, monShown, Config.MonsterColor, 30), d.part,
d.label .. "\n" .. math.floor(d.dist) .. "m", Config.MonsterColor)
local h = getHighlight(monShown)
if h.Adornee ~= d.model then h.Adornee = d.model end
h.Enabled = true
end
end
hidePoolFrom(monsterPool, monShown + 1)
for i = monShown + 1, #monsterHL do
monsterHL[i].Enabled = false
monsterHL[i].Adornee = nil
end
local nearest = mons[1]
if Config.MonsterWarn and nearest and nearest.dist <= Config.WarnDistance then
warnDist = nearest.dist
warnFrame.Visible = true
local t = "!! ENTITY " .. math.floor(nearest.dist) .. "m !!"
if warnText.Text ~= t then warnText.Text = t end
else
hideWarn()
end
-- PLAYERS
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer then
local tag = playerTags[plr]
local show = false
if Config.PlayerESP and not monPlr[plr] then
local pc = plr.Character
local hrp = pc and pc:FindFirstChild("HumanoidRootPart")
local hum = pc and pc:FindFirstChildOfClass("Humanoid")
if hrp and hrp.Parent and (not hum or hum.Health > 0) then
local dist = (hrp.Position - origin).Magnitude
if dist <= maxDist then
if not tag then
tag = newTag(Config.PlayerColor, 28)
playerTags[plr] = tag
end
setTag(tag, hrp, plr.Name .. "\n" .. math.floor(dist) .. "m", Config.PlayerColor)
show = true
end
end
end
if not show and tag then hideTag(tag) end
end
end
local st = string.format("I %d | E %d | S %d", itemsTotal, #mons, #staminaList)
if st ~= lastStatus then lastStatus = st status.Text = st end
end
makeToggle("Item ESP", 38, "ItemESP")
makeToggle("Monster ESP", 68, "MonsterESP")
makeToggle("Player ESP", 98, "PlayerESP")
makeToggle("FullBright", 128, "FullBright", function(v)
if v then applyFullBright() else restoreLighting() end
end)
makeToggle("Inf Stamina", 158, "InfStamina")
makeToggle("Instant Prompt", 188, "InstantPrompt", function(v)
for prompt, e in pairs(prompts) do if e.loot then setInstant(prompt, v) end end
end)
makeToggle("Monster Warn", 218, "MonsterWarn", function(v)
if not v then hideWarn() end
end)
local box = Instance.new("TextBox")
box.Size = UDim2.new(1, -12, 0, 24)
box.Position = UDim2.new(0, 6, 0, 250)
box.BackgroundColor3 = COLOR_OFF
box.BorderSizePixel = 0
box.Text = Config.ItemFilter
box.PlaceholderText = "Фильтр предметов..."
box.PlaceholderColor3 = Color3.fromRGB(120, 120, 130)
box.TextColor3 = Color3.fromRGB(225, 225, 230)
box.Font = Enum.Font.Gotham
box.TextSize = 12
box.ClearTextOnFocus = false
box.Parent = main
Instance.new("UICorner", box).CornerRadius = UDim.new(0, 5)
connect(box.FocusLost, function()
Config.ItemFilter = (box.Text:lower():match("^%s*(.-)%s*$")) or ""
markDirty()
end)
local function unload()
running = false
saveNow()
for _, c in ipairs(connections) do pcall(function() c:Disconnect() end) end
table.clear(connections)
for prompt in pairs(prompts) do setInstant(prompt, false) end
pcall(restoreLighting)
pcall(function() gui:Destroy() end)
env.SOD_Unload = nil
print("[SOD] выгружен")
end
env.SOD_Unload = unload
local unloadBtn = Instance.new("TextButton")
unloadBtn.Size = UDim2.new(1, -12, 0, 24)
unloadBtn.Position = UDim2.new(0, 6, 0, 280)
unloadBtn.BackgroundColor3 = Color3.fromRGB(90, 30, 30)
unloadBtn.Text = "Unload"
unloadBtn.TextColor3 = Color3.fromRGB(235, 200, 200)
unloadBtn.Font = Enum.Font.GothamBold
unloadBtn.TextSize = 12
unloadBtn.Parent = main
Instance.new("UICorner", unloadBtn).CornerRadius = UDim.new(0, 5)
connect(unloadBtn.MouseButton1Click, unload)
if Config.FullBright then pcall(applyFullBright) end
pcall(scanStamina)
local accESP, accStam, accLight, accSlow = 0, 0, 0, 0
connect(RunService.Heartbeat, function(dt)
if not running then return end
accESP += dt accStam += dt accLight += dt accSlow += dt
if accESP >= Config.ESPInterval then
accESP = 0
local ok, err = pcall(refreshESP)
if not ok then warn("[SOD] ESP: " .. tostring(err)) end
end
if warnDist and warnFrame.Visible then
local k = 1 - math.clamp(warnDist / Config.WarnDistance, 0, 1)
local pulse = (math.sin(os.clock() * (6 + 8 * k)) + 1) / 2
warnStroke.Transparency = 1 - (0.35 + 0.5 * k) * (0.5 + 0.5 * pulse)
end
if accStam >= 0.25 then
accStam = 0
if Config.InfStamina then pcall(fillStamina) end
end
if accLight >= 1 then
accLight = 0
if Config.FullBright then pcall(applyFullBright) end
if dirtyAt and os.clock() - dirtyAt > 1 then dirtyAt = nil saveNow() end
end
if accSlow >= 3 then
accSlow = 0
pcall(scanStamina)
pcall(function()
for prompt, e in pairs(prompts) do
local inst = e.inst
if inst and inst.Parent then
if not e.loot then
local n = displayName(inst)
if isLoot(inst, n:lower()) then
e.loot, e.name, e.nameLower = true, n, n:lower()
end
end
if e.loot and Config.InstantPrompt then setInstant(prompt, true) end
end
end
end)
end
end)
print("[SOD] Ultra Light v3.4 loaded — monster via IsEntity/EntityKind")How to Execute Steal Or Die Script – Xeno Work
Step 1: Copy Code: Click the Copy Code button in the viewer above to grab the clean Lua loadstring.
Step 2: Launch Executor: Open a compatible, unpatched executor. If you need one, check our Roblox Executors Directory.
Step 3: Join Experience: Launch Roblox and join Steal Or Die.
Step 4: Attach & Run: Attach/inject your executor into the Roblox process, paste the code into the script tab, and press Execute.
Created By
View Author ProfileFeatures & Information
Script Changelog (3)
Community Comments (0)
No comments yet for this script.
Frequently Asked Questions
How do I execute Steal Or Die Script – Xeno Work in Roblox?
To run Steal Or Die Script – Xeno Work, copy the Lua loadstring from the code viewer above, launch Roblox and join Steal Or Die, attach a working executor (such as Potassium, Solara, or Delta from our Executors directory), paste the code into your executor console, and click Execute.
Is Steal Or Die Script – Xeno Work keyless or does it require an access key?
Steal Or Die Script – Xeno Work requires an access key. You can retrieve the official key directly using the Get Script Key link provided above.
Is Steal Or Die Script – Xeno Work currently safe and working?
This script is active and operational. Always test scripts using a secondary (alt) Roblox account to safeguard your main profile against anti-cheat bans.


