Shift lock
Key RequiredUniversal

Shift lock

Universal ScriptGrindingonthagameGrindingonthagame 193.6K views 205 executesUpdated Sep 3, 2023
5.0/ 5(1 votes)
10100% Positive
Lua Script•96 lines (3461 chars)
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Camera = game.Workspace.CurrentCamera
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local PlayerMouse = LocalPlayer:GetMouse()
local shiftLockEnabled = false
local lockOffset = Vector2.new(5, 0)
local cursorImage = "rbxasset://textures/MouseLockedCursor.png"
local originalMouseIcon
local originalCameraOffset
local characterAddedConn, characterRemovingConn

local function disconnectAllConnections()
   if characterAddedConn then
       characterAddedConn:Disconnect()
       characterAddedConn = nil
   end
   if characterRemovingConn then
       characterRemovingConn:Disconnect()
       characterRemovingConn = nil
   end
end

local function toggleShiftLock()
   shiftLockEnabled = not shiftLockEnabled
   if shiftLockEnabled then
       UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
       originalMouseIcon = PlayerMouse.Icon
       PlayerMouse.Icon = cursorImage
   else
       UserInputService.MouseBehavior = Enum.MouseBehavior.Default
       PlayerMouse.Icon = originalMouseIcon
   end
end

local function updateCameraOffset()
   if shiftLockEnabled then
       local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
       if humanoid then
           humanoid.CameraOffset = Vector3.new(1.5, 0, 0) --- Edit X, Y, Z to how far you want the shiftlock to be from your screen.
       end
   else
       local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
       if humanoid then
           humanoid.CameraOffset = Vector3.new(0, 0, 0)
       end
   end
end

local function onCharacterRemoving()
   disconnectAllConnections()
end

local function onCharacterAdded()
   disconnectAllConnections()
   characterRemovingConn = LocalPlayer.CharacterRemoving:Connect(onCharacterRemoving)
end

local function onInputBegan(input, isProcessed)
   if not isProcessed and input.KeyCode == Enum.KeyCode.LeftShift then --- Edit "LeftShift" to any other Keybind for the shiftlock.
       toggleShiftLock()
   end
end

local function onRenderStepped()
   updateCameraOffset()
   if shiftLockEnabled then
       local player = LocalPlayer
       if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
           player.Character.HumanoidRootPart.CFrame = CFrame.new(player.Character.HumanoidRootPart.Position) * CFrame.Angles(0, math.atan2(-Camera.CFrame.lookVector.X, -Camera.CFrame.lookVector.Z), 0)
       end

       local centerScreen = Vector2.new(PlayerMouse.X, PlayerMouse.Y)
       local newMousePosition = centerScreen + lockOffset
       local humanoid = player.Character:FindFirstChildOfClass("Humanoid")
       if humanoid and humanoid:IsDescendantOf(game.Workspace) then
           humanoid.CameraOffset = Vector3.new(1.5, 0, 0)
       end
   end
end

local function onInputChanged(input)
   if shiftLockEnabled then
       if input.UserInputType == Enum.UserInputType.MouseMovement then
           local centerScreen = Vector2.new(PlayerMouse.X, PlayerMouse.Y)
           local newMousePosition = centerScreen + lockOffset
       end
   end
end

characterAddedConn = LocalPlayer.CharacterAdded:Connect(onCharacterAdded)
UserInputService.InputBegan:Connect(onInputBegan)
RunService.Heartbeat:Connect(updateCameraOffset)
RunService.RenderStepped:Connect(onRenderStepped)
UserInputService.InputChanged:Connect(onInputChanged)

Features & Information

Its kinda buggy but it works :)
#universal#shift lock#shift#lock

Community Comments (1)

Rase_584Rase_584Feb 13, 2026

Chat gpt?

More Scripts for Universal Scripts