has some features other scripts dont (use this with others)
Key Required

has some features other scripts dont (use this with others)

Dead Railsareyoumental110areyoumental110 13.3K views 63 executesUpdated Mar 17, 2025
Unrated
00
Lua Script•1165 lines (41999 chars)
--[[ end positions:
-377.488007, 0.125, -48758.8672, -1, 0, 0, 0, 1, 0, 0, 0, -1
-351.308472, 2.74993896, -49045.1367, -0.866039991, 5.5283308e-06, -0.499974549, 0.499974549, 2.06232071e-05, -0.866040051, 5.5283308e-06, -0.99999994, -2.06232071e-05
]]

getgenv().deletewhendupefound = true
local localplr = game:GetService("Players").LocalPlayer
local mouse = localplr:GetMouse()
local lib = loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Lib-18698"))()
lib.makelib("Dead Rails (2AreYouMental110)")
local main = lib.maketab("Main")
local drag = lib.maketab("Dragging")
local trav = lib.maketab("Navigation")
local tools = lib.maketab("Tools")
local loopclickpart = Instance.new("Part")
loopclickpart.Anchored = true
loopclickpart.CanCollide = false
loopclickpart.Color = Color3.fromRGB(0,255,0)
loopclickpart.Shape = Enum.PartType.Ball
loopclickpart.Size = Vector3.new(2,2,2)
loopclickpart.Transparency = 1
loopclickpart.Material = Enum.Material.SmoothPlastic
loopclickpart.Parent = workspace
local loopclick = false
local tableofconnections = {}
local trainhighlight = Instance.new("Highlight")
trainhighlight.Enabled = false
trainhighlight.Adornee = workspace:FindFirstChild("Train")
trainhighlight.Parent = game.CoreGui
local uis = game:GetService("UserInputService")
local mousereq
pcall(function()
	mousereq = require(game:GetService("ReplicatedStorage").Client.Controllers.MouseController)
end)

if not workspace:FindFirstChild("Train") then
    coroutine.wrap(function()
        trainhighlight.Adornee = workspace:WaitForChild("Train",math.huge)
    end)()
end


lib.maketoggle("Toggle Cursor",main,function(bool)
    uis.MouseIconEnabled = bool
end)
lib.maketoggle("Toggle Loading Screen",main,function(bool)
    game:GetService("Players").LocalPlayer.PlayerGui.LoadingScreenPrefab.Enabled = bool
end)
localplr.CameraMaxZoomDistance = 99999999
localplr.CameraMode = "Classic"
uis.MouseBehavior = Enum.MouseBehavior.Default
local thirdperson = false
lib.maketoggle("Third Person",main,function(bool)
	thirdperson = bool
	if bool then
    	localplr.CameraMaxZoomDistance = 99999999
		localplr.CameraMode = "Classic"
		if mousereq then
			mousereq.setMouseBehaviorLocked(true)
			mousereq.setMouseBehavior(Enum.MouseBehavior.Default,true)
		else
			uis.MouseBehavior = Enum.MouseBehavior.Default
		end
	else
		localplr.CameraMaxZoomDistance = 128
		localplr.CameraMode = "LockFirstPerson"
		if mousereq then
			mousereq.setMouseBehavior(Enum.MouseBehavior.LockCenter,false)
		else
			uis.MouseBehavior = Enum.MouseBehavior.LockCenter
		end
	end
end,true)
table.insert(tableofconnections,uis.InputEnded:Connect(function(input)
	if input.KeyCode == Enum.KeyCode.RightControl and thirdperson then
    	localplr.CameraMaxZoomDistance = 99999999
		localplr.CameraMode = "Classic"
		if mousereq then
			mousereq.setMouseBehaviorLocked(true)
			mousereq.setMouseBehavior(Enum.MouseBehavior.Default,true)
		else
			uis.MouseBehavior = Enum.MouseBehavior.Default
		end
	end
end))
lib.maketoggle("Select Click Position",trav,function(bool)
    loopclick = bool
end)
local posgoto = nil
table.insert(tableofconnections,mouse.Button1Down:Connect(function()
    if loopclick then
        local hit = CFrame.new(mouse.hit.Position)
        if game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
            hit = hit + Vector3.new(0,game.Players.LocalPlayer.Character.HumanoidRootPart.Size.Y*1.5,0)
            loopclickpart.CFrame = hit
            loopclickpart.Transparency = 0
            posgoto = hit
        end
    end
end))
local precentagetext = nil
lib.makebutton("Loop goto click position (only works for going vertically)",trav,function()
    if posgoto then
        local pos = posgoto
        posgoto = nil
        loopclickpart.Transparency = 1
        local timebefore = tick()
        local posdiff = (game.Players.LocalPlayer.Character:GetPivot().Position - pos.Position).Magnitude
        repeat
            task.wait()
            game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = pos
			lib.updatelabel(tostring(math.round(timebefore+(posdiff/12) - tick())).." Seconds Left",precentagetext)
        until tick() > timebefore+(posdiff/12) -- fastest is inf but like
    end
end)
precentagetext = lib.makelabel("??? Seconds Left",trav)
lib.makelabel("",main)
lib.makebutton("Join public server (random servers)",main,function()
    game:GetService("TeleportService"):Teleport(70876832253163)
end)
lib.makebutton("Server Hopper",main,function()
    loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Server-Hopper-21123"))()
end)
lib.makelabel("",main)
function togglebaseplatecollision(bool)
	if workspace:FindFirstChild("StartingBaseplate") then
		for i,v in pairs(workspace.StartingBaseplate:GetDescendants()) do
			if v:IsA("BasePart") then
				v.CanCollide = bool
				if bool == false and not v:FindFirstChildWhichIsA("PathfindingModifier") then
					local pathfindmod = Instance.new("PathfindingModifier")
					pathfindmod.PassThrough = true
					pathfindmod.Parent = v
				end
			elseif v:IsA("PathfindingModifier") and bool == true then
				v:Destroy()
			end
		end
	end
	if workspace:FindFirstChild("Baseplates") then
		for i,v in pairs(workspace.Baseplates:GetDescendants()) do
			if v:IsA("BasePart") then
				v.CanCollide = bool
				if bool == false and not v:FindFirstChildWhichIsA("PathfindingModifier") then
					local pathfindmod = Instance.new("PathfindingModifier")
					pathfindmod.PassThrough = true
					pathfindmod.Parent = v
				end
			elseif v:IsA("PathfindingModifier") and bool == true then
				v:Destroy()
			end
		end
	end
