NO KEY || free walkspeed changer and shift lock
Key RequiredUniversal

NO KEY || free walkspeed changer and shift lock

Universal ScriptJulianrabbit123Julianrabbit123 401 views 4.2K executesUpdated Oct 1, 2026
Unrated
00
Lua Script•403 lines (8947 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer

-- SETTINGS
local speed = 16
local MIN_SPEED = 1
local MAX_SPEED = 10000
local STEP = 1

local speedEnabled = false
local shiftLockEnabled = false

local HOLD_DELAY = 1
local HOLD_INTERVAL = 0.05
local HOLD_STEP = 5

local plusHeld = false
local minusHeld = false

-- GUI
local gui = Instance.new("ScreenGui")
gui.Name = "MovementUI"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

-- OPEN BUTTON
local openButton = Instance.new("TextButton")
openButton.Size = UDim2.fromOffset(55, 55)
openButton.Position = UDim2.new(0, 15, 0.5, -27)
openButton.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
openButton.Text = "⚙"
openButton.TextColor3 = Color3.fromRGB(255, 255, 255)
openButton.TextSize = 27
openButton.Font = Enum.Font.GothamBold
openButton.Parent = gui

local openCorner = Instance.new("UICorner")
openCorner.CornerRadius = UDim.new(1, 0)
openCorner.Parent = openButton

local openStroke = Instance.new("UIStroke")
openStroke.Thickness = 2
openStroke.Color = Color3.fromRGB(75, 75, 85)
openStroke.Parent = openButton

-- MAIN MENU
local main = Instance.new("Frame")
main.Size = UDim2.fromOffset(250, 205)
main.Position = UDim2.new(0, 80, 0.5, -102)
main.BackgroundColor3 = Color3.fromRGB(22, 22, 27)
main.Visible = false
main.Parent = gui

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 18)
mainCorner.Parent = main

local mainStroke = Instance.new("UIStroke")
mainStroke.Thickness = 1.5
mainStroke.Color = Color3.fromRGB(65, 65, 75)
mainStroke.Parent = main

-- TITLE
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -20, 0, 28)
title.Position = UDim2.fromOffset(10, 8)
title.BackgroundTransparency = 1
title.Text = "MOVEMENT"
title.TextColor3 = Color3.fromRGB(235, 235, 240)
title.TextSize = 15
title.Font = Enum.Font.GothamBold
title.Parent = main

-- SPEED DISPLAY
local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(1, -20, 0, 35)
speedLabel.Position = UDim2.fromOffset(10, 35)
speedLabel.BackgroundTransparency = 1
speedLabel.Text = "16"
speedLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
speedLabel.TextSize = 26
speedLabel.Font = Enum.Font.GothamBold
speedLabel.Parent = main

-- MINUS
local minus = Instance.new("TextButton")
minus.Size = UDim2.fromOffset(55, 48)
minus.Position = UDim2.fromOffset(10, 83)
minus.Text = "−"
minus.TextSize = 25
minus.Font = Enum.Font.GothamBold
minus.TextColor3 = Color3.fromRGB(255, 255, 255)
minus.BackgroundColor3 = Color3.fromRGB(42, 42, 50)
minus.Parent = main

-- SPEED TOGGLE
local speedToggle = Instance.new("TextButton")
speedToggle.Size = UDim2.fromOffset(110, 48)
speedToggle.Position = UDim2.fromOffset(70, 83)
speedToggle.Text = "SPEED: OFF"
speedToggle.TextSize = 14
speedToggle.Font = Enum.Font.GothamBold
speedToggle.TextColor3 = Color3.fromRGB(255, 255, 255)
speedToggle.BackgroundColor3 = Color3.fromRGB(42, 42, 50)
speedToggle.Parent = main

-- PLUS
local plus = Instance.new("TextButton")
plus.Size = UDim2.fromOffset(55, 48)
plus.Position = UDim2.fromOffset(185, 83)
plus.Text = "+"
plus.TextSize = 25
plus.Font = Enum.Font.GothamBold
plus.TextColor3 = Color3.fromRGB(255, 255, 255)
plus.BackgroundColor3 = Color3.fromRGB(42, 42, 50)
plus.Parent = main

-- SHIFT LOCK
local shiftLock = Instance.new("TextButton")
shiftLock.Size = UDim2.fromOffset(230, 48)
shiftLock.Position = UDim2.fromOffset(10, 145)
shiftLock.Text = "SHIFT LOCK: OFF"
shiftLock.TextSize = 15
shiftLock.Font = Enum.Font.GothamBold
shiftLock.TextColor3 = Color3.fromRGB(255, 255, 255)
shiftLock.BackgroundColor3 = Color3.fromRGB(42, 42, 50)
shiftLock.Parent = main

for _, button in ipairs({
	minus,
	speedToggle,
	plus,
	shiftLock
}) do
	local corner = Instance.new("UICorner")
	corner.CornerRadius = UDim.new(0, 12)
	corner.Parent = button
end

-- OPEN/CLOSE
openButton.Activated:Connect(function()
	main.Visible = not main.Visible
end)

-- CHARACTER
local function getCharacter()
	local character = player.Character

	if not character then
		return nil, nil, nil
	end

	local humanoid = character:FindFirstChildOfClass("Humanoid")
	local root = character:FindFirstChild("HumanoidRootPart")

	return character, humanoid, root
end

