horu hub
Key Required

horu hub

Rooms: Low Detailed Redux*est2403*est2403 1.2K views 123 executesUpdated Jun 16, 2026
2.5/ 5(2 votes)
1150% Positive
Lua Script•685 lines (24619 chars)
--- BY GEMINI

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local Debris = game:GetService("Debris")

local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
local entitiesFolder = Workspace:WaitForChild("Entities")
local roomsFolder = Workspace:WaitForChild("GeneratedRooms")

if CoreGui:FindFirstChild("DevEntityTracker") then 
    CoreGui.DevEntityTracker:Destroy() 
end

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "DevEntityTracker"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = CoreGui

local Settings = {
    AutoOpen = false, 
    OpenDelay = 1000, 
    EntityESP = false,
    DoorESP = false,
    BoxESP = false,
    TracersESP = false,
    DistanceESP = false,
    FullBright = false,
    Notifications = true
}

local cache = {
    Highlights = {},
    Boxes = {},
    Tracers = {},
    Billboards = {}
}


local completedRoomNumbers = {}

local NotifContainer = Instance.new("Frame")
NotifContainer.Name = "NotifContainer"
NotifContainer.Size = UDim2.new(0, 280, 1, -40)
NotifContainer.Position = UDim2.new(1, -290, 0, 20)
NotifContainer.BackgroundTransparency = 1
NotifContainer.Parent = ScreenGui

local NotifLayout = Instance.new("UIListLayout")
NotifLayout.SortOrder = Enum.SortOrder.LayoutOrder
NotifLayout.Padding = UDim.new(0, 6)
NotifLayout.VerticalAlignment = Enum.VerticalAlignment.Top
NotifLayout.Parent = NotifContainer

local function playSpawnSound()
    local Sound = Instance.new("Sound")
    Sound.SoundId = "rbxassetid://7229097896"
    Sound.Volume = 2.5
    Sound.Parent = LocalPlayer:FindFirstChildWhichIsA("PlayerGui") or CoreGui
    Sound:Play()
    Debris:AddItem(Sound, 5)
end

local function showNotification(entityName)
    task.spawn(playSpawnSound)

    if not Settings.Notifications then return end

    local NotifFrame = Instance.new("Frame")
    NotifFrame.Size = UDim2.new(1, 0, 0, 42)
    NotifFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
    NotifFrame.BackgroundTransparency = 1 
    NotifFrame.BorderSizePixel = 0
    NotifFrame.Parent = NotifContainer

    local Corner = Instance.new("UICorner")
    Corner.CornerRadius = UDim.new(0, 6)
    Corner.Parent = NotifFrame

    local LeftBar = Instance.new("Frame")
    LeftBar.Size = UDim2.new(0, 4, 1, 0)
    LeftBar.BackgroundColor3 = Color3.fromRGB(255, 60, 60)
    LeftBar.BackgroundTransparency = 1
    LeftBar.BorderSizePixel = 0
    LeftBar.Parent = NotifFrame
    Instance.new("UICorner", LeftBar).CornerRadius = UDim.new(0, 6)

    local TextLabel = Instance.new("TextLabel")
    TextLabel.Size = UDim2.new(1, -15, 1, 0)
    TextLabel.Position = UDim2.new(0, 12, 0, 0)
    TextLabel.BackgroundTransparency = 1
    TextLabel.Text = entityName .. " has spawned!"
    TextLabel.TextColor3 = Color3.fromRGB(255, 70, 70)
    TextLabel.TextSize = 14
    TextLabel.Font = Enum.Font.SourceSansBold
    TextLabel.TextXAlignment = Enum.TextXAlignment.Left
    TextLabel.Parent = NotifFrame

    TweenService:Create(NotifFrame, TweenInfo.new(0.3), {BackgroundTransparency = 0.1}):Play()
    TweenService:Create(LeftBar, TweenInfo.new(0.3), {BackgroundTransparency = 0}):Play()
    TweenService:Create(TextLabel, TweenInfo.new(0.3), {TextStrokeTransparency = 0}):Play()

    task.delay(5, function()
        if NotifFrame and NotifFrame.Parent then
            local fadeOut1 = TweenService:Create(NotifFrame, TweenInfo.new(0.4), {BackgroundTransparency = 1})
            local fadeOut2 = TweenService:Create(LeftBar, TweenInfo.new(0.4), {BackgroundTransparency = 1})
            local fadeOut3 = TweenService:Create(TextLabel, TweenInfo.new(0.4), {TextStrokeTransparency = 1})
            
            fadeOut1:Play()
            fadeOut2:Play()
            fadeOut3:Play()
            
            fadeOut1.Completed:Connect(function()
                NotifFrame:Destroy()
            end)
        end
    end)
