-- Overworld -- RightShift toggles the panel. if getgenv().OW_PANEL then pcall(function() getgenv().OW_PANEL.alive = false for _, c in ipairs(getgenv().OW_PANEL.conns or {}) do pcall(function() c:Disconnect() end) end if getgenv().OW_PANEL.gui then getgenv().OW_PANEL.gui:Destroy() end end) end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local LP = Players.LocalPlayer local NET = ReplicatedStorage:WaitForChild("Network", 15) local STATE_OK, StateManager = pcall(require, ReplicatedStorage.Shared.Modules.State.StateManager) local ENV = { alive = true, gui = nil, conns = {}, speedTag = nil, speedValue = 0, purgeDebuffs = false, purgeCooldowns = false, slowImmune = false, noclip = false, espPlayers = false, espDemons = false, espObjects = {}, espMap = {}, reachLock = false, autoSwing = false, manualGate = true, swingInterval = 0.6, lockOffset = Vector3.new(0, 0, 12), lastSwing = 0, parryUntil = 0, lastBreathe = 0, lastBlock = 0, lockTarget = nil, sustain = false, holdBlock = false, autoParry = false, autoBreathe = false, swings = 0, lootAll = false, lootSeen = nil, lootAt = 0, lootCount = 0, } -- sweep stale ESP billboards left behind by a previous panel build for _, d in ipairs(workspace:GetDescendants()) do if d.Name == "OW_ESP" and d:IsA("BillboardGui") then pcall(function() d:Destroy() end) end end for _, p in ipairs(Players:GetPlayers()) do if p.Character then for _, d in ipairs(p.Character:GetDescendants()) do if d.Name == "OW_ESP" and d:IsA("BillboardGui") then pcall(function() d:Destroy() end) end end end end getgenv().OW_PANEL = ENV local DEBUFFS = { "Freeze", "Stun", "Stun Slow", "Parried Slow", "Soft Stun", "Box Reel", "M1 Slow", "Light Slow", "Heavy Slow", "Winded", "No Jump", "No Rotate", "Burning", "Poisoned", "AntiHeal", "Sunburning", "ClientFlashstep", } local function character() local ch = LP.Character if not ch or not ch.Parent then return nil end return ch end local function humanoid() local ch = character() return ch and ch:FindFirstChildOfClass("Humanoid") or nil end local function root() local ch = character() return ch and ch:FindFirstChild("HumanoidRootPart") or nil end local function state() if not STATE_OK or not StateManager then return nil end local ch = character() if not ch then return nil end local ok, st = pcall(function() return StateManager:Get(ch) end) if ok and st then return st end return nil end -- gethui throws inside cloneref on some executors local function guiParent() local ok, hui = pcall(gethui) if ok and hui then return hui end ok, hui = pcall(function() return game:GetService("CoreGui") end) if ok and hui then return hui end return LP:WaitForChild("PlayerGui") end local function new(class, props, parent) local o = Instance.new(class) for k, v in pairs(props) do o[k] = v end o.Parent = parent return o end local C = { bg = Color3.fromRGB(11, 12, 15), surface = Color3.fromRGB(18, 20, 25), raised = Color3.fromRGB(24, 27, 33), line = Color3.fromRGB(36, 40, 48), text = Color3.fromRGB(232, 236, 244), dim = Color3.fromRGB(122, 130, 145), faint = Color3.fromRGB(74, 80, 92), track = Color3.fromRGB(52, 57, 68), accent = Color3.fromRGB(214, 72, 72), good = Color3.fromRGB(84, 200, 130), } local function corner(obj, r) return new("UICorner", { CornerRadius = UDim.new(0, r or 6) }, obj) end local function stroke(obj, colour, thick, transparency) return new("UIStroke", { Color = colour or C.line, Thickness = thick or 1, Transparency = transparency or 0, ApplyStrokeMode = Enum.ApplyStrokeMode.Border, }, obj) end local function padding(obj, l, t, r, b) return new("UIPadding", { PaddingLeft = UDim.new(0, l or 0), PaddingTop = UDim.new(0, t or 0), PaddingRight = UDim.new(0, r or 0), PaddingBottom = UDim.new(0, b or 0), }, obj) end ------------------------------------------------------------------------ -- shell ------------------------------------------------------------------------ local gui = new("ScreenGui", { Name = "OW_Panel", ResetOnSpawn = false, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, DisplayOrder = 999, }, guiParent()) ENV.gui = gui local main = new("Frame", { Name = "Main", Size = UDim2.fromOffset(640, 650), Position = UDim2.fromOffset(50, 30), BackgroundColor3 = C.bg, BorderSizePixel = 0, Active = true, }, gui) corner(main, 10) stroke(main, C.line, 1) local HEADER_H = 50 local FOOTER_H = 34 local SIDEBAR_W = 136 local header = new("Frame", { Name = "Header", Size = UDim2.new(1, 0, 0, HEADER_H), BackgroundColor3 = C.surface, BorderSizePixel = 0, }, main) corner(header, 10) -- square off the bottom corners of the header so it reads as one bar new("Frame", { Size = UDim2.new(1, 0, 0, 12), Position = UDim2.new(0, 0, 1, -12), BackgroundColor3 = C.surface, BorderSizePixel = 0, }, header) local accentBar = new("Frame", { Size = UDim2.fromOffset(4, 18), Position = UDim2.fromOffset(16, 16), BackgroundColor3 = C.accent, BorderSizePixel = 0, }, header) corner(accentBar, 2) new("TextLabel", { Size = UDim2.fromOffset(220, 18), Position = UDim2.fromOffset(30, 8), BackgroundTransparency = 1, Font = Enum.Font.GothamBold, TextSize = 13, TextColor3 = C.text, TextXAlignment = Enum.TextXAlignment.Left, Text = "OVERWORLD", }, header) new("TextLabel", { Size = UDim2.fromOffset(220, 14), Position = UDim2.fromOffset(30, 26), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 10, TextColor3 = C.faint, TextXAlignment = Enum.TextXAlignment.Left, Text = "state manager // right-shift", }, header) local liveDot = new("Frame", { Size = UDim2.fromOffset(7, 7), Position = UDim2.new(1, -96, 0.5, -4), BackgroundColor3 = C.good, BorderSizePixel = 0, }, header) corner(liveDot, 4) local statusLabel = new("TextLabel", { Size = UDim2.fromOffset(52, 20), Position = UDim2.new(1, -84, 0.5, -10), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 10, TextColor3 = C.dim, TextXAlignment = Enum.TextXAlignment.Left, Text = "live", }, header) local closeBtn = new("TextButton", { Size = UDim2.fromOffset(24, 24), Position = UDim2.new(1, -34, 0.5, -12), BackgroundColor3 = C.raised, BorderSizePixel = 0, Font = Enum.Font.GothamBold, TextSize = 13, TextColor3 = C.dim, Text = "x", AutoButtonColor = false, }, header) corner(closeBtn, 5) ------------------------------------------------------------------------ -- drag ------------------------------------------------------------------------ do local dragging, dragStart, startPos = false, nil, nil header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = main.Position end end) header.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then local d = input.Position - dragStart main.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y ) end end) end ------------------------------------------------------------------------ -- sidebar ------------------------------------------------------------------------ local sidebar = new("Frame", { Name = "Sidebar", Size = UDim2.new(0, SIDEBAR_W, 1, -(HEADER_H + FOOTER_H)), Position = UDim2.fromOffset(0, HEADER_H), BackgroundColor3 = C.surface, BorderSizePixel = 0, }, main) new("Frame", { Size = UDim2.new(0, 1, 1, 0), Position = UDim2.new(1, -1, 0, 0), BackgroundColor3 = C.line, BorderSizePixel = 0, }, sidebar) local tabList = new("Frame", { Size = UDim2.new(1, 0, 0, 0), Position = UDim2.fromOffset(0, 12), BackgroundTransparency = 1, AutomaticSize = Enum.AutomaticSize.Y, }, sidebar) new("UIListLayout", { Padding = UDim.new(0, 4), SortOrder = Enum.SortOrder.LayoutOrder, }, tabList) local content = new("Frame", { Name = "Content", Size = UDim2.new(1, -SIDEBAR_W, 1, -(HEADER_H + FOOTER_H)), Position = UDim2.fromOffset(SIDEBAR_W, HEADER_H), BackgroundTransparency = 1, }, main) padding(content, 14, 10, 10, 0) local footer = new("Frame", { Name = "Footer", Size = UDim2.new(1, 0, 0, FOOTER_H), Position = UDim2.new(0, 0, 1, -FOOTER_H), BackgroundColor3 = C.surface, BorderSizePixel = 0, }, main) new("Frame", { Size = UDim2.new(1, 0, 0, 1), BackgroundColor3 = C.line, BorderSizePixel = 0, }, footer) local footTarget = new("TextLabel", { Size = UDim2.new(0.62, -16, 1, 0), Position = UDim2.fromOffset(14, 0), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 10, TextColor3 = C.dim, TextXAlignment = Enum.TextXAlignment.Left, Text = "target -", }, footer) local footSwing = new("TextLabel", { Size = UDim2.new(0.38, -14, 1, 0), Position = UDim2.new(0.62, 0, 0, 0), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 10, TextColor3 = C.dim, TextXAlignment = Enum.TextXAlignment.Right, Text = "swings 0", }, footer) ------------------------------------------------------------------------ -- tabs ------------------------------------------------------------------------ local pages = {} local tabButtons = {} local tabAccents = {} local function makeTab(name, label, order) local btn = new("TextButton", { Size = UDim2.new(1, -16, 0, 38), Position = UDim2.fromOffset(8, 0), BackgroundColor3 = C.surface, BorderSizePixel = 0, Font = Enum.Font.GothamBold, TextSize = 11, TextColor3 = C.dim, Text = label, TextXAlignment = Enum.TextXAlignment.Left, LayoutOrder = order, AutoButtonColor = false, }, tabList) corner(btn, 6) padding(btn, 14, 0, 8, 0) local accent = new("Frame", { Size = UDim2.new(0, 3, 0, 0), Position = UDim2.fromOffset(0, 19), BackgroundColor3 = C.accent, BorderSizePixel = 0, }, btn) corner(accent, 2) local page = new("ScrollingFrame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarThickness = 3, ScrollBarImageColor3 = C.line, ScrollBarImageTransparency = 0.3, CanvasSize = UDim2.new(), AutomaticCanvasSize = Enum.AutomaticSize.Y, Visible = false, }, content) new("UIListLayout", { Padding = UDim.new(0, 5), SortOrder = Enum.SortOrder.LayoutOrder, }, page) pages[name] = page tabButtons[name] = btn tabAccents[name] = accent btn.MouseButton1Click:Connect(function() for n, p in pairs(pages) do p.Visible = (n == name) end for n, b in pairs(tabButtons) do local on = (n == name) b.TextColor3 = on and C.text or C.dim b.BackgroundColor3 = on and C.raised or C.surface tabAccents[n].Size = UDim2.new(0, 3, 0, on and 18 or 0) end end) return page end ------------------------------------------------------------------------ -- widgets ------------------------------------------------------------------------ local function section(parent, text, order) local f = new("Frame", { Size = UDim2.new(1, -6, 0, 20), BackgroundTransparency = 1, LayoutOrder = order, }, parent) new("TextLabel", { Size = UDim2.fromOffset(200, 20), BackgroundTransparency = 1, Font = Enum.Font.GothamBold, TextSize = 10, TextColor3 = C.accent, TextXAlignment = Enum.TextXAlignment.Left, Text = string.upper(text), }, f) new("Frame", { Size = UDim2.new(1, -212, 0, 1), Position = UDim2.fromOffset(206, 9), BackgroundColor3 = C.line, BorderSizePixel = 0, }, f) return f end local function card(parent, order, height) local f = new("Frame", { Size = UDim2.new(1, -6, 0, height or 44), BackgroundColor3 = C.raised, BorderSizePixel = 0, LayoutOrder = order, }, parent) corner(f, 7) stroke(f, C.line, 1, 0.35) return f end local function toggle(page, label, sub, order, initial, onChange) local r = card(page, order, sub and 46 or 40) new("TextLabel", { Size = UDim2.new(1, -70, 0, 16), Position = UDim2.fromOffset(14, sub and 9 or 12), BackgroundTransparency = 1, Font = Enum.Font.Gotham, TextSize = 12, TextColor3 = C.text, TextXAlignment = Enum.TextXAlignment.Left, Text = label, }, r) if sub then new("TextLabel", { Size = UDim2.new(1, -70, 0, 13), Position = UDim2.fromOffset(14, 25), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 9, TextColor3 = C.faint, TextXAlignment = Enum.TextXAlignment.Left, Text = sub, }, r) end local on = initial local track = new("TextButton", { Size = UDim2.fromOffset(38, 20), Position = UDim2.new(1, -52, 0.5, -10), BackgroundColor3 = on and C.accent or C.track, BorderSizePixel = 0, Text = "", AutoButtonColor = false, }, r) corner(track, 10) local knob = new("Frame", { Size = UDim2.fromOffset(14, 14), Position = on and UDim2.fromOffset(21, 3) or UDim2.fromOffset(3, 3), BackgroundColor3 = C.text, BorderSizePixel = 0, }, track) corner(knob, 7) track.MouseButton1Click:Connect(function() on = not on TweenService:Create(track, TweenInfo.new(0.15, Enum.EasingStyle.Quad), { BackgroundColor3 = on and C.accent or C.track, }):Play() TweenService:Create(knob, TweenInfo.new(0.15, Enum.EasingStyle.Quad), { Position = on and UDim2.fromOffset(21, 3) or UDim2.fromOffset(3, 3), }):Play() pcall(onChange, on) end) return track end local function button(page, label, order, colour, onClick) local btn = new("TextButton", { Size = UDim2.new(1, -6, 0, 32), BackgroundColor3 = colour or C.raised, BorderSizePixel = 0, Font = Enum.Font.GothamBold, TextSize = 11, TextColor3 = C.text, Text = label, LayoutOrder = order, AutoButtonColor = false, }, page) corner(btn, 7) stroke(btn, C.line, 1, 0.4) btn.MouseButton1Click:Connect(function() pcall(onClick) end) return btn end local function slider(page, label, order, min, max, initial, onChanged) local r = card(page, order, 48) local val = initial local nameLabel = new("TextLabel", { Size = UDim2.new(1, -20, 0, 16), Position = UDim2.fromOffset(14, 8), BackgroundTransparency = 1, Font = Enum.Font.Gotham, TextSize = 11, TextColor3 = C.dim, TextXAlignment = Enum.TextXAlignment.Left, Text = label, }, r) local valLabel = new("TextLabel", { Size = UDim2.fromOffset(60, 16), Position = UDim2.new(1, -74, 0, 8), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 11, TextColor3 = C.accent, TextXAlignment = Enum.TextXAlignment.Right, Text = tostring(val), }, r) local bar = new("Frame", { Size = UDim2.new(1, -28, 0, 5), Position = UDim2.fromOffset(14, 30), BackgroundColor3 = C.track, BorderSizePixel = 0, }, r) corner(bar, 3) local fill = new("Frame", { Size = UDim2.fromScale((val - min) / math.max(max - min, 1), 1), BackgroundColor3 = C.accent, BorderSizePixel = 0, }, bar) corner(fill, 3) local hit = new("TextButton", { Size = UDim2.new(1, 0, 3, 0), Position = UDim2.new(0, 0, 0, -7), BackgroundTransparency = 1, Text = "", AutoButtonColor = false, }, bar) local dragging = false local function set(x) local rel = math.clamp((x - bar.AbsolutePosition.X) / math.max(bar.AbsoluteSize.X, 1), 0, 1) val = math.floor(min + rel * (max - min) + 0.5) fill.Size = UDim2.fromScale(rel, 1) valLabel.Text = tostring(val) pcall(onChanged, val) end hit.MouseButton1Down:Connect(function() dragging = true set(UserInputService:GetMouseLocation().X) end) UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) UserInputService.InputChanged:Connect(function(i) if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then set(i.Position.X) end end) return function() return val end end local function textBox(page, order, placeholder, default) local box = new("TextBox", { Size = UDim2.new(1, -6, 0, 32), BackgroundColor3 = C.raised, BorderSizePixel = 0, Font = Enum.Font.Code, TextSize = 12, TextColor3 = C.text, PlaceholderText = placeholder, PlaceholderColor3 = C.faint, Text = default or "", ClearTextOnFocus = false, TextXAlignment = Enum.TextXAlignment.Left, LayoutOrder = order, }, page) corner(box, 7) stroke(box, C.line, 1, 0.35) padding(box, 12, 0, 12, 0) return box end local function labelRow(page, order, text, colour) local r = new("Frame", { Size = UDim2.new(1, -6, 0, 14), BackgroundTransparency = 1, LayoutOrder = order, }, page) return new("TextLabel", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 10, TextColor3 = colour or C.faint, TextXAlignment = Enum.TextXAlignment.Left, Text = text, }, r) end ------------------------------------------------------------------------ -- chests ------------------------------------------------------------------------ -- The Loot All button runs its own 1 s charge before it accepts a press, so a -- loot has to land after the fill is full, not the instant the chest opens. local LOOT_CHARGE = 1.05 local function chestGui() local pg = LP:FindFirstChildOfClass("PlayerGui") local cg = pg and pg:FindFirstChild("ChestGui") if not cg then return nil end local frame = cg:FindFirstChild("Frame") if not frame or not frame.Visible then return nil end return cg end local function chestButton(cg, name) local frame = cg and cg:FindFirstChild("Frame") local bottom = frame and frame:FindFirstChild("BottomBar") local choices = bottom and bottom:FindFirstChild("Choices") local btn = choices and choices:FindFirstChild(name) return btn and btn:FindFirstChild("Click") or nil end local function pressLootAll(cg) local click = chestButton(cg, "LootAllBtn") if not click then return false end local fired = false for _, c in ipairs(getconnections(click.Activated)) do local ok = pcall(function() c.Function() end) if ok then fired = true end end return fired end ENV.chestGui = chestGui ENV.pressLootAll = pressLootAll ------------------------------------------------------------------------ -- TAB: MOVEMENT ------------------------------------------------------------------------ local movePage = makeTab("MOVEMENT", "MOVEMENT", 1) section(movePage, "walkspeed", 1) slider(movePage, "Speed Boost tag", 2, 0, 500, 0, function(v) ENV.speedValue = v local st = state() if not st then return end if ENV.speedTag then pcall(function() ENV.speedTag:Destroy() end) ENV.speedTag = nil end if v > 0 then local ok, tag = pcall(function() return st:AddValue("Speed Boost", v) end) if ok then ENV.speedTag = tag end end end) labelRow(movePage, 3, "client-only tag. Mod_Speed attr freezes at 40+.", C.faint) section(movePage, "state", 4) toggle(movePage, "SlowImmune", "skips every M1 / Light / Heavy slow", 5, false, function(on) ENV.slowImmune = on end) toggle(movePage, "Noclip", "19 of 20 character parts", 6, false, function(on) ENV.noclip = on end) toggle(movePage, "Purge debuffs", "Freeze / Stun / Slow / Burn / Poison", 7, false, function(on) ENV.purgeDebuffs = on end) toggle(movePage, "Purge cooldowns", "ClearCooldown every frame", 8, false, function(on) ENV.purgeCooldowns = on end) ------------------------------------------------------------------------ -- TAB: COMBAT ------------------------------------------------------------------------ local combatPage = makeTab("COMBAT", "COMBAT", 2) section(combatPage, "reach lock", 1) toggle(combatPage, "Reach lock", "5-15 studs behind the target, 20+ dead", 2, false, function(on) ENV.reachLock = on if not on then ENV.lockTarget = nil end end) toggle(combatPage, "Auto swing", "fires Input LeftClick on the gate", 3, false, function(on) ENV.autoSwing = on end) toggle(combatPage, "Gate manual swings", "your own clicks respect the gate too", 5, true, function(on) ENV.manualGate = on end) slider(combatPage, "Swing gate (ms)", 6, 150, 1200, 600, function(v) ENV.swingInterval = v / 1000 end) section(combatPage, "offset", 7) local vertBox = textBox(combatPage, 8, "vertical -2.5 .. 2.5", "0") local distBox = textBox(combatPage, 9, "distance behind 0 .. 20", "12") button(combatPage, "APPLY OFFSET", 10, C.raised, function() local y = tonumber(vertBox.Text) or 0 local d = tonumber(distBox.Text) or 12 ENV.lockOffset = Vector3.new(0, math.clamp(y, -2.5, 2.5), math.clamp(d, 0, 20)) end) section(combatPage, "defence", 11) toggle(combatPage, "Auto parry", "Block true through every swing window", 12, false, function(on) ENV.autoParry = on end) toggle(combatPage, "Auto breath", "Breathe true whenever breath is short", 13, false, function(on) ENV.autoBreathe = on end) toggle(combatPage, "Hold block", "Block true every 0.8s", 14, false, function(on) ENV.holdBlock = on end) toggle(combatPage, "Health sustain", "pins hp to max every frame", 15, false, function(on) ENV.sustain = on end) ------------------------------------------------------------------------ -- TAB: LOOT ------------------------------------------------------------------------ local lootPage = makeTab("LOOT", "LOOT", 3) section(lootPage, "chests", 1) toggle(lootPage, "Auto loot all", "presses Loot All once the charge fills", 2, false, function(on) ENV.lootAll = on ENV.lootSeen = nil ENV.lootCount = 0 end) local chestStatus = labelRow(lootPage, 3, "chest closed", C.faint) button(lootPage, "LOOT NOW", 4, C.raised, function() local deadline = os.clock() + 3 task.spawn(function() while os.clock() < deadline do local cg = chestGui() if cg and pressLootAll(cg) then ENV.lootCount = ENV.lootCount + 1 return end task.wait(0.1) end end) end) labelRow(lootPage, 5, "opens with the chest. 1 s charge, then it fires.", C.faint) ------------------------------------------------------------------------ -- TAB: ESP ------------------------------------------------------------------------ local espPage = makeTab("ESP", "ESP", 4) section(espPage, "draw", 1) local function clearESP() for _, o in pairs(ENV.espObjects) do pcall(function() o:Destroy() end) end ENV.espObjects = {} ENV.espMap = {} end toggle(espPage, "Players", "name + hp + bar over every player", 2, false, function(on) ENV.espPlayers = on if not on then clearESP() end end) toggle(espPage, "Demons", "name + hp + bar over workspace.Alive", 3, false, function(on) ENV.espDemons = on if not on then clearESP() end end) ------------------------------------------------------------------------ -- TAB: STATS ------------------------------------------------------------------------ local statsPage = makeTab("STATS", "STATS", 5) local statLabels = {} local statKeys = { "Yen", "Level", "Exp", "ExpToNextLevel", "Faction", "Clan", "Art" } for i, key in ipairs(statKeys) do statLabels[key] = labelRow(statsPage, i, key .. " -", C.text) end section(statsPage, "character", #statKeys + 1) local charLabel = labelRow(statsPage, #statKeys + 2, "hp -", C.text) local wsLabel = labelRow(statsPage, #statKeys + 3, "walkspeed -", C.text) local tagLabel = labelRow(statsPage, #statKeys + 4, "tags -", C.dim) ------------------------------------------------------------------------ -- ESP helper ------------------------------------------------------------------------ local function hpColour(pct) local r = 214 + (84 - 214) * pct local g = 72 + (200 - 72) * pct local b = 72 + (130 - 72) * pct return Color3.fromRGB(math.floor(r), math.floor(g), math.floor(b)) end local function addESP(model, name, colour) if not model or not model.Parent then return end local head = model:FindFirstChild("Head") or model:FindFirstChild("HumanoidRootPart") if not head then return end -- a stale billboard from an older panel build has no HP child - rebuild it local existing = head:FindFirstChild("OW_ESP") if existing then if existing:FindFirstChild("HP") then return end pcall(function() existing:Destroy() end) end local billboard = new("BillboardGui", { Name = "OW_ESP", Size = UDim2.fromOffset(170, 36), StudsOffset = Vector3.new(0, 3.0, 0), AlwaysOnTop = true, MaxDistance = 900, }, head) new("TextLabel", { Size = UDim2.new(1, 0, 0, 15), BackgroundTransparency = 1, Font = Enum.Font.GothamBold, TextSize = 11, TextColor3 = colour, TextStrokeTransparency = 0.3, Text = name, }, billboard) local hpLabel = new("TextLabel", { Name = "HP", Size = UDim2.new(1, 0, 0, 12), Position = UDim2.fromOffset(0, 15), BackgroundTransparency = 1, Font = Enum.Font.Code, TextSize = 10, TextColor3 = C.text, TextStrokeTransparency = 0.3, Text = "- / -", }, billboard) local bar = new("Frame", { Name = "Bar", Size = UDim2.fromOffset(120, 4), Position = UDim2.new(0.5, -60, 0, 30), BackgroundColor3 = Color3.fromRGB(20, 22, 27), BorderSizePixel = 0, }, billboard) corner(bar, 2) local fill = new("Frame", { Name = "Fill", Size = UDim2.fromScale(1, 1), BackgroundColor3 = C.good, BorderSizePixel = 0, }, bar) corner(fill, 2) table.insert(ENV.espObjects, billboard) ENV.espMap[billboard] = model return billboard, hpLabel, fill end local function refreshESP() for billboard, model in pairs(ENV.espMap) do if not model or not model.Parent then pcall(function() billboard:Destroy() end) ENV.espMap[billboard] = nil else local hum = model:FindFirstChildOfClass("Humanoid") local hpLabel = billboard:FindFirstChild("HP") local bar = billboard:FindFirstChild("Bar") local fill = bar and bar:FindFirstChild("Fill") if hum and hpLabel then local max = math.max(hum.MaxHealth, 1) local pct = math.clamp(hum.Health / max, 0, 1) hpLabel.Text = string.format("%d / %d", math.floor(hum.Health + 0.5), math.floor(hum.MaxHealth + 0.5)) hpLabel.TextColor3 = hpColour(pct) if fill then fill.Size = UDim2.fromScale(pct, 1) fill.BackgroundColor3 = hpColour(pct) end elseif hpLabel then hpLabel.Text = "- / -" hpLabel.TextColor3 = C.faint if fill then fill.Size = UDim2.fromScale(0, 1) end end end end end ------------------------------------------------------------------------ -- loop ------------------------------------------------------------------------ local function nearestDemon(myPos, myChar) local alive = workspace:FindFirstChild("Alive") if not alive then return nil end local best, bd = nil, 1e9 for _, m in ipairs(alive:GetChildren()) do if m:IsA("Model") and m ~= myChar then local ok, h = pcall(function() return m:FindFirstChildOfClass("Humanoid") end) local ok2, r = pcall(function() return m:FindFirstChild("HumanoidRootPart") end) if ok and ok2 and h and r and r.Parent and h.Health > 0 then local ok3, d = pcall(function() return (r.Position - myPos).Magnitude end) if ok3 and d < bd then bd = d best = m end end end end return best end local function input() return NET and NET:FindFirstChild("Input") or nil end -- One swing path for every source. The interval is a gate, not a feature of -- auto swing: manual taps and the auto loop both go through here, so the -- slider keeps working with auto swing off. local function requestSwing() local now = os.clock() if now - ENV.lastSwing < ENV.swingInterval then return false end local inp = input() if not inp then return false end ENV.lastSwing = now ENV.parryUntil = now + ENV.swingInterval + 0.05 pcall(function() inp:FireServer("LeftClick", { Uppercut = false, Air = false, Space = false }) end) ENV.swings = ENV.swings + 1 return true end ENV.requestSwing = requestSwing local function loop() if not ENV.alive then return end local ch = character() local hum = humanoid() local myRoot = ch and ch:FindFirstChild("HumanoidRootPart") local now = os.clock() if ENV.reachLock and myRoot then local target = nearestDemon(myRoot.Position, ch) ENV.lockTarget = target if target then local tr = target:FindFirstChild("HumanoidRootPart") if tr then -- stand on the side the target is not looking at, at the same -- distance, and face them so the swing still connects local back = tr.CFrame.LookVector local pos = tr.Position - back * ENV.lockOffset.Z + Vector3.new(0, ENV.lockOffset.Y, 0) myRoot.CFrame = CFrame.lookAt(pos, tr.Position) end end end if ENV.autoSwing and hum and hum.Health > 0 then requestSwing() end if ENV.purgeDebuffs then local st = state() if st then for _, name in ipairs(DEBUFFS) do if st:Has(name) then pcall(function() st:Remove(name) end) end end end end if ENV.purgeCooldowns then local st = state() if st then pcall(function() st:ClearCooldown() end) end end if ENV.slowImmune and ch and ch:GetAttribute("SlowImmune") ~= true then ch:SetAttribute("SlowImmune", true) end if ENV.noclip and ch then for _, part in ipairs(ch:GetDescendants()) do if part:IsA("BasePart") and part.CanCollide then part.CanCollide = false end end end if ENV.sustain and hum and hum.Health > 0 and hum.Health < hum.MaxHealth then hum.Health = hum.MaxHealth end if ENV.lootAll then local cg = chestGui() if not cg then ENV.lootSeen = nil ENV.lootCount = 0 else if ENV.lootSeen ~= cg then ENV.lootSeen = cg ENV.lootAt = now ENV.lootCount = 0 end -- the button refuses a press until its charge finished, so hold off -- for LOOT_CHARGE and then re-press while the chest is still open if ENV.lootCount < 8 and now - (ENV.lootAt or 0) > LOOT_CHARGE and now - (ENV.lastLoot or 0) > 1.4 then ENV.lastLoot = now if pressLootAll(cg) then ENV.lootCount = ENV.lootCount + 1 end end end end if ENV.holdBlock and now - ENV.lastBlock > 0.8 then ENV.lastBlock = now local inp = input() if inp then pcall(function() inp:FireServer("Block", true) end) end end if ENV.autoParry and hum and hum.Health > 0 then local inp = input() if inp then if now < ENV.parryUntil then pcall(function() inp:FireServer("Block", true) end) elseif ENV.parryUntil > 0 then pcall(function() inp:FireServer("Block", false) end) ENV.parryUntil = 0 end end end if ENV.autoBreathe and hum and hum.Health > 0 and now - ENV.lastBreathe > 1 then local inp = input() local st = state() if inp and ch then local b = ch:GetAttribute("Breath") local maxb = ch:GetAttribute("MaxBreath") or 100 local allowed = b ~= nil and b < maxb and not (st and st:Has("Breathing")) if allowed then pcall(function() inp:FireServer("Breathe", true) end) ENV.lastBreathe = now end end end if ENV.espPlayers or ENV.espDemons then -- 10 Hz is plenty for a health readout and keeps the frame cheap if now - (ENV.lastESP or 0) > 0.1 then ENV.lastESP = now refreshESP() end end if ENV.espPlayers then for _, p in ipairs(Players:GetPlayers()) do if p ~= LP and p.Character then addESP(p.Character, p.Name, C.accent) end end end if ENV.espDemons then local alive = workspace:FindFirstChild("Alive") if alive then for _, m in ipairs(alive:GetChildren()) do if m:IsA("Model") and not m:FindFirstChildOfClass("Player") then addESP(m, m.Name, Color3.fromRGB(232, 176, 72)) end end end end end ENV.conns[#ENV.conns + 1] = RunService.Heartbeat:Connect(function() pcall(loop) end) ------------------------------------------------------------------------ -- readouts ------------------------------------------------------------------------ task.spawn(function() while ENV.alive do task.wait(0.35) pcall(function() for key, label in pairs(statLabels) do local v = LP:GetAttribute(key) label.Text = key .. " " .. (v ~= nil and tostring(v) or "-") end local hum = humanoid() local ch = character() charLabel.Text = hum and ("hp " .. math.floor(hum.Health) .. " / " .. math.floor(hum.MaxHealth)) or "hp -" wsLabel.Text = hum and ("walkspeed " .. math.floor(hum.WalkSpeed) .. " tag +" .. ENV.speedValue) or "walkspeed -" if ch and STATE_OK then local st = state() if st then local n, names = 0, {} for _, t in pairs(st.Tags) do n = n + 1 if n <= 5 then names[#names + 1] = t.Name end end tagLabel.Text = "tags " .. n .. " " .. (#names > 0 and table.concat(names, ", ") or "none") end end statusLabel.Text = ENV.alive and "live" or "off" liveDot.BackgroundColor3 = ENV.alive and C.good or C.faint local cg = chestGui() chestStatus.Text = cg and ("chest open looted " .. ENV.lootCount) or "chest closed" chestStatus.TextColor3 = cg and C.good or C.faint local t = ENV.lockTarget if t and t.Parent then local tr = t:FindFirstChild("HumanoidRootPart") local th = t:FindFirstChildOfClass("Humanoid") local myRoot = root() local d = (tr and myRoot) and math.floor((tr.Position - myRoot.Position).Magnitude) or -1 footTarget.Text = "target " .. t.Name:sub(1, 16) .. " d=" .. d .. " hp=" .. (th and math.floor(th.Health) or -1) footTarget.TextColor3 = C.good else footTarget.Text = "target -" footTarget.TextColor3 = C.dim end footSwing.Text = "swings " .. tostring(ENV.swings) end) end end) ------------------------------------------------------------------------ -- boot ------------------------------------------------------------------------ for n, b in pairs(tabButtons) do local on = (n == "MOVEMENT") pages[n].Visible = on b.TextColor3 = on and C.text or C.dim b.BackgroundColor3 = on and C.raised or C.surface tabAccents[n].Size = UDim2.new(0, 3, 0, on and 18 or 0) end closeBtn.MouseButton1Click:Connect(function() ENV.alive = false for _, c in ipairs(ENV.conns) do pcall(function() c:Disconnect() end) end gui:Destroy() getgenv().OW_PANEL = nil end) -- true when the cursor sits over the panel, so a click on a toggle is never -- also a swing local function overPanel() if not (gui and gui.Enabled and main) then return false end local m = UserInputService:GetMouseLocation() local p, s = main.AbsolutePosition, main.AbsoluteSize return m.X >= p.X and m.X <= p.X + s.X and m.Y >= p.Y and m.Y <= p.Y + s.Y end UserInputService.InputBegan:Connect(function(i, processed) if processed then return end if i.KeyCode == Enum.KeyCode.RightShift then if gui then gui.Enabled = not gui.Enabled end return end -- manual swings go through the same gate as auto swing, so the interval -- slider still applies when auto swing is off if i.UserInputType == Enum.UserInputType.MouseButton1 and ENV.manualGate and ENV.reachLock and not overPanel() then requestSwing() end end) print("[OVERWORLD] panel loaded | StateManager=" .. tostring(STATE_OK) .. " | Network=" .. tostring(NET ~= nil))