end
-- haha easy copy and paste
local PathfindingService = game:GetService("PathfindingService")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")

local path = PathfindingService:CreatePath({})

--[[
local player = Players.LocalPlayer
local character = player.Character
local humanoid = character:WaitForChild("Humanoid")
]]
local waypoints
local nextWaypointIndex
local reachedConnection
local blockedConnection
local currrailroad = nil
local wcrl = false
local pathfindparts = {}
local function followPath(destination)
	if wcrl == false then return end
	togglebaseplatecollision(false)
	-- Compute the path
	local success, errorMessage = pcall(function()
		path:ComputeAsync(localplr.Character.HumanoidRootPart.Position, currrailroad.Position)
	end)
	print(success,errorMessage,path.Status)
	if wcrl and success and path.Status == Enum.PathStatus.Success then
		-- Get the path waypoints
		waypoints = path:GetWaypoints()
		-- Detect if path becomes blocked
		blockedConnection = path.Blocked:Connect(function(blockedWaypointIndex)
			-- Check if the obstacle is further down the path
			if wcrl and blockedWaypointIndex >= nextWaypointIndex then
				-- Stop detecting path blockage until path is re-computed
				blockedConnection:Disconnect()
				-- Call function to re-compute new path
				print("blocked")
				followPath(currrailroad.Position + Vector3.new(0,3,0))
			end
		end)

		-- Detect when movement to next waypoint is complete
		if not reachedConnection then
			reachedConnection = localplr.Character.Humanoid.MoveToFinished:Connect(function(reached)
			    local keepgoing = false
				if wcrl and nextWaypointIndex < #waypoints then
                    keepgoing = true
				else
					reachedConnection:Disconnect()
					blockedConnection:Disconnect()
					reachedConnection = nil
					blockedConnection = nil
					if wcrl and nextWaypointIndex >= #waypoints then
					    followPath(currrailroad.Position + Vector3.new(0,3,0))
					end
			    end
			    if keepgoing then
					-- Increase waypoint index and move to next waypoint
					nextWaypointIndex += 1
					localplr.Character.Humanoid:MoveTo(waypoints[nextWaypointIndex].Position)
					for i,v in pairs(pathfindparts) do
						v:Destroy()
					    pathfindparts[i] = nil
					end
					for i,v in pairs(waypoints) do
						if math.abs(nextWaypointIndex-i) < 50 then
							local pfpart = Instance.new("Part")
							pfpart.Anchored = true
							pfpart.CanCollide = false
							pfpart.Size = Vector3.new(1,10,1)
							pfpart.Transparency = 0.95
							pfpart.Color = Color3.fromRGB(255,255,0)
							pfpart.CFrame = CFrame.new(v.Position+Vector3.new(0,6,0))
							pfpart.CanQuery = false
							pfpart.CastShadow = false
							local pathfindmod = Instance.new("PathfindingModifier")
							pathfindmod.PassThrough = true
							pathfindmod.Parent = pfpart
							pfpart.Parent = workspace
							table.insert(pathfindparts,pfpart)
						end
					end
			    end
			end)
		end

		-- Initially move to second waypoint (first waypoint is path start; skip it)
		nextWaypointIndex = 2
		print(waypoints[nextWaypointIndex].Position)
		localplr.Character.Humanoid:MoveTo(waypoints[nextWaypointIndex].Position)
	else
		warn("Path not computed!", errorMessage,currrailroad)
	end
