--// Visual Circle + Legit Camera-Assist Lock + MultiTargeting (No ESP)
--// LocalScript
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Camera = [Link]
local LocalPlayer = [Link]
--========================================================
-- SETTINGS
--========================================================
local SETTINGS = {
CircleRadius = 360,
CircleThickness = 1.8,
CircleColor = [Link](255,255,255),
CircleFillTransparency = 0.86,
CircleOutlineColor = [Link](255,255,255),
-- camera assist behaviour
CameraAssistEnabled = true,
CameraAssistSmoothness = 1, -- lower = faster rotation
CameraAssistKey = [Link].MouseButton2, -- right click
-- 👇 NEW SETTING
MultiTargeting = false, -- true = can switch between targets, false = lock to
first target until released
}
--========================================================
-- GUI • FULL CIRCLE WITH OUTER STROKE
--========================================================
local gui = [Link]("ScreenGui")
[Link] = "VisualCircleGUI"
[Link] = true
[Link] = false
[Link] = LocalPlayer:WaitForChild("PlayerGui")
local circleFrame = [Link]("Frame")
[Link] = [Link](0.5,0.5)
[Link] =
[Link]([Link]*2,[Link]*2)
circleFrame.BackgroundColor3 = [Link]
[Link] = [Link]
[Link] = 0
[Link] = gui
local corner = [Link]("UICorner")
[Link] = [Link](1,0)
[Link] = circleFrame
local stroke = [Link]("UIStroke")
[Link] = [Link]
[Link] = [Link]
[Link] = circleFrame
local mousePos = [Link](0,0)
[Link]:Connect(function()
local m = UserInputService:GetMouseLocation()
mousePos = [Link](m.X,m.Y)
[Link] = [Link](mousePos.X,mousePos.Y)
end)
--========================================================
-- CAMERA-ASSIST SYSTEM
--========================================================
local holding = false
local lockedTarget = nil -- 👈 store locked target when MultiTargeting = false
local function getClosestTargetInCircle()
local best, bestDist
for _,plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and [Link] and
[Link]:FindFirstChild("HumanoidRootPart") then
local hrp = [Link]
local screenPos, onScreen =
Camera:WorldToViewportPoint([Link])
if onScreen then
local dist = ([Link](screenPos.X,screenPos.Y) -
mousePos).Magnitude
if dist <= [Link] then
if not best or dist < bestDist then
best, bestDist = plr, dist
end
end
end
end
end
return best
end
[Link]:Connect(function(input, gp)
if gp then return end
if not [Link] then return end
if [Link] == [Link] or [Link] ==
[Link] then
holding = true
lockedTarget = nil
end
end)
[Link]:Connect(function(input, gp)
if [Link] == [Link] or [Link] ==
[Link] then
holding = false
lockedTarget = nil
end
end)
[Link]:Connect(function(dt)
if holding then
local target
if [Link] then
-- ✅ dynamic target switching
target = getClosestTargetInCircle()
else
-- ✅ lock to the first target until aim released
if not lockedTarget then
lockedTarget = getClosestTargetInCircle()
end
target = lockedTarget
end
if target and [Link] and
[Link]:FindFirstChild("HumanoidRootPart") then
local hrp = [Link]
local camPos = [Link]
local desiredCF = [Link](camPos, [Link])
[Link] = [Link]:Lerp(desiredCF,
[Link])
end
end
end)