Custom  Timer(Fixed Console Spam)
Key Required

Custom Timer(Fixed Console Spam)

Evade cxsircxsir 1.1K views 56 executesUpdated Dec 7, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•345 lines (14605 chars)
--Custom Evade Timer--
--Made By cxsir(Claude And Grok AI)--
if not game:IsLoaded() then game.Loaded:Wait() end

--Allowed game IDs
local allowedGames = {
    [9872472334] = true, --Evade
    [10324346056] = true, --Big Teams
    [10324347967] = true, --Social Space
    [10662542523] = true, --Casual
    [10808838353] = true, --VC Only
    [11353528705] = true, --Pro
    [96537472072550] = true, --Legacy
    [99214917572799] = true, --Custom Servers
    [121271605799901] = true --Player Nextbots
}

local currentGameId = game.PlaceId

if allowedGames[currentGameId] then
    local Players = game:GetService("Players")
    local LocalPlayer = Players.LocalPlayer
    local PlayerGui

    --Wait for LocalPlayer if not loaded
    if not LocalPlayer then
        Players:GetPropertyChangedSignal("LocalPlayer"):Wait()
        LocalPlayer = Players.LocalPlayer
    end
    PlayerGui = LocalPlayer:WaitForChild("PlayerGui", 10)
    if not PlayerGui then return end

    --Remove existing custom timer if present
    local existingTimer = PlayerGui:FindFirstChild("CustomEvadeTimer")
    if existingTimer then
        existingTimer:Destroy()
        task.wait(0.1)
    end

    --==================== CUSTOMIZATION SECTION ====================
	--Position/Size
    local TIMER_POSITION = UDim2.new(0.5, 0, 0.025, 0)
    local TIMER_SIZE = UDim2.new(0.09, 0, 0.1, -10)
	
	--Main Box/Background
    local BG_COLOR = Color3.fromRGB(20, 20, 20)
    local BG_TRANSPARENCY = 0.5
    local CORNER_RADIUS = UDim.new(0, 10)
	
	--Border
	local BORDER_GLOW = true --Enable/disable animated border glow
	local BORDER_COLOR = Color3.fromRGB(0, 0, 0) --Static border color (only used when BORDER_GLOW = false)
    local BORDER_THICKNESS = 2.5
    local BORDER_TRANSPARENCY = 0.5
	local GLOW_ROUND_BRIGHT = Color3.fromRGB(255, 80, 80) --Bright red
	local GLOW_ROUND_DARK = Color3.fromRGB(130, 40, 40) --Darker red
	local GLOW_SAFE_BRIGHT = Color3.fromRGB(100, 255, 100) --Bright green
	local GLOW_SAFE_DARK = Color3.fromRGB(50, 130, 50) --Darker green
	local GLOW_SPEED = 1 --How fast it pulses (seconds for one cycle)
	
	--Status (In-Round/Intermission)
    local STATUS_ROUND_TEXT = "Survive"
    local STATUS_INTERMISSION_TEXT = "Safe"
    local STATUS_ROUND_COLOR = Color3.fromRGB(250, 100, 100)
    local STATUS_INTERMISSION_COLOR = Color3.fromRGB(100, 250, 100)
	
	--Timer Color
    local NORMAL_TIMER_COLOR = Color3.fromRGB(255, 255, 255)
    local LOW_TIME_COLOR = Color3.fromRGB(250, 100, 100)
    local LOW_TIME_THRESHOLD = 15
	local SAFE_TIMER_COLOR = Color3.fromRGB(100, 250, 100)
	local LOW_TIME_PULSE = true --Enable/disable pulsing when time is low
	local LOW_TIME_PULSE_SPEED = 0.4
	local LOW_TIME_PULSE_SCALE = 1.15 --How much bigger it gets (1.15 = 15% larger)
	
	--Font (https://create.roblox.com/docs/reference/engine/enums/Font)
    local TEXT_FONT = Enum.Font.GothamBold
	
	--Text Stroke
    local TEXT_STROKE_ENABLED = true
    local TEXT_STROKE_COLOR = Color3.fromRGB(50, 50, 50)
    local TEXT_STROKE_THICKNESS = 2.5
    local TEXT_STROKE_TRANSPARENCY = 0.6

    --==============================================================

    --Create the custom timer GUI
    local function CreateTimerGUI()
        local ScreenGui = Instance.new("ScreenGui")
        ScreenGui.Name = "CustomEvadeTimer"
        ScreenGui.ResetOnSpawn = false
        ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
        ScreenGui.Parent = PlayerGui

        local Container = Instance.new("Frame")
        Container.Name = "Container"
        Container.Parent = ScreenGui
        Container.AnchorPoint = Vector2.new(0.5, 0)
        Container.Position = TIMER_POSITION
        Container.Size = TIMER_SIZE
        Container.BackgroundColor3 = BG_COLOR
        Container.BackgroundTransparency = BG_TRANSPARENCY
        Container.BorderSizePixel = 0

        local Corner = Instance.new("UICorner")
        Corner.CornerRadius = CORNER_RADIUS
        Corner.Parent = Container

        local Border = Instance.new("UIStroke")
        Border.Thickness = BORDER_THICKNESS
        Border.Color = BORDER_COLOR
        Border.Transparency = BORDER_TRANSPARENCY
        Border.Parent = Container

        local Status = Instance.new("TextLabel")
        Status.Name = "Status"
        Status.Parent = Container
        Status.Position = UDim2.new(0.5, 0, 0.2, 0)
        Status.AnchorPoint = Vector2.new(0.5, 0.3)
        Status.Size = UDim2.new(0.95, 0, 0.45, 0)
        Status.BackgroundTransparency = 1
        Status.Font = TEXT_FONT
        Status.Text = "LOADING..."
        Status.TextColor3 = Color3.fromRGB(255, 255, 255)
        Status.TextScaled = true
        Status.TextStrokeTransparency = 1

        local Timer = Instance.new("TextLabel")
        Timer.Name = "Timer"
        Timer.Parent = Container
        Timer.Position = UDim2.new(0.5, 0, 0.75, 0)
        Timer.AnchorPoint = Vector2.new(0.5, 0.7)
        Timer.Size = UDim2.new(0.95, 0, 0.45, 0)
        Timer.BackgroundTransparency = 1
        Timer.Font = TEXT_FONT
        Timer.Text = "0:00"
        Timer.TextColor3 = NORMAL_TIMER_COLOR
        Timer.TextScaled = true
        Timer.TextStrokeTransparency = 1

        --Add text stroke if enabled
        if TEXT_STROKE_ENABLED then
            local StatusStroke = Instance.new("UIStroke")
            StatusStroke.Parent = Status
            StatusStroke.Color = TEXT_STROKE_COLOR
            StatusStroke.Thickness = TEXT_STROKE_THICKNESS
            StatusStroke.Transparency = TEXT_STROKE_TRANSPARENCY

            local TimerStroke = Instance.new("UIStroke")
            TimerStroke.Parent = Timer
            TimerStroke.Color = TEXT_STROKE_COLOR
            TimerStroke.Thickness = TEXT_STROKE_THICKNESS
            TimerStroke.Transparency = TEXT_STROKE_TRANSPARENCY
        end

        return ScreenGui, Timer, Status
    end

    local Gui, TimerLabel, StatusLabel = CreateTimerGUI()

    --Format seconds into M:SS format
    local function formatTime(sec)
        sec = math.floor(tonumber(sec) or 0)
        if sec <= 0 then return "0:00" end
        return string.format("%d:%02d", math.floor(sec/60), sec%60)
    end

    --Update timer display based on game stats
    local Connection
    local function UpdateTimer()
        local StatsFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Stats")
        if not StatsFolder then
            TimerLabel.Text = "0:00"
            StatusLabel.Text = "WAITING..."
            return
        end

        if Connection then Connection:Disconnect() end

        Connection = StatsFolder:GetAttributeChangedSignal("Timer"):Connect(function()
            local timeLeft = StatsFolder:GetAttribute("Timer")
            local roundActive = StatsFolder:GetAttribute("RoundStarted")

            TimerLabel.Text = formatTime(timeLeft)
            
            --Set timer color based on round state and time remaining
            if roundActive then
                TimerLabel.TextColor3 = (timeLeft and timeLeft <= LOW_TIME_THRESHOLD) and LOW_TIME_COLOR or NORMAL_TIMER_COLOR
            else
                TimerLabel.TextColor3 = SAFE_TIMER_COLOR
            end

            StatusLabel.Text = roundActive and STATUS_ROUND_TEXT or STATUS_INTERMISSION_TEXT
            StatusLabel.TextColor3 = roundActive and STATUS_ROUND_COLOR or STATUS_INTERMISSION_COLOR
        end)
        
        --Trigger initial update
        StatsFolder:SetAttribute("Timer", StatsFolder:GetAttribute("Timer"))
    end

    --Watch for new game rounds
    workspace.ChildAdded:Connect(function(child)
        if child.Name == "Game" then
            task.wait(0.6)
            UpdateTimer()
        end
    end)

    UpdateTimer()

    --Border glow animation
    if BORDER_GLOW then
        task.spawn(function()
            local tweenService = game:GetService("TweenService")
            local border = Gui.Container:FindFirstChild("UIStroke")
            if not border then return end
            
            while Gui and Gui.Parent do
                local StatsFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Stats")
                local roundActive = StatsFolder and StatsFolder:GetAttribute("RoundStarted")
                
                --Choose colors based on round state
                local brightColor = roundActive and GLOW_ROUND_BRIGHT or GLOW_SAFE_BRIGHT
                local darkColor = roundActive and GLOW_ROUND_DARK or GLOW_SAFE_DARK
                
                --Pulse to bright
                local tweenToBright = tweenService:Create(border, TweenInfo.new(GLOW_SPEED, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {Color = brightColor})
                tweenToBright:Play()
                tweenToBright.Completed:Wait()
                
                --Pulse to dark
                local tweenToDark = tweenService:Create(border, TweenInfo.new(GLOW_SPEED, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {Color = darkColor})
                tweenToDark:Play()
                tweenToDark.Completed:Wait()
            end
        end)
    end
    
    --Low time pulsing animation
    if LOW_TIME_PULSE then
        task.spawn(function()
            local tweenService = game:GetService("TweenService")
            local originalTimerSize = TimerLabel.Size
            local originalStatusSize = StatusLabel.Size
            
            while Gui and Gui.Parent do
                local StatsFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Stats")
                local timeLeft = StatsFolder and StatsFolder:GetAttribute("Timer")
                local roundActive = StatsFolder and StatsFolder:GetAttribute("RoundStarted")
                
                --Pulse when time is low or during intermission
                if (roundActive and timeLeft and timeLeft <= LOW_TIME_THRESHOLD) or (not roundActive) then
                    --Pulse up
                    local timerPulseUp = tweenService:Create(TimerLabel, TweenInfo.new(LOW_TIME_PULSE_SPEED, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
                        Size = UDim2.new(originalTimerSize.X.Scale * LOW_TIME_PULSE_SCALE, 0, originalTimerSize.Y.Scale * LOW_TIME_PULSE_SCALE, 0)
                    })
                    timerPulseUp:Play()
                    
                    local statusPulseUp = tweenService:Create(StatusLabel, TweenInfo.new(LOW_TIME_PULSE_SPEED, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
                        Size = UDim2.new(originalStatusSize.X.Scale * LOW_TIME_PULSE_SCALE, 0, originalStatusSize.Y.Scale * LOW_TIME_PULSE_SCALE, 0)
                    })
                    statusPulseUp:Play()
                    
                    local border = Gui.Container:FindFirstChild("UIStroke")
                    if border then
                        local borderPulseUp = tweenService:Create(border, TweenInfo.new(LOW_TIME_PULSE_SPEED, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Thickness = BORDER_THICKNESS * LOW_TIME_PULSE_SCALE})
                        borderPulseUp:Play()
                    end
                    
                    timerPulseUp.Completed:Wait()
                    
                    --Pulse down
                    local timerPulseDown = tweenService:Create(TimerLabel, TweenInfo.new(LOW_TIME_PULSE_SPEED, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Size = originalTimerSize})
                    timerPulseDown:Play()
                    
                    local statusPulseDown = tweenService:Create(StatusLabel, TweenInfo.new(LOW_TIME_PULSE_SPEED, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Size = originalStatusSize})
                    statusPulseDown:Play()
                    
                    if border then
                        local borderPulseDown = tweenService:Create(border, TweenInfo.new(LOW_TIME_PULSE_SPEED, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Thickness = BORDER_THICKNESS})
                        borderPulseDown:Play()
                    end
                    
                    timerPulseDown.Completed:Wait()
                else
                    task.wait(0.1)
                end
            end
        end)
    end

    --Hide original timers and create dummy elements to prevent game errors
    local cleanupLoop
    cleanupLoop = task.spawn(function()
        while Gui and Gui.Parent do
            --Handle round overlay timer
            pcall(function()
                local round = PlayerGui:FindFirstChild("Shared") 
                    and PlayerGui.Shared:FindFirstChild("HUD")
                    and PlayerGui.Shared.HUD:FindFirstChild("Overlay")
                    and PlayerGui.Shared.HUD.Overlay:FindFirstChild("Default")
                    and PlayerGui.Shared.HUD.Overlay.Default:FindFirstChild("RoundOverlay")
                    and PlayerGui.Shared.HUD.Overlay.Default.RoundOverlay:FindFirstChild("Round")
                
                if round then
                    --Create dummy RoundTimer if it doesn't exist (prevents game errors)
                    if not round:FindFirstChild("RoundTimer") then
                        local dummyTimer = Instance.new("TextLabel")
                        dummyTimer.Name = "RoundTimer"
                        dummyTimer.Parent = round
                        dummyTimer.Visible = false
                        dummyTimer.Text = ""
                    end
                    
                    round.Visible = false
                end
            end)

            --Handle menu intermission timer
            pcall(function()
                local intermissionTimer = PlayerGui:FindFirstChild("Menu")
                    and PlayerGui.Menu:FindFirstChild("IntermissionTimer")
                
                if intermissionTimer then
                    --Create dummy RoundTimer if it doesn't exist (prevents game errors)
                    if not intermissionTimer:FindFirstChild("RoundTimer") then
                        local dummyTimer = Instance.new("TextLabel")
                        dummyTimer.Name = "RoundTimer"
                        dummyTimer.Parent = intermissionTimer
                        dummyTimer.Visible = false
                        dummyTimer.Text = ""
                    end
                    
                    intermissionTimer.Visible = false
                end
            end)

            task.wait(0.5)
        end
    end)

    print("Custom Evade Timer Loaded")
else
    print("This Script Only Works In Evade! If You Have It In Your AutoExec Folder Ignore This!")
end

Features & Information

ONLY UPLOADED HERE Very customizable timer for evade made with too much ai. it looks good though! Other gamemodes are NOT tested!
#Custom#Customizeable#Evade#Timer

Community Comments (4)

cxsircxsirDec 7, 2025

let me know about issues, i dont know lua so i will TRY to fix them, no promises though (maybe Grok will help)

sublicksublickDec 7, 2025

use cluade for less limitations on scripting and exploits

Replying to @sublick
cxsircxsirDec 7, 2025

@Irishduck234 i think grok did pretty good but ill for sure check it out, thanks for the suggestion!

cxsircxsirAug 6, 2026

idk when but it broke lol

More Scripts for Evade