
KeylessUniversal

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "FakeShiftlockUI"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.Parent = player:WaitForChild("PlayerGui")
local button = Instance.new("TextButton")
button.Name = "ShiftlockToggle"
button.Size = UDim2.new(0, 130, 0, 50)
button.Position = UDim2.new(0.5, -65, 1, -90)
button.AnchorPoint = Vector2.new(0.5, 1)
button.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
button.TextColor3 = Color3.fromRGB(255, 255, 255)
button.Font = Enum.Font.GothamBold
button.TextSize = 17
button.Text = "Shiftlock: OFF"
button.Parent = screenGui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 14)
corner.Parent = button
local stroke = Instance.new("UIStroke")
stroke.Thickness = 2
stroke.Color = Color3.fromRGB(80, 80, 80)
stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
stroke.Parent = button
-- crosshair
local crosshair = Instance.new("Frame")
crosshair.Name = "Crosshair"
crosshair.Size = UDim2.new(0, 6, 0, 6)
crosshair.Position = UDim2.new(0.5, 0, 0.5, 0)
crosshair.AnchorPoint = Vector2.new(0.5, 0.5)
crosshair.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
crosshair.BackgroundTransparency = 0
crosshair.Visible = false
crosshair.ZIndex = 10
crosshair.Parent = screenGui
local crossCorner = Instance.new("UICorner")
crossCorner.CornerRadius = UDim.new(1, 0)
crossCorner.Parent = crosshair
-- draggable with tween smoothing
local dragging, dragInput, dragStart, startPos
local function updateDrag(input)
local delta = input.Position - dragStart
local newPos = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
TweenService:Create(button, TweenInfo.new(0.12, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = newPos}):Play()
end
button.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = button.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
button.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
updateDrag(input)
end
end)
-- shiftlock system
local shiftlockEnabled = false
local connection
local function setShiftlock(state)
shiftlockEnabled = state
-- always clear old connection
if connection then
connection:Disconnect()
connection = nil
end
if shiftlockEnabled then
button.Text = "Shiftlock: ON"
crosshair.Visible = true
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
connection = RunService.RenderStepped:Connect(function()
local character = player.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
if root then
local camCF = camera.CFrame
root.CFrame = CFrame.new(root.Position, Vector3.new(
camCF.LookVector.X + root.Position.X,
root.Position.Y,
camCF.LookVector.Z + root.Position.Z
))
end
end)
else
button.Text = "Shiftlock: OFF"
crosshair.Visible = false
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
button.MouseButton1Click:Connect(function()
setShiftlock(not shiftlockEnabled)
end)
UserInputService.InputBegan:Connect(function(input, gpe)
if gpe then return end
if input.KeyCode == Enum.KeyCode.LeftShift then
setShiftlock(not shiftlockEnabled)
end
end)
-- respawn safety
player.CharacterAdded:Connect(function()
if connection then
connection:Disconnect()
connection = nil
end
if shiftlockEnabled then
task.wait(0.2)
setShiftlock(true)
else
crosshair.Visible = false
end
end)No comments yet for this script.



