Steal Or Die Script – Xeno Work - Verified script for Steal Or Die
Key Required

Steal Or Die Script – Xeno Work

Steal Or DieLunaBloxLunaBlox 1.5K views 1.9K executesUpdated Oct 23, 2026
Unrated
00
Lua Script•946 lines (32107 chars)
-- 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

LunaBlox
LunaBlox
Script Creator
View Author Profile

Roblox Experience

Steal Or Die [MASSIVE HALLOWEEN UPD!]
Steal Or Die
By Vantage Gameworks
Active Players:3.8K
Play on Roblox

Features & Information

Execute Steal Or Die Script – Xeno Work. Key system required, created by LunaBlox, updated Oct 23, 2026. Tested and working on supported executors.
#steal#xeno#die

Script Changelog (3)

@QueueSherlockOct 25, 2026

Edited during review before approval

@LunaBloxOct 23, 2026

Update script

@LunaBloxOct 23, 2026

Create script

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.