end

local function getRoomNumber(room)
    if not room or not room.Name then return nil end
    local numStr = room.Name:match("(%d+)")
    return numStr and tonumber(numStr)
end

local function getDoorPart(room)
    for _, child in ipairs(room:GetChildren()) do
        if child:IsA("Model") or child:IsA("Folder") then
            if child.Name:match("Door") then
                local exactDoor = child:FindFirstChild("Door")
                if exactDoor and exactDoor:IsA("BasePart") then
                    return exactDoor
                end
            end
        end
    end
    
    local backupDoor = room:FindFirstChild("Door", true)
    if backupDoor and backupDoor:IsA("BasePart") then
        return backupDoor
    end
    
    return nil
end

local function getCurrentRoomNumber()
    local char = LocalPlayer.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    if not root then return 0 end

    local closestRoomNum = 0
    local minDistance = math.huge

    for _, room in ipairs(roomsFolder:GetChildren()) do
        local roomNum = getRoomNumber(room)
        local doorPart = getDoorPart(room)
        if roomNum and doorPart then
            local dist = (root.Position - doorPart.Position).Magnitude
            if dist < minDistance then
                minDistance = dist
                closestRoomNum = roomNum
            end
        end
    end
    return closestRoomNum
end

local function createWindow(name, size, pos, titleText, titleColor)
    local Frame = Instance.new("Frame")
    Frame.Name = name
    Frame.Size = size
    Frame.Position = pos
    Frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    Frame.BorderSizePixel = 0
    Frame.Active = true
    Frame.Parent = ScreenGui

    local Corner = Instance.new("UICorner")
    Corner.CornerRadius = UDim.new(0, 8)
    Corner.Parent = Frame

    local Header = Instance.new("Frame")
    Header.Name = "Header"
    Header.Size = UDim2.new(1, 0, 0, 40)
    Header.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
    Header.BorderSizePixel = 0
    Header.Parent = Frame

    local HeaderCorner = Instance.new("UICorner")
    HeaderCorner.CornerRadius = UDim.new(0, 8)
    HeaderCorner.Parent = Header

    local Title = Instance.new("TextLabel")
    Title.Size = UDim2.new(1, -10, 1, 0)
    Title.Position = UDim2.new(0, 10, 0, 0)
    Title.BackgroundTransparency = 1
    Title.Text = titleText
    Title.TextColor3 = titleColor
    Title.TextSize = 16
    Title.Font = Enum.Font.SourceSansBold
    Title.TextXAlignment = Enum.TextXAlignment.Left
    Title.Parent = Header

    local dragging, dragInput, dragStart, startPos
    Header.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true 
            dragStart = input.Position 
            startPos = Frame.Position
            input.Changed:Connect(function() 
                if input.UserInputState == Enum.UserInputState.End then dragging = false end 
            end)
        end
    end)
    Header.InputChanged:Connect(function(input) 
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then 
            dragInput = input 
        end 
    end)
    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            local delta = input.Position - dragStart
            Frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
        end
    end)

    return Frame
end

local TrackerFrame = createWindow("TrackerFrame", UDim2.new(0, 360, 0, 500), UDim2.new(0.05, 0, 0.2, 0), "ENTITY TRACKER", Color3.fromRGB(255, 60, 60))
local ControlFrame = createWindow("ControlFrame", UDim2.new(0, 280, 0, 460), UDim2.new(0.05, 380, 0.2, 0), "HORUHUB", Color3.fromRGB(60, 180, 255))

local ScrollFrame = Instance.new("ScrollingFrame")
ScrollFrame.Size = UDim2.new(1, -10, 1, -50)
ScrollFrame.Position = UDim2.new(0, 5, 0, 45)
ScrollFrame.BackgroundTransparency = 1
ScrollFrame.BorderSizePixel = 0
ScrollFrame.ScrollBarThickness = 6
ScrollFrame.Parent = TrackerFrame

local UIListLayout = Instance.new("UIListLayout")
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Padding = UDim.new(0, 6)
UIListLayout.Parent = ScrollFrame
UIListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() 
    ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, UIListLayout.AbsoluteContentSize.Y + 10) 
end)

local ControlContent = Instance.new("Frame")
ControlContent.Size = UDim2.new(1, -20, 1, -60)
ControlContent.Position = UDim2.new(0, 10, 0, 50)
ControlContent.BackgroundTransparency = 1
ControlContent.Parent = ControlFrame

local ControlLayout = Instance.new("UIListLayout")
ControlLayout.SortOrder = Enum.SortOrder.LayoutOrder
ControlLayout.Padding = UDim.new(0, 8)
ControlLayout.Parent = ControlContent

local function createToggle(settingName, text, defaultOn)
    local Btn = Instance.new("TextButton")
    Btn.Size = UDim2.new(1, 0, 0, 36)
    Btn.BorderSizePixel = 0
    Btn.Font = Enum.Font.SourceSansBold
    Btn.TextSize = 14
    Btn.Parent = ControlContent

    local BtnCorner = Instance.new("UICorner")
    BtnCorner.CornerRadius = UDim.new(0, 5)
    BtnCorner.Parent = Btn

    local function updateState()
        if Settings[settingName] then
            Btn.BackgroundColor3 = Color3.fromRGB(55, 75, 55)
            Btn.TextColor3 = Color3.fromRGB(100, 255, 100)
            Btn.Text = text .. " : ON"
        else
            Btn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
            Btn.TextColor3 = Color3.fromRGB(200, 200, 200)
            Btn.Text = text .. " : OFF"
        end
    end

    if defaultOn then Settings[settingName] = true end
    updateState()

    Btn.MouseButton1Click:Connect(function()
        Settings[settingName] = not Settings[settingName]
        if settingName == "AutoOpen" and not Settings.AutoOpen then
            table.clear(completedRoomNumbers)
        end
        updateState()
    end)
end

local function createDelayInput()
    local Container = Instance.new("Frame")
    Container.Size = UDim2.new(1, 0, 0, 36)
    Container.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
    Container.BorderSizePixel = 0
    Container.Parent = ControlContent

    local Corner = Instance.new("UICorner")
    Corner.CornerRadius = UDim.new(0, 5)
    Corner.Parent = Container

    local Label = Instance.new("TextLabel")
    Label.Size = UDim2.new(0.6, 0, 1, 0)
    Label.Position = UDim2.new(0, 10, 0, 0)
    Label.BackgroundTransparency = 1
    Label.Text = "DELAY (MS):"
    Label.TextColor3 = Color3.fromRGB(200, 200, 200)
    Label.TextSize = 13
    Label.Font = Enum.Font.SourceSansBold
    Label.TextXAlignment = Enum.TextXAlignment.Left
    Label.Parent = Container

    local TextBox = Instance.new("TextBox")
    TextBox.Size = UDim2.new(0.4, -15, 1, -8)
    TextBox.Position = UDim2.new(0.6, 5, 0, 4)
    TextBox.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
    TextBox.BorderSizePixel = 0
    TextBox.Text = tostring(Settings.OpenDelay)
    TextBox.TextColor3 = Color3.fromRGB(60, 180, 255)
    TextBox.TextSize = 14
    TextBox.Font = Enum.Font.SourceSansBold
    TextBox.ClearTextOnFocus = false
    TextBox.Parent = Container

    Instance.new("UICorner", TextBox).CornerRadius = UDim.new(0, 4)

    TextBox.FocusLost:Connect(function(enterPressed)
        local num = tonumber(TextBox.Text)
        if num and num >= 0 then
            Settings.OpenDelay = num
        else
            TextBox.Text = tostring(Settings.OpenDelay)
        end
    end)
end