end
lib.maketoggle("Follow Underground Railroad",main,function(bool)
    wcrl = bool
    if wcrl then
		local guides = {}
		for i,v in pairs(workspace.RailSegments:GetChildren()) do
			if v:FindFirstChild("Guide") then
				table.insert(guides,v.Guide)
			end
		end
		local bestguide = nil
		for i,v in pairs(guides) do
			if bestguide == nil then
				bestguide = {v,(localplr.Character:GetPivot().Position - v.Position).Magnitude}
			elseif bestguide ~= nil and bestguide[2] > (localplr.Character:GetPivot().Position - v.Position).Magnitude then
				bestguide = {v,(localplr.Character:GetPivot().Position - v.Position).Magnitude}
			end
		end
		local fp = nil
		if bestguide then
			repeat
				task.wait()
				localplr.Character.Humanoid:MoveTo(bestguide[1].Position)
			until ((bestguide[1].Position - Vector3.new(0,bestguide[1].Position.Y,0)) - (localplr.Character:GetPivot().Position - Vector3.new(0,localplr.Character:GetPivot().Position.Y,0))).Magnitude < 3
			local tween = game:GetService("TweenService"):Create(localplr.Character.HumanoidRootPart,TweenInfo.new(1,Enum.EasingStyle.Linear,Enum.EasingDirection.In,0,false,0),{CFrame = (bestguide[1].CFrame+Vector3.new(0,3,0))})
			togglebaseplatecollision(false)
			tween:Play()
			task.wait(1)
			local ft = false
			bestguide = nil
			while wcrl do
				task.wait()
				togglebaseplatecollision(false)
				guides = {}
				for i,v in pairs(workspace.RailSegments:GetChildren()) do
					if v:FindFirstChild("Guide") then
						table.insert(guides,v.Guide)
					end
				end
				for i,v in pairs(guides) do
					if bestguide == nil then
						bestguide = {v,(v.Position.Z + 5),(localplr.Character:GetPivot().Position - v.Position).Magnitude}
					elseif bestguide ~= nil and bestguide[2] > v.Position.Z + 5 then
						bestguide = {v,(v.Position.Z + 5),(localplr.Character:GetPivot().Position - v.Position).Magnitude}
					end
				end
				if bestguide then
					currrailroad = bestguide[1]
				end
				if ft == false then
					ft = true
					fp = followPath(currrailroad.Position + Vector3.new(0,3,0))
				end
				task.wait(1)
			end
			--[[while newtime > tick() do
				task.wait()
				localplr.Character:PivotTo(bestguide[1].CFrame + Vector3.new(0,4,0))
			end]]
		end
    else
		currrailroad = nil
		togglebaseplatecollision(true)
		for i,v in pairs(pathfindparts) do
			v:Destroy()
		end
		if reachedConnection then
			reachedConnection:Disconnect()
			reachedConnection = nil
		end
		if blockedConnection then
			blockedConnection:Disconnect()
			blockedConnection = nil
		end
	end
end)
lib.makelabel("Moving will stop following the underground railroad",main)
local fpsdiv = 2 -- kinda like an fps cap but setting this higher may result in you falling in the void
local destroyheight = workspace.FallenPartsDestroyHeight
workspace.FallenPartsDestroyHeight = -50000
local dhoffset = 5
local dhto = 25 
local sentnotif = false 
local destroyheightnew = destroyheight + dhoffset
local localplr = game.Players.LocalPlayer
local connectsextra = {}
local charcframe = nil
local tpcframe = nil
local stopped = false
local antivoidon = true
function dochar(character)
	coroutine.wrap(function()
		repeat task.wait() until character:FindFirstChildWhichIsA("Humanoid")
		local hum = character:FindFirstChildWhichIsA("Humanoid")
		local state = hum:GetState()
		table.insert(connectsextra,hum.StateChanged:Connect(function(old,new)
			state = new
		end))
		local oldstate = nil
		while hum ~= nil and hum.Parent ~= nil and not stopped do
			task.wait()
			if state ~= oldstate and (state ~= Enum.HumanoidStateType.Jumping and state ~= Enum.HumanoidStateType.Freefall) or (state == Enum.HumanoidStateType.Running or state == Enum.HumanoidStateType.Landed) then
				tpcframe = charcframe
			end
			oldstate = state
		end
	end)()
end
local character = game.Players.LocalPlayer.Character
if getgenv().deletescript123456lol69 ~= nil then
	getgenv().deletescript123456lol69()
end
local characteradded = localplr.CharacterAdded:Connect(function(character2)
	character = character2
	dochar(character2)
end)
dochar(character)
local startergui = game:GetService("StarterGui")
function prompt(message,yesorno,yesfunc)
	pcall(function()
		if yesorno ~= nil and yesfunc ~= nil then
			local bindfunc = Instance.new("BindableFunction")
			bindfunc.OnInvoke = function(buttonname)
				if buttonname == "Yes" then
					yesfunc()
					sentnotif = false
				end
			end
			startergui:SetCore("SendNotification",{
				Title = "Notification",
				Text = message,
				Duration = 5,
				Callback = bindfunc,
				Button1 = "Yes",
				Button2 = "No"
			})
			wait(5)
			sentnotif = false
		else
			startergui:SetCore("SendNotification",{
				Title = "Notification",
				Text = message,
				Duration = 5
			})
		end
	end)
end
function fixchar(part)
	if character then
		local piv = character:GetPivot()
		character:PivotTo(CFrame.new(piv.Position.X,destroyheight+dhto+character:GetExtentsSize().Y,piv.Position.Z))
	end
	if part then
		part.Velocity = Vector3.new(0,0,0)
		if character then
			for i,v in pairs(character:GetChildren()) do
				if v:IsA("BasePart") then
					v.Velocity = Vector3.new(0,0,0)
				end
			end
		end
	end
	if tpcframe ~= nil and sentnotif == false then
		sentnotif = true
		prompt("Teleport back to last touched (buggy)",true,function()
			if character then
				character:PivotTo(tpcframe)
			end
			if part then
				part.Velocity = Vector3.new(0,0,0)
			end
		end)
	end
end
local stepped = game:GetService("RunService").Stepped:Connect(function()
	if character ~= nil and character:FindFirstChildWhichIsA("BasePart") and antivoidon then
		local part = character:FindFirstChild("HumanoidRootPart") or character:FindFirstChildWhichIsA("BasePart")
		local cfr = (character:FindFirstChild("HumanoidRootPart") and character.HumanoidRootPart.CFrame) or character:GetPivot()
		charcframe = cfr
		if cfr.Position.Y < destroyheightnew then
			fixchar(part)
		end
		local partvel = part.Velocity
		if (partvel.Y/fpsdiv) + part.Position.Y < destroyheightnew then
			fixchar(part)
		end
	end
end)
prompt("Anti-Void Loaded!")
getgenv().deletescript123456lol69 = function()
	workspace.FallenPartsDestroyHeight = destroyheight
	characteradded:Disconnect()
	stepped:Disconnect()
	for i,v in pairs(connectsextra) do
		v:Disconnect()
	end
	stopped = true
