local player = game.Players.LocalPlayer -- Function to create and give the teleport tool local function giveTool() local mouse = player:GetMouse() local tool = Instance.new("Tool") tool.RequiresHandle = false tool.Name = "Tp Tool" tool.TextureId = "rbxassetid://80767111941394" -- Custom picture icon tool.Activated:Connect(function() if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local pos = mouse.Hit.Position + Vector3.new(0, 2.5, 0) player.Character.HumanoidRootPart.CFrame = CFrame.new(pos) end end) tool.Parent = player.Backpack end -- Give the tool when the player respawns player.CharacterAdded:Connect(function() task.wait(1) -- Wait a bit to ensure the Backpack is ready if not player.Backpack:FindFirstChild("Tp Tool") then giveTool() end end) -- Give the tool at the start if the character is already loaded if player.Character then giveTool() end ----------------------------------------------------------------------------------------- -- MAIN ESP & DISARM UTILITY SCRIPT (DO NOT TOUCH ABOVE) ----------------------------------------------------------------------------------------- local ReplicatedStorage = game:GetService("ReplicatedStorage") local Workspace = game:GetService("Workspace") local Players = game:GetService("Players") local SoundService = game:GetService("SoundService") -- Settings local Settings = { ESP_Tools = true, ESP_Models = true, ESP_Doors = true, ESP_Crystals = true, ESP_Players = true, ONLY_ESP_ON_SCREEN = true, MAX_DISTANCE_ENABLED = true, ITEM_MAX_DISTANCE = 200, CRYSTAL_MAX_DISTANCE = 200, DOOR_MAX_DISTANCE = 200, DUST_MAX_DISTANCE = 200, ITEM_TRANSPARENCY = 0.3, DOOR_TRANSPARENCY = 0.9, CRYSTAL_TRANSPARENCY = 0.3, TEXT_WORLD_WIDTH = 4, TEXT_WORLD_HEIGHT = 1.5, ENTITY_SOUND_ID = "rbxassetid://107860910384340", ENTITY_SOUND_DURATION = 5, ENTITY_SOUND_VOLUME = 0.5, DEATH_SOUND_ID = "rbxassetid://127614493691795", ROOM_CLEARED_SOUND_ID = "rbxassetid://88824395257117", NoSoundEntities = { ["SecurityCamera"] = true, ["EX15s"] = true, ["LightBulb"] = true, ["Glare"] = true, ["Shade"] = true } } local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera local AssetsFolder = ReplicatedStorage:WaitForChild("Assets") local ItemsFolder = AssetsFolder:WaitForChild("Items") local ItemNames = {} for _, item in ipairs(ItemsFolder:GetChildren()) do ItemNames[item.Name] = true end local BlacklistedNames = { ["TableVariation1"] = true, ["DoorInset"] = true, ["GlassShards"] = true, ["DoorRight"] = true, ["DoorLeft"] = true, ["SingleAmethystShard"] = true, ["SingleAmethystShard1"] = true, ["SingleAmethystShard2"] = true, ["SingleAmethystShard3"] = true, ["SingleAmethystShard4"] = true, ["RoomDoorIndent"] = true, ["Book"] = true, ["BigCrystal"] = true, ["ThinTallCrystal"] = true, ["NormalCrystal"] = true, ["ShortCrystal"] = true, ["Crystal"] = true, } local TrackedObjects = {} local TrackedPlayers = {} local hasPlayedDeathSound = false local hadEnemiesInRoom = false local function CleanESP(obj) local existingHighlight = obj:FindFirstChild("ItemESP") if existingHighlight then existingHighlight:Destroy() end local existingBillboard = obj:FindFirstChild("ItemNameESP") if existingBillboard then existingBillboard:Destroy() end end local function PlayCustomSound(soundId, volume) local sound = Instance.new("Sound") sound.SoundId = soundId sound.Volume = volume or 0.6 sound.Parent = SoundService sound:Play() sound.Ended:Connect(function() sound:Destroy() end) end local function CreateESP(obj, espType) if BlacklistedNames[obj.Name] and not string.find(string.lower(obj.Name), "shade") then return end if obj:FindFirstChild("ItemESP") then return end local isToolObj = obj:IsA("Tool") local isModelObj = obj:IsA("Model") local textAdornee = nil if isToolObj then textAdornee = obj:FindFirstChild("Handle") elseif isModelObj then textAdornee = obj.PrimaryPart or obj:FindFirstChild("Handle") or obj:FindFirstChildWhichIsA("BasePart") end if not textAdornee then return end local espColor = Color3.fromRGB(255, 0, 0) local chosenTransparency = Settings.ITEM_TRANSPARENCY local lowerName = string.lower(obj.Name) if espType == "Door" then espColor = Color3.fromRGB(0, 255, 255) chosenTransparency = Settings.DOOR_TRANSPARENCY elseif espType == "Crystal" then if obj.Name == "DeceivingDust" then espColor = Color3.fromRGB(0, 255, 0) elseif string.find(lowerName, "sliver") or string.find(lowerName, "silver") then espColor = Color3.fromRGB(150, 150, 150) else espColor = Color3.fromRGB(185, 0, 255) end chosenTransparency = Settings.CRYSTAL_TRANSPARENCY elseif espType == "Entity" then espColor = Color3.fromRGB(255, 0, 0) chosenTransparency = 0.2 elseif espType == "Player" then espColor = Color3.fromRGB(255, 255, 255) chosenTransparency = 0.4 elseif espType == "Item" then espColor = Color3.fromRGB(255, 255, 0) end local highlight = Instance.new("Highlight") highlight.Name = "ItemESP" highlight.FillColor = espColor highlight.OutlineColor = (espType == "Entity" or obj.Name == "LightBulb") and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(255, 255, 255) highlight.FillTransparency = chosenTransparency highlight.OutlineTransparency = 0 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Adornee = obj highlight.Parent = obj local billboard = Instance.new("BillboardGui") billboard.Name = "ItemNameESP" billboard.AlwaysOnTop = true billboard.Size = UDim2.new(Settings.TEXT_WORLD_WIDTH, 0, Settings.TEXT_WORLD_HEIGHT, 0) billboard.ClipsDescendants = false billboard.StudsOffset = Vector3.new(0, 3.5, 0) billboard.Adornee = textAdornee billboard.Parent = obj local text = Instance.new("TextLabel") text.BackgroundTransparency = 1 text.Size = UDim2.new(1, 0, 1, 0) if espType == "Player" then local plr = Players:GetPlayerFromCharacter(obj) local hum = obj:FindFirstChildOfClass("Humanoid") local currentHp = hum and math.floor(hum.Health) or 100 text.Text = (plr and plr.Name or obj.Name) .. " [" .. currentHp .. " HP]" elseif obj.Name == "LightBulb" then text.Text = "Shock Bulb (REMOVED DON\"T GET CATCH)" elseif obj.Name == "Muted_Glare_Marker" then text.Text = "Glare [DISARMED] (DELETED DON\"T GET CATCH)" else -- Logic for Hitbox Deleted tag local suffix = (obj:GetAttribute("HitboxDeleted") and " (HITBOX DELETED)") or "" text.Text = obj.Name .. suffix end text.TextScaled = true text.TextColor3 = espColor text.TextStrokeTransparency = 0 text.Font = Enum.Font.SourceSansBold text.Parent = billboard end local function GetObjectPosition(obj) if obj:IsA("Model") then if obj.PrimaryPart then return obj.PrimaryPart.Position end local basePart = obj:FindFirstChildWhichIsA("BasePart") if basePart then return basePart.Position end elseif obj:IsA("Tool") then local handle = obj:FindFirstChild("Handle") if handle and handle:IsA("BasePart") then return handle.Position end local basePart = obj:FindFirstChildWhichIsA("BasePart") if basePart then return basePart.Position end end return nil end local function IsObjectOnScreen(targetPos) if not Settings.ONLY_ESP_ON_SCREEN then return true end local _, onScreen = Camera:WorldToViewportPoint(targetPos) return onScreen end local function PlayerHasFlashlight() local backpack = LocalPlayer:FindFirstChildOfClass("Backpack") local character = LocalPlayer.Character if backpack and (backpack:FindFirstChild("Flashlight") or backpack:FindFirstChild("BulkLight")) then return true end if character and (character:FindFirstChild("Flashlight") or character:FindFirstChild("BulkLight")) then return true end return false end local function TriggerSpawnSound(entityName) if Settings.NoSoundEntities[entityName] then return end if string.find(string.lower(entityName), "shade") then return end PlayCustomSound(Settings.ENTITY_SOUND_ID, Settings.ENTITY_SOUND_VOLUME) end local function CategorizeAndCache(obj, contextOverride) if TrackedObjects[obj] then return end if not contextOverride and BlacklistedNames[obj.Name] and not string.find(string.lower(obj.Name), "shade") then return end local isToolObj = obj:IsA("Tool") local isModelObj = obj:IsA("Model") if not isToolObj and not isModelObj then return end local targetType = nil local maxDistance = 0 local checkDistanceEnabled = Settings.MAX_DISTANCE_ENABLED if isModelObj and string.find(string.lower(obj.Name), "shade") then contextOverride = "Entity" end if contextOverride then targetType = contextOverride if contextOverride == "Entity" then maxDistance = 999999 checkDistanceEnabled = false elseif contextOverride == "Door" then maxDistance = Settings.DOOR_MAX_DISTANCE checkDistanceEnabled = true elseif contextOverride == "Item" then maxDistance = Settings.ITEM_MAX_DISTANCE checkDistanceEnabled = Settings.MAX_DISTANCE_ENABLED end elseif obj.Name == "DeceivingDust" then targetType = "Crystal" maxDistance = Settings.DUST_MAX_DISTANCE checkDistanceEnabled = Settings.MAX_DISTANCE_ENABLED else local lowerName = string.lower(obj.Name) local isCrystal = string.find(lowerName, "crystal") ~= nil or string.find(lowerName, "amethyst") ~= nil or string.find(lowerName, "shard") ~= nil or string.find(lowerName, "sliver") ~= nil or string.find(lowerName, "silver") ~= nil local isDoor = string.find(lowerName, "door") ~= nil or obj.Name == "Vent" local isItem = ItemNames[obj.Name] or obj.Name == "Keycard" or obj.Name == "Battery" or obj.Name == "Bandage" if isCrystal and not isDoor then targetType = "Crystal" maxDistance = Settings.CRYSTAL_MAX_DISTANCE elseif isDoor and not isItem and not isCrystal then targetType = "Door" maxDistance = Settings.DOOR_MAX_DISTANCE checkDistanceEnabled = true elseif isItem and not isDoor then targetType = "Item" maxDistance = Settings.ITEM_MAX_DISTANCE end end if targetType then TrackedObjects[obj] = { Type = targetType, MaxDistance = maxDistance, CheckDistance = checkDistanceEnabled } if targetType == "Entity" then TriggerSpawnSound(obj.Name) end obj.Destroying:Connect(function() TrackedObjects[obj] = nil end) if obj.Name == "Glare" then task.wait() local spawnPos = GetObjectPosition(obj) if spawnPos then for _, desc in ipairs(obj:GetDescendants()) do if desc:IsA("BasePart") then desc.Transparency = 1 desc.CanCollide = false desc.CanTouch = false desc.CanQuery = false end end local marker = Instance.new("Model") marker.Name = "Muted_Glare_Marker" local hrp = Instance.new("Part") hrp.Name = "PrimaryPart" hrp.Anchored = true hrp.CanCollide = false hrp.Transparency = 1 hrp.Size = Vector3.new(2, 2, 2) hrp.Position = spawnPos hrp.Parent = marker marker.PrimaryPart = hrp marker.Parent = Workspace CategorizeAndCache(marker, "Entity") end obj:Destroy() end end end local function ScanRoom50(room50) if room50.Name ~= "50" then return end task.wait(0.1) local function checkAndTrack50Elements(obj) if obj.Name == "SecurityCamera" then CategorizeAndCache(obj, "Entity") elseif obj.Parent and (obj.Parent.Name == "EX15s" or obj.Name == "EX15s" or string.find(string.lower(obj.Name), "ex15")) then CategorizeAndCache(obj, "Entity") elseif obj.Name == "BreakableCrate" or obj.Name == "DrillTruck" then CategorizeAndCache(obj, "Door") end end for _, obj in ipairs(room50:GetDescendants()) do checkAndTrack50Elements(obj) end room50.DescendantAdded:Connect(function(obj) task.wait() checkAndTrack50Elements(obj) end) end local function CheckLightBulb(lightBulb) if lightBulb.Name ~= "LightBulb" then return end local bulbFolder = lightBulb:WaitForChild("Bulb", 3) if bulbFolder then local trapPart = bulbFolder:FindFirstChild("ShockPart") if trapPart then CategorizeAndCache(lightBulb, "Entity") trapPart:Destroy() end bulbFolder.ChildAdded:Connect(function(child) if child.Name == "ShockPart" then task.wait() CategorizeAndCache(lightBulb, "Entity") child:Destroy() end end) end end local function HandleScriptablesFolder(scriptables, roomName) local function processElement(obj) if obj.Name == "MainLever" or obj.Name == "Gate" then CategorizeAndCache(obj, "Door") elseif (obj.Name == "Unit" or obj.Name == "UnitTemplate") and roomName == "89" then CategorizeAndCache(obj, "Entity") elseif obj.Name == "MainDoorOpenable" then for _, subObj in ipairs(obj:GetDescendants()) do if subObj:IsA("Model") and string.find(string.lower(subObj.Name), "shade") then CategorizeAndCache(subObj, "Entity") end end obj.DescendantAdded:Connect(function(subObj) if subObj:IsA("Model") and string.find(string.lower(subObj.Name), "shade") then task.wait() CategorizeAndCache(subObj, "Entity") end end) end end for _, obj in ipairs(scriptables:GetChildren()) do processElement(obj) end scriptables.ChildAdded:Connect(function(obj) task.wait() processElement(obj) end) local function checkPuzzleCode(obj) if obj.Name == "TrueLab_PuzzleCode" then local puzzleFolder = obj:WaitForChild("Puzzle", 5) if puzzleFolder then for _, item in ipairs(puzzleFolder:GetChildren()) do CategorizeAndCache(item, "Item") end puzzleFolder.ChildAdded:Connect(function(item) task.wait() CategorizeAndCache(item, "Item") end) end end end local existingPuzzleCode = scriptables:FindFirstChild("TrueLab_PuzzleCode") if existingPuzzleCode then checkPuzzleCode(existingPuzzleCode) end scriptables.ChildAdded:Connect(checkPuzzleCode) end local CurrentRooms = Workspace:WaitForChild("CurrentRooms", 5) local function SetupRoomScanning(room) if not room:IsA("Model") and not room:IsA("Folder") then return end task.wait(0.05) if room.Name == "50" then ScanRoom50(room) end local lightsFolder = room:FindFirstChild("Lights") if lightsFolder then for _, bulb in ipairs(lightsFolder:GetChildren()) do CheckLightBulb(bulb) end lightsFolder.ChildAdded:Connect(function(bulb) task.wait() CheckLightBulb(bulb) end) end room.ChildAdded:Connect(function(child) if child.Name == "Lights" then task.wait() for _, bulb in ipairs(child:GetChildren()) do CheckLightBulb(bulb) end child.ChildAdded:Connect(function(bulb) task.wait() CheckLightBulb(bulb) end) end end) local doorModel = room:FindFirstChild("Door") if doorModel then for _, subObj in ipairs(doorModel:GetDescendants()) do if subObj:IsA("Model") and string.find(string.lower(subObj.Name), "shade") then CategorizeAndCache(subObj, "Entity") end end doorModel.DescendantAdded:Connect(function(subObj) if subObj:IsA("Model") and string.find(string.lower(subObj.Name), "shade") then task.wait() CategorizeAndCache(subObj, "Entity") end end) end room.ChildAdded:Connect(function(child) if child.Name == "Door" then task.wait() for _, subObj in ipairs(child:GetDescendants()) do if subObj:IsA("Model") and string.find(string.lower(subObj.Name), "shade") then CategorizeAndCache(subObj, "Entity") end end child.DescendantAdded:Connect(function(subObj) if subObj:IsA("Model") and string.find(string.lower(subObj.Name), "shade") then task.wait() CategorizeAndCache(subObj, "Entity") end end) end end) local scriptables = room:FindFirstChild("Scriptables") if scriptables then HandleScriptablesFolder(scriptables, room.Name) end room.ChildAdded:Connect(function(child) if child.Name == "Scriptables" then task.wait() HandleScriptablesFolder(child, room.Name) end end) local ventsFolder = room:FindFirstChild("Vents") if ventsFolder then for _, vent in ipairs(ventsFolder:GetChildren()) do if vent.Name == "Vent" then CategorizeAndCache(vent) end end ventsFolder.ChildAdded:Connect(function(vent) if vent.Name == "Vent" then task.wait() CategorizeAndCache(vent) end end) end for _, obj in ipairs(room:GetDescendants()) do CategorizeAndCache(obj) end room.DescendantAdded:Connect(function(obj) task.wait() CategorizeAndCache(obj) end) end if CurrentRooms then for _, room in ipairs(CurrentRooms:GetChildren()) do SetupRoomScanning(room) end CurrentRooms.ChildAdded:Connect(function(room) SetupRoomScanning(room) end) end -- ======================================================================================= -- ADDED HITBOX REMOVER LOGIC -- ======================================================================================= local EntitiesFolder = Workspace:WaitForChild("Entities", 5) local function CleanupEntity(entity) if entity:IsA("Model") then local hitbox = entity:FindFirstChild("Hitbox") if hitbox then hitbox:Destroy() entity:SetAttribute("HitboxDeleted", true) end entity.ChildAdded:Connect(function(child) if child.Name == "Hitbox" then child:Destroy() entity:SetAttribute("HitboxDeleted", true) end end) end end if EntitiesFolder then for _, child in ipairs(EntitiesFolder:GetChildren()) do CleanupEntity(child) end EntitiesFolder.ChildAdded:Connect(CleanupEntity) end -- ======================================================================================= local function HandleNewEntity(entity) if not entity:IsA("Model") then return end task.wait() CategorizeAndCache(entity, "Entity") end if EntitiesFolder then for _, entity in ipairs(EntitiesFolder:GetChildren()) do HandleNewEntity(entity) end EntitiesFolder.ChildAdded:Connect(HandleNewEntity) end for _, child in ipairs(Workspace:GetChildren()) do if child.Name == "89" or child.Name == "50" then SetupRoomScanning(child) end end Workspace.ChildAdded:Connect(function(child) if child.Name == "89" or child.Name == "50" then SetupRoomScanning(child) end end) local function TrackPlayer(player) if player == LocalPlayer then return end local function setupCharacter(char) TrackedPlayers[player] = char end if player.Character then setupCharacter(player.Character) end player.CharacterAdded:Connect(setupCharacter) player.CharacterRemoving:Connect(function() TrackedPlayers[player] = nil end) end for _, p in ipairs(Players:GetPlayers()) do TrackPlayer(p) end Players.PlayerAdded:Connect(TrackPlayer) Players.PlayerRemoving:Connect(function(p) TrackedPlayers[p] = nil end) Workspace.DescendantAdded:Connect(function(descendant) if descendant:IsA("Model") and string.find(string.lower(descendant.Name), "shade") then task.wait() CategorizeAndCache(descendant, "Entity") end end) -- LOOP while task.wait(0.1) do local character = LocalPlayer.Character local rootPart = character and character:FindFirstChild("HumanoidRootPart") local humanoid = character and character:FindFirstChildOfClass("Humanoid") local hasFlashlight = PlayerHasFlashlight() local currentHealth = humanoid and humanoid.Health or 100 if currentHealth <= 0 then if not hasPlayedDeathSound then PlayCustomSound(Settings.DEATH_SOUND_ID, 0.8) hasPlayedDeathSound = true end else hasPlayedDeathSound = false end local room50Instance = CurrentRooms and CurrentRooms:FindFirstChild("50") or Workspace:FindFirstChild("50") if room50Instance then local aiSetup = room50Instance:FindFirstChild("AI_Setup") local ex15sFolder = aiSetup and aiSetup:FindFirstChild("EX15s") if ex15sFolder then for _, monster in ipairs(ex15sFolder:GetChildren()) do if not TrackedObjects[monster] then CategorizeAndCache(monster, "Entity") end end end end if Settings.ESP_Players then for player, char in pairs(TrackedPlayers) do if char and char.Parent and char:FindFirstChild("HumanoidRootPart") then local hum = char:FindFirstChildOfClass("Humanoid") local hpVal = hum and math.floor(hum.Health) or 0 local objPos = char.HumanoidRootPart.Position if IsObjectOnScreen(objPos) then if not char:FindFirstChild("ItemESP") then CreateESP(char, "Player") else local espBillboard = char:FindFirstChild("ItemNameESP") local label = espBillboard and espBillboard:FindFirstChildOfClass("TextLabel") if label then label.Text = player.Name .. " [" .. hpVal .. " HP]" end end else CleanESP(char) end else if char then CleanESP(char) end end end else for _, char in pairs(TrackedPlayers) do if char then CleanESP(char) end end end local currentEnemyCount = 0 for obj, data in pairs(TrackedObjects) do local activeToggle = false if data.Type == "Crystal" then activeToggle = Settings.ESP_Crystals elseif data.Type == "Door" then activeToggle = Settings.ESP_Doors elseif data.Type == "Item" then activeToggle = (obj:IsA("Tool") and Settings.ESP_Tools) or (obj:IsA("Model") and Settings.ESP_Models) elseif data.Type == "Entity" then activeToggle = true local isMutedShade = string.find(string.lower(obj.Name), "shade") ~= nil if not Settings.NoSoundEntities[obj.Name] and obj.Name ~= "Muted_Glare_Marker" and not isMutedShade then currentEnemyCount = currentEnemyCount + 1 end end if activeToggle and data.Type == "Item" then if obj.Name == "Battery" and not hasFlashlight then activeToggle = false elseif obj.Name == "Bandage" and currentHealth >= 100 then activeToggle = false end end if activeToggle then local objPos = GetObjectPosition(obj) if objPos then local withinDistance = true if data.CheckDistance and rootPart then local distance = (rootPart.Position - objPos).Magnitude if distance > data.MaxDistance then withinDistance = false end end if withinDistance and IsObjectOnScreen(objPos) then if not obj:FindFirstChild("ItemESP") then CreateESP(obj, data.Type) end else CleanESP(obj) end else CleanESP(obj) end else CleanESP(obj) end end if currentEnemyCount > 0 then hadEnemiesInRoom = true elseif currentEnemyCount == 0 and hadEnemiesInRoom then PlayCustomSound(Settings.ROOM_CLEARED_SOUND_ID, 0.7) hadEnemiesInRoom = false end end