
Key Required

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] = '<font color="#777"><s>✓ ' .. n .. '</s></font>'
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)No comments yet for this script.