end
lib.maketoggle("Anti-Void",main,function(bool)
    antivoidon = bool
end,true)
lib.makebutton("Attempt to Teleport to Train",main,function()
    vseat = workspace.Train:FindFirstChildWhichIsA("VehicleSeat",true)
	wait(5)
	vseat = nil
end)
local showradius = false
lib.maketoggle("Show Attack Radius of Enemies",main,function(bool)
    showradius = bool
end)
local ltpe = false
lib.maketoggle("Loop TP To End",main,function(bool)
    ltpe = bool
end)
lib.makebutton("Touch Water At End (FULLY TPS YOU TO END, DISABLE LOOP TP TO END AFTER)",main,function()
    local water = workspace.Baseplates.FinalBasePlate:FindFirstChild("Water")
	water.CanCollide = false
	local pwp = water.CFrame
	water.CFrame = localplr.Character:GetPivot()
	task.wait(.2)
	water.CFrame = pwp
	water.CanCollide = true
end)
local bankcomb = lib.makelabel("Nearest Bank Combination: ",main)
lib.maketoggle("Highlight Train",trav,function(bool)
    trainhighlight.Enabled = bool
end)
local vt = false
function dvt()
	if vt then
		workspace.CurrentCamera.CameraSubject = workspace.Train.TrainControls
	else
		workspace.CurrentCamera.CameraSubject = localplr.Character.Humanoid
	end
end
local wtt = false
lib.maketoggle("Walk to Train",trav,function(bool)
    wtt = bool
    while wtt do
        pcall(function()
            localplr.Character.Humanoid:MoveTo(workspace.Train:GetPivot().Position)
        end)
        task.wait(3)
    end
end)
local ftt = false
lib.maketoggle("Flop to Train (lol)",trav,function(bool)
    ftt = bool
    while ftt do
        pcall(function()
            game:GetService("ReplicatedStorage").Shared.Remotes.RagdollFlop:FireServer(CFrame.lookAt(game.Players.LocalPlayer.Character:GetPivot().Position,workspace.Train:GetPivot().Position).LookVector)
        end)
        task.wait(0.3)
    end
end)
local dft = lib.makelabel("Distance from Train",trav)
local dfs = lib.makelabel("Distance from Spawn",trav)
lib.maketoggle("View Train",trav,function(bool)
    vt = bool
	dvt()
end)
local plrtracers = false
lib.maketoggle("Make Tracers at players",trav,function(bool)
    plrtracers = bool
end)
local insun = lib.makelabel("",trav)
-- i am not doing ALLAT (shame me all u want for using ChatGPT but im not doing that math)
local player = localplr

-- Ensure ScreenGui is parented to PlayerGui when it's available
local function createScreenGui()
    local screenGui = Instance.new("ScreenGui")
    screenGui.Name = "LineAndLabelGui"
    screenGui.Parent = game.CoreGui  -- Wait until PlayerGui is available
    return screenGui
end

-- Create ScreenGui
local screenGui = createScreenGui()

-- Create a container to hold the lines and labels
local lines = {}
local labels = {}

-- Function to create a line and label for each player
local function createLineAndLabelForPlayer(player)
    -- Create the line
    local line = Instance.new("Frame")
    line.Size = UDim2.new(0, 2, 0, 2)  -- Initially set a small size for the line
    line.BackgroundColor3 = Color3.fromRGB(0, 255, 0)  -- Red line for example
    line.BorderSizePixel = 0  -- Remove the border
    line.AnchorPoint = Vector2.new(0.5, 1)  -- Anchor the frame to its bottom center
    line.Visible = false  -- Initially set to invisible
    line.Parent = screenGui

    -- Create the label
    local label = Instance.new("TextLabel")
    label.Size = UDim2.new(0, 100, 0, 50)
    label.Text = player.DisplayName
    label.TextColor3 = Color3.fromRGB(255, 255, 255)
    label.TextSize = 14  -- Initial text size
    label.BackgroundTransparency = 1
    label.AnchorPoint = Vector2.new(0.5, 0)  -- Anchor the label to the center bottom (it'll be above the line)
    label.ZIndex = 2  -- Ensure the label is on top of the line
    label.TextStrokeTransparency = 0.8  -- Add a border to the text
    label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)  -- Set the stroke color to black (can change this)
    label.Visible = false  -- Initially set to invisible
    label.Parent = screenGui

    -- Store the line and label for later updates
    lines[player.UserId] = line
    labels[player.UserId] = label
end

-- Function to update the lines and labels
local function updateLinesAndLabels()
    local screenWidth = game:GetService("Workspace").CurrentCamera.ViewportSize.X
    local screenHeight = game:GetService("Workspace").CurrentCamera.ViewportSize.Y
    local screenCenter = Vector2.new(screenWidth / 2, screenHeight / 2)

    -- Loop through all players in the game
    for _, player in pairs(game.Players:GetPlayers()) do
        if player == game.Players.LocalPlayer then
            -- Skip the local player
            continue
        end

        if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
            local worldPos = player.Character.HumanoidRootPart.Position
            local screenPos, onScreen = game:GetService("Workspace").CurrentCamera:WorldToScreenPoint(worldPos)
            
            -- Convert Vector3 to Vector2
            local screenPos2D = Vector2.new(screenPos.X, screenPos.Y)

            -- Get the line and label for this player, create if it doesn't exist
            local line = lines[player.UserId]
            local label = labels[player.UserId]

            if not line then
                createLineAndLabelForPlayer(player)
                line = lines[player.UserId]
                label = labels[player.UserId]
            end

            -- Update the line's position and size
            if onScreen and plrtracers then
                -- Calculate the direction of the line
                local direction = screenPos2D - screenCenter
                local distance = direction.Magnitude

                -- Set the size of the line (length of the line is the full distance to the player)
                line.Size = UDim2.new(0, distance, 0, 2)  -- Set the length based on the distance

                -- Move the line halfway towards the player
                local halfwayPosition = screenCenter + (direction * 0.5)  -- Move halfway along the direction
                line.Position = UDim2.new(0, halfwayPosition.X, 0, halfwayPosition.Y)

                -- Rotate the line to point towards the player's position
                local angle = math.deg(math.atan2(direction.Y, direction.X))  -- Calculate the angle in degrees
                line.Rotation = angle

                -- Adjust text size dynamically based on the player's distance from the camera
                local camera = game:GetService("Workspace").CurrentCamera
                local playerDistance = (camera.CFrame.Position - worldPos).Magnitude  -- Calculate the distance from the camera to the player
                
                -- Dynamic text size (closer players get larger text)
                local textSize = math.max(10, math.min(50, 100 / playerDistance))  -- Larger text for closer players, but not exceeding 50 or below 10
                label.TextSize = textSize

                -- Update the label's position to be at the end of the line
                local labelOffset = Vector2.new(10, 0)  -- Adjust this value to move the label slightly away from the line's end
                label.Position = UDim2.new(0, screenPos2D.X + labelOffset.X, 0, screenPos2D.Y + labelOffset.Y)
                label.Text = player.DisplayName.." | "..tostring(math.round(playerDistance)).." Studs away"  -- Update the label's text to the player's DisplayName

                -- Ensure the line and label are visible when on screen
                line.Visible = true
                label.Visible = true
            else
                -- Hide the line and label if the player is off-screen
                line.Visible = false
                label.Visible = false
            end
        else
			if lines[player.UserId] then
				lines[player.UserId].Visible = false
			end
			if labels[player.UserId] then
				labels[player.UserId].Visible = false
			end
		end
    end
