Cyber Run
Key RequiredUniversal

Cyber Run

Universal ScriptEducationalistEducationalist 5K views 1.7K executesUpdated Sep 27, 2025
Unrated
00
Lua Script•278 lines (8843 chars)
-- Cyber Run Script - Final Version
-- Normal character after images

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

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local rootPart = character:WaitForChild("HumanoidRootPart")

-- Simple Configuration
local NORMAL_SPEED = 16
local SPRINT_SPEED = 48
local AFTER_IMAGE_DURATION = 0.4
local AFTER_IMAGE_TRANSPARENCY = 0.6
local JUMP_POWER_MULTIPLIER = 1.2

-- State variables
local isSprinting = false
local sprintButton = nil
local connection = nil
local originalJumpPower = humanoid.JumpPower

-- Simple button
local function createSprintButton()
    local screenGui = Instance.new("ScreenGui")
    screenGui.Name = "CyberRunGui"
    screenGui.Parent = player.PlayerGui
    screenGui.ResetOnSpawn = false
    
    local button = Instance.new("TextButton")
    button.Name = "CyberRunButton"
    button.Size = UDim2.new(0, 140, 0, 50)
    button.Position = UDim2.new(0.85, 0, 0.6, 0)
    button.BackgroundColor3 = Color3.fromRGB(20, 20, 40)
    button.TextColor3 = Color3.fromRGB(0, 255, 255)
    button.Text = "⚡ CYBER RUN"
    button.TextSize = 16
    button.Font = Enum.Font.SciFi
    button.BorderSizePixel = 0
    button.ZIndex = 10
    button.AutoButtonColor = false
    
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, 8)
    corner.Parent = button
    
    local stroke = Instance.new("UIStroke")
    stroke.Color = Color3.fromRGB(0, 200, 255)
    stroke.Thickness = 2
    stroke.Parent = button
    
    button.Parent = screenGui
    return button
end

-- Create normal after images that look like the character
local function createNormalAfterImage()
    if not character or character.Parent == nil then return end
    
    local afterImageFolder = Instance.new("Folder")
    afterImageFolder.Name = "NormalAfterImage"
    
    -- Create after images for every BasePart in the character
    for _, part in ipairs(character:GetDescendants()) do
        if part:IsA("BasePart") then
            local afterImage = part:Clone()
            
            -- Keep the original appearance (colors, textures, etc.)
            for _, child in ipairs(afterImage:GetChildren()) do
                if child:IsA("SpecialMesh") or child:IsA("Decal") or child:IsA("Texture") then
                    -- Keep these to maintain original appearance
                else
                    child:Destroy()
                end
            end
            
            -- Set after image properties (keep original colors)
            afterImage.Name = "NormalTrail"
            afterImage.CanCollide = false
            afterImage.Anchored = true
            afterImage.Material = part.Material -- Keep original material
            afterImage.Color = part.Color -- Keep original color
            afterImage.Transparency = AFTER_IMAGE_TRANSPARENCY
            afterImage.CFrame = part.CFrame
            
            afterImage.Parent = afterImageFolder
        end
    end
    
    afterImageFolder.Parent = workspace
    
    -- Simple fade animation
    local startTime = tick()
    
    local fadeConnection = RunService.Heartbeat:Connect(function()
        local elapsed = tick() - startTime
        local alpha = elapsed / AFTER_IMAGE_DURATION
        
        if alpha >= 1 or afterImageFolder.Parent == nil then
            fadeConnection:Disconnect()
            afterImageFolder:Destroy()
            return
        end
        
        -- Fade out all parts while keeping their original colors
        for _, part in ipairs(afterImageFolder:GetChildren()) do
            if part:IsA("BasePart") then
                part.Transparency = AFTER_IMAGE_TRANSPARENCY + (alpha * (1 - AFTER_IMAGE_TRANSPARENCY))
            end
        end
    end)
    
    -- Auto cleanup
    delay(AFTER_IMAGE_DURATION + 0.1, function()
        if afterImageFolder and afterImageFolder.Parent then
            afterImageFolder:Destroy()
        end
        if fadeConnection then
            fadeConnection:Disconnect()
        end
    end)
end

-- Apply cyber run effects
local function applyCyberRunEffects()
    if not character or not humanoid or humanoid.Health <= 0 then return end
    
    if isSprinting then
        humanoid.WalkSpeed = SPRINT_SPEED
        
        -- Gentle forward boost
        if rootPart and humanoid.MoveDirection.Magnitude > 0 then
            local moveDirection = humanoid.MoveDirection
            local currentVelocity = rootPart.Velocity
            
            local boostPower = 12
            local horizontalBoost = Vector3.new(
                moveDirection.X * boostPower,
                0,
                moveDirection.Z * boostPower
            )
            
            rootPart.Velocity = Vector3.new(
                currentVelocity.X + horizontalBoost.X,
                currentVelocity.Y,
                currentVelocity.Z + horizontalBoost.Z
            )
        end
        
        -- Create normal after image that looks like the character
        createNormalAfterImage()
        
    else
        humanoid.WalkSpeed = NORMAL_SPEED
    end
end

-- Toggle function
local function toggleCyberRun()
    isSprinting = not isSprinting
    
    if isSprinting then
        humanoid.WalkSpeed = SPRINT_SPEED
        humanoid.JumpPower = originalJumpPower * JUMP_POWER_MULTIPLIER
        
        sprintButton.BackgroundColor3 = Color3.fromRGB(255, 50, 50)
        sprintButton.TextColor3 = Color3.fromRGB(255, 255, 255)
        sprintButton.Text = "🔥 ACTIVE"
        
        local pulseTween = TweenService:Create(sprintButton, TweenInfo.new(0.3, Enum.EasingStyle.Quad), {
            Size = UDim2.new(0, 145, 0, 52)
        })
        pulseTween:Play()
        
        if connection then
            connection:Disconnect()
        end
        
        connection = RunService.Heartbeat:Connect(function()
            if isSprinting and character and humanoid.Health > 0 then
                if tick() % 0.15 < 0.05 then
                    applyCyberRunEffects()
                end
            else
                if connection then
                    connection:Disconnect()
                end
            end
        end)
        
    else
        humanoid.WalkSpeed = NORMAL_SPEED
        humanoid.JumpPower = originalJumpPower
        
        sprintButton.BackgroundColor3 = Color3.fromRGB(20, 20, 40)
        sprintButton.TextColor3 = Color3.fromRGB(0, 255, 255)
        sprintButton.Text = "⚡ CYBER RUN"
        
        local resetTween = TweenService:Create(sprintButton, TweenInfo.new(0.3, Enum.EasingStyle.Quad), {
            Size = UDim2.new(0, 140, 0, 50)
        })
        resetTween:Play()
        
        if connection then
            connection:Disconnect()
        end
    end
end

-- Keybinds
local function setupKeybinds()
    UserInputService.InputBegan:Connect(function(input, gameProcessed)
        if gameProcessed then return end
        
        if input.KeyCode == Enum.KeyCode.LeftShift or input.KeyCode == Enum.KeyCode.E then
            toggleCyberRun()
        end
    end)
end

-- Cleanup
local function fullCleanup()
    isSprinting = false
    
    if humanoid and humanoid.Parent then
        humanoid.WalkSpeed = NORMAL_SPEED
        humanoid.JumpPower = originalJumpPower
    end
    
    if connection then
        connection:Disconnect()
    end
    
    for _, obj in ipairs(workspace:GetDescendants()) do
        if obj.Name == "NormalAfterImage" then
            obj:Destroy()
        end
    end
end

-- Character handling
local function onCharacterAdded(newCharacter)
    character = newCharacter
    humanoid = character:WaitForChild("Humanoid")
    rootPart = character:WaitForChild("HumanoidRootPart")
    
    originalJumpPower = humanoid.JumpPower
    fullCleanup()
    
    if not sprintButton or not sprintButton.Parent then
        sprintButton = createSprintButton()
        sprintButton.MouseButton1Click:Connect(toggleCyberRun)
    else
        sprintButton.BackgroundColor3 = Color3.fromRGB(20, 20, 40)
        sprintButton.TextColor3 = Color3.fromRGB(0, 255, 255)
        sprintButton.Text = "⚡ CYBER RUN"
    end
end

-- Initialize
if character then
    originalJumpPower = humanoid.JumpPower
    sprintButton = createSprintButton()
    sprintButton.MouseButton1Click:Connect(toggleCyberRun)
    setupKeybinds()
end

player.CharacterAdded:Connect(onCharacterAdded)
humanoid.Died:Connect(fullCleanup)

print("⚡ CYBER RUN - NORMAL AFTER IMAGES")
print("👤 After images match your character's appearance")
print("💨 Speed: " .. SPRINT_SPEED)
print("🎨 Original colors and textures preserved")

Features & Information

Cyber Run will make you turn into the world's greatest Speedster with a little affect at least😎-Educational purposes
#Made by WesawDrippy

Community Comments (1)

Monster_trio08Monster_trio08Feb 6, 2026

W good one 👍🏻 this is part of a piece I need to find the one piece

More Scripts for Universal Scripts