Free For All
Key Required

Free For All

Dead Railsrendr_skrendr_sk 1.5K views 514 executesUpdated Apr 2, 2026
Unrated
00
Lua Script•216 lines (7069 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SpectateGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")

-- Create View Button
local viewButton = Instance.new("TextButton")
viewButton.Name = "ViewButton"
viewButton.Size = UDim2.new(0, 100, 0, 40)
viewButton.Position = UDim2.new(0, 20, 0, 20)
viewButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
viewButton.TextColor3 = Color3.new(1, 1, 1)
viewButton.Font = Enum.Font.SourceSansBold
viewButton.TextSize = 20
viewButton.Text = "View"
viewButton.Parent = screenGui

-- Create No Clip Button below View Button
local noclipButton = Instance.new("TextButton")
noclipButton.Name = "NoClipButton"
noclipButton.Size = UDim2.new(0, 100, 0, 40)
noclipButton.Position = UDim2.new(0, 20, 0, 70) -- 50 pixels below View button
noclipButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
noclipButton.TextColor3 = Color3.new(1, 1, 1)
noclipButton.Font = Enum.Font.SourceSansBold
noclipButton.TextSize = 20
noclipButton.Text = "No Clip"
noclipButton.Parent = screenGui

-- Create Spectate Controls Frame (hidden initially)
local spectateControls = Instance.new("Frame")
spectateControls.Name = "SpectateControls"
spectateControls.Size = UDim2.new(0, 220, 0, 40)
spectateControls.Position = UDim2.new(0, 140, 0, 20)
spectateControls.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
spectateControls.BorderSizePixel = 0
spectateControls.Visible = false
spectateControls.Parent = screenGui

-- Left Button
local leftButton = Instance.new("TextButton")
leftButton.Name = "LeftButton"
leftButton.Size = UDim2.new(0, 40, 0, 40)
leftButton.Position = UDim2.new(0, 0, 0, 0)
leftButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
leftButton.TextColor3 = Color3.new(1, 1, 1)
leftButton.Font = Enum.Font.SourceSansBold
leftButton.TextSize = 24
leftButton.Text = "<"
leftButton.Parent = spectateControls

-- Player Name Label
local playerNameLabel = Instance.new("TextLabel")
playerNameLabel.Name = "PlayerNameLabel"
playerNameLabel.Size = UDim2.new(0, 140, 0, 40)
playerNameLabel.Position = UDim2.new(0, 40, 0, 0)
playerNameLabel.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
playerNameLabel.TextColor3 = Color3.new(1, 1, 1)
playerNameLabel.Font = Enum.Font.SourceSansBold
playerNameLabel.TextSize = 18
playerNameLabel.Text = "No players"
playerNameLabel.Parent = spectateControls

-- Right Button
local rightButton = Instance.new("TextButton")
rightButton.Name = "RightButton"
rightButton.Size = UDim2.new(0, 40, 0, 40)
rightButton.Position = UDim2.new(0, 180, 0, 0)
rightButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
rightButton.TextColor3 = Color3.new(1, 1, 1)
rightButton.Font = Enum.Font.SourceSansBold
rightButton.TextSize = 24
rightButton.Text = ">"
rightButton.Parent = spectateControls

-- Variables for spectate
local spectating = false
local spectateIndex = 1
local spectateTarget = nil
local playersList = {}

-- No Clip state and connection
local noclipEnabled = false
local noclipConnection = nil

local function updatePlayersList()
    playersList = {}
    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("Head") then
            table.insert(playersList, player)
        end
    end
    if #playersList == 0 then
        spectateTarget = nil
        playerNameLabel.Text = "No players to spectate"
    else
        if spectateIndex > #playersList then
            spectateIndex = 1
        elseif spectateIndex < 1 then
            spectateIndex = #playersList
        end
        spectateTarget = playersList[spectateIndex]
        playerNameLabel.Text = "Viewing: " .. spectateTarget.Name
    end
end

local function changeSpectateTarget(offset)
    if #playersList == 0 then return end
    spectateIndex = spectateIndex + offset
    if spectateIndex > #playersList then
        spectateIndex = 1
    elseif spectateIndex < 1 then
        spectateIndex = #playersList
    end
    spectateTarget = playersList[spectateIndex]
    playerNameLabel.Text = "Viewing: " .. spectateTarget.Name
end

local function updateCamera()
    if not spectating or not spectateTarget or not spectateTarget.Character then
        return
    end
    local head = spectateTarget.Character:FindFirstChild("Head")
    if not head then return end

    local headCFrame = head.CFrame
    local cameraOffset = headCFrame.LookVector * -5 + Vector3.new(0, 2, 0) -- behind and above

    Camera.CameraType = Enum.CameraType.Scriptable
    Camera.CFrame = CFrame.new(cameraOffset + head.Position, head.Position)
end

local function stopSpectate()
    spectating = false
    spectateControls.Visible = false
    viewButton.Text = "View"
    RunService:UnbindFromRenderStep("SpectateCamera")
    Camera.CameraType = Enum.CameraType.Custom
end

local function startSpectate()
    updatePlayersList()
    if spectateTarget then
        spectateControls.Visible = true
        viewButton.Text = "Stop Viewing"
        RunService:BindToRenderStep("SpectateCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
    else
        stopSpectate()
    end
end

local function toggleSpectate()
    if spectating then
        stopSpectate()
    else
        spectating = true
        startSpectate()
    end
end

-- No Clip functions
local function noclipStep()
    local character = LocalPlayer.Character
    if not character then return end
    for _, part in ipairs(character:GetDescendants()) do
        if part:IsA("BasePart") and part.CanCollide ~= nil then
            part.CanCollide = false
        end
    end
end

local function toggleNoClip()
    noclipEnabled = not noclipEnabled
    if noclipEnabled then
        noclipConnection = RunService.Stepped:Connect(noclipStep)
        noclipButton.BackgroundColor3 = Color3.fromRGB(0, 170, 0) -- green
    else
        if noclipConnection then
            noclipConnection:Disconnect()
            noclipConnection = nil
        end
        local character = LocalPlayer.Character
        if character then
            for _, part in ipairs(character:GetDescendants()) do
                if part:IsA("BasePart") and part.CanCollide ~= nil then
                    part.CanCollide = true
                end
            end
        end
        noclipButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50) -- original color
    end
end

-- Connect buttons
viewButton.MouseButton1Click:Connect(toggleSpectate)
leftButton.MouseButton1Click:Connect(function()
    changeSpectateTarget(-1)
end)
rightButton.MouseButton1Click:Connect(function()
    changeSpectateTarget(1)
end)
noclipButton.MouseButton1Click:Connect(toggleNoClip)

-- Update player list when players join or leave
Players.PlayerAdded:Connect(function()
    if spectating then updatePlayersList() end
end)
Players.PlayerRemoving:Connect(function()
    if spectating then updatePlayersList() end
end)

Features & Information

100% FREE AND DOESNT LAG YOUR DEVICE. I WANT YOU TO SCREW THIS MODE SO MUCH. ALSO THERE ARE FRIENDLY FIRE BUG ON ON NORMAL MAP SO FEEL FREE TO TROLL AS MUCH AS YOU WANT THEY ADDED THIS SHITASS MODE INSTEAD OF BRINGING BACK FOOLS GOLD MODE ON APRIL FOOL. CANT EVEN FIX THE DAMN BUGS YET HERE THEY ARE ADDING STUFF NOBODY WANTED. THIS SCRIPT WORKS BY LOCKING YOUR VIEW TO THE BACK OF PEOPLE, BUT FIRST USE THE NOCLIP AND RUN INSIDE THE WALL SO THEY CANNOT SEE AND KILL YOU.
#Free For All#Dead Rails Free For All#PvP#Aimbot#Friendly Fire

Community Comments (0)

No comments yet for this script.

More Scripts for Dead Rails