local WS = game:GetService("Workspace") local PL = game:GetService("Players") local CG = game:GetService("CoreGui") if CG:FindFirstChild("TreatmentESP") then CG.TreatmentESP:Destroy() end local gui = Instance.new("ScreenGui") gui.Name = "TreatmentESP" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.Parent = CG local active = {} local function getPos(m) if not m then return end if m:IsA("Model") then local ok, p = pcall(function() return m:GetPivot() end) if ok then return p.Position end if m.PrimaryPart then return m.PrimaryPart.Position end elseif m:IsA("BasePart") then return m.Position end end local function readInv(report) local inv = report:FindFirstChild("inv") if not inv then return {} end local out = {} for _, c in ipairs(inv:GetChildren()) do if c:IsA("Frame") and c.Name ~= "UIGridLayout" then local n = c:FindFirstChild("name") local ck = c:FindFirstChild("check") table.insert(out, { name = n and n.Text or c.Name, done = ck and ck.Visible or false, }) end end return out end local function roomList() local root = WS:FindFirstChild("Rooms") if not root then return {} end local out = {} for _, cat in ipairs(root:GetChildren()) do for _, room in ipairs(cat:GetChildren()) do local mg = room:FindFirstChild("Minigame") local tv = mg and mg:FindFirstChild("TV") local ui = tv and tv:FindFirstChild("Screen") and tv.Screen:FindFirstChild("UI") local rep = ui and ui:FindFirstChild("Report") if rep then local bed = mg:FindFirstChild("Bed") or mg:FindFirstChild("Bed", true) table.insert(out, { report = rep, bedPos = getPos(bed) or getPos(tv.Part) or getPos(tv), }) end end end return out end local function npcList() local out = {} local f = WS:FindFirstChild("NPCs") if not f then return out end for _, d in ipairs(f:GetChildren()) do if d:IsA("Model") and not PL:GetPlayerFromCharacter(d) then table.insert(out, d) end end return out end local function anchorOf(npc) return npc:FindFirstChild("HumanoidRootPart") or npc:FindFirstChild("Head") or npc.PrimaryPart or npc:FindFirstChildWhichIsA("BasePart", true) end local function makeBB(npc) local bb = Instance.new("BillboardGui") bb.Name = "TESP" bb.Size = UDim2.new(0, 280, 0, 90) bb.StudsOffset = Vector3.new(0, 4, 0) bb.AlwaysOnTop = true bb.Parent = gui local f = Instance.new("Frame", bb) f.Size = UDim2.new(1, 0, 1, 0) f.BackgroundColor3 = Color3.fromRGB(20, 20, 20) f.BackgroundTransparency = 0.25 f.BorderSizePixel = 0 local c = Instance.new("UICorner", f) c.CornerRadius = UDim.new(0, 6) local st = Instance.new("UIStroke", f) st.Color = Color3.fromRGB(255, 200, 60) st.Thickness = 1.5 local hdr = Instance.new("TextLabel", f) hdr.Name = "Header" hdr.Size = UDim2.new(1, -8, 0, 20) hdr.Position = UDim2.new(0, 4, 0, 4) hdr.BackgroundTransparency = 1 hdr.TextColor3 = Color3.fromRGB(255, 200, 60) hdr.Font = Enum.Font.Code hdr.TextSize = 14 hdr.TextXAlignment = Enum.TextXAlignment.Left local bdy = Instance.new("TextLabel", f) bdy.Name = "Body" bdy.Size = UDim2.new(1, -8, 1, -30) bdy.Position = UDim2.new(0, 4, 0, 24) bdy.BackgroundTransparency = 1 bdy.TextColor3 = Color3.new(1, 1, 1) bdy.Font = Enum.Font.Code bdy.TextSize = 14 bdy.TextWrapped = true bdy.TextXAlignment = Enum.TextXAlignment.Left bdy.TextYAlignment = Enum.TextYAlignment.Top bdy.RichText = true local a = anchorOf(npc) if a then bb.Adornee = a end return bb end spawn(function() while wait(0.25) do local rooms = roomList() local npcs = npcList() local toShow = {} local taken = {} for _, r in ipairs(rooms) do local prog = r.report:FindFirstChild("treatment") prog = prog and prog.Text or "" if prog ~= "" then local items = readInv(r.report) if #items > 0 then local pick, pickD for _, npc in ipairs(npcs) do if not taken[npc] then local p = getPos(anchorOf(npc)) if p and r.bedPos then local d = (p - r.bedPos).Magnitude if d < 25 and (not pickD or d < pickD) then pickD = d pick = npc end end end end if pick then taken[pick] = true local need, have = {}, {} for _, it in ipairs(items) do if it.done then table.insert(have, it.name) else table.insert(need, it.name) end end local t = {} for _, n in ipairs(need) do t[#t + 1] = "• " .. n end for _, n in ipairs(have) do t[#t + 1] = '✓ ' .. n .. '' end toShow[pick] = { prog = prog, text = table.concat(t, "\n"), } end end end end for npc, info in pairs(toShow) do local bb = active[npc] if not bb or not bb.Parent then bb = makeBB(npc) active[npc] = bb end local a = anchorOf(npc) if a and bb.Adornee ~= a then bb.Adornee = a end bb.Box.Header.Text = info.prog bb.Box.Body.Text = info.text end for npc, bb in pairs(active) do if not toShow[npc] then bb:Destroy() active[npc] = nil elseif not npc.Parent then bb:Destroy() active[npc] = nil end end end end)