
Key Required

-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local CurrentCamera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer
-- CONFIG
local AimPartName = "Head"
local AimSpeed = 0.2
local FOVRadius = 150
-- NEW FEATURES (toggle here)
local StickyAim = true -- when true: lock on a target until aimbot toggled off or target invalid
local NoSleep = true -- when true: use Heartbeat loop to be less affected by yields/sleep
-- Control mode: false = Toggle mode (press to switch), true = Hold mode (hold key to aim)
local HoldMode = false
-- State
local mousePos = Vector2.new(CurrentCamera.ViewportSize.X/2, CurrentCamera.ViewportSize.Y/2)
local aimbotActive = false
local currentTarget = nil
-- Binding state (default bind = E)
local aimbotKeyInputType = Enum.UserInputType.Keyboard
local aimbotKeyCode = Enum.KeyCode.E
local settingKey = false
-- Helper: screen position of a part
local function GetScreenPos(part)
local ok, pos, onScreen = pcall(function() return CurrentCamera:WorldToViewportPoint(part.Position) end)
if ok and pos and onScreen then
return Vector2.new(pos.X, pos.Y)
end
return nil
end
-- Closest target within FOV (relative to mouse)
local function GetClosestTarget()
local closest = nil
local shortest = FOVRadius
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local part = player.Character:FindFirstChild(AimPartName)
if part and part:IsA("BasePart") then
local pos = GetScreenPos(part)
if pos then
local dist = (pos - mousePos).Magnitude
if dist <= FOVRadius and dist < shortest then
shortest = dist
closest = part
end
end
end
end
end
return closest
end
-- GUI Setup (draggable bind button + status + mode toggle)
local screenGui = Instance.new("ScreenGui")
screenGui.ResetOnSpawn = false
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local bindButton = Instance.new("TextButton")
bindButton.Size = UDim2.new(0,170,0,40)
bindButton.Position = UDim2.new(0,20,0,20)
bindButton.Text = "Bind: E | Aimbot: OFF"
bindButton.TextColor3 = Color3.new(1,1,1)
bindButton.BackgroundColor3 = Color3.fromRGB(50,50,50)
bindButton.AutoButtonColor = false
bindButton.Parent = screenGui
local modeButton = Instance.new("TextButton")
modeButton.Size = UDim2.new(0,120,0,30)
modeButton.Position = UDim2.new(0,20,0,70)
modeButton.Text = "Mode: Toggle"
modeButton.TextColor3 = Color3.new(1,1,1)
modeButton.BackgroundColor3 = Color3.fromRGB(60,60,60)
modeButton.AutoButtonColor = false
modeButton.Parent = screenGui
-- Draggable logic for bind button
do
local dragging = false
local dragOffset = Vector2.new(0,0)
bindButton.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
local mouseLoc = UserInputService:GetMouseLocation()
dragOffset = Vector2.new(mouseLoc.X, mouseLoc.Y) - Vector2.new(bindButton.AbsolutePosition.X, bindButton.AbsolutePosition.Y)
end
end)
bindButton.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local mouseLoc = UserInputService:GetMouseLocation()
bindButton.Position = UDim2.new(0, math.clamp(mouseLoc.X - dragOffset.X, 0, CurrentCamera.ViewportSize.X - bindButton.AbsoluteSize.X),
0, math.clamp(mouseLoc.Y - dragOffset.Y, 0, CurrentCamera.ViewportSize.Y - bindButton.AbsoluteSize.Y))
-- also move modeButton to keep layout relative to bindButton
modeButton.Position = UDim2.new(0, bindButton.AbsolutePosition.X, 0, bindButton.AbsolutePosition.Y + bindButton.AbsoluteSize.Y + 10)
end
end)
end
-- Clicking the bind button begins binding mode
bindButton.MouseButton1Click:Connect(function()
settingKey = true
bindButton.Text = "Press key or mouse..."
end)
-- Clicking the mode button toggles between Hold and Toggle mode
modeButton.MouseButton1Click:Connect(function()
HoldMode = not HoldMode
modeButton.Text = HoldMode and "Mode: Hold" or "Mode: Toggle"
-- when switching to Hold mode, ensure aimbot isn't stuck ON erroneously
if HoldMode == true and aimbotActive then
aimbotActive = false
end
UpdateBindButtonText()
end)
-- Drawing FOV Circle (Drawing API)
local fovDrawing = Drawing.new("Circle")
fovDrawing.Color = Color3.new(1,1,1)
fovDrawing.Radius = FOVRadius
fovDrawing.Thickness = 1.5
fovDrawing.Transparency = 1
fovDrawing.Filled = false
-- Update button text helper
function UpdateBindButtonText()
local keyText = ""
if aimbotKeyInputType == Enum.UserInputType.Keyboard then
keyText = (aimbotKeyCode and aimbotKeyCode.Name) or "None"
else
keyText = tostring(aimbotKeyInputType):gsub("Enum.UserInputType.","")
end
bindButton.Text = ("Bind: %s | Aimbot: %s"):format(keyText, aimbotActive and "ON" or "OFF")
modeButton.Text = HoldMode and "Mode: Hold" or "Mode: Toggle"
end
-- Input handling: binding and toggling/holding
UserInputService.InputBegan:Connect(function(input, processed)
-- binding mode: set the bound key/input
if settingKey then
settingKey = false
if input.UserInputType == Enum.UserInputType.Keyboard then
aimbotKeyInputType = Enum.UserInputType.Keyboard
aimbotKeyCode = input.KeyCode
else
aimbotKeyInputType = input.UserInputType
aimbotKeyCode = nil
end
UpdateBindButtonText()
return
end
-- If this input matches the bound input type -> handle according to mode
if input.UserInputType == aimbotKeyInputType then
if aimbotKeyInputType == Enum.UserInputType.Keyboard then
if aimbotKeyCode and input.KeyCode == aimbotKeyCode then
if HoldMode then
-- Hold mode: start aiming while key is down
aimbotActive = true
UpdateBindButtonText()
else
-- Toggle mode: flip state on press
aimbotActive = not aimbotActive
if not aimbotActive then currentTarget = nil end
UpdateBindButtonText()
end
end
else
-- Non-keyboard input types (mouse buttons, gamepad buttons, etc.)
-- For these we treat the whole input type as the binding. Use HoldMode similarly.
if HoldMode then
aimbotActive = true
UpdateBindButtonText()
else
aimbotActive = not aimbotActive
if not aimbotActive then currentTarget = nil end
UpdateBindButtonText()
end
end
end
end)
-- Handle InputEnded for Hold mode to stop aiming when key/button is released
UserInputService.InputEnded:Connect(function(input, processed)
if HoldMode then
if input.UserInputType == aimbotKeyInputType then
if aimbotKeyInputType == Enum.UserInputType.Keyboard then
if aimbotKeyCode and input.KeyCode == aimbotKeyCode then
aimbotActive = false
currentTarget = nil
UpdateBindButtonText()
end
else
-- Non-keyboard input type ended (e.g., mouse button released)
aimbotActive = false
currentTarget = nil
UpdateBindButtonText()
end
end
end
end)
-- Update mouse position each frame (used for FOV and aiming)
local function UpdateMousePos()
local mouseLocation = UserInputService:GetMouseLocation()
mousePos = Vector2.new(mouseLocation.X, mouseLocation.Y)
end
-- Main aimbot update function
local function AimbotStep()
UpdateMousePos()
fovDrawing.Position = mousePos
fovDrawing.Radius = FOVRadius
-- If StickyAim on AND we already have a locked target that is still valid, keep it
if StickyAim and currentTarget and currentTarget.Parent and GetScreenPos(currentTarget) then
-- continue tracking currentTarget
local targetPos = GetScreenPos(currentTarget)
if targetPos then
local delta = (targetPos - mousePos) * AimSpeed
if mousemoverel then pcall(mousemoverel, delta.X, delta.Y) end
return
else
currentTarget = nil -- lost target
end
end
-- If not sticky or no current target, and aimbot active -> pick closest inside FOV
if aimbotActive then
-- find closest
local chosen = GetClosestTarget()
if chosen then
currentTarget = chosen
local targetPos = GetScreenPos(currentTarget)
if targetPos then
local delta = (targetPos - mousePos) * AimSpeed
if mousemoverel then pcall(mousemoverel, delta.X, delta.Y) end
else
currentTarget = nil
end
else
-- no one in FOV
if not StickyAim then currentTarget = nil end
end
else
-- aimbot not active -> clear currentTarget
currentTarget = nil
end
end
-- Choose loop type based on NoSleep
if NoSleep then
RunService.Heartbeat:Connect(AimbotStep)
else
RunService.RenderStepped:Connect(AimbotStep)
end
-- initial UI text
UpdateBindButtonText()No comments yet for this script.


