local Players = game:GetService("Players") local RunService = game:GetService("RunService") local ContextActionService = game:GetService("ContextActionService") local UserInputService = game:GetService("UserInputService") local StarterGui = game:GetService("StarterGui") local player = Players.LocalPlayer local camera = workspace.CurrentCamera task.spawn(function() local userId = Players:GetUserIdFromNameAsync("namsobased") local thumbType = Enum.ThumbnailType.HeadShot local thumbSize = Enum.ThumbnailSize.Size420x420 local content = Players:GetUserThumbnailAsync(userId, thumbType, thumbSize) StarterGui:SetCore("SendNotification", { Title = "namsobased", Text = "✅ Shiftlock!", Icon = content, Duration = 4 }) end) local ShiftlockStarterGui local ImageButton local character local humanoid local root local MAX_LENGTH = 900000 local ENABLED_OFFSET = CFrame.new(1.5, 0.75, 0) local DISABLED_OFFSET = CFrame.new(-1.5, 0, 0) local active = false local rootPos = Vector3.new(0,0,0) local states = { OFF = "rbxasset://textures/ui/mouseLock_off@2x.png", ON = "rbxasset://textures/ui/mouseLock_on@2x.png" } local function UpdatePos() if character and humanoid and humanoid.RootPart then rootPos = humanoid.RootPart.Position end end local function UpdateImage(state) ImageButton.Image = states[state] end local function UpdateAutoRotate(bool) if humanoid then humanoid.AutoRotate = bool end end local function GetUpdatedCameraCFrame() if camera then return CFrame.new( rootPos, Vector3.new( camera.CFrame.LookVector.X * MAX_LENGTH, rootPos.Y, camera.CFrame.LookVector.Z * MAX_LENGTH ) ) end end local function EnableShiftlock() UpdatePos() UpdateAutoRotate(false) UpdateImage("ON") if humanoid and humanoid.RootPart then humanoid.RootPart.CFrame = GetUpdatedCameraCFrame() end if camera then camera.CFrame = camera.CFrame * ENABLED_OFFSET end end local function DisableShiftlock() UpdatePos() UpdateAutoRotate(true) UpdateImage("OFF") if camera then camera.CFrame = camera.CFrame * DISABLED_OFFSET end pcall(function() active:Disconnect() active = nil end) end local function ToggleShiftlock() if not active then active = RunService.RenderStepped:Connect(function() EnableShiftlock() end) else DisableShiftlock() end end local function createGUI() if player:FindFirstChild("PlayerGui") and player.PlayerGui:FindFirstChild("Shiftlock (StarterGui)") then player.PlayerGui["Shiftlock (StarterGui)"]:Destroy() end ShiftlockStarterGui = Instance.new("ScreenGui") ShiftlockStarterGui.Name = "Shiftlock (StarterGui)" ShiftlockStarterGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ShiftlockStarterGui.ResetOnSpawn = false ShiftlockStarterGui.Parent = player:WaitForChild("PlayerGui") ImageButton = Instance.new("ImageButton") ImageButton.Parent = ShiftlockStarterGui ImageButton.Active = true ImageButton.Draggable = true ImageButton.BackgroundTransparency = 1 ImageButton.Position = UDim2.new(0.921914339, 0, 0.552375436, 0) ImageButton.Size = UDim2.new(0.0636147112, 0, 0.0661305636, 0) ImageButton.SizeConstraint = Enum.SizeConstraint.RelativeXX ImageButton.Image = "http://www.roblox.com/asset/?id=182223762" ImageButton.Visible = UserInputService.TouchEnabled UpdateImage("OFF") ImageButton.MouseButton1Click:Connect(ToggleShiftlock) ContextActionService:BindAction("ShiftLOCK", ToggleShiftlock, false, "On") ContextActionService:SetPosition("ShiftLOCK", UDim2.new(0.8, 0, 0.8, 0)) end local function onCharacterAdded(char) character = char humanoid = character:WaitForChild("Humanoid") root = humanoid.RootPart task.wait(0.05) createGUI() end if player.Character then onCharacterAdded(player.Character) end player.CharacterAdded:Connect(onCharacterAdded)