Roblox STAY ALIVE Script (November 2026)

PUBLISHEDUPDATED
1 Available ScriptFree

Keeping up after a new update in STAY ALIVE gets way easier when you have a solid STAY ALIVE script ready to roll. Playing smarter on mobile or PC saves you from losing your progress every time the killer gets too close.

This multiplayer horror hide and seek survival game drops you into a terrifying match against Bon the Rabbit from The Walten Files. Bon uses a smart killer AI to track you down everywhere you go, meaning you have to run, hide, and escape to stay alive. You can team up with friends or even sabotage other players to last longer, compete to be the last survivor, and buy powerful classes to upgrade your abilities.

If you want to try out the cool script with esp and avoider functions, we grabbed the working code you need right below.

STAY ALIVE Script – Working Script

Working ScriptFree
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local Camera = Workspace.CurrentCamera

local monsterName = "Bon"
local bonEspEnabled = false
local playerEspEnabled = false
local bonAvoiderEnabled = false
local scriptActivated = false

local bonHighlights = {}
local playerHighlights = {}

-- Safe open-floor escape coordinates
local safeTeleportSpots = {
    Vector3.new(741.7, 26.2, -879.2),
    Vector3.new(669.56, 26.2, -665.42),
    Vector3.new(723.49, 26.2, -592.8),
    Vector3.new(473.9, 26.2, -693.09)
}

local lastTeleportTick = 0

-- transparent container and buttons
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "DeviceSelection"
screenGui.ResetOnSpawn = false
screenGui.Parent = PlayerGui

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 310, 0, 160)
mainFrame.Position = UDim2.new(0.5, -155, 0.4, -80)
mainFrame.BackgroundTransparency = 1
mainFrame.BorderSizePixel = 0
mainFrame.Parent = screenGui

local titleLabel = Instance.new("TextLabel")
titleLabel.Name = "Title"
titleLabel.Size = UDim2.new(1, 0, 0, 30)
titleLabel.Position = UDim2.new(0, 0, 0, 10)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "Select Your Platform"
titleLabel.TextColor3 = Color3.fromRGB(240, 240, 245)
titleLabel.TextSize = 15
titleLabel.Font = Enum.Font.GothamMedium
titleLabel.Parent = mainFrame

-- PC Button
local pcBtn = Instance.new("TextButton")
pcBtn.Name = "PC"
pcBtn.Size = UDim2.new(0, 130, 0, 60)
pcBtn.Position = UDim2.new(0, 15, 0, 55)
pcBtn.BackgroundTransparency = 1
pcBtn.BorderSizePixel = 0
pcBtn.Text = "PC"
pcBtn.TextColor3 = Color3.fromRGB(240, 240, 245)
pcBtn.TextSize = 16
pcBtn.Font = Enum.Font.GothamBold
pcBtn.Parent = mainFrame

local pcSub = Instance.new("TextLabel")
pcSub.Size = UDim2.new(1, 0, 0, 20)
pcSub.Position = UDim2.new(0, 0, 1, -20)
pcSub.BackgroundTransparency = 1
pcSub.Text = "KeyBinds [I, P, K]"
pcSub.TextColor3 = Color3.fromRGB(160, 165, 175)
pcSub.TextSize = 12
pcSub.Font = Enum.Font.Gotham
pcSub.Parent = pcBtn

-- Mobile Button
local mobileBtn = Instance.new("TextButton")
mobileBtn.Name = "Mobile"
mobileBtn.Size = UDim2.new(0, 130, 0, 60)
mobileBtn.Position = UDim2.new(1, -145, 0, 55)
mobileBtn.BackgroundTransparency = 1
mobileBtn.BorderSizePixel = 0
mobileBtn.Text = "Mobile"
mobileBtn.TextColor3 = Color3.fromRGB(240, 240, 245)
mobileBtn.TextSize = 16
mobileBtn.Font = Enum.Font.GothamBold
mobileBtn.Parent = mainFrame

local mobileSub = Instance.new("TextLabel")
mobileSub.Size = UDim2.new(1, 0, 0, 20)
mobileSub.Position = UDim2.new(0, 0, 1, -20)
mobileSub.BackgroundTransparency = 1
mobileSub.Text = "Highlight Default"
mobileSub.TextColor3 = Color3.fromRGB(160, 165, 175)
mobileSub.TextSize = 12
mobileSub.Font = Enum.Font.Gotham
mobileSub.Parent = mobileBtn

-- Function to show PC Avoider status popup
local function showPcAvoiderStatus(isOn)
    local oldStatus = PlayerGui:FindFirstChild("PcAvoiderStatusGUI")
    if oldStatus then oldStatus:Destroy() end

    local statusGui = Instance.new("ScreenGui")
    statusGui.Name = "PcAvoiderStatusGUI"
    statusGui.ResetOnSpawn = false
    statusGui.DisplayOrder = 999
    statusGui.Parent = PlayerGui

    local statusFrame = Instance.new("Frame")
    statusFrame.Size = UDim2.new(0, 200, 0, 40)
    statusFrame.Position = UDim2.new(0.5, -100, 0.25, 0)
    statusFrame.BackgroundTransparency = 1
    statusFrame.BorderSizePixel = 0
    statusFrame.Parent = statusGui

    local statusLabel = Instance.new("TextLabel")
    statusLabel.Size = UDim2.new(1, 0, 1, 0)
    statusLabel.BackgroundTransparency = 1
    statusLabel.Text = isOn and "Avoider: ON" or "Avoider: OFF"
    statusLabel.TextColor3 = isOn and Color3.fromRGB(240, 240, 245) or Color3.fromRGB(180, 185, 195)
    statusLabel.TextTransparency = 1
    statusLabel.TextSize = 15
    statusLabel.Font = Enum.Font.GothamMedium
    statusLabel.Parent = statusFrame

    task.spawn(function()
        local fadeIn = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
        TweenService:Create(statusLabel, fadeIn, {TextTransparency = 0}):Play()
        
        task.wait(1.5)
        
        local fadeOut = TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
        local tweenOut = TweenService:Create(statusLabel, fadeOut, {TextTransparency = 1})
        tweenOut:Play()
        tweenOut.Completed:Connect(function()
            statusGui:Destroy()
        end)
    end)
end

-- Smooth toggle fade for Bon ESP
local function toggleBonEsp(state)
    bonEspEnabled = state
    for _, hl in ipairs(bonHighlights) do
        if hl and hl.Parent then
            if state then
                hl.Enabled = true
                hl.FillTransparency = 1
                hl.OutlineTransparency = 1
                task.spawn(function()
                    local duration = 0.5
                    local elapsed = 0
                    while elapsed < duration and bonEspEnabled do
                        local alpha = elapsed / duration
                        hl.FillTransparency = 1 - (alpha * (1 - 0.85))
                        hl.OutlineTransparency = 1 - (alpha * (1 - 0.0))
                        elapsed = elapsed + RunService.RenderStepped:Wait()
                    end
                    if bonEspEnabled then
                        hl.FillTransparency = 0.85
                        hl.OutlineTransparency = 0.0
                    end
                end)
            else
                task.spawn(function()
                    local duration = 0.5
                    local elapsed = 0
                    while elapsed < duration and not bonEspEnabled do
                        local alpha = elapsed / duration
                        hl.FillTransparency = 0.85 + (alpha * (1 - 0.85))
                        hl.OutlineTransparency = 0.0 + (alpha * (1 - 0.0))
                        elapsed = elapsed + RunService.RenderStepped:Wait()
                    end
                    if not bonEspEnabled then
                        hl.Enabled = false
                    end
                end)
            end
        end
    end
end

local function togglePlayerEsp(state)
    playerEspEnabled = state
end

-- Teleport function: finds the safe spot furthest away from Bon
local function triggerBonAvoiderTeleport()
    local char = LocalPlayer.Character
    if not char or not char:FindFirstChild("HumanoidRootPart") then return end
    local myRoot = char.HumanoidRootPart

    local bonPosition = nil
    for _, desc in ipairs(Workspace:GetDescendants()) do
        if desc.Name == monsterName and desc:IsA("Model") then
            local monsterRoot = desc:FindFirstChild("HumanoidRootPart") or desc.PrimaryPart
            if monsterRoot then
                bonPosition = monsterRoot.Position
                break
            end
        end
    end

    local bestSpot = safeTeleportSpots[1]
    local maxDistance = -1

    for _, spot in ipairs(safeTeleportSpots) do
        local distFromBon = bonPosition and (spot - bonPosition).Magnitude or 0
        local distFromMe = (spot - myRoot.Position).Magnitude
        
        local score = distFromBon + (distFromMe * 0.2)
        if score > maxDistance then
            maxDistance = score
            bestSpot = spot
        end
    end

    myRoot.CFrame = CFrame.new(bestSpot)
end

-- Create Custom Mobile Avoider Button with "don't mind me." Floating Animation
local function createMobileAvoiderButton(onFullyVisible)
    local mobGui = Instance.new("ScreenGui")
    mobGui.Name = "MobileAvoiderGUI"
    mobGui.ResetOnSpawn = false
    mobGui.DisplayOrder = 999
    mobGui.Parent = PlayerGui

    local avoidBtn = Instance.new("TextButton")
    avoidBtn.Name = "AvoidButton"
    avoidBtn.Size = UDim2.new(0, 56, 0, 56)
    avoidBtn.Position = UDim2.new(1, -135, 1, -150)
    avoidBtn.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
    avoidBtn.BackgroundTransparency = 1
    avoidBtn.Text = "AVOID"
    avoidBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    avoidBtn.TextTransparency = 1
    avoidBtn.TextSize = 11
    avoidBtn.Font = Enum.Font.GothamBlack
    avoidBtn.AutoButtonColor = false
    avoidBtn.Parent = mobGui

    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(1, 0)
    corner.Parent = avoidBtn

    local stroke = Instance.new("UIStroke")
    stroke.Transparency = 1
    stroke.Thickness = 2
    stroke.Color = Color3.fromRGB(60, 60, 70)
    stroke.Parent = avoidBtn

    local infoBtn = Instance.new("TextButton")
    infoBtn.Name = "InfoButton"
    infoBtn.Size = UDim2.new(0, 20, 0, 20)
    infoBtn.Position = UDim2.new(1, -6, 0, -2)
    infoBtn.BackgroundColor3 = Color3.fromRGB(90, 95, 105)
    infoBtn.BackgroundTransparency = 1
    infoBtn.Text = "?"
    infoBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    infoBtn.TextTransparency = 1
    infoBtn.TextSize = 11
    infoBtn.Font = Enum.Font.GothamBold
    infoBtn.AutoButtonColor = true
    infoBtn.Parent = avoidBtn

    local infoCorner = Instance.new("UICorner")
    infoCorner.CornerRadius = UDim.new(1, 0)
    infoCorner.Parent = infoBtn

    local infoPanel = Instance.new("Frame")
    infoPanel.Name = "InfoPanel"
    infoPanel.Size = UDim2.new(0, 200, 0, 90)
    infoPanel.Position = UDim2.new(1, -345, 1, -210)
    infoPanel.BackgroundTransparency = 1
    infoPanel.BorderSizePixel = 0
    infoPanel.Visible = false
    infoPanel.Parent = mobGui

    local infoText = Instance.new("TextLabel")
    infoText.Size = UDim2.new(1, 0, 1, 0)
    infoText.BackgroundTransparency = 1
    infoText.Text = "yo so basically this avoid button saves you when bon gets too close (within 35 studs). it teleports you to the safest spot instantly so you don't die!"
    infoText.TextColor3 = Color3.fromRGB(255, 255, 255)
    infoText.TextTransparency = 1
    infoText.TextSize = 12
    infoText.Font = Enum.Font.GothamBold
    infoText.TextWrapped = true
    infoText.TextXAlignment = Enum.TextXAlignment.Right
    infoText.TextYAlignment = Enum.TextYAlignment.Bottom
    infoText.Parent = infoPanel

    local textStroke = Instance.new("UIStroke")
    textStroke.Transparency = 1
    textStroke.Thickness = 1.5
    textStroke.Color = Color3.fromRGB(0, 0, 0)
    textStroke.Parent = infoText

    local funnyText = Instance.new("TextLabel")
    funnyText.Name = "FunnyFloatingText"
    funnyText.Size = UDim2.new(0, 100, 0, 25)
    funnyText.Position = UDim2.new(1, -157, 1, -165)
    funnyText.BackgroundTransparency = 1
    funnyText.Text = "don't mind me."
    funnyText.TextColor3 = Color3.fromRGB(200, 205, 215)
    funnyText.TextTransparency = 1
    funnyText.TextSize = 11
    funnyText.Font = Enum.Font.GothamMedium
    funnyText.TextXAlignment = Enum.TextXAlignment.Center
    funnyText.Parent = mobGui

    local funnyStroke = Instance.new("UIStroke")
    funnyStroke.Transparency = 1
    funnyStroke.Thickness = 1
    funnyStroke.Color = Color3.fromRGB(0, 0, 0)
    funnyStroke.Parent = funnyText

    local fadeInfo = TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
    local tween1 = TweenService:Create(avoidBtn, fadeInfo, {BackgroundTransparency = 0, TextTransparency = 0})
    local tween2 = TweenService:Create(stroke, fadeInfo, {Transparency = 0})
    local tween3 = TweenService:Create(infoBtn, fadeInfo, {BackgroundTransparency = 0, TextTransparency = 0})

    tween1:Play()
    tween2:Play()
    tween3:Play()

    tween1.Completed:Connect(function()
        if onFullyVisible then
            onFullyVisible()
        end

        task.spawn(function()
            TweenService:Create(funnyText, TweenInfo.new(0.4, Enum.EasingStyle.Quad), {TextTransparency = 0, Position = UDim2.new(1, -157, 1, -190)}):Play()
            TweenService:Create(funnyStroke, TweenInfo.new(0.4, Enum.EasingStyle.Quad), {Transparency = 0}):Play()
            
            task.wait(1.8)
            
            local vanishTween1 = TweenService:Create(funnyText, TweenInfo.new(0.8, Enum.EasingStyle.Quad), {TextTransparency = 1, Position = UDim2.new(1, -157, 1, -215)})
            local vanishTween2 = TweenService:Create(funnyStroke, TweenInfo.new(0.8, Enum.EasingStyle.Quad), {Transparency = 1})
            vanishTween1:Play()
            vanishTween2:Play()
            vanishTween1.Completed:Connect(function()
                funnyText:Destroy()
            end)
        end)
    end)

    local infoActiveTask = nil
    infoBtn.MouseButton1Click:Connect(function()
        if infoPanel.Visible then
            infoPanel.Visible = false
            if infoActiveTask then task.cancel(infoActiveTask) end
        else
            infoPanel.Visible = true
            infoText.TextTransparency = 1
            textStroke.Transparency = 1

            TweenService:Create(infoText, TweenInfo.new(0.3, Enum.EasingStyle.Quad), {TextTransparency = 0}):Play()
            TweenService:Create(textStroke, TweenInfo.new(0.3, Enum.EasingStyle.Quad), {Transparency = 0}):Play()

            if infoActiveTask then task.cancel(infoActiveTask) end
            infoActiveTask = task.spawn(function()
                task.wait(4.5)
                if infoPanel.Visible then
                    local fadeOutText = TweenInfo.new(0.5, Enum.EasingStyle.Quad)
                    TweenService:Create(infoText, fadeOutText, {TextTransparency = 1}):Play()
                    TweenService:Create(textStroke, fadeOutText, {Transparency = 1}):Play()
                    task.wait(0.5)
                    infoPanel.Visible = false
                end
            end)
        end
    end)

    avoidBtn.MouseButton1Click:Connect(function()
        if not scriptActivated then return end
        bonAvoiderEnabled = not bonAvoiderEnabled
        if bonAvoiderEnabled then
            avoidBtn.BackgroundColor3 = Color3.fromRGB(240, 240, 245)
            avoidBtn.TextColor3 = Color3.fromRGB(15, 15, 20)
            stroke.Color = Color3.fromRGB(255, 255, 255)
        else
            avoidBtn.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
            avoidBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
            stroke.Color = Color3.fromRGB(60, 60, 70)
        end
    end)