createToggle("Notifications", "NOTIFICATIONS")
createToggle("AutoOpen", "DOOR TP")
createDelayInput()
createToggle("EntityESP", "ENTITY ESP (HIGHLIGHT)")
createToggle("DoorESP", "DOOR ESP (HIGHLIGHT)")
createToggle("BoxESP", "BOX ESP (ENTITIES ONLY, BROKEN)")
createToggle("TracersESP", "TRACERS (ENTITIES AND DOORS)")
createToggle("DistanceESP", "DISTANCE TEXT")
createToggle("FullBright", "FULLBRIGHT AND ANTI-FOG")

local activeRows = {}

local function createEntityRow(entity)
    local Row = Instance.new("Frame")
    Row.Size = UDim2.new(1, -8, 0, 36)
    Row.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    Row.BorderSizePixel = 0
    Row.LayoutOrder = 999999
    
    local RowCorner = Instance.new("UICorner")
    RowCorner.CornerRadius = UDim.new(0, 5)
    RowCorner.Parent = Row
    
    local NameLabel = Instance.new("TextLabel")
    NameLabel.Size = UDim2.new(0.35, -5, 1, 0)
    NameLabel.Position = UDim2.new(0, 8, 0, 0)
    NameLabel.BackgroundTransparency = 1
    NameLabel.Text = entity.Name
    NameLabel.TextColor3 = Color3.fromRGB(240, 240, 240)
    NameLabel.TextSize = 16
    NameLabel.Font = Enum.Font.SourceSansBold
    NameLabel.TextXAlignment = Enum.TextXAlignment.Left
    NameLabel.Parent = Row
    
    local SpeedLabel = Instance.new("TextLabel")
    SpeedLabel.Size = UDim2.new(0.3, 0, 1, 0)
    SpeedLabel.Position = UDim2.new(0.35, 0, 0, 0)
    SpeedLabel.BackgroundTransparency = 1
    SpeedLabel.Text = "0.0 m/s"
    SpeedLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
    SpeedLabel.TextSize = 15
    SpeedLabel.Font = Enum.Font.SourceSansBold
    SpeedLabel.TextXAlignment = Enum.TextXAlignment.Center
    SpeedLabel.Parent = Row
    
    local DistLabel = Instance.new("TextLabel")
    DistLabel.Size = UDim2.new(0.35, -8, 1, 0)
    DistLabel.Position = UDim2.new(0.65, 0, 0, 0)
    DistLabel.BackgroundTransparency = 1
    DistLabel.Text = "Inf m"
    DistLabel.TextColor3 = Color3.fromRGB(255, 180, 0)
    DistLabel.TextSize = 17
    DistLabel.Font = Enum.Font.SourceSansBold
    DistLabel.TextXAlignment = Enum.TextXAlignment.Right
    DistLabel.Parent = Row
    
    Row.Parent = ScrollFrame
    
    activeRows[entity] = {
        rowFrame = Row, distLabel = DistLabel, speedLabel = SpeedLabel,
        lastDistance = nil, lastCheckTime = os.clock()
    }
    
    showNotification(entity.Name)
end

entitiesFolder.ChildAdded:Connect(function(c) task.wait(0.1) if not activeRows[c] then createEntityRow(c) end end)
entitiesFolder.ChildRemoved:Connect(function(c) if activeRows[c] then activeRows[c].rowFrame:Destroy() activeRows[c] = nil end end)
for _, ent in ipairs(entitiesFolder:GetChildren()) do createEntityRow(ent) end

task.spawn(function()
    while true do
        local char = LocalPlayer.Character
        local root = char and char:FindFirstChild("HumanoidRootPart")
        local currentTime = os.clock()
        
        for entity, uiData in pairs(activeRows) do
            if entity and entity.Parent == entitiesFolder then
                local entPart = entity.PrimaryPart or entity:FindFirstChildWhichIsA("BasePart")
                if root and entPart then
                    local currentMeterDist = (root.Position - entPart.Position).Magnitude / 3.57
                    if uiData.lastDistance then
                        local deltaTime = currentTime - uiData.lastCheckTime
                        if deltaTime > 0 then
                            local distDifference = currentMeterDist - uiData.lastDistance
                            local speed = math.abs(distDifference) / deltaTime
                            if speed < 0.1 then
                                uiData.speedLabel.Text = "0.0 m/s"
                                uiData.speedLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
                            elseif distDifference < 0 then
                                uiData.speedLabel.Text = string.format("%.1f m/s", speed)
                                uiData.speedLabel.TextColor3 = Color3.fromRGB(255, 60, 60)
                            else
                                uiData.speedLabel.Text = string.format("%.1f m/s", speed)
                                uiData.speedLabel.TextColor3 = Color3.fromRGB(60, 255, 60)
                            end
                        end
                    end
                    uiData.lastDistance = currentMeterDist
                    uiData.lastCheckTime = currentTime
                end
            end
        end
        task.wait(0.1)
    end
end)