end

-- Cleanup when a player leaves
local opr = game.Players.PlayerRemoving:Connect(function(playerLeaving)
    -- Check if the player leaving has a line and label
    local line = lines[playerLeaving.UserId]
    local label = labels[playerLeaving.UserId]

    -- If they exist, remove them
    if line then
        line:Destroy()
        lines[playerLeaving.UserId] = nil  -- Remove from the lines table
    end
    if label then
        label:Destroy()
        labels[playerLeaving.UserId] = nil  -- Remove from the labels table
    end
end)
local collidedrag = false
local dragparts = {}
local playerdragparts = {}
function dodrag(v,t)
	if (not v:FindFirstChildWhichIsA("Humanoid") or (v:FindFirstChildWhichIsA("Humanoid") and v:FindFirstChild("HumanoidRootPart") and (v.HumanoidRootPart.CollisionGroup == "Ragdoll" or v.HumanoidRootPart.CollisionGroup == "DraggableObject"))) then
		for i2,v2 in pairs(v:GetDescendants()) do
			if v2:IsA("BasePart") then
				if (v2.CollisionGroup == "DraggableObject" or v2.CollisionGroup == "Ragdoll" or v2.CollisionGroup == "Player") and collidedrag then
					v2.CollisionGroup = "Default"
				end
				table.insert(tableofconnections,v2:GetPropertyChangedSignal("CollisionGroup"):Connect(function()
					if (v2.CollisionGroup == "DraggableObject" or v2.CollisionGroup == "Ragdoll" or v2.CollisionGroup == "Player") and collidedrag then
						v2.CollisionGroup = "Default"
					end
				end))
				table.insert(t or dragparts,v2)
			end
		end
	end
end
if workspace:FindFirstChild("RuntimeItems") then
	for i,v in pairs(workspace.RuntimeItems:GetChildren()) do
		dodrag(v)
	end
	workspace.RuntimeItems.ChildAdded:Connect(dodrag)
end
-- lollllll
function raycastInFrontOfCamera_upvr() -- Line 22, Named "raycastInFrontOfCamera"
	local RaycastParams_new_result1 = RaycastParams.new()
	RaycastParams_new_result1.FilterType = Enum.RaycastFilterType.Exclude
	RaycastParams_new_result1.FilterDescendantsInstances = {LocalPlayer_upvr.Character}
	return workspace:Raycast(CurrentCamera_upvr.CFrame.Position, CurrentCamera_upvr.CFrame.LookVector * 10, RaycastParams_new_result1)
end
local killplr = nil
local dragaurap = Instance.new("Part")
dragaurap.Anchored = true
dragaurap.CanCollide = false
dragaurap.Color = Color3.fromRGB(0,255,0)
dragaurap.Shape = Enum.PartType.Ball
dragaurap.Size = Vector3.new(5,5,5)
dragaurap.Transparency = .9
dragaurap.Material = Enum.Material.SmoothPlastic
dragaurap.Parent = workspace
local dragaura = false
lib.maketoggle("Drag Nearest Humanoid",drag,function(bool)
	dragaura = bool
	if dragaura then
		while dragaura do
			task.wait(.2)
			if currdrag == nil or game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value ~= currdrag then
			currdrag = nil
			local bestthing = nil
			for i,v in pairs(workspace.RuntimeItems:GetChildren()) do
				if v:FindFirstChildWhichIsA("Humanoid") and localplr and v ~= localplr and localplr.Character and bestthing == nil then
					bestthing = {v,(v:GetPivot().Position - localplr.Character:GetPivot().Position).Magnitude}
				elseif v:FindFirstChildWhichIsA("Humanoid") and localplr and v ~= localplr and localplr.Character and v and (v:GetPivot().Position - localplr.Character:GetPivot().Position).Magnitude < bestthing[2] then
					bestthing = {v,(v:GetPivot().Position - localplr.Character:GetPivot().Position).Magnitude}
				end
			end
			game.ReplicatedStorage.Shared.Remotes.RequestStartDrag:FireServer(bestthing[1])
			task.wait(1)
			currdrag = bestthing[1]
			end
		end
	else
		currdrag = nil
		game.ReplicatedStorage.Shared.Remotes.RequestStopDrag:FireServer()
	end
end)
local killplr = false
lib.makebutton("Kill dragged part",drag,function()
	killplr = currdrag
	task.wait(1)
	killplr = nil
end)
lib.maketoggle("Auto kill dragged part",drag,function(bool)
	if bool then
		killplr = ""
		while killplr ~= nil do
			task.wait(.2)
			pcall(function()
				if game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value ~= nil then
					currdrag = game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value
				end
			end)
			killplr = currdrag
		end
	else
		killplr = nil
	end
end)
local tpdp = false
lib.makebutton("Teleport Dragged part to Train",drag,function()
	tpdp = true
	task.wait(2)
	tpdp = false
end)
local tpdpcu = nil
lib.makebutton("Teleport Dragged part to End",drag,function()
	tpdpcu = Vector3.new(-351.308472, 2.74993896, -49045.1367)
	task.wait(10)
	tpdpcu = nil
end)
local tpdpc = false
lib.makebutton("Teleport Dragged part to Camera (bruteforce)",drag,function()
	tpdpc = true
	task.wait(2)
	tpdpc = false
end)
local mdpf = false
lib.maketoggle("Make dragged part fling",drag,function(bool)
    mdpf = bool
    if mdpf then
    	pcall(function()
    		if game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value ~= nil then
    			currdrag = game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value
    		end
    	end)
    end
end)
local atdt = false
lib.maketoggle("Attempt to drag train",drag,function(bool)
	atdt = bool
	while atdt do
		task.wait(.6)
		if game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value ~= workspace.Train then
		    game.ReplicatedStorage.Shared.Remotes.RequestStartDrag:FireServer(workspace.Train)
		end
	end
end)
-- https://devforum.roblox.com/t/need-help-detecting-if-player-is-in-the-light-or-in-shadow/2168863/14
-- if dead rails uses this script for their game i can use this script for my script!
local Players = game:GetService("Players")

