--- 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)