[EVENT UPD] ESPs, auto skill check, and more features
Key Required

[EVENT UPD] ESPs, auto skill check, and more features

🍰 10 Player Fleeskeeplskeepl 3.6K views 7.3K executesUpdated Apr 7, 2026
5.0/ 5(2 votes)
20100% Positive
Lua Script•700 lines (31528 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local VirtualInputManager = game:GetService("VirtualInputManager")
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local mFloor = math.floor
local mMax = math.max
local mAbs = math.abs
local tWait = task.wait
local tSpawn = task.spawn
local v3 = Vector3.new
local v2 = Vector2.new
local ud2 = UDim2.new
local c3 = Color3.fromRGB
local tSort = table.sort
local tInsert = table.insert
local tTick = tick

local localPlayer = Players.LocalPlayer
local PlayerGui = localPlayer:WaitForChild("PlayerGui")
local MapPath = workspace:WaitForChild("Map")
local Challenge = ReplicatedStorage:WaitForChild("Challenge")

local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled
local isPC = UserInputService.KeyboardEnabled

local Settings = {
    LockersVents = 1,
    BeastESP = 1,
    SurvivorESP = 1,
    ExitESP = 1,
    ComputerESP = 1,
    HatchESP = 1,
    PoisonESP = 1,
    TrapsESP = 1,
    EventESP = 2 
}

local MAX_DISTANCE_LOCKER = 50 
local BEAST_WARNING_DISTANCE = 79
local COLORS = {
    ComputerTable = c3(0, 255, 255), 
    ExitDoor = c3(255, 255, 0),      
    BeastPlayer = c3(255, 93, 108),
    BeastNear = c3(255, 0, 255),
    SurvivorPlayer = c3(64, 224, 255),
    InteractionObj = c3(170, 255, 127),
    Poison = c3(0, 255, 0), 
    Hatch = c3(255, 170, 0),
    Trap = c3(255, 0, 0),
    Event = c3(255, 255, 255) 
}

local indicatorGui = nil 
local cachedMapObjects = {}
local cachedPoisons = {}
local cachedTraps = {}
local cachedEvents = {} 
local cachedHatch = nil
local lastThrottledUpdate = 0 
local lastEventFolderCheck = 0

local CUSTOM_FONT = Font.new("rbxassetid://11702779517", Enum.FontWeight.Bold, Enum.FontStyle.Normal)

local function clearESP(obj)
    if not obj then return end
    local h = obj:FindFirstChild("H")
    local b = obj:FindFirstChild("BitchHook")
    local w = obj:FindFirstChild("WarningTag")
    if h then h:Destroy() end
    if b then b:Destroy() end
    if w then w:Destroy() end
end

local function applyFullbright()
    Lighting.Brightness = 2
    Lighting.ClockTime = 14
    Lighting.FogEnd = 100000
    Lighting.GlobalShadows = false
    Lighting.OutdoorAmbient = c3(255, 255, 255)
    Lighting.Ambient = c3(255, 255, 255)
    
    for _, effect in ipairs(Lighting:GetChildren()) do
        if effect:IsA("PostProcessEffect") or effect:IsA("Atmosphere") or effect:IsA("Clouds") then
            effect.Enabled = false
        end
    end
end

local function applyHighlight(obj, color)
    local h = obj:FindFirstChild("H")
    if not h then
        h = Instance.new("Highlight")
        h.Name = "H"
        h.Adornee = obj
        h.FillTransparency = 0.8
        h.OutlineTransparency = 0.3
        h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
        h.Archivable = false 
        h.Parent = obj
    end
    h.FillColor = color
    h.OutlineColor = color
    return h
end

local function checkEventObj(obj)
    if obj:IsA("Model") or obj:IsA("BasePart") then
        cachedEvents[obj] = true
    end
end

local function refreshEventTracking()
    local folder = MapPath:FindFirstChild("EventObjects")
    if folder then
        for _, obj in ipairs(folder:GetChildren()) do checkEventObj(obj) end
        folder.ChildAdded:Connect(checkEventObj)
    end
end

local function addMapObject(obj)
    local name = obj.Name
    if name == "ComputerTable" and obj:IsA("Model") then
        cachedMapObjects[obj] = "ComputerTable"
    elseif name == "ExitDoor" then
        cachedMapObjects[obj] = "ExitDoor"
    elseif name == "Locker" or name == "Vent" then
        cachedMapObjects[obj] = "LockerVent"
    elseif name == "FreezePod" then
        cachedMapObjects[obj] = "FreezePod"
    elseif name == "EventObjects" then
        refreshEventTracking()
    end
end

local function removeMapObject(obj)
    cachedMapObjects[obj] = nil
end

for _, obj in ipairs(MapPath:GetDescendants()) do addMapObject(obj) end
MapPath.DescendantAdded:Connect(addMapObject)
MapPath.DescendantRemoving:Connect(removeMapObject)

local function checkWorkspaceObj(obj)
    if obj.Name == "Poison" and obj:IsA("BasePart") then
        cachedPoisons[obj] = true
    elseif obj.Name == "BearTrap" then
        cachedTraps[obj] = true
    elseif (obj.Name == "Hatch" or obj.Name == "hatch") and (obj:IsA("Model") or obj:IsA("BasePart")) then
        cachedHatch = obj
    end
end

for _, obj in ipairs(workspace:GetDescendants()) do checkWorkspaceObj(obj) end
workspace.DescendantAdded:Connect(checkWorkspaceObj)

workspace.DescendantRemoving:Connect(function(obj)
    if cachedPoisons[obj] then cachedPoisons[obj] = nil end
    if cachedTraps[obj] then cachedTraps[obj] = nil end
    if cachedHatch == obj then cachedHatch = nil end
    if cachedEvents[obj] then cachedEvents[obj] = nil end
end)

local function createBillboard(text, color, name, strokeColor)
    local billboard = Instance.new("BillboardGui")
    billboard.Name = name or "BitchHook"
    billboard.AlwaysOnTop = true
    billboard.Size = ud2(0, 120, 0, 30)
    billboard.StudsOffset = v3(0, 2, 0)
    billboard.MaxDistance = math.huge
    billboard.Archivable = false 
    
    local textLabel = Instance.new("TextLabel")
    textLabel.Name = "BitchHook"
    textLabel.Size = ud2(1, 0, 1, 0)
    textLabel.BackgroundTransparency = 1
    textLabel.Text = text
    textLabel.TextColor3 = color
    textLabel.TextStrokeTransparency = 0
    textLabel.TextStrokeColor3 = strokeColor or Color3.new(0, 0, 0)
    textLabel.Font = Enum.Font.GothamBold
    textLabel.TextSize = 10
    textLabel.TextWrapped = true
    textLabel.Parent = billboard
    
    return billboard
end

local function updatePlayerNametag(player)
    if player == localPlayer then return end 
    
    local function cleanupOffScreenIndicator()
        if indicatorGui then
            local ind = indicatorGui:FindFirstChild(player.Name .. "_OffScreen")
            if ind then ind:Destroy() end
        end
    end
    
    local function cleanupNametag()
        local tag = PlayerGui:FindFirstChild(player.Name .. "_BitchHook")
        if tag then tag:Destroy() end
    end

    if not player.Character then 
        cleanupOffScreenIndicator()
        cleanupNametag()
        return 
    end
    
    local isBeast = player:GetAttribute("Beast")
    local espState = isBeast and Settings.BeastESP or Settings.SurvivorESP
    
    if espState == 0 then
        clearESP(player.Character)
        cleanupOffScreenIndicator()
        cleanupNametag()
        return 
    end

    local hrp = player.Character:FindFirstChild("HumanoidRootPart")
    local myHrp = localPlayer.Character and localPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not hrp then 
        cleanupOffScreenIndicator()
        cleanupNametag()
        return 
    end
    
    local distance = myHrp and (hrp.Position - myHrp.Position).Magnitude or 999
    local color = COLORS.SurvivorPlayer
    if isBeast then
        color = (distance <= BEAST_WARNING_DISTANCE and not localPlayer:GetAttribute("Beast")) and COLORS.BeastNear or COLORS.BeastPlayer
    end
    
    applyHighlight(player.Character, color)
    local existingTag = PlayerGui:FindFirstChild(player.Name .. "_BitchHook")
    local chosenPower = player:GetAttribute("ChosenPower") or "Unknown"
    local prefix = isBeast and ("[" .. tostring(chosenPower):upper() .. "] ") or ""
    
    if espState == 2 then
        if existingTag then existingTag:Destroy() end
        cleanupOffScreenIndicator()
    else
        local nametagText = prefix .. player.Name .. "\n[" .. mFloor(distance) .. " studs]"
        if existingTag then
            local label = existingTag:FindFirstChild("BitchHook")
            if label then label.Text = nametagText; label.TextColor3 = color end
        else
            local nametag = createBillboard(nametagText, color, player.Name .. "_BitchHook")
            nametag.Adornee = hrp
            nametag.Parent = PlayerGui
        end
        
        if isBeast and not localPlayer:GetAttribute("Beast") then
            if not indicatorGui or not indicatorGui.Parent then
                if indicatorGui then indicatorGui:Destroy() end
                indicatorGui = Instance.new("ScreenGui")
                indicatorGui.Name = "BeastOffScreenIndicators"
                indicatorGui.IgnoreGuiInset = true; indicatorGui.Parent = PlayerGui
            end
            local indName = player.Name .. "_OffScreen"
            local indicator = indicatorGui:FindFirstChild(indName)
            if not indicator then
                indicator = Instance.new("TextLabel")
                indicator.Name = indName; indicator.BackgroundTransparency = 1
                indicator.Font = Enum.Font.GothamBold; indicator.TextSize = 14
                indicator.TextStrokeTransparency = 0; indicator.Size = ud2(0, 100, 0, 40)
                indicator.AnchorPoint = v2(0.5, 0.5); indicator.Parent = indicatorGui
            end
            indicator.Text = prefix .. "\n[" .. mFloor(distance) .. "]"
            indicator.TextColor3 = color
            local camera = workspace.CurrentCamera
            local screenPos, onScreen = camera:WorldToScreenPoint(hrp.Position)
            if not onScreen then
                indicator.Visible = true
                local viewportCenter = camera.ViewportSize / 2
                local direction = v2(screenPos.X, screenPos.Y) - viewportCenter
                if screenPos.Z < 0 then direction = -direction end
                local maxScale = mMax(mAbs(direction.X) / (viewportCenter.X - 30), mAbs(direction.Y) / (viewportCenter.Y - 30))
                if maxScale == 0 then maxScale = 1 end
                indicator.Position = ud2(0, viewportCenter.X + direction.X / maxScale, 0, viewportCenter.Y + direction.Y / maxScale)
            else
                indicator.Visible = false
            end
        else
            cleanupOffScreenIndicator()
        end
    end
end

local function handleSpecialTrackers()
    local myHrp = localPlayer.Character and localPlayer.Character:FindFirstChild("HumanoidRootPart")
    local isPoisonerActive = false
    for _, p in ipairs(Players:GetPlayers()) do
        if p:GetAttribute("Beast") and p:GetAttribute("ChosenPower") == "Poisoner" then isPoisonerActive = true; break end
    end
    
    for eventObj, _ in pairs(cachedEvents) do
        if Settings.EventESP == 0 then clearESP(eventObj); continue end
        if eventObj.Parent then
            local points = eventObj:GetAttribute("EventPoints") or 0
            local textColor = c3(255, 255, 255) 
            local strokeColor = c3(0, 0, 0)     
            
            if points == 3 then
                textColor = c3(255, 255, 0) 
            elseif points == 6 then
                textColor = c3(255, 215, 0) 
            elseif points == 20 then
                textColor = c3(170, 0, 255) 
                strokeColor = c3(255, 255, 255) 
            end

            applyHighlight(eventObj, textColor)

            if Settings.EventESP == 1 then
                local pos = eventObj:GetPivot().Position
                local dist = myHrp and mFloor((pos - myHrp.Position).Magnitude) or 0
                local tagText = points .. " POINTS\n[" .. dist .. " studs]"
                local existingTag = eventObj:FindFirstChild("BitchHook")
                
                if existingTag then
                    local label = existingTag:FindFirstChild("BitchHook")
                    if label then 
                        label.Text = tagText 
                        label.TextColor3 = textColor
                        label.TextStrokeColor3 = strokeColor
                    end
                else
                    local tag = createBillboard(tagText, textColor, "BitchHook", strokeColor)
                    tag.Adornee = eventObj.PrimaryPart or eventObj:FindFirstChildWhichIsA("BasePart") or eventObj
                    tag.Parent = eventObj
                end
            elseif Settings.EventESP == 2 then
                local existingTag = eventObj:FindFirstChild("BitchHook")
                if existingTag then existingTag:Destroy() end
            end
        else cachedEvents[eventObj] = nil end
    end

    for poisonPart, _ in pairs(cachedPoisons) do
        if Settings.PoisonESP == 0 then clearESP(poisonPart); continue end
        if poisonPart.Parent and isPoisonerActive then
            applyHighlight(poisonPart, COLORS.Poison)
            if Settings.PoisonESP == 2 then
                local existingTag = poisonPart:FindFirstChild("BitchHook")
                if existingTag then existingTag:Destroy() end
            else
                local dist = myHrp and mFloor((poisonPart.Position - myHrp.Position).Magnitude) or 0
                local tagText = "POISON\n[" .. dist .. " studs]"
                local existingTag = poisonPart:FindFirstChild("BitchHook")
                if existingTag then
                    local label = existingTag:FindFirstChild("BitchHook")
                    if label then label.Text = tagText end
                else
                    local tag = createBillboard(tagText, COLORS.Poison)
                    tag.Adornee = poisonPart; tag.Parent = poisonPart
                end
            end
        elseif poisonPart.Parent then clearESP(poisonPart)
        else cachedPoisons[poisonPart] = nil end
    end
    
    for trap, _ in pairs(cachedTraps) do
        if Settings.TrapsESP == 0 then clearESP(trap); continue end
        if trap.Parent then
            applyHighlight(trap, COLORS.Trap)
            if Settings.TrapsESP == 2 then
                local existingTag = trap:FindFirstChild("BitchHook")
                if existingTag then existingTag:Destroy() end
            else
                local pos = trap:IsA("Model") and trap:GetPivot().Position or trap.Position
                local dist = myHrp and mFloor((pos - myHrp.Position).Magnitude) or 0
                local tagText = "TRAP\n[" .. dist .. " studs]"
                local existingTag = trap:FindFirstChild("BitchHook")
                if existingTag then
                    local label = existingTag:FindFirstChild("BitchHook")
                    if label then label.Text = tagText end
                else
                    local tag = createBillboard(tagText, COLORS.Trap)
                    tag.Adornee = trap:IsA("Model") and (trap.PrimaryPart or trap:FindFirstChildWhichIsA("BasePart")) or trap
                    tag.Parent = trap
                end
            end
        else cachedTraps[trap] = nil end
    end
    
    if cachedHatch and cachedHatch.Parent then
        if Settings.HatchESP == 0 then clearESP(cachedHatch) else
            applyHighlight(cachedHatch, COLORS.Hatch)
            if Settings.HatchESP == 2 then
                local existingTag = cachedHatch:FindFirstChild("BitchHook")
                if existingTag then existingTag:Destroy() end
            else
                local pos = cachedHatch:IsA("Model") and cachedHatch:GetPivot().Position or cachedHatch.Position
                local dist = myHrp and mFloor((pos - myHrp.Position).Magnitude) or 0
                local tagText = "HATCH\n[" .. dist .. " studs]"
                local existingTag = cachedHatch:FindFirstChild("BitchHook")
                if existingTag then
                    local label = existingTag:FindFirstChild("BitchHook")
                    if label then label.Text = tagText end
                else
                    local tag = createBillboard(tagText, COLORS.Hatch)
                    tag.Adornee = cachedHatch:IsA("Model") and (cachedHatch.PrimaryPart or cachedHatch:FindFirstChildWhichIsA("BasePart")) or cachedHatch
                    tag.Parent = cachedHatch
                end
            end
        end
    elseif cachedHatch and not cachedHatch.Parent then cachedHatch = nil end
end

local function handleBeastWarning()
    if localPlayer:GetAttribute("Beast") then 
        local tag = localPlayer.Character and localPlayer.Character:FindFirstChild("WarningTag", true)
        if tag then tag.Enabled = false end
        return 
    end
    local myChar = localPlayer.Character
    local myHrp = myChar and myChar:FindFirstChild("HumanoidRootPart")
    if not myHrp then return end
    local beastFoundNear = false
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= localPlayer and p:GetAttribute("Beast") and p.Character then
            local bHrp = p.Character:FindFirstChild("HumanoidRootPart")
            if bHrp and (bHrp.Position - myHrp.Position).Magnitude <= BEAST_WARNING_DISTANCE then beastFoundNear = true; break end
        end
    end
    local warningTag = myHrp:FindFirstChild("WarningTag")
    if beastFoundNear then
        if not warningTag then
            warningTag = createBillboard("!", c3(255, 0, 0), "WarningTag")
            warningTag.Size = ud2(0, 50, 0, 50); warningTag.StudsOffset = v3(0, 4, 0)
            local lbl = warningTag:FindFirstChild("BitchHook"); lbl.TextSize = 40
            warningTag.Parent = myHrp
        end
        warningTag.Enabled = true
    elseif warningTag then warningTag.Enabled = false end
end

local function handleMapObjects()
    local char = localPlayer.Character
    local hrp = char and char:FindFirstChild("HumanoidRootPart")
    for obj, objType in pairs(cachedMapObjects) do
        if objType == "ComputerTable" then
            if Settings.ComputerESP == 0 then clearESP(obj); continue end
            local progress = obj:GetAttribute("Progress")
            if not progress or progress >= 100 then clearESP(obj)
            else
                applyHighlight(obj, COLORS.ComputerTable)
                if Settings.ComputerESP == 2 then
                    local existingTag = obj:FindFirstChild("BitchHook")
                    if existingTag then existingTag:Destroy() end
                else
                    local existingTag = obj:FindFirstChild("BitchHook")
                    if existingTag then
                        local label = existingTag:FindFirstChild("BitchHook")
                        if label then label.Text = mFloor(progress) .. "%" end
                    else
                        local tag = createBillboard(mFloor(progress) .. "%", COLORS.ComputerTable)
                        local screen = obj:FindFirstChild("Screen") 
                        tag.Adornee = screen or (obj:IsA("Model") and (obj.PrimaryPart or obj:FindFirstChildWhichIsA("BasePart")) or obj)
                        tag.Parent = obj
                    end
                end
            end
        elseif objType == "ExitDoor" then 
            if Settings.ExitESP == 0 then clearESP(obj) else applyHighlight(obj, COLORS.ExitDoor) end
        elseif objType == "LockerVent" then
            if Settings.LockersVents == 0 then clearESP(obj); continue end
            if hrp then
                local pos = obj:IsA("Model") and obj:GetPivot().Position or obj.Position
                if (hrp.Position - pos).Magnitude <= MAX_DISTANCE_LOCKER then applyHighlight(obj, COLORS.InteractionObj)
                else local h = obj:FindFirstChild("H") if h then h:Destroy() end end
            end
        elseif objType == "FreezePod" then local h = obj:FindFirstChild("H") if h then h:Destroy() end end
    end
end

local function hookPlayer(player)
    if player == localPlayer then return end
    player.CharacterAdded:Connect(function() tWait(0.5) updatePlayerNametag(player) end)
end

Players.PlayerAdded:Connect(hookPlayer)
for _, player in ipairs(Players:GetPlayers()) do hookPlayer(player) end

Players.PlayerRemoving:Connect(function(player)
    if indicatorGui then
        local ind = indicatorGui:FindFirstChild(player.Name .. "_OffScreen")
        if ind then ind:Destroy() end
    end
    local tag = PlayerGui:FindFirstChild(player.Name .. "_BitchHook")
    if tag then tag:Destroy() end
end)

local function getBeastChance(p)
    local attr = p:GetAttribute("BeastChance")
    if attr then return attr end
    local val = p:FindFirstChild("BeastChance")
    if val and (val:IsA("NumberValue") or val:IsA("IntValue")) then return val.Value end
    return 0
end

local function predictBeast()
    local players = Players:GetPlayers()
    for _, p in ipairs(players) do if p:GetAttribute("InRound") then return nil end end
    local playerData = {}
    for _, p in ipairs(players) do tInsert(playerData, {player = p, chance = getBeastChance(p)}) end
    tSort(playerData, function(a, b) return a.chance > b.chance end)
    if #playerData == 0 then return nil end
    local highestChance = playerData[1].chance
    local secondHighestChance = nil
    for i = 2, #playerData do if playerData[i].chance < highestChance then secondHighestChance = playerData[i].chance; break end end
    local highestCount = 0
    for _, d in ipairs(playerData) do if d.chance == highestChance then highestCount = highestCount + 1 end end
    local secondHighestCount = 0
    if secondHighestChance then for _, d in ipairs(playerData) do if d.chance == secondHighestChance then secondHighestCount = secondHighestChance + 1 end end end
    local checkSecond = (#players > 5)
    local lines = {}
    for _, d in ipairs(playerData) do
        local colorStr = "#FFFFFF"
        local chance = d.chance
        if chance == highestChance then
            if not checkSecond then colorStr = (highestCount == 1) and "#FF5D6C" or "#FFC0CB"
            else colorStr = (highestCount <= 2) and "#FF5D6C" or "#FFC0CB" end
        elseif secondHighestChance and chance == secondHighestChance and checkSecond then
            if highestCount == 1 then colorStr = (secondHighestCount == 1) and "#FF5D6C" or "#FFC0CB" end
        end
        tInsert(lines, "<font color=\"" .. colorStr .. "\">" .. d.player.Name .. ": " .. chance .. "%</font>")
    end
    return table.concat(lines, "\n")
end

local predGui = Instance.new("ScreenGui")
predGui.Name = "BeastPredictionGui"; predGui.ResetOnSpawn = false; predGui.Parent = PlayerGui

local settingsContainer = Instance.new("Frame")
settingsContainer.Name = "SettingsContainer"; settingsContainer.Size = ud2(0, 40, 0, 40); settingsContainer.Position = ud2(0, 10, 0, 10) 
settingsContainer.BackgroundColor3 = c3(20, 20, 20); settingsContainer.BackgroundTransparency = 0.3
settingsContainer.BorderSizePixel = 1; settingsContainer.BorderColor3 = c3(0, 0, 0); settingsContainer.ZIndex = 1; settingsContainer.Parent = predGui

local cornerContainer = Instance.new("UICorner"); cornerContainer.CornerRadius = UDim.new(0, 8); cornerContainer.Parent = settingsContainer

local settingsBtn = Instance.new("ImageButton")
settingsBtn.Name = "SettingsBtn"; settingsBtn.Size = ud2(0, 26, 0, 26); settingsBtn.Position = ud2(0.5, -13, 0.5, -13)
settingsBtn.BackgroundTransparency = 1; settingsBtn.Image = "rbxassetid://9405931578"; settingsBtn.ZIndex = 2; settingsBtn.Parent = settingsContainer

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"; mainFrame.BackgroundColor3 = c3(40, 40, 40); mainFrame.BackgroundTransparency = 0.4; mainFrame.BorderSizePixel = 0 
mainFrame.Size = isMobile and ud2(0, 180, 0, 120) or ud2(0, 220, 0, 160)
mainFrame.Position = isMobile and ud2(0, 10, 0.5, -60) or ud2(0.5, -110, 0.05, 0)
mainFrame.ClipsDescendants = true; mainFrame.ZIndex = 1; mainFrame.Parent = predGui

local mainCorner = Instance.new("UICorner"); mainCorner.CornerRadius = UDim.new(0, 10); mainCorner.Parent = mainFrame

local tabFrame = Instance.new("Frame")
tabFrame.Name = "TabHeader"; tabFrame.BackgroundColor3 = c3(15, 15, 15); tabFrame.BackgroundTransparency = 0.1; tabFrame.BorderSizePixel = 0
tabFrame.Size = ud2(1, 0, 0, 24); tabFrame.Position = ud2(0, 0, 0, 0); tabFrame.ZIndex = 2; tabFrame.Parent = mainFrame

local tabCorner = Instance.new("UICorner"); tabCorner.CornerRadius = UDim.new(0, 10); tabCorner.Parent = tabFrame

local tabSharpMask = Instance.new("Frame")
tabSharpMask.Name = "SharpBottomMask"; tabSharpMask.Size = ud2(1, 0, 0.5, 0); tabSharpMask.Position = ud2(0, 0, 0.5, 0)
tabSharpMask.BackgroundColor3 = tabFrame.BackgroundColor3; tabSharpMask.BackgroundTransparency = tabFrame.BackgroundTransparency
tabSharpMask.BorderSizePixel = 0; tabSharpMask.ZIndex = 2; tabSharpMask.Parent = tabFrame

local tabTitle = Instance.new("TextLabel")
tabTitle.Size = ud2(1, 0, 1, 0); tabTitle.BackgroundTransparency = 1; tabTitle.FontFace = CUSTOM_FONT; tabTitle.TextSize = isMobile and 12 or 14
tabTitle.TextColor3 = c3(255, 255, 255); tabTitle.Text = "BEAST CHANCES"; tabTitle.ZIndex = 3; tabTitle.Parent = tabFrame

local settingsFrame = Instance.new("Frame")
settingsFrame.Name = "SettingsFrame"; settingsFrame.Size = ud2(0, 200, 0, 180); settingsFrame.Position = ud2(0, 60, 0, 10) 
settingsFrame.BackgroundColor3 = c3(25, 25, 25); settingsFrame.BackgroundTransparency = 0.2; settingsFrame.BorderSizePixel = 0
settingsFrame.Visible = false; settingsFrame.ZIndex = 10; settingsFrame.Parent = predGui

local settingsCorner = Instance.new("UICorner"); settingsCorner.CornerRadius = UDim.new(0, 10); settingsCorner.Parent = settingsFrame

local settingsHeader = Instance.new("Frame")
settingsHeader.Size = ud2(1, 0, 0, 24); settingsHeader.BackgroundColor3 = c3(10, 10, 10); settingsHeader.BackgroundTransparency = 0.1
settingsHeader.BorderSizePixel = 0; settingsHeader.ZIndex = 11; settingsHeader.Parent = settingsFrame

local headerCorner = Instance.new("UICorner"); headerCorner.CornerRadius = UDim.new(0, 10); headerCorner.Parent = settingsHeader

local headerSharpMask = Instance.new("Frame")
headerSharpMask.Name = "SharpBottomMask"; headerSharpMask.Size = ud2(1, 0, 0.5, 0); headerSharpMask.Position = ud2(0, 0, 0.5, 0)
headerSharpMask.BackgroundColor3 = settingsHeader.BackgroundColor3; headerSharpMask.BackgroundTransparency = settingsHeader.BackgroundTransparency
headerSharpMask.BorderSizePixel = 0; headerSharpMask.ZIndex = 11; headerSharpMask.Parent = settingsHeader

local settingsTitle = Instance.new("TextLabel")
settingsTitle.Size = ud2(1, 0, 1, 0); settingsTitle.BackgroundTransparency = 1; settingsTitle.Text = "ESP SETTINGS"
settingsTitle.TextColor3 = c3(255, 255, 255); settingsTitle.Font = Enum.Font.GothamBold; settingsTitle.TextSize = 12
settingsTitle.TextXAlignment = Enum.TextXAlignment.Center; settingsTitle.ZIndex = 12; settingsTitle.Parent = settingsHeader

local settingsScroll = Instance.new("ScrollingFrame")
settingsScroll.Size = ud2(1, -10, 1, -34); settingsScroll.Position = ud2(0, 5, 0, 27); settingsScroll.BackgroundTransparency = 1
settingsScroll.BorderSizePixel = 0; settingsScroll.ScrollBarThickness = 0; settingsScroll.CanvasSize = ud2(0, 0, 0, 0)
settingsScroll.ScrollingDirection = Enum.ScrollingDirection.Y; settingsScroll.ZIndex = 11; settingsScroll.Parent = settingsFrame

local UIList = Instance.new("UIListLayout"); UIList.Padding = UDim.new(0, 5); UIList.HorizontalAlignment = Enum.HorizontalAlignment.Center; UIList.Parent = settingsScroll

local function getToggleStateInfo(val, isSimple)
    if val == 0 then return "OFF", c3(150, 50, 50) end
    if isSimple then return "ON", c3(50, 150, 50)
    else
        if val == 1 then return "ON (FULL)", c3(50, 150, 50) end
        if val == 2 then return "ON (HL ONLY)", c3(150, 150, 50) end
    end
    return "OFF", c3(150, 50, 50)
end

local function createToggle(name, settingKey)
    local btn = Instance.new("TextButton")
    btn.Size = ud2(0, 180, 0, 25)
    local isSimple = (settingKey == "LockersVents" or settingKey == "ExitESP")
    local textState, colorState = getToggleStateInfo(Settings[settingKey], isSimple)
    btn.BackgroundColor3 = colorState; btn.Text = name .. ": " .. textState
    btn.TextColor3 = c3(255, 255, 255); btn.Font = Enum.Font.GothamBold; btn.TextSize = 11; btn.ZIndex = 12; btn.Parent = settingsScroll
    
    local corner = Instance.new("UICorner"); corner.CornerRadius = UDim.new(0, 4); corner.Parent = btn
    
    btn.MouseButton1Click:Connect(function()
        if isSimple then Settings[settingKey] = (Settings[settingKey] == 0) and 1 or 0
        else Settings[settingKey] = (Settings[settingKey] + 1) % 3 end
        local newTextState, newColorState = getToggleStateInfo(Settings[settingKey], isSimple)
        btn.BackgroundColor3 = newColorState; btn.Text = name .. ": " .. newTextState
    end)
end

createToggle("Lockers/Vents", "LockersVents")
createToggle("Beast ESP", "BeastESP")
createToggle("Survivor ESP", "SurvivorESP")
createToggle("Exit ESP", "ExitESP")
createToggle("Computer ESP", "ComputerESP")
createToggle("Hatch ESP", "HatchESP")
createToggle("Poison ESP", "PoisonESP")
createToggle("Traps ESP", "TrapsESP")
createToggle("Event ESP", "EventESP") 

settingsScroll.CanvasSize = ud2(0, 0, 0, UIList.AbsoluteContentSize.Y + 10)
settingsBtn.MouseButton1Click:Connect(function() settingsFrame.Visible = not settingsFrame.Visible end)

local scroll = Instance.new("ScrollingFrame")
scroll.Name = "List"; scroll.Size = ud2(1, -10, 1, -34); scroll.Position = ud2(0, 5, 0, 29); scroll.BackgroundTransparency = 1
scroll.BorderSizePixel = 0; scroll.CanvasSize = ud2(0, 0, 0, 0); scroll.ScrollBarThickness = 0; scroll.ScrollingDirection = Enum.ScrollingDirection.Y; scroll.ZIndex = 2; scroll.Parent = mainFrame

local predLabel = Instance.new("TextLabel")
predLabel.Size = ud2(1, 0, 0, 0); predLabel.AutomaticSize = Enum.AutomaticSize.Y; predLabel.BackgroundTransparency = 1; predLabel.FontFace = CUSTOM_FONT; predLabel.TextSize = isMobile and 14 or 16
predLabel.TextColor3 = c3(255, 255, 255); predLabel.TextXAlignment = Enum.TextXAlignment.Left; predLabel.TextYAlignment = Enum.TextYAlignment.Top; predLabel.RichText = true; predLabel.ZIndex = 3; predLabel.Parent = scroll

tSpawn(function()
    while true do
        local msg = predictBeast()
        if msg then predLabel.Text = msg; mainFrame.Visible = true; scroll.CanvasSize = ud2(0, 0, 0, predLabel.TextBounds.Y)
        else mainFrame.Visible = false end
        tWait(2)
    end
end)

RunService.Heartbeat:Connect(function()
    for _, player in ipairs(Players:GetPlayers()) do updatePlayerNametag(player) end
    handleMapObjects(); handleBeastWarning(); handleSpecialTrackers()
    
    local now = tTick()
    if now - lastThrottledUpdate >= 1 then 
        lastThrottledUpdate = now
        applyFullbright() 
    end
    
    if now - lastEventFolderCheck >= 5 then
        lastEventFolderCheck = now
        refreshEventTracking()
    end
end)

Challenge.OnClientEvent:Connect(function(Type, Computer, Start, End)
    if Type ~= 'Challenge' then return end
    local Difference = End - Start; local Time = Start + (Difference / 2)
    Challenge:FireServer(Computer, Type, Time)
    local challengeUI = PlayerGui:FindFirstChild("ComputerChallenge", true)
    if challengeUI then challengeUI:Destroy() end
end)

local mt = getrawmetatable(game); local oldNewIndex = mt.__newindex; setreadonly(mt, false)
mt.__newindex = newcclosure(function(t, k, v)
    if not checkcaller() and t:IsA("Humanoid") then
        if k == "WalkSpeed" then v = v + 1 elseif k == "JumpHeight" then v = 4 end
    end
    return oldNewIndex(t, k, v)
end)
setreadonly(mt, true)

tSpawn(function()
    while true do
        local char = localPlayer.Character; local hum = char and char:FindFirstChildOfClass("Humanoid")
        if hum then hum.WalkSpeed = hum.WalkSpeed; hum.JumpHeight = 4 end
        tWait(5)
    end
end)

Features & Information

FEATURES: • Fullbright • Player and Beast ESPs, also displays the beast's chosen power • Off screen indicators for the beasts • Beast distance warning • Object ESPs, including computer (with progress percentage), exits, lockers, vents, and hatch • ESPs for the poisoner's poison puddle and the trapper's bear traps • Beast chance menu in the lobby, you can view every player's beast chances, red names will be the Beast, pink names might be the beast • Auto skill checks for computers • Dynamic speed boost, you're always slightly faster than normal with +1 speed to every action you take (note: this part uses metatable hooks and __index, which is detectable in some games but not in 10 player flee, just be aware of any updates to the game they might add the anti cheat to this method) PATCH NOTES: • Added a settings button so you can toggle on and off certain ESP features • [EVENT] Added egg ESP (note that the eggs will only appear after 1 computer is hacked) • Fixed* the Haunter ESP glitch (I haven't tested it out yet) • Fixed the Stalker ESP glitch, you should be able to see where they are now
#open source

Community Comments (2)

MIGHTBEVERYGAYMIGHTBEVERYGAYMay 10, 2026

what's digga on about lmao 😭✌ that's a nice script with good custom UI. I would totaly recomend.

bellabunnibellabunniMay 30, 2026

Doesnt even fcking work

More Scripts for 🍰 10 Player Flee