-- Code snipped from https://create.roblox.com/docs/reference/engine/classes/Lighting#GeographicLatitude
local Lighting = game:GetService("Lighting")

local UNIT_Z = Vector3.new(0, 0, 1)
local EARTH_TILT = math.rad(23.5) -- The Earth's tilt in radians.
local HALF_SOLAR_YEAR = 182.6282 -- Half the length of an average solar year

local function getSunDirection()
	local gameTime = Lighting:GetMinutesAfterMidnight()
	local geoLatitude = Lighting.GeographicLatitude

	local dayTime = gameTime / 1440
	local sourceAngle = 2 * math.pi * dayTime

	local sunPosition = Vector3.new(math.sin(sourceAngle), -math.cos(sourceAngle), 0)
	local latRad = math.rad(geoLatitude)

	local sunOffset = -EARTH_TILT * math.cos(math.pi * (dayTime - HALF_SOLAR_YEAR) / HALF_SOLAR_YEAR) - latRad
	local sunRotation = CFrame.fromAxisAngle(UNIT_Z:Cross(sunPosition), sunOffset)

	local sunDirection = sunRotation * sunPosition
	return sunDirection
end

-- Loop to detect when in shadows
local oldHeadColor = nil
function doradius(v,c)
	local radthing = nil
	if v.Parent.Parent:FindFirstChildWhichIsA("Humanoid") then
		if not v.Parent.Parent:FindFirstChild(v.Name.."radthing") then
			radthing = Instance.new("Part")
			radthing.Shape = Enum.PartType.Ball
			local rad = v.Value*2
			radthing.Size = Vector3.new(rad,rad,rad)
			radthing.Color = c or Color3.fromRGB(255,0,0)
			radthing.CastShadow = false
			radthing.CanCollide = false
			radthing.CanQuery = false
			radthing.Anchored = true
			radthing.Name = v.Name.."radthing"
			radthing.Transparency = 0.95
			radthing.Parent = v.Parent.Parent
			local otherradthing = Instance.new("Part")
			otherradthing.Shape = Enum.PartType.Ball
			local rad = v.Value*2 - 0.01
			otherradthing.Size = Vector3.new(rad,rad,rad)
			otherradthing.Color = c or Color3.fromRGB(255,0,0)
			otherradthing.CastShadow = false
			otherradthing.CanCollide = false
			otherradthing.CanQuery = false
			otherradthing.Anchored = true
			otherradthing.Name = "radthing2"
			otherradthing.Transparency = 0.95
			otherradthing.Parent = radthing
		else
			radthing = v.Parent.Parent[v.Name.."radthing"]
		end
		if showradius and v.Parent.Parent.Humanoid.Health > 0 then
			radthing.Transparency = 0.8
			radthing.radthing2.Transparency = 0.8
		else
			radthing.Transparency = 1
			radthing.radthing2.Transparency = 1
		end
		local fpos = (v.Parent.Parent:FindFirstChild("HumanoidRootPart") and v.Parent.Parent.HumanoidRootPart.CFrame) or v.Parent.Parent:GetPivot()
		radthing.CFrame = fpos
		radthing.radthing2.CFrame = CFrame.fromMatrix(fpos.Position,Vector3.new(1,1,0),Vector3.new(0,0,1),Vector3.new(0,1,0))
	end
end
function doradius2(v)
	if v:FindFirstChild("ChaseDistance",true) then
		doradius(v:FindFirstChild("ChaseDistance",true),Color3.fromRGB(255,0,0))
	end
	if v:FindFirstChild("AttackDistance",true) then
		doradius(v:FindFirstChild("AttackDistance",true),Color3.fromRGB(0,0,0))
	end
	if v:FindFirstChild("ShootDistance",true) then
		doradius(v:FindFirstChild("ShootDistance",true),Color3.fromRGB(0,0,0))
	end
end
local ors = game:GetService("RunService").Stepped:Connect(function()
	pcall(function()
		if game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value ~= nil then
			currdrag = game:GetService("ReplicatedStorage").Client.Handlers.DraggableItemHandlers.ClientDraggableObjectHandler.DraggingObject.Value
		end
	end)
    if currdrag and currdrag:FindFirstChild("DragAlignPosition",true) then
        if killplr then
			for i,v in pairs(currdrag:GetDescendants()) do
				if v:IsA("BasePart") then
					v.CanCollide = false
					v.CollisionGroup = "sgdhuig rfbdjg bjfd gbhrtjfd"
				end
			end
            currdrag:FindFirstChild("DragAlignPosition",true).Position = ((currdrag:IsA("Model") and currdrag:GetPivot().Position) or (currdrag:IsA("BasePart") and currdrag.Position)) + Vector3.new(0,-20000,0)
        end
        if tpdp then
            if currdrag:IsA("BasePart") then
                currdrag.CFrame = workspace.Train:GetPivot()
            else
                currdrag:PivotTo(workspace.Train:GetPivot())
            end
            currdrag:FindFirstChild("DragAlignPosition",true).Position = workspace.Train:GetPivot().Position
        end
        if tpdpc then
            local posit = workspace.CurrentCamera.CFrame + workspace.CurrentCamera.CFrame.LookVector * 10
            if currdrag:IsA("BasePart") then
                currdrag.CFrame = posit
            else
                currdrag:PivotTo(posit)
            end
            currdrag:FindFirstChild("DragAlignPosition",true).Position = posit.Position
        end
        if mdpf then
            local posit = workspace.CurrentCamera.CFrame + workspace.CurrentCamera.CFrame.LookVector * 10
            if currdrag:IsA("BasePart") then
                currdrag.Velocity = Vector3.new(99999,99999,99999)
                currdrag.CFrame = posit
            else
                for i,v in pairs(currdrag:GetDescendants()) do
                    if v:IsA("BasePart") then
                        v.Velocity = Vector3.new(99999,99999,99999)
                    end
                end
                currdrag:PivotTo(posit)
            end
        end
        if tpdpcu then
            if currdrag:IsA("BasePart") then
                currdrag.CFrame = CFrame.new(tpdpcu)
            else
                currdrag:PivotTo(CFrame.new(tpdpcu))
            end
            currdrag:FindFirstChild("DragAlignPosition",true).Position = tpdpcu
        end
    elseif currdrag and not currdrag:FindFirstChild("DragAlignPosition",true) then
		currdrag = nil
	end
	if vseat then
		localplr.Character:PivotTo(vseat.CFrame+Vector3.new(0,2,0))
		vseat:Sit(localplr.Character.Humanoid)
	end
	dvt()
	updateLinesAndLabels()
	--if showradius then
	if workspace:FindFirstChild("RuntimeItems") then
	for i,v in pairs(workspace.RuntimeItems:GetChildren()) do
		doradius2(v)
	end
	end
	if workspace:FindFirstChild("NightEnemies") then
	for i,v in pairs(workspace.NightEnemies:GetChildren()) do
		doradius2(v)
	end
	end
	if workspace:FindFirstChild("RandomBuildings") then
	for i,v in pairs(workspace.RandomBuildings:GetChildren()) do
	    if v:FindFirstChild("StandaloneZombiePart") and v.StandaloneZombiePart:FindFirstChild("Zombies") then
	        for i,v in pairs(v.StandaloneZombiePart.Zombies:GetChildren()) do
	            doradius2(v)
	        end
	    end
	end
	end
	if workspace:FindFirstChild("Towns") then
	for i,v in pairs(workspace.Towns:GetChildren()) do
		if not v:FindFirstChild("ZombiePart") or not v.ZombiePart:FindFirstChild("Zombies") then continue end
		for i,v in pairs(v.ZombiePart.Zombies:GetChildren()) do
			doradius2(v)
		end
	end
	end
	if workspace:FindFirstChild("Baseplates") then
	for i,v in pairs(workspace.Baseplates:GetChildren()) do
		for i,v in pairs(v:GetChildren()) do
			if v:FindFirstChild("Animals") then
				for i,v in pairs(v.Animals:GetChildren()) do
					if string.find(v.Name:lower(),"outlaw") and v:FindFirstChild("ChaseDistance",true) then
						doradius2(v)
					elseif v.Name == "Werewolf" or v.Name == "Wolf" then
					    doradius2(v)
					end
				end
			elseif v:FindFirstChild("StandaloneZombiePart") then
				for i,v in pairs(v.StandaloneZombiePart.Zombies:GetChildren()) do
					doradius2(v)
				end
			end
		end
	end
	end
	local character = localplr.Character
	if character and character:FindFirstChild("Head") then
		local hit = workspace:Raycast(character.Head.CFrame.Position, getSunDirection() * 1000)
		if hit then
			lib.updatelabel("\u{1F311}",insun)
		elseif not hit then
			lib.updatelabel("\u{1F305}",insun)
		end
	end
	local nb = nil
	if workspace:FindFirstChild("Towns") then
	for i,v in pairs(workspace.Towns:GetChildren()) do
		if not v:FindFirstChild("Buildings") then continue end
		local closestbank = nil
		for i,v in pairs(v.Buildings:GetChildren()) do
			if v.Name == "BankDestroyed" or v.Name == "Bank" and v:FindFirstChild("Combination",true) then
				if closestbank == nil and v:FindFirstChild("Combination",true) then
					closestbank = {v:FindFirstChild("Combination",true).Value,(v:GetPivot().Position - localplr.Character:GetPivot().Position).Magnitude}
				elseif v:FindFirstChild("Combination",true) and closestbank[2] > (v:GetPivot().Position - localplr.Character:GetPivot().Position).Magnitude then
					closestbank = {v:FindFirstChild("Combination",true).Value,(v:GetPivot().Position - localplr.Character:GetPivot().Position).Magnitude}
				end
			end
		end
		nb = closestbank[1]
	end
	end
	if nb ~= nil then
		lib.updatelabel("Nearest Bank Combination: "..tostring(nb),bankcomb)
	else
		lib.updatelabel("No Bank Found",bankcomb)
	end
	if ltpe then
		localplr.Character:PivotTo(CFrame.new(-351.308472, 2.74993896, -49045.1367))
        pcall(function()
			workspace.Baseplates.FinalBasePlate.OutlawBase.Bridge.BridgeControl.Crank.Model.Mid.EndGame.HoldDuration = 0
            fireproximityprompt(workspace.Baseplates.FinalBasePlate.OutlawBase.Bridge.BridgeControl.Crank.Model.Mid.EndGame,0)
        end) 
	end
end)

lib.maketoggle("Make dragged parts clipped/collide",drag,function(bool)
	collidedrag = bool
	if collidedrag then
		for i,v in pairs(dragparts) do
			if v and (v.CollisionGroup == "DraggableObject" or v.CollisionGroup == "Ragdoll") then
				v.CollisionGroup = "Default"
			end
		end
	end
end)
local spams = {}
local spamsrev = {}
function makespam(sname,boolname)
	spams[boolname] = false
	spamsrev[sname] = true
	lib.maketoggle("Spam "..sname.."s",tools,function(bool)
		spams[boolname] = bool
		if spams[boolname] then
			while spams[boolname] do
				task.wait(.1)
				pcall(function()
					for i,v in pairs(localplr.Backpack:GetChildren()) do
						if v.Name == sname then
							v.Parent = localplr.Character
						end
					end
					for i,v in pairs(localplr.Character:GetChildren()) do
						if v.Name == sname then
							v:Activate()
						end
					end
				end)
			end
		end
	end)
end
local sa = false
lib.maketoggle("Spam All",tools,function(bool)
	sa = bool
	if sa then
		while sa do
			task.wait(.1)
			pcall(function()
				for i,v in pairs(localplr.Backpack:GetChildren()) do
					if spamsrev[v.Name] == true then
						v.Parent = localplr.Character
					end
				end
				for i,v in pairs(localplr.Character:GetChildren()) do
					if spamsrev[v.Name] == true then
						v:Activate()
					end
				end
			end)
		end
	end
end)
makespam("Shovel","ss")
makespam("Pickaxe","spa")
makespam("Cavalry Sword","scs")
makespam("Tomahawk","sth")
makespam("Vampire Knife","svk")
lib.makebutton("Enable Inventory",tools,function()
	require(game:GetService("ReplicatedStorage").Packages.Satchel):SetBackpackEnabled(true)
end)
--game:GetService("ReplicatedStorage").Shared.Remotes.EatCorpse
local on = true
coroutine.wrap(function()
    while on do
        task.wait(.1)
        pcall(function()
            lib.updatelabel("Distance from Train: "..tostring(math.round((localplr.Character:GetPivot().Position - workspace.Train:GetPivot().Position).Magnitude)),dft)
            if workspace:FindFirstChild("StartingZone") then
                lib.updatelabel("Distance from Spawn: "..tostring(math.round((localplr.Character:GetPivot().Position - workspace.StartingZone:GetPivot().Position).Magnitude)),dfs)
            else
                lib.updatelabel("Distance from Spawn: "..tostring(math.round((localplr.Character:GetPivot().Position - Vector3.new(56.1720314, 6.97477531, 29898.3301)).Magnitude)),dfs)
            end
        end)
    end
end)()
lib.ondestroyedfunc = function()
    on = false
	localplr.CameraMaxZoomDistance = 128
	localplr.CameraMode = "LockFirstPerson"
	uis.MouseBehavior = Enum.MouseBehavior.LockCenter
	uis.MouseIconEnabled = false
	if mousereq then
		mousereq.setMouseBehaviorLocked(true)
	end
	for i,v in pairs(tableofconnections) do
		v:Disconnect()
	end
	trainhighlight:Destroy()
	loopclickpart:Destroy()
	wtt = false
	ftt = false
	for i,v in pairs(spams) do
		v = false
	end
	sa = false
	atdt = false
	tpdp = false
	tpdpc = false
	wcrl = false
	for i,v in pairs(pathfindparts) do
		v:Destroy()
	end
	if reachedConnection then
		reachedConnection:Disconnect()
	end
	reachedConnection = nil
	if blockedConnection then
		blockedConnection:Disconnect()
	end
	blockedConnection = nil
	togglebaseplatecollision(true)
	currdrag = nil
	dragaura = false
	killplr = false
	antivoidon = false
	vseat = nil
	vt = false
	dvt()
	plrtracers = false
	opr:Disconnect()
	ors:Disconnect()
	showradius = false
	for i,v in pairs(workspace.RuntimeItems:GetChildren()) do
		if v:FindFirstChild("ChaseDistance",true) then
			doradius(v:FindFirstChild("ChaseDistance",true))
		end
	end
	for i,v in pairs(workspace.Towns:GetChildren()) do
		if not v:FindFirstChild("ZombiePart") or not v.ZombiePart:FindFirstChild("Zombies") then continue end
		for i,v in pairs(v.ZombiePart.Zombies:GetChildren()) do
			if v:FindFirstChild("ChaseDistance",true) then
				doradius(v:FindFirstChild("ChaseDistance",true))
			end
		end
	end
	ltpe = false
end

Features & Information

3/22/2025 I went back to dead rails after grinding some stuff on my main, and saw that people were COPYING my method of teleporting to the bridge! Straight on, i mightve flexed to some random script dev and they got his friggin friends to come and mimic it, and that wouldve been fine,until they RELEASED it TO THE PUBLIC! what the hell man?? this is why we cant have nice thing cause they just do this and get the whole thing patched, now no one can farm wins. Updated script to the version that teleports to bridge now. spam all melees use underground railroad anti void (doesnt work well) teleport to bug server fling item (trash and doesnt work) teleport item to train teleport item to camera (trash again) tp to train (trash) loop goto click position (also trash) highlight train flop to train walk to train third person
#underground#railroad#teleport#melee#void

Community Comments (0)

No comments yet for this script.

More Scripts for Dead Rails