WAWALOCK CAMLOCK SCRIPT BETTER THAN Baconlock
Key RequiredUniversal

WAWALOCK CAMLOCK SCRIPT BETTER THAN Baconlock

Universal Scriptmikhailwawamikhailwawa 2.7K views 942 executesUpdated Sep 18, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•177 lines (6650 chars)
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

print("Aimlock script started")

if not UserInputService.TouchEnabled then
    print("Not a mobile device, exiting")
    return
end

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "AimlockGui"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
print("ScreenGui created")

local Frame = Instance.new("Frame")
Frame.Size = UDim2.new(0.2, 0, 0.05, 0)
Frame.Position = UDim2.new(0.4, 0, 0.3, 0) -- Higher on screen (30% down)
Frame.BackgroundColor3 = Color3.new(0, 0, 0)
Frame.BackgroundTransparency = 0.5
Frame.BorderSizePixel = 0
Frame.Parent = ScreenGui
print("Frame created")

local UIGradient = Instance.new("UIGradient")
UIGradient.Color = ColorSequence.new{
    ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 255)),
    ColorSequenceKeypoint.new(0.5, Color3.fromRGB(0, 255, 255)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
UIGradient.Rotation = 45
UIGradient.Parent = Frame

local Button = Instance.new("TextButton")
Button.Size = UDim2.new(1, 0, 1, 0)
Button.BackgroundTransparency = 1
Button.Text = "Aimlock"
Button.TextSize = 18
Button.TextColor3 = Color3.new(1, 1, 1)
Button.Font = Enum.Font.Code
Button.Parent = Frame
print("Button created")

spawn(function()
    while true do
        for hue = 0, 1, 0.01 do
            Button.TextColor3 = Color3.fromHSV(hue, 1, 1)
            wait(0.01)
        end
    end
end)

local selectedTarget = nil -- Stores target Model (player or NPC)
local locked = false
local highlight = Instance.new("Highlight")
highlight.FillColor = Color3.fromRGB(255, 0, 0)
highlight.FillTransparency = 0.5
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.OutlineTransparency = 0
local cameraDistance = 10 -- Distance behind player
local cameraUpOffset = 2 -- Upward offset (studs) for shiftlock
local cameraRightOffset = 1 -- Rightward offset (studs) for shiftlock

local dragging = false
local dragStart = nil
local startPos = nil

UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if input.UserInputType == Enum.UserInputType.Touch then
        local pos = input.Position
        local guiPos = Frame.AbsolutePosition
        local guiSize = Frame.AbsoluteSize
        if pos.X >= guiPos.X and pos.X <= guiPos.X + guiSize.X and pos.Y >= guiPos.Y and pos.Y <= guiPos.Y + guiSize.Y then
            dragging = true
            dragStart = pos
            startPos = Frame.Position
            print("Dragging started")
        else
            
            local ray = Camera:ScreenPointToRay(pos.X, pos.Y)
            local params = RaycastParams.new()
            params.FilterDescendantsInstances = {LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()}
            params.FilterType = Enum.RaycastFilterType.Exclude
            local result = workspace:Raycast(ray.Origin, ray.Direction * 1000, params)
            if result and result.Instance then
                local char = result.Instance:FindFirstAncestorOfClass("Model")
                if char and char:FindFirstChild("Humanoid") and char:FindFirstChild("HumanoidRootPart") then
                    selectedTarget = char
                    local targetName = Players:GetPlayerFromCharacter(char) and Players:GetPlayerFromCharacter(char).Name or char.Name
                    Button.Text = "Target: " .. targetName
                    print("Selected target: " .. targetName)
                    wait(1)
                    Button.Text = "Aimlock"
                end
            end
        end
    end
end)

UserInputService.InputChanged:Connect(function(input, processed)
    if processed then return end
    if input.UserInputType == Enum.UserInputType.Touch and dragging then
        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
        )
        Frame.Position = newPos
    end
end)

UserInputService.InputEnded:Connect(function(input, processed)
    if input.UserInputType == Enum.UserInputType.Touch and dragging then
        dragging = false
        print("Dragging ended")
    end
end)

Button.Activated:Connect(function()
    if selectedTarget and selectedTarget:FindFirstChild("HumanoidRootPart") then
        locked = not locked
        print("Aimlock toggled: " .. tostring(locked))
        if locked then
            highlight.Parent = selectedTarget
            Camera.CameraType = Enum.CameraType.Scriptable
            print("Camera set to Scriptable")
        else
            highlight.Parent = nil
            Camera.CameraType = Enum.CameraType.Custom
            Camera.CameraSubject = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
            print("Camera reset to Custom")
        end
    else
        print("No valid target or HumanoidRootPart")
    end
end)

RunService.RenderStepped:Connect(function()
    if locked and selectedTarget and selectedTarget:FindFirstChild("HumanoidRootPart") and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
        local playerPos = LocalPlayer.Character.HumanoidRootPart.Position
        local targetPos = selectedTarget.HumanoidRootPart.Position
        
        local direction = (targetPos - playerPos).Unit
        
        local rightVector = direction:Cross(Vector3.new(0, 1, 0)).Unit
        
        local cameraPos = playerPos - (direction * cameraDistance) + Vector3.new(0, cameraUpOffset, 0) + (rightVector * cameraRightOffset)
        Camera.CFrame = CFrame.new(cameraPos, targetPos)
    end
end)

LocalPlayer.CharacterAdded:Connect(function()
    if locked then
        locked = false
        highlight.Parent = nil
        Camera.CameraType = Enum.CameraType.Custom
        Camera.CameraSubject = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
        print("Local player respawned, aimlock disabled")
    end
end)

RunService.Heartbeat:Connect(function()
    if locked and selectedTarget and not selectedTarget:FindFirstChild("HumanoidRootPart") then
        locked = false
        highlight.Parent = nil
        Camera.CameraType = Enum.CameraType.Custom
        Camera.CameraSubject = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid")
        print("Target despawned, aimlock disabled")
    end
end)

Features & Information

Click on someone first and then click the WAWALOCK button (made by wawa)
#Camlock#Universal

Community Comments (4)

JacksonShowcaserJacksonShowcaserOct 21, 2025

@mikhailwawa not good bro. Protect your script before people take it.

Replying to @JacksonShowcaser
mikhailwawamikhailwawaFeb 2, 2026

@JacksonShowcaser I'm fine thank you I actually want people to use this and remix it all they want it's open source for a reason

ky1oky1oOct 26, 2025

this script is fire

bobop123zxbobop123zxFeb 15, 2026

Please script for pvp

More Scripts for Universal Scripts