end

-- fade out picker menu
local function closeMenu(isMobile, callback)
    local tInfo = TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
    
    TweenService:Create(titleLabel, tInfo, {TextTransparency = 1}):Play()
    TweenService:Create(pcBtn, tInfo, {TextTransparency = 1}):Play()
    TweenService:Create(pcSub, tInfo, {TextTransparency = 1}):Play()
    TweenService:Create(mobileBtn, tInfo, {TextTransparency = 1}):Play()
    TweenService:Create(mobileSub, tInfo, {TextTransparency = 1}):Play()
    
    task.wait(0.4)
    screenGui:Destroy()

    if callback then
        callback()
    end
end

-- credits popup
local function showCredits(isMobile, callback)
    local creditGui = Instance.new("ScreenGui")
    creditGui.Name = "ESP_Credits"
    creditGui.ResetOnSpawn = false
    creditGui.Parent = PlayerGui

    local creditFrame = Instance.new("Frame")
    creditFrame.Size = UDim2.new(0, 280, 0, 90)
    creditFrame.Position = UDim2.new(0.5, -140, 0.4, -45)
    creditFrame.BackgroundTransparency = 1
    creditFrame.Parent = creditGui

    local title = Instance.new("TextLabel")
    title.Size = UDim2.new(1, 0, 0, 22)
    title.BackgroundTransparency = 1
    title.Text = "Credits"
    title.TextColor3 = Color3.fromRGB(240, 240, 245)
    title.TextSize = 14
    title.Font = Enum.Font.GothamMedium
    title.Parent = creditFrame

    local desc = Instance.new("TextLabel")
    desc.Size = UDim2.new(1, 0, 0, 36)
    desc.Position = UDim2.new(0, 0, 0, 24)
    desc.BackgroundTransparency = 1
    desc.Text = "ScriptBlox User: SkibidigionSpyMega\nYouTube User: misterlolalaka"
    desc.TextColor3 = Color3.fromRGB(180, 185, 195)
    desc.TextSize = 12
    desc.Font = Enum.Font.Gotham
    desc.Parent = creditFrame

    local timer = Instance.new("TextLabel")
    timer.Size = UDim2.new(1, 0, 0, 18)
    timer.Position = UDim2.new(0, 0, 1, -18)
    timer.BackgroundTransparency = 1
    timer.Text = "Loading in 5s..."
    timer.TextColor3 = Color3.fromRGB(130, 135, 145)
    timer.TextSize = 11
    timer.Font = Enum.Font.Gotham
    timer.Parent = creditFrame

    task.spawn(function()
        for i = 5, 1, -1 do
            timer.Text = "Loading in " .. i .. "s..."
            task.wait(1)
        end
        
        local fade = TweenInfo.new(1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
        TweenService:Create(title, fade, {TextTransparency = 1}):Play()
        TweenService:Create(desc, fade, {TextTransparency = 1}):Play()
        TweenService:Create(timer, fade, {TextTransparency = 1}):Play()
        
        task.wait(1)
        creditGui:Destroy()
        
        if isMobile then
            createMobileAvoiderButton(function()
                scriptActivated = true
                toggleBonEsp(true)
                togglePlayerEsp(true)
            end)
        else
            scriptActivated = true
        end
        
        if callback then
            callback()
        end
    end)
end

-- pc tip popup
local function showPcTip()
    local tipGui = Instance.new("ScreenGui")
    tipGui.Name = "ESP_Tip"
    tipGui.ResetOnSpawn = false
    tipGui.Parent = PlayerGui

    local tipFrame = Instance.new("Frame")
    tipFrame.Size = UDim2.new(0, 260, 0, 105)
    tipFrame.Position = UDim2.new(0.5, -130, 0.4, -50)
    tipFrame.BackgroundTransparency = 1
    tipFrame.Parent = tipGui

    local title = Instance.new("TextLabel")
    title.Size = UDim2.new(1, 0, 0, 22)
    title.BackgroundTransparency = 1
    title.Text = "Keybinds"
    title.TextColor3 = Color3.fromRGB(240, 240, 245)
    title.TextSize = 14
    title.Font = Enum.Font.GothamMedium
    title.Parent = tipFrame

    local desc = Instance.new("TextLabel")
    desc.Size = UDim2.new(1, 0, 0, 50)
    desc.Position = UDim2.new(0, 0, 0, 24)
    desc.BackgroundTransparency = 1
    desc.Text = "Press [I] for Bon ESP\nPress [P] for Player ESP\nPress [K] for Bon Avoider"
    desc.TextColor3 = Color3.fromRGB(180, 185, 195)
    desc.TextSize = 12
    desc.Font = Enum.Font.Gotham
    desc.Parent = tipFrame

    local timer = Instance.new("TextLabel")
    timer.Size = UDim2.new(1, 0, 0, 18)
    timer.Position = UDim2.new(0, 0, 1, -18)
    timer.BackgroundTransparency = 1
    timer.Text = "Disappearing in 7s..."
    timer.TextColor3 = Color3.fromRGB(130, 135, 145)
    timer.TextSize = 11
    timer.Font = Enum.Font.Gotham
    timer.Parent = tipFrame

    task.spawn(function()
        for i = 7, 1, -1 do
            timer.Text = "Disappearing in " .. i .. "s..."
            task.wait(1)
        end
        
        local fade = TweenInfo.new(1.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
        TweenService:Create(title, fade, {TextTransparency = 1}):Play()
        TweenService:Create(desc, fade, {TextTransparency = 1}):Play()
        TweenService:Create(timer, fade, {TextTransparency = 1}):Play()
        
        task.wait(1.2)
        tipGui:Destroy()
    end)
end

-- mobile notification popup
local function showMobileTip()
    local tipGui = Instance.new("ScreenGui")
    tipGui.Name = "ESP_Tip"
    tipGui.ResetOnSpawn = false
    tipGui.Parent = PlayerGui

    local tipFrame = Instance.new("Frame")
    tipFrame.Size = UDim2.new(0, 260, 0, 90)
    tipFrame.Position = UDim2.new(0.5, -130, 0.4, -45)
    tipFrame.BackgroundTransparency = 1
    tipFrame.Parent = tipGui

    local title = Instance.new("TextLabel")
    title.Size = UDim2.new(1, 0, 0, 22)
    title.BackgroundTransparency = 1
    title.Text = "Mobile Status"
    title.TextColor3 = Color3.fromRGB(240, 240, 245)
    title.TextSize = 14
    title.Font = Enum.Font.GothamMedium
    title.Parent = tipFrame

    local desc = Instance.new("TextLabel")
    desc.Size = UDim2.new(1, 0, 0, 36)
    desc.Position = UDim2.new(0, 0, 0, 24)
    desc.BackgroundTransparency = 1
    desc.Text = "Bon ESP is ON\nPlayer ESP is ON"
    desc.TextColor3 = Color3.fromRGB(180, 185, 195)
    desc.TextSize = 12
    desc.Font = Enum.Font.Gotham
    desc.Parent = tipFrame

    local timer = Instance.new("TextLabel")
    timer.Size = UDim2.new(1, 0, 0, 18)
    timer.Position = UDim2.new(0, 0, 1, -18)
    timer.BackgroundTransparency = 1
    timer.Text = "Disappearing in 7s..."
    timer.TextColor3 = Color3.fromRGB(130, 135, 145)
    timer.TextSize = 11
    timer.Font = Enum.Font.Gotham
    timer.Parent = tipFrame

    task.spawn(function()
        for i = 7, 1, -1 do
            timer.Text = "Disappearing in " .. i .. "s..."
            task.wait(1)
        end
        
        local fade = TweenInfo.new(1.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
        TweenService:Create(title, fade, {TextTransparency = 1}):Play()
        TweenService:Create(desc, fade, {TextTransparency = 1}):Play()
        TweenService:Create(timer, fade, {TextTransparency = 1}):Play()
        
        task.wait(1.2)
        tipGui:Destroy()
    end)
end

-- button triggers
pcBtn.MouseButton1Click:Connect(function()
    closeMenu(false, function()
        showCredits(false, function()
            showPcTip()
        end)
    end)
end)

mobileBtn.MouseButton1Click:Connect(function()
    closeMenu(true, function()
        showCredits(true, function()
            showMobileTip()
        end)
    end)
end)

-- Monster Highlight Setup
local function applyMonsterHighlight(model)
    if model.Name == monsterName and model:IsA("Model") then
        local oldHl = model:FindFirstChild("MonsterTrackerHighlight")
        if oldHl then oldHl:Destroy() end

        local highlight = Instance.new("Highlight")
        highlight.Name = "MonsterTrackerHighlight"
        highlight.Adornee = model
        highlight.FillColor = Color3.fromRGB(255, 0, 0)
        highlight.OutlineColor = Color3.fromRGB(255, 50, 50)
        highlight.FillTransparency = 1
        highlight.OutlineTransparency = 1
        highlight.Enabled = false
        highlight.Parent = model
        table.insert(bonHighlights, highlight)
    end
end

for _, desc in ipairs(Workspace:GetDescendants()) do
    if desc.Name == monsterName and desc:IsA("Model") then
        applyMonsterHighlight(desc)
    end
end

Workspace.DescendantAdded:Connect(function(desc)
    if desc.Name == monsterName and desc:IsA("Model") then
        applyMonsterHighlight(desc)
    end
end)

-- Player ESP Logic
local function applyPlayerHighlight(character, player)
    if not character or character == LocalPlayer.Character then return end

    local oldHl = character:FindFirstChild("PlayerTrackerHighlight")
    if oldHl then oldHl:Destroy() end

    local highlight = Instance.new("Highlight")
    highlight.Name = "PlayerTrackerHighlight"
    highlight.Adornee = character
    highlight.FillColor = Color3.fromRGB(0, 210, 255)
    highlight.OutlineColor = Color3.fromRGB(200, 240, 255)
    highlight.FillTransparency = 1
    highlight.OutlineTransparency = 1
    highlight.Enabled = false
    highlight.Parent = character
    table.insert(playerHighlights, highlight)

    local humanoid = character:WaitForChild("Humanoid", 5)
    if humanoid then
        humanoid.Died:Connect(function()
            -- Quick fade out on death
            task.spawn(function()
                while highlight.FillTransparency < 1 do
                    highlight.FillTransparency = math.min(1, highlight.FillTransparency + 0.15)
                    highlight.OutlineTransparency = math.min(1, highlight.OutlineTransparency + 0.15)
                    RunService.RenderStepped:Wait()
                end
                highlight.Enabled = false
            end)
        end)
    end
end

local function setupPlayer(player)
    if player == LocalPlayer then return end
    if player.Character then applyPlayerHighlight(player.Character, player) end
    player.CharacterAdded:Connect(function(char) 
        applyPlayerHighlight(char, player) 
    end)
end

for _, plr in ipairs(Players:GetPlayers()) do
    setupPlayer(plr)
end

Players.PlayerAdded:Connect(setupPlayer)

-- Screen-aware view loop (SLOW fade in when looking at players, FAST fade out when looking away)
RunService.RenderStepped:Connect(function()
    if not scriptActivated then return end

    -- Player ESP Loop (Screen-aware fade)
    for _, hl in ipairs(playerHighlights) do
        if hl and hl.Parent and hl.Adornee then
            local char = hl.Adornee
            local rootPart = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart
            local humanoid = char:FindFirstChildOfClass("Humanoid")
            
            local isOnScreen = false
            if playerEspEnabled and rootPart and humanoid and humanoid.Health > 0 then
                local _, inViewport = Camera:WorldToViewportPoint(rootPart.Position)
                isOnScreen = inViewport
            end

            if isOnScreen then
                if not hl.Enabled then hl.Enabled = true end
                if hl.FillTransparency > 0.6 then
                    hl.FillTransparency = math.max(0.6, hl.FillTransparency - 0.015)
                    hl.OutlineTransparency = math.max(0.2, hl.OutlineTransparency - 0.008)
                end
            else
                if hl.Enabled and hl.FillTransparency < 1 then
                    hl.FillTransparency = math.min(1, hl.FillTransparency + 0.12)
                    hl.OutlineTransparency = math.min(1, hl.OutlineTransparency + 0.12)
                    if hl.FillTransparency >= 1 then
                        hl.Enabled = false
                    end
                end
            end
        end
    end
end)

-- Bon Avoider Proximity Check & Teleport Loop (Heartbeat) - Set to 35 studs
RunService.Heartbeat:Connect(function()
    if not scriptActivated or not bonAvoiderEnabled then return end
    
    local char = LocalPlayer.Character
    if not char or not char:FindFirstChild("HumanoidRootPart") then return end
    local myRoot = char.HumanoidRootPart

    for _, desc in ipairs(Workspace:GetDescendants()) do
        if desc.Name == monsterName and desc:IsA("Model") then
            local monsterRoot = desc:FindFirstChild("HumanoidRootPart") or desc.PrimaryPart
            if monsterRoot then
                local distance = (myRoot.Position - monsterRoot.Position).Magnitude
                
                if distance < 35 then
                    local now = tick()
                    if now - lastTeleportTick > 1.5 then
                        lastTeleportTick = now
                        triggerBonAvoiderTeleport()
                    end
                end
            end
        end
    end
end)

-- PC keybind listener
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed or not scriptActivated then return end
    
    if input.KeyCode == Enum.KeyCode.I then
        toggleBonEsp(not bonEspEnabled)
    elseif input.KeyCode == Enum.KeyCode.P then
        togglePlayerEsp(not playerEspEnabled)
    elseif input.KeyCode == Enum.KeyCode.K then
        bonAvoiderEnabled = not bonAvoiderEnabled
        showPcAvoiderStatus(bonAvoiderEnabled)
    end
end)
Executor compatibility changes over time. Check current reports before testing.

Copy the code above into a compatible Roblox script executor if you choose to test it.

STAY ALIVE Script Status

✓AvailabilityFree
$Price$0
◫CompatibilityDesktop & Mobile
★SafetyVerified

Roblox and game updates can affect compatibility, so the script’s status should be treated as temporary rather than guaranteed.

Frequently Asked Questions

What is a STAY ALIVE script?

A STAY ALIVE script is third-party Lua code intended to run alongside the Roblox game through a compatible script executor.

What features does this STAY ALIVE script include?

Different scripts contain different code and features. Check the script menu after it loads to see everything it offers.

How do you use the STAY ALIVE script?

Pick a compatible executor such as Hydrogen, MacSploit, AWP.GG, Delta, Fluxus, Codex, launch Roblox and join the game, copy the complete Lua code from the script card above, paste it into the executor’s editor, and click Run or Execute. Compatibility changes over time, so a name here doesn’t guarantee current support.

Can a STAY ALIVE script get your Roblox account banned?

Yes. Third-party scripts can violate Roblox rules and may put an account at risk. Only use code from a source you trust, never enter your Roblox password into a script or executor, and test on an alternate account first.

Does the STAY ALIVE script work on mobile?

Check whether both the executor and the script support your device and the current Roblox version. Mobile executor support does not guarantee that every script will work.

Check out our Roblox Scripts hub and Roblox Games Directory for more.

Leave a Comment