local function applyHighlight(obj, key, color)
    if not cache.Highlights[obj] then
        local hl = Instance.new("Highlight")
        hl.FillColor = color
        hl.FillTransparency = 0.6
        hl.OutlineColor = Color3.new(1, 1, 1)
        hl.OutlineTransparency = 0
        hl.Adornee = obj
        hl.Parent = ScreenGui
        cache.Highlights[obj] = hl
    end
end

local function removeHighlight(obj)
    if cache.Highlights[obj] then
        cache.Highlights[obj]:Destroy()
        cache.Highlights[obj] = nil
    end
end

local function applyBillboard(obj, text, color)
    if not cache.Billboards[obj] then
        local bb = Instance.new("BillboardGui")
        bb.Size = UDim2.new(0, 120, 0, 40)
        bb.AlwaysOnTop = true
        bb.StudsOffset = Vector3.new(0, 3, 0)
        
        local tl = Instance.new("TextLabel")
        tl.Size = UDim2.new(1, 0, 1, 0)
        tl.BackgroundTransparency = 1
        tl.Font = Enum.Font.SourceSansBold
        tl.TextSize = 15
        tl.Parent = bb
        
        bb.Adornee = obj
        bb.Parent = ScreenGui
        cache.Billboards[obj] = {gui = bb, label = tl}
    end
    cache.Billboards[obj].label.Text = text
    cache.Billboards[obj].label.TextColor3 = color
end

local function removeBillboard(obj)
    if cache.Billboards[obj] then
        cache.Billboards[obj].gui:Destroy()
        cache.Billboards[obj] = nil
    end
end

local function draw2DLine(key, p1, p2, color, thickness)
    local line = cache.Tracers[key]
    if not line then
        line = Instance.new("Frame")
        line.BorderSizePixel = 0
        line.Parent = ScreenGui
        cache.Tracers[key] = line
    end
    local distance = (p1 - p2).Magnitude
    line.Size = UDim2.new(0, distance, 0, thickness)
    line.Position = UDim2.new(0, (p1.X + p2.X) / 2 - distance / 2, 0, (p1.Y + p2.Y) / 2 - thickness / 2)
    line.Rotation = math.deg(math.atan2(p2.Y - p1.Y, p2.X - p1.X))
    line.BackgroundColor3 = color
    line.Visible = true
end

local function draw2DBox(obj, color)
    local box = cache.Boxes[obj]
    if not box then
        box = Instance.new("SelectionBox")
        box.Color3 = color
        box.LineThickness = 0.05
        box.Parent = ScreenGui
        cache.Boxes[obj] = box
    end
    box.Adornee = obj
    box.Visible = true
end

local function executePureTeleport(room, targetNumber)
    if completedRoomNumbers[targetNumber] then return end

    if Settings.OpenDelay > 0 then
        task.wait(Settings.OpenDelay / 1000)
    end

    while room and room.Parent == roomsFolder and Settings.AutoOpen do
        local currentNum = getCurrentRoomNumber()
        
        if currentNum >= targetNumber then
            completedRoomNumbers[targetNumber] = true
            break
        end

        local char = LocalPlayer.Character
        local root = char and char:FindFirstChild("HumanoidRootPart")
        local doorPart = getDoorPart(room)

        if root and doorPart then
            root.CFrame = doorPart.CFrame * CFrame.new(0, 0, -0.5)
        end

        task.wait(0.05)
    end
end

task.spawn(function()
    while true do
        if Settings.AutoOpen then
            local currentNum = getCurrentRoomNumber()
            local nextTargetNum = currentNum + 1

            for _, room in ipairs(roomsFolder:GetChildren()) do
                local rNum = getRoomNumber(room)
                if rNum == nextTargetNum and not completedRoomNumbers[nextTargetNum] then
                    task.spawn(executePureTeleport, room, nextTargetNum)
                    break
                end
            end
        end
        task.wait(0.02)
    end
end)