-- UI
local function updateUI()
	speedLabel.Text = tostring(speed)

	if speedEnabled then
		speedToggle.Text = "SPEED: ON"
		speedToggle.BackgroundColor3 = Color3.fromRGB(35, 170, 85)
	else
		speedToggle.Text = "SPEED: OFF"
		speedToggle.BackgroundColor3 = Color3.fromRGB(42, 42, 50)
	end

	if shiftLockEnabled then
		shiftLock.Text = "SHIFT LOCK: ON"
		shiftLock.BackgroundColor3 = Color3.fromRGB(35, 170, 85)
	else
		shiftLock.Text = "SHIFT LOCK: OFF"
		shiftLock.BackgroundColor3 = Color3.fromRGB(42, 42, 50)
	end
end

-- CHANGE SPEED
local function changeSpeed(amount)
	speed = math.clamp(
		speed + amount,
		MIN_SPEED,
		MAX_SPEED
	)

	updateUI()
end

-- TAP + / -
plus.Activated:Connect(function()
	changeSpeed(STEP)
end)

minus.Activated:Connect(function()
	changeSpeed(-STEP)
end)

-- HOLD +
plus.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.Touch
		or input.UserInputType == Enum.UserInputType.MouseButton1 then

		plusHeld = true

		task.spawn(function()
			local heldTime = 0

			while plusHeld do
				task.wait(HOLD_INTERVAL)

				if not plusHeld then
					break
				end

				heldTime += HOLD_INTERVAL

				if heldTime >= HOLD_DELAY then
					changeSpeed(HOLD_STEP)
				end
			end
		end)
	end
end)

plus.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.Touch
		or input.UserInputType == Enum.UserInputType.MouseButton1 then

		plusHeld = false
	end
end)

-- HOLD -
minus.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.Touch
		or input.UserInputType == Enum.UserInputType.MouseButton1 then

		minusHeld = true

		task.spawn(function()
			local heldTime = 0

			while minusHeld do
				task.wait(HOLD_INTERVAL)

				if not minusHeld then
					break
				end

				heldTime += HOLD_INTERVAL

				if heldTime >= HOLD_DELAY then
					changeSpeed(-HOLD_STEP)
				end
			end
		end)
	end
end)

minus.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.Touch
		or input.UserInputType == Enum.UserInputType.MouseButton1 then

		minusHeld = false
	end
end)

-- TOGGLES
speedToggle.Activated:Connect(function()
	speedEnabled = not speedEnabled
	updateUI()
end)

shiftLock.Activated:Connect(function()
	shiftLockEnabled = not shiftLockEnabled
	updateUI()
end)

-- MOVEMENT
RunService.Heartbeat:Connect(function()
	local character, humanoid, root = getCharacter()

	if not humanoid or not root then
		return
	end

	-- SPEED
	if speedEnabled then
		humanoid.WalkSpeed = speed
	else
		humanoid.WalkSpeed = 16
	end

	-- SHIFT LOCK
	if shiftLockEnabled then
		humanoid.AutoRotate = false

		local camera = workspace.CurrentCamera

		if camera then
			local look = camera.CFrame.LookVector
			local flatLook = Vector3.new(look.X, 0, look.Z)

			if flatLook.Magnitude > 0 then
				root.CFrame = CFrame.lookAt(
					root.Position,
					root.Position + flatLook.Unit
				)
			end
		end
	else
		humanoid.AutoRotate = true
	end

	-- RAMP-STABLE MOVEMENT
	if speedEnabled then
		local direction = humanoid.MoveDirection

		if direction.Magnitude > 0 then

			local rayParams = RaycastParams.new()
			rayParams.FilterType = Enum.RaycastFilterType.Exclude
			rayParams.FilterDescendantsInstances = {character}

			local rayOrigin = root.Position + Vector3.new(0, 2, 0)
			local rayDirection = Vector3.new(0, -7, 0)

			local result = workspace:Raycast(
				rayOrigin,
				rayDirection,
				rayParams
			)

			local moveVelocity

			if result then
				-- Follow the surface of the ramp
				local normal = result.Normal

				local projected =
					direction.Unit
					- normal * direction.Unit:Dot(normal)

				if projected.Magnitude > 0 then
					projected = projected.Unit * speed
				else
					projected = direction.Unit * speed
				end

				moveVelocity = projected
			else
				moveVelocity = direction.Unit * speed
			end

			-- Limit vertical physics so ramps don't launch you
			local verticalVelocity =
				math.clamp(root.AssemblyLinearVelocity.Y, -50, 35)

			root.AssemblyLinearVelocity = Vector3.new(
				moveVelocity.X,
				verticalVelocity,
				moveVelocity.Z
			)

		else

			root.AssemblyLinearVelocity = Vector3.new(
				0,
				math.clamp(root.AssemblyLinearVelocity.Y, -50, 35),
				0
			)

		end

		-- Stop unwanted spinning
		root.AssemblyAngularVelocity = Vector3.zero
	end
end)

-- RESPAWN
player.CharacterAdded:Connect(function(character)

	local humanoid = character:WaitForChild("Humanoid")
	character:WaitForChild("HumanoidRootPart")

	task.wait(0.1)

	if speedEnabled then
		humanoid.WalkSpeed = speed
	else
		humanoid.WalkSpeed = 16
	end

	humanoid.AutoRotate = not shiftLockEnabled

	updateUI()
end)

updateUI()

Features & Information

It has really good walk changer and plus this is the best one becuz you wont slip, fling, or slide

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts