Auto Lock On (KEYLESS)
Key RequiredUniversal

Auto Lock On (KEYLESS)

Universal Scriptcamledajcamledaj 74 views 4 executesUpdated Oct 7, 2026
Unrated
00
Lua Script•398 lines (11129 chars)
--[[
	Lock-On  —  LocalScript for YOUR game
	Place in: StarterPlayer → StarterPlayerScripts
]]

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local GuiService = game:GetService("GuiService")

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera

local BIND_NAME = "LockOnCamera"
local MAX_RANGE = 400
local CAMERA_DISTANCE = 10
local CAMERA_HEIGHT = 3.2
local smoothness = 0.35

pcall(function()
	RunService:UnbindFromRenderStep(BIND_NAME)
end)
local oldGui = player:FindFirstChild("PlayerGui") and player.PlayerGui:FindFirstChild("LockOnGui")
if oldGui then
	oldGui:Destroy()
end

local humanoidRootPart = nil
local humanoid = nil
local savedAutoRotate = true

local function onCharacterAdded(character)
	humanoidRootPart = character:WaitForChild("HumanoidRootPart", 10)
	humanoid = character:WaitForChild("Humanoid", 10)
	if humanoid then
		savedAutoRotate = humanoid.AutoRotate
	end
end

if player.Character then
	task.spawn(onCharacterAdded, player.Character)
end
player.CharacterAdded:Connect(onCharacterAdded)

local playerGui = player:WaitForChild("PlayerGui")

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "LockOnGui"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.DisplayOrder = 100
screenGui.Parent = playerGui

local main = Instance.new("Frame")
main.Name = "Main"
main.Size = UDim2.fromOffset(228, 118)
main.Position = UDim2.new(0.5, -114, 0.82, 0)
main.BackgroundColor3 = Color3.fromRGB(16, 16, 20)
main.BorderSizePixel = 0
main.Active = true
main.Parent = screenGui

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

local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(48, 48, 58)
stroke.Thickness = 1
stroke.Parent = main

local pad = Instance.new("UIPadding")
pad.PaddingTop = UDim.new(0, 14)
pad.PaddingBottom = UDim.new(0, 14)
pad.PaddingLeft = UDim.new(0, 16)
pad.PaddingRight = UDim.new(0, 16)
pad.Parent = main

local toggleRow = Instance.new("Frame")
toggleRow.BackgroundTransparency = 1
toggleRow.Size = UDim2.new(1, 0, 0, 36)
toggleRow.Parent = main

local track = Instance.new("TextButton")
track.Name = "Track"
track.AutoButtonColor = false
track.Text = ""
track.Size = UDim2.fromOffset(64, 32)
track.Position = UDim2.fromOffset(0, 2)
track.BackgroundColor3 = Color3.fromRGB(40, 40, 48)
track.BorderSizePixel = 0
track.Parent = toggleRow

local trackCorner = Instance.new("UICorner")
trackCorner.CornerRadius = UDim.new(1, 0)
trackCorner.Parent = track

local knob = Instance.new("Frame")
knob.Name = "Knob"
knob.Size = UDim2.fromOffset(26, 26)
knob.Position = UDim2.fromOffset(3, 3)
knob.BackgroundColor3 = Color3.fromRGB(255, 75, 75)
knob.BorderSizePixel = 0
knob.Active = false
knob.Parent = track

local knobCorner = Instance.new("UICorner")
knobCorner.CornerRadius = UDim.new(1, 0)
knobCorner.Parent = knob

local title = Instance.new("TextLabel")
title.BackgroundTransparency = 1
title.Size = UDim2.new(1, -76, 1, 0)
title.Position = UDim2.fromOffset(76, 0)
title.Text = "LOCK  •  OFF"
title.TextColor3 = Color3.fromRGB(215, 215, 225)
title.TextSize = 16
title.Font = Enum.Font.GothamMedium
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = toggleRow

local smoothRow = Instance.new("Frame")
smoothRow.BackgroundTransparency = 1
smoothRow.Size = UDim2.new(1, 0, 0, 44)
smoothRow.Position = UDim2.fromOffset(0, 48)
smoothRow.Parent = main