RunService.RenderStepped:Connect(function()
    local char = LocalPlayer.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    
    if Settings.FullBright then
        Lighting.Ambient = Color3.new(1, 1, 1)
        Lighting.FogEnd = 999999
        for _, obj in ipairs(Lighting:GetDescendants()) do
            if obj:IsA("Atmosphere") then obj.Density = 0 end
        end
    end

    for _, line in pairs(cache.Tracers) do line.Visible = false end
    for _, box in pairs(cache.Boxes) do box.Visible = false end

    for entity, uiData in pairs(activeRows) do
        if entity and entity.Parent == entitiesFolder then
            local entPart = entity.PrimaryPart or entity:FindFirstChildWhichIsA("BasePart")
            if root and entPart then
                local studDist = (root.Position - entPart.Position).Magnitude
                local meterDistance = studDist / 3.57
                
                uiData.distLabel.Text = string.format("%.1f m ", meterDistance)
                uiData.rowFrame.LayoutOrder = math.clamp(math.floor(meterDistance * 100), -2147483648, 2147483647)
                uiData.distLabel.TextColor3 = (meterDistance < 25) and Color3.fromRGB(255, 50, 50) or Color3.fromRGB(255, 180, 0)
                
                local entColor = (meterDistance < 25) and Color3.new(1, 0, 0) or Color3.new(1, 0.6, 0)

                if Settings.EntityESP then 
                    applyHighlight(entity, entity, entColor) 
                    if Settings.BoxESP then draw2DBox(entPart, entColor) end
                    
                    if Settings.DistanceESP then 
                        applyBillboard(entPart, string.format("%s\n%.1fm", entity.Name, meterDistance), entColor) 
                    else 
                        removeBillboard(entPart) 
                    end

                    if Settings.TracersESP then
                        local screenPos, onScreen = Camera:WorldToViewportPoint(entPart.Position)
                        if onScreen then
                            local startPoint = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
                            local endPoint = Vector2.new(screenPos.X, screenPos.Y)
                            draw2DLine(entity.Name, startPoint, endPoint, entColor, 2)
                        end
                    end
                else 
                    removeHighlight(entity)
                    removeBillboard(entPart)
                end
            end
        else
            removeHighlight(entity)
            if entity then
                local entPart = entity.PrimaryPart or entity:FindFirstChildWhichIsA("BasePart")
                if entPart then removeBillboard(entPart) end
            end
        end
    end

    for _, room in ipairs(roomsFolder:GetChildren()) do
        local doorPart = getDoorPart(room)
        local rNum = getRoomNumber(room)
        if doorPart and rNum then
            if Settings.DoorESP and root then
                local studDist = (root.Position - doorPart.Position).Magnitude
                local meterDistance = studDist / 3.57

                if meterDistance > 500 then
                    removeHighlight(doorPart)
                    removeBillboard(doorPart)
                    continue
                end

                local doorColor = Color3.new(0, 1, 0.2)
                applyHighlight(doorPart, room.Name, doorColor)
                
                if Settings.DistanceESP then
                    applyBillboard(doorPart, string.format("Room %d\n%.1fm", rNum, meterDistance), doorColor)
                else
                    removeBillboard(doorPart)
                end

                if Settings.TracersESP then
                    local screenPos, onScreen = Camera:WorldToViewportPoint(doorPart.Position)
                    if onScreen then
                        local startPoint = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
                        local endPoint = Vector2.new(screenPos.X, screenPos.Y)
                        draw2DLine(room.Name, startPoint, endPoint, doorColor, 1.5)
                    end
                end
            else
                removeHighlight(doorPart)
                removeBillboard(doorPart)
            end
        end
    end
end)

roomsFolder.ChildRemoved:Connect(function(room)
    local rNum = getRoomNumber(room)
    if rNum then completedRoomNumbers[rNum] = nil end
    local doorPart = getDoorPart(room)
    if doorPart then
        removeHighlight(doorPart)
        removeBillboard(doorPart)
    end
end)

Features & Information

* entity tracker * notifications * door tp * esp * fullbright and nofog

Community Comments (0)

No comments yet for this script.

More Scripts for Rooms: Low Detailed Redux