local smoothLabel = Instance.new("TextLabel")
smoothLabel.BackgroundTransparency = 1
smoothLabel.Size = UDim2.new(1, 0, 0, 16)
smoothLabel.Text = "SMOOTHNESS"
smoothLabel.TextColor3 = Color3.fromRGB(140, 140, 155)
smoothLabel.TextSize = 11
smoothLabel.Font = Enum.Font.GothamBold
smoothLabel.TextXAlignment = Enum.TextXAlignment.Left
smoothLabel.Parent = smoothRow

local bar = Instance.new("TextButton")
bar.Name = "SmoothBar"
bar.AutoButtonColor = false
bar.Text = ""
bar.Size = UDim2.new(1, 0, 0, 18)
bar.Position = UDim2.fromOffset(0, 22)
bar.BackgroundColor3 = Color3.fromRGB(36, 36, 44)
bar.BorderSizePixel = 0
bar.Parent = smoothRow

local barCorner = Instance.new("UICorner")
barCorner.CornerRadius = UDim.new(1, 0)
barCorner.Parent = bar

local fill = Instance.new("Frame")
fill.Name = "Fill"
fill.Size = UDim2.new(smoothness, 0, 1, 0)
fill.BackgroundColor3 = Color3.fromRGB(90, 170, 255)
fill.BorderSizePixel = 0
fill.Parent = bar

local fillCorner = Instance.new("UICorner")
fillCorner.CornerRadius = UDim.new(1, 0)
fillCorner.Parent = fill

local handle = Instance.new("Frame")
handle.Name = "Handle"
handle.AnchorPoint = Vector2.new(0.5, 0.5)
handle.Size = UDim2.fromOffset(18, 18)
handle.Position = UDim2.new(smoothness, 0, 0.5, 0)
handle.BackgroundColor3 = Color3.fromRGB(240, 240, 250)
handle.BorderSizePixel = 0
handle.ZIndex = 2
handle.Parent = bar

local handleCorner = Instance.new("UICorner")
handleCorner.CornerRadius = UDim.new(1, 0)
handleCorner.Parent = handle

local draggingWindow = false
local dragStart = nil
local startPos = nil

main.InputBegan:Connect(function(input)
	if input.UserInputType ~= Enum.UserInputType.MouseButton1 and input.UserInputType ~= Enum.UserInputType.Touch then
		return
	end
	local pos = input.Position
	local inset = GuiService:GetGuiInset()
	local abs = Vector2.new(pos.X, pos.Y) - inset
	if track.AbsolutePosition.X <= abs.X and abs.X <= track.AbsolutePosition.X + track.AbsoluteSize.X
		and track.AbsolutePosition.Y <= abs.Y and abs.Y <= track.AbsolutePosition.Y + track.AbsoluteSize.Y then
		return
	end
	if bar.AbsolutePosition.X <= abs.X and abs.X <= bar.AbsolutePosition.X + bar.AbsoluteSize.X
		and bar.AbsolutePosition.Y <= abs.Y and abs.Y <= bar.AbsolutePosition.Y + bar.AbsoluteSize.Y then
		return
	end
	draggingWindow = true
	dragStart = pos
	startPos = main.Position
end)

UserInputService.InputChanged:Connect(function(input)
	if not draggingWindow then
		return
	end
	if input.UserInputType ~= Enum.UserInputType.MouseMovement and input.UserInputType ~= Enum.UserInputType.Touch then
		return
	end
	if not dragStart or not startPos then
		return
	end
	local delta = input.Position - dragStart
	main.Position = UDim2.new(
		startPos.X.Scale,
		startPos.X.Offset + delta.X,
		startPos.Y.Scale,
		startPos.Y.Offset + delta.Y
	)
end)

UserInputService.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		draggingWindow = false
	end
end)

local slidingSmooth = false

local function setSmoothFromX(x)
	local absX = bar.AbsolutePosition.X
	local width = math.max(bar.AbsoluteSize.X, 1)
	local t = math.clamp((x - absX) / width, 0, 1)
	smoothness = t
	fill.Size = UDim2.new(t, 0, 1, 0)
	handle.Position = UDim2.new(t, 0, 0.5, 0)
end

bar.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		slidingSmooth = true
		setSmoothFromX(input.Position.X)
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if not slidingSmooth then
		return
	end
	if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
		setSmoothFromX(input.Position.X)
	end
end)

UserInputService.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		slidingSmooth = false
	end
end)

local isOn = false
local tweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)

local function getNearestRoot()
	if not humanoidRootPart then
		return nil
	end
	local origin = humanoidRootPart.Position
	local nearest = nil
	local shortest = MAX_RANGE

	for _, other in Players:GetPlayers() do
		if other ~= player then
			local char = other.Character
			if char then
				local hum = char:FindFirstChildOfClass("Humanoid")
				local root = char:FindFirstChild("HumanoidRootPart")
				if hum and hum.Health > 0 and root then
					local dist = (origin - root.Position).Magnitude
					if dist < shortest then
						shortest = dist
						nearest = root
					end
				end
			end
		end
	end
	return nearest
end

local function setToggleVisual(on)
	if on then
		TweenService:Create(knob, tweenInfo, {
			Position = UDim2.fromOffset(35, 3),
			BackgroundColor3 = Color3.fromRGB(65, 230, 120),
		}):Play()
		TweenService:Create(track, tweenInfo, {
			BackgroundColor3 = Color3.fromRGB(28, 68, 45),
		}):Play()
		title.Text = "LOCK  •  ON"
		title.TextColor3 = Color3.fromRGB(100, 255, 150)
	else
		TweenService:Create(knob, tweenInfo, {
			Position = UDim2.fromOffset(3, 3),
			BackgroundColor3 = Color3.fromRGB(255, 75, 75),
		}):Play()
		TweenService:Create(track, tweenInfo, {
			BackgroundColor3 = Color3.fromRGB(40, 40, 48),
		}):Play()
		title.Text = "LOCK  •  OFF"
		title.TextColor3 = Color3.fromRGB(215, 215, 225)
	end
end

local function stopLock()
	pcall(function()
		RunService:UnbindFromRenderStep(BIND_NAME)
	end)
	UserInputService.MouseBehavior = Enum.MouseBehavior.Default
	UserInputService.MouseIconEnabled = true
	if humanoid then
		humanoid.AutoRotate = savedAutoRotate
	end
	camera.CameraType = Enum.CameraType.Custom
end

local function startLock()
	RunService:BindToRenderStep(BIND_NAME, Enum.RenderPriority.Camera.Value + 1, function(dt)
		if not humanoidRootPart or not humanoidRootPart.Parent then
			return
		end

		UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
		UserInputService.MouseIconEnabled = false
		camera.CameraType = Enum.CameraType.Scriptable

		if humanoid then
			humanoid.AutoRotate = false
		end

		local target = getNearestRoot()
		if not target then
			return
		end

		local rootPos = humanoidRootPart.Position
		local targetPos = target.Position
		local flat = Vector3.new(targetPos.X, rootPos.Y, targetPos.Z)
		local dir = flat - rootPos
		if dir.Magnitude < 0.05 then
			return
		end
		dir = dir.Unit

		local desiredCam = rootPos - dir * CAMERA_DISTANCE + Vector3.new(0, CAMERA_HEIGHT, 0)
		local desiredCFrame = CFrame.lookAt(desiredCam, targetPos)

		local speed = 2 + (1 - smoothness) * 22
		local alpha = 1 - math.exp(-speed * dt)
		camera.CFrame = camera.CFrame:Lerp(desiredCFrame, alpha)

		local face = CFrame.lookAt(rootPos, flat)
		humanoidRootPart.CFrame = CFrame.new(rootPos) * CFrame.Angles(0, select(2, face:ToEulerAnglesYXZ()), 0)
	end)
end

local function toggleLock()
	isOn = not isOn
	setToggleVisual(isOn)
	if isOn then
		startLock()
	else
		stopLock()
	end
end

track.MouseButton1Click:Connect(toggleLock)

UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if gameProcessed then
		return
	end
	if input.KeyCode == Enum.KeyCode.C then
		toggleLock()
	end
end)

player.CharacterRemoving:Connect(function()
	if isOn then
		stopLock()
		task.defer(function()
			if isOn then
				startLock()
			end
		end)
	end
end)
print("wassupp big dogzz ty for using the script, press c for the keybind ^^")

Features & Information

Basically an auto lock on with a smoothness bar (psst press C for a suprise)
#AutoLock

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts