M
Description
Aimbot Esp Team Check Wall Check lmk if their are any issues
GAMETribes 3v3 [update!]
UPDATEDOct 25, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6addb5e31ca28656b60fe3ac"))()
end)
end)
--[[rscripts:analytics:end]]
--=============================================================
-- AIMBOT + ESP • v9 (Players-service team check + wall check)
-- LocalScript / executor only
--=============================================================
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
--───────────────────────────────────────────────────────────
-- CONFIG
--───────────────────────────────────────────────────────────
local CONFIG = {
TargetPartPriority = { "Head", "UpperTorso", "Torso", "HumanoidRootPart" },
MinDistance = 1,
MaxDistance = 150,
FOV = 60,
AimSpeed = 0.2,
Enabled = true,
HoldToAim = true,
AimAtHead = true,
SnapOnAcquire = true,
TeamCheck = false,
WallCheck = false,
ShowFovCircle = true,
FovRadius = 50,
FovColor = Color3.fromRGB(0, 255, 133),
ToggleKey = Enum.KeyCode.K,
MenuKey = Enum.KeyCode.Home,
ESP = {
Enabled = false,
Box = true,
Name = true,
Distance = true,
Health = true,
Tracer = false,
Highlight = true,
WallCheck = false,
MaxDistance = 500,
BoxColor = Color3.fromRGB(0, 255, 133),
TextColor = Color3.fromRGB(255, 255, 255),
TracerOrigin = "Bottom",
},
}
local LocalPlayer = Players.LocalPlayer
local PlayerData = {}
local ESP_OBJ = {}
--───────────────────────────────────────────────────────────
-- Lifecycle state
--───────────────────────────────────────────────────────────
local destroyed = false
local minimized = false
local rightHeld = false
local CONNECTIONS = {}
local aimLookDir = nil
local aimTarget = nil
local lastAimName = nil
local function track(conn)
if destroyed then
pcall(function() conn:Disconnect() end)
return conn
end
table.insert(CONNECTIONS, conn)
return conn
end
--───────────────────────────────────────────────────────────
-- Drawing availability
--───────────────────────────────────────────────────────────
local HAS_DRAWING = pcall(function()
local d = Drawing.new("Line"); d:Remove()
end)
--───────────────────────────────────────────────────────────
-- Team attribute helpers
-- Flow: Players:GetPlayers → Player object → player.Character
-- (workspace[player.Name] fallback) → :GetAttribute("team")
-- Identity is guarded via UserId so we never compare a player to themself.
--───────────────────────────────────────────────────────────
local function getPlayerTeam(player)
if not player then return nil end
local char = player.Character
if not char or not char.Parent then
char = workspace:FindFirstChild(player.Name)
end
if not char then return nil end
return char:GetAttribute("team")
end
local function isSameTeam(name)
if not CONFIG.TeamCheck then return false end
local otherPlayer = Players:FindFirstChild(name)
if not otherPlayer then return false end
if otherPlayer.UserId == LocalPlayer.UserId then return false end
local myTeam = getPlayerTeam(LocalPlayer)
if myTeam == nil then return false end
local theirTeam = getPlayerTeam(otherPlayer)
if theirTeam == nil then return false end
return myTeam == theirTeam
end
--───────────────────────────────────────────────────────────
-- Wall / line-of-sight check
--───────────────────────────────────────────────────────────
local function hasLineOfSight(targetPart, targetModel)
local cam = workspace.CurrentCamera
if not cam then return false end
local camPos = cam.CFrame.Position
local dir = targetPart.Position - camPos
if dir.Magnitude < 0.1 then return true end
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
local exclude = {}
if LocalPlayer.Character then table.insert(exclude, LocalPlayer.Character) end
if targetModel and targetModel ~= LocalPlayer.Character then
table.insert(exclude, targetModel)
end
params.FilterDescendantsInstances = exclude
params.IgnoreWater = true
local result = workspace:Raycast(camPos, dir, params)
return result == nil
end
--───────────────────────────────────────────────────────────
-- Player sync
--───────────────────────────────────────────────────────────
local function getTargetParts(model)
local parts = {}
for _, name in ipairs(CONFIG.TargetPartPriority) do
local p = model:FindFirstChild(name)
if p and p:IsA("BasePart") then table.insert(parts, p) end
end
return parts
end
local function destroyESP(name)
local o = ESP_OBJ[name]
if not o then return end
for _, obj in pairs(o) do
if typeof(obj) == "Instance" then
pcall(function() obj:Destroy() end)
else
pcall(function() obj:Remove() end)
end
end
ESP_OBJ[name] = nil
end
local function syncPlayer(player)
if destroyed or player == LocalPlayer then return end
local char = player.Character
if char and char:FindFirstChildOfClass("Humanoid") then
PlayerData[player.Name] = {
Model = char,
Parts = getTargetParts(char),
Humanoid = char:FindFirstChildOfClass("Humanoid"),
}
else
PlayerData[player.Name] = nil
destroyESP(player.Name)
end
end
local function watchPlayer(player)
if destroyed or player == LocalPlayer then return end
syncPlayer(player)
track(player.CharacterAdded:Connect(function(char)
if destroyed then return end
char:WaitForChild("Humanoid", 5)
syncPlayer(player)
end))
track(player.CharacterRemoving:Connect(function()
if destroyed then return end
PlayerData[player.Name] = nil
destroyESP(player.Name)
end))
end
for _, p in ipairs(Players:GetPlayers()) do watchPlayer(p) end
track(Players.PlayerAdded:Connect(watchPlayer))
track(Players.PlayerRemoving:Connect(function(p)
PlayerData[p.Name] = nil
destroyESP(p.Name)
end))
--───────────────────────────────────────────────────────────
-- FOV circle
--───────────────────────────────────────────────────────────
local fovGui = Instance.new("ScreenGui")
fovGui.Name = "AimbotFovCircle"
fovGui.ResetOnSpawn = false
fovGui.IgnoreGuiInset = true
fovGui.DisplayOrder = -1
fovGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local fovFrame = Instance.new("Frame")
fovFrame.AnchorPoint = Vector2.new(0.5, 0.5)
fovFrame.Position = UDim2.fromScale(0.5, 0.5)
fovFrame.Size = UDim2.fromOffset(CONFIG.FovRadius*2, CONFIG.FovRadius*2)
fovFrame.BackgroundTransparency = 1
fovFrame.BorderSizePixel = 0
fovFrame.Visible = CONFIG.ShowFovCircle
fovFrame.Parent = fovGui
local fovCorner = Instance.new("UICorner")
fovCorner.CornerRadius = UDim.new(1, 0)
fovCorner.Parent = fovFrame
local fovStroke = Instance.new("UIStroke")
fovStroke.Color = CONFIG.FovColor
fovStroke.Thickness = 2
fovStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
fovStroke.Parent = fovFrame
--───────────────────────────────────────────────────────────
-- Projection
--───────────────────────────────────────────────────────────
local function w2s(worldPos)
local cam = workspace.CurrentCamera
if not cam then return nil end
local p, on = cam:WorldToViewportPoint(worldPos)
if not on then return nil end
return Vector2.new(p.X, p.Y), p.Z
end
local function newESPObjects()
return {
box = Drawing.new("Square"),
name = Drawing.new("Text"),
dist = Drawing.new("Text"),
hpBg = Drawing.new("Square"),
hpFill = Drawing.new("Square"),
tracer = Drawing.new("Line"),
highlight = nil,
}
end
local function hideESPObjects(o)
for _, k in ipairs({"box","name","dist","hpBg","hpFill","tracer"}) do
if o[k] then o[k].Visible = false end
end
end
--───────────────────────────────────────────────────────────
-- ESP update
--───────────────────────────────────────────────────────────
local function updateESP()
if destroyed or not HAS_DRAWING then return end
local cam = workspace.CurrentCamera
if not cam then return end
local viewport = cam.ViewportSize
local originBottom = Vector2.new(viewport.X * 0.5, viewport.Y)
local originMouse = UserInputService:GetMouseLocation()
for name, data in pairs(PlayerData) do
local o = ESP_OBJ[name]
if not o then o = newESPObjects(); ESP_OBJ[name] = o end
local model, hum = data.Model, data.Humanoid
local head = model and model:FindFirstChild("Head")
local hrp = model and model:FindFirstChild("HumanoidRootPart")
if not model or not model.Parent or not hum or hum.Health <= 0 or not head or not hrp then
hideESPObjects(o); if o.highlight then o.highlight.Enabled = false end
continue
end
if isSameTeam(name) then
hideESPObjects(o); if o.highlight then o.highlight.Enabled = false end
continue
end
local dist = (cam.CFrame.Position - hrp.Position).Magnitude
if dist > CONFIG.ESP.MaxDistance then
hideESPObjects(o); if o.highlight then o.highlight.Enabled = false end
continue
end
if CONFIG.ESP.WallCheck and not hasLineOfSight(head, model) then
hideESPObjects(o); if o.highlight then o.highlight.Enabled = false end
continue
end
local topWorld = head.Position + Vector3.new(0, 0.5, 0)
local botWorld = hrp.Position - Vector3.new(0, 2.75, 0)
local topS = w2s(topWorld)
local botS = w2s(botWorld)
if not topS or not botS then hideESPObjects(o); continue end
local height = math.abs(botS.Y - topS.Y)
if height < 4 then hideESPObjects(o); continue end
local width = height * 0.5
local cx = (topS.X + botS.X) * 0.5
local boxX = cx - width * 0.5
local boxY = math.min(topS.Y, botS.Y)
if CONFIG.ESP.Box then
o.box.Visible = true
o.box.Color = CONFIG.ESP.BoxColor
o.box.Thickness = 1
o.box.Filled = false
o.box.Position = Vector2.new(boxX, boxY)
o.box.Size = Vector2.new(width, height)
else o.box.Visible = false end
if CONFIG.ESP.Name then
o.name.Visible = true
o.name.Text = name
o.name.Color = CONFIG.ESP.TextColor
o.name.Size = 14
o.name.Center = true
o.name.Outline = true
o.name.OutlineColor = Color3.new(0, 0, 0)
o.name.Position = Vector2.new(cx, boxY - 18)
else o.name.Visible = false end
if CONFIG.ESP.Distance then
o.dist.Visible = true
o.dist.Text = string.format("[%d]", math.floor(dist))
o.dist.Color = CONFIG.ESP.TextColor
o.dist.Size = 12
o.dist.Center = true
o.dist.Outline = true
o.dist.OutlineColor = Color3.new(0, 0, 0)
o.dist.Position = Vector2.new(cx, boxY + height + 2)
else o.dist.Visible = false end
if CONFIG.ESP.Health then
local hpFrac = math.clamp(hum.Health / math.max(hum.MaxHealth, 1), 0, 1)
local barH, barW = height, 3
local barX, barY = boxX - barW - 4, boxY
o.hpBg.Visible = true
o.hpBg.Color = Color3.fromRGB(35, 35, 35)
o.hpBg.Filled = true
o.hpBg.Position = Vector2.new(barX, barY)
o.hpBg.Size = Vector2.new(barW, barH)
o.hpBg.Transparency = 0.35
local fillH = barH * hpFrac
o.hpFill.Visible = true
o.hpFill.Filled = true
o.hpFill.Color = Color3.fromRGB(
math.floor(255 * (1 - hpFrac)),
math.floor(255 * hpFrac),
60
)
o.hpFill.Position = Vector2.new(barX, barY + (barH - fillH))
o.hpFill.Size = Vector2.new(barW, fillH)
else
o.hpBg.Visible = false
o.hpFill.Visible = false
end
if CONFIG.ESP.Tracer then
local origin = CONFIG.ESP.TracerOrigin == "Mouse" and originMouse or originBottom
o.tracer.Visible = true
o.tracer.Color = CONFIG.ESP.BoxColor
o.tracer.Thickness = 1
o.tracer.From = origin
o.tracer.To = Vector2.new(cx, boxY + height)
else o.tracer.Visible = false end
if CONFIG.ESP.Highlight then
if not o.highlight or not o.highlight.Parent then
local hl = Instance.new("Highlight")
hl.Name = "AimbotESP_HL"
hl.Adornee = model
hl.FillColor = CONFIG.ESP.BoxColor
hl.FillTransparency = 0.75
hl.OutlineColor = CONFIG.ESP.BoxColor
hl.OutlineTransparency = 0
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Parent = workspace
o.highlight = hl
else
o.highlight.Enabled = true
o.highlight.Adornee = model
o.highlight.FillColor = CONFIG.ESP.BoxColor
o.highlight.OutlineColor = CONFIG.ESP.BoxColor
end
elseif o.highlight then
o.highlight.Enabled = false
end
end
end
local function hideAllESP()
for _, o in pairs(ESP_OBJ) do
hideESPObjects(o)
if o.highlight then o.highlight.Enabled = false end
end
end
--───────────────────────────────────────────────────────────
-- Target acquisition (sticky, team + wall aware)
--───────────────────────────────────────────────────────────
local function acquireTarget(cam)
local camPos = cam.CFrame.Position
local camLook = cam.CFrame.LookVector
local refLook = aimLookDir or camLook
-- Sticky: keep current target if still valid
if aimTarget then
local data = PlayerData[aimTarget.name]
local part = aimTarget.part
local valid = false
if data and data.Humanoid and data.Humanoid.Health > 0
and part and part.Parent and part:IsA("BasePart") then
local delta = part.Position - camPos
local cosTol = math.cos(math.rad(CONFIG.FOV * 1.5))
if delta.Magnitude > 0.01 and refLook:Dot(delta.Unit) >= cosTol then
if not isSameTeam(aimTarget.name) then
if not CONFIG.WallCheck or hasLineOfSight(part, data.Model) then
valid = true
end
end
end
end
if valid then return part, aimTarget.name end
aimTarget = nil
end
-- Fresh acquisition
local cosFov = math.cos(math.rad(CONFIG.FOV))
local bestPart, bestDist, bestName = nil, math.huge, nil
for name, d in pairs(PlayerData) do
local hum = d.Humanoid
local model = d.Model
if not (hum and hum.Health > 0 and model and model.Parent) then continue end
if isSameTeam(name) then continue end
local parts
if CONFIG.AimAtHead then
local head = model:FindFirstChild("Head")
parts = (head and head:IsA("BasePart") and head.Parent) and { head } or {}
else
parts = d.Parts
end
for _, part in ipairs(parts) do
if part and part.Parent and part:IsA("BasePart") then
local delta = part.Position - camPos
local dist = delta.Magnitude
if dist >= CONFIG.MinDistance and dist <= CONFIG.MaxDistance
and camLook:Dot(delta.Unit) >= cosFov
and dist < bestDist then
if not CONFIG.WallCheck or hasLineOfSight(part, model) then
bestDist, bestPart, bestName = dist, part, name
end
end
end
end
end
if bestPart then
aimTarget = { part = bestPart, name = bestName }
end
return bestPart, bestName
end
--───────────────────────────────────────────────────────────
-- Render loop
--───────────────────────────────────────────────────────────
RunService:BindToRenderStep("AimbotLogic", Enum.RenderPriority.Last.Value, function()
if destroyed then return end
local cam = workspace.CurrentCamera
if not cam then return end
local menuOpen = not minimized
if menuOpen then
if UserInputService.MouseBehavior ~= Enum.MouseBehavior.Default then
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
if not UserInputService.MouseIconEnabled then
UserInputService.MouseIconEnabled = true
end
end
local shouldAim = CONFIG.Enabled and not menuOpen
if CONFIG.HoldToAim and not rightHeld then shouldAim = false end
if shouldAim then
local part, name = acquireTarget(cam)
if part then
local camPos = cam.CFrame.Position
local targetDir = (part.Position - camPos).Unit
local isNew = (lastAimName ~= name)
if not aimLookDir then
aimLookDir = CONFIG.SnapOnAcquire and targetDir or cam.CFrame.LookVector
elseif CONFIG.SnapOnAcquire and isNew then
aimLookDir = targetDir
else
aimLookDir = aimLookDir:Lerp(targetDir, CONFIG.AimSpeed)
local m = aimLookDir.Magnitude
aimLookDir = m > 0.0001 and (aimLookDir / m) or targetDir
end
lastAimName = name
cam.CFrame = CFrame.lookAt(camPos, camPos + aimLookDir)
else
aimLookDir = nil
lastAimName = nil
end
else
aimLookDir = nil
lastAimName = nil
aimTarget = nil
end
if CONFIG.ESP.Enabled then updateESP() else hideAllESP() end
end)
--───────────────────────────────────────────────────────────
-- GUI theme + helpers
--───────────────────────────────────────────────────────────
local ACCENT = CONFIG.FovColor
local BG_DARK = Color3.fromRGB(18, 18, 22)
local BG_MID = Color3.fromRGB(26, 26, 32)
local BG_ROW = Color3.fromRGB(30, 30, 36)
local TRACK_COL = Color3.fromRGB(45, 45, 52)
local TEXT_COL = Color3.fromRGB(230, 230, 235)
local TEXT_DIM = Color3.fromRGB(150, 150, 160)
local function round(obj, r)
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, r or 6)
c.Parent = obj
return c
end
local function createSlider(parent, label, min, max, default, intOnly, onChange)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 42)
row.BackgroundTransparency = 1
row.Parent = parent
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -70, 0, 18)
lbl.BackgroundTransparency = 1
lbl.Text = label; lbl.TextColor3 = TEXT_COL
lbl.Font = Enum.Font.Gotham; lbl.TextSize = 12
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = row
local val = Instance.new("TextLabel")
val.Size = UDim2.new(0, 70, 0, 18)
val.Position = UDim2.new(1, -70, 0, 0)
val.BackgroundTransparency = 1
val.TextColor3 = ACCENT; val.Font = Enum.Font.GothamBold
val.TextSize = 12; val.TextXAlignment = Enum.TextXAlignment.Right
val.Parent = row
local trackF = Instance.new("Frame")
trackF.Size = UDim2.new(1, 0, 0, 6)
trackF.Position = UDim2.new(0, 0, 0, 24)
trackF.BackgroundColor3 = TRACK_COL
trackF.BorderSizePixel = 0; trackF.Parent = row
round(trackF, 3)
local fill = Instance.new("Frame")
fill.Size = UDim2.fromScale((default - min) / (max - min), 1)
fill.BackgroundColor3 = ACCENT; fill.BorderSizePixel = 0
fill.Parent = trackF; round(fill, 3)
local knob = Instance.new("Frame")
knob.Size = UDim2.fromOffset(12, 12)
knob.AnchorPoint = Vector2.new(0.5, 0.5)
knob.Position = UDim2.new(fill.Size.X.Scale, 0, 0.5, 0)
knob.BackgroundColor3 = Color3.new(1, 1, 1); knob.BorderSizePixel = 0
knob.Parent = trackF; round(knob, 6)
local function fmt(v) return intOnly and tostring(math.floor(v+0.5)) or string.format("%.2f", v) end
local function apply(v)
local a = math.clamp((v - min) / (max - min), 0, 1)
fill.Size = UDim2.fromScale(a, 1)
knob.Position = UDim2.new(a, 0, 0.5, 0)
val.Text = fmt(v); onChange(v)
end
val.Text = fmt(default)
local dragging = false
local function fromX(x)
local a = math.clamp((x - trackF.AbsolutePosition.X) / trackF.AbsoluteSize.X, 0, 1)
apply(min + (max - min) * a)
end
trackF.InputBegan:Connect(function(i)
if destroyed then return end
if i.UserInputType == Enum.UserInputType.MouseButton1
or i.UserInputType == Enum.UserInputType.Touch then
dragging = true; fromX(i.Position.X)
end
end)
track(UserInputService.InputChanged:Connect(function(i)
if destroyed or not dragging then return end
if i.UserInputType == Enum.UserInputType.MouseMovement
or i.UserInputType == Enum.UserInputType.Touch then
fromX(i.Position.X)
end
end))
track(UserInputService.InputEnded:Connect(function(i)
if destroyed then return end
if i.UserInputType == Enum.UserInputType.MouseButton1
or i.UserInputType == Enum.UserInputType.Touch then dragging = false end
end))
return row
end
local function createToggle(parent, label, default, onChange)
local row = Instance.new("TextButton")
row.Size = UDim2.new(1, 0, 0, 32)
row.BackgroundColor3 = BG_ROW; row.BorderSizePixel = 0
row.Text = ""; row.AutoButtonColor = false; row.Parent = parent
round(row, 6)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -60, 1, 0); lbl.Position = UDim2.new(0, 10, 0, 0)
lbl.BackgroundTransparency = 1; lbl.Text = label
lbl.TextColor3 = TEXT_COL; lbl.Font = Enum.Font.Gotham
lbl.TextSize = 12; lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = row
local pill = Instance.new("Frame")
pill.Size = UDim2.fromOffset(34, 18)
pill.Position = UDim2.new(1, -44, 0.5, -9)
pill.BackgroundColor3 = default and ACCENT or TRACK_COL
pill.BorderSizePixel = 0; pill.Parent = row; round(pill, 9)
local knob = Instance.new("Frame")
knob.Size = UDim2.fromOffset(14, 14)
knob.Position = default and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
knob.BackgroundColor3 = Color3.new(1, 1, 1); knob.BorderSizePixel = 0
knob.Parent = pill; round(knob, 7)
local state = default
row.MouseButton1Click:Connect(function()
if destroyed then return end
state = not state
pill.BackgroundColor3 = state and ACCENT or TRACK_COL
knob.Position = state and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
onChange(state)
end)
return row
end
--───────────────────────────────────────────────────────────
-- Main GUI
--───────────────────────────────────────────────────────────
local gui = Instance.new("ScreenGui")
gui.Name = "AimbotMenu"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.DisplayOrder = 10
gui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local PANEL_W, PANEL_H, TITLE_H = 320, 690, 38
local main = Instance.new("Frame")
main.AnchorPoint = Vector2.new(0.5, 0.5)
main.Position = UDim2.fromScale(0.5, 0.5)
main.Size = UDim2.fromOffset(PANEL_W, PANEL_H)
main.BackgroundColor3 = BG_DARK
main.BorderSizePixel = 0; main.Active = true; main.Parent = gui
round(main, 10)
local ms = Instance.new("UIStroke")
ms.Color = Color3.fromRGB(55, 55, 65); ms.Thickness = 1; ms.Parent = main
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, TITLE_H)
titleBar.BackgroundColor3 = BG_MID; titleBar.BorderSizePixel = 0
titleBar.Active = true; titleBar.Parent = main
round(titleBar, 10)
local tbMask = Instance.new("Frame")
tbMask.Size = UDim2.new(1, 0, 0, 12)
tbMask.Position = UDim2.new(0, 0, 1, -12)
tbMask.BackgroundColor3 = BG_MID; tbMask.BorderSizePixel = 0
tbMask.Parent = titleBar
local titleDot = Instance.new("Frame")
titleDot.Size = UDim2.fromOffset(8, 8)
titleDot.Position = UDim2.new(0, 14, 0.5, -4)
titleDot.BackgroundColor3 = ACCENT; titleDot.BorderSizePixel = 0
titleDot.Parent = titleBar; round(titleDot, 4)
local titleLbl = Instance.new("TextLabel")
titleLbl.Position = UDim2.new(0, 30, 0, 0)
titleLbl.Size = UDim2.new(1, -90, 1, 0)
titleLbl.BackgroundTransparency = 1
titleLbl.Text = "AIMBOT + ESP"; titleLbl.TextColor3 = TEXT_COL
titleLbl.Font = Enum.Font.GothamBold; titleLbl.TextSize = 13
titleLbl.TextXAlignment = Enum.TextXAlignment.Left
titleLbl.Parent = titleBar
local minBtn = Instance.new("TextButton")
minBtn.Size = UDim2.fromOffset(22, 22)
minBtn.Position = UDim2.new(1, -56, 0.5, -11)
minBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 58); minBtn.BorderSizePixel = 0
minBtn.Text = "–"; minBtn.TextColor3 = TEXT_COL
minBtn.Font = Enum.Font.GothamBold; minBtn.TextSize = 14
minBtn.AutoButtonColor = false; minBtn.Parent = titleBar
round(minBtn, 5)
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.fromOffset(22, 22)
closeBtn.Position = UDim2.new(1, -30, 0.5, -11)
closeBtn.BackgroundColor3 = Color3.fromRGB(60, 40, 45); closeBtn.BorderSizePixel = 0
closeBtn.Text = "×"; closeBtn.TextColor3 = Color3.fromRGB(255, 180, 180)
closeBtn.Font = Enum.Font.GothamBold; closeBtn.TextSize = 16
closeBtn.AutoButtonColor = false; closeBtn.Parent = titleBar
round(closeBtn, 5)
local content = Instance.new("ScrollingFrame")
content.Size = UDim2.new(1, -20, 1, -TITLE_H - 10)
content.Position = UDim2.new(0, 10, 0, TITLE_H + 5)
content.BackgroundTransparency = 1; content.BorderSizePixel = 0
content.ScrollBarThickness = 4
content.ScrollBarImageColor3 = Color3.fromRGB(80, 80, 90)
content.CanvasSize = UDim2.new(0, 0, 0, 0)
content.AutomaticCanvasSize = Enum.AutomaticSize.Y
content.Parent = main
local list = Instance.new("UIListLayout")
list.Padding = UDim.new(0, 6)
list.SortOrder = Enum.SortOrder.LayoutOrder
list.Parent = content
local ORDER = 0
local function nextOrder() ORDER = ORDER + 1; return ORDER end
local function sectionHeader(text)
local h = Instance.new("TextLabel")
h.Size = UDim2.new(1, 0, 0, 22)
h.BackgroundTransparency = 1
h.Text = text:upper()
h.TextColor3 = TEXT_DIM; h.Font = Enum.Font.GothamBold
h.TextSize = 10; h.TextXAlignment = Enum.TextXAlignment.Left
h.LayoutOrder = nextOrder(); h.Parent = content
return h
end
--────── AIMBOT ────────────────────────────────────────────
createToggle(content, "Aimbot Enabled", CONFIG.Enabled, function(v) CONFIG.Enabled = v end).LayoutOrder = nextOrder()
createToggle(content, "Hold Right Click to Aim", CONFIG.HoldToAim, function(v) CONFIG.HoldToAim = v end).LayoutOrder = nextOrder()
createToggle(content, "Aim at Head (exact)", CONFIG.AimAtHead, function(v) CONFIG.AimAtHead = v end).LayoutOrder = nextOrder()
createToggle(content, "Snap on Acquire", CONFIG.SnapOnAcquire, function(v) CONFIG.SnapOnAcquire = v end).LayoutOrder = nextOrder()
createToggle(content, "Team Check (attribute)", CONFIG.TeamCheck, function(v)
CONFIG.TeamCheck = v
if v then
local myTeam = getPlayerTeam(LocalPlayer)
print(("[TeamCheck] Local team = %s (%s)"):format(
tostring(myTeam),
myTeam and ("enemies are team " .. (myTeam == 1 and "2" or "1")) or "unknown"
))
end
end).LayoutOrder = nextOrder()
createToggle(content, "Wall Check (raycast)", CONFIG.WallCheck, function(v) CONFIG.WallCheck = v end).LayoutOrder = nextOrder()
createToggle(content, "Show FOV Circle", CONFIG.ShowFovCircle, function(v)
CONFIG.ShowFovCircle = v; fovFrame.Visible = v
end).LayoutOrder = nextOrder()
sectionHeader("Aim Tuning")
createSlider(content, "FOV (deg)", 10, 180, CONFIG.FOV, true, function(v) CONFIG.FOV = v end).LayoutOrder = nextOrder()
createSlider(content, "Aim Smoothing", 0.05, 1.0, CONFIG.AimSpeed, false, function(v) CONFIG.AimSpeed = v end).LayoutOrder = nextOrder()
createSlider(content, "Min Distance", 0, 100, CONFIG.MinDistance, true, function(v) CONFIG.MinDistance = v end).LayoutOrder = nextOrder()
createSlider(content, "Max Distance", 50, 500, CONFIG.MaxDistance, true, function(v) CONFIG.MaxDistance = v end).LayoutOrder = nextOrder()
createSlider(content, "FOV Circle Radius", 20, 200, CONFIG.FovRadius, true, function(v)
CONFIG.FovRadius = v; fovFrame.Size = UDim2.fromOffset(v*2, v*2)
end).LayoutOrder = nextOrder()
--────── ESP ───────────────────────────────────────────────
sectionHeader("ESP")
createToggle(content, "ESP Enabled", CONFIG.ESP.Enabled, function(v)
CONFIG.ESP.Enabled = v
if not v then hideAllESP() end
end).LayoutOrder = nextOrder()
createToggle(content, "Box", CONFIG.ESP.Box, function(v) CONFIG.ESP.Box = v end).LayoutOrder = nextOrder()
createToggle(content, "Name", CONFIG.ESP.Name, function(v) CONFIG.ESP.Name = v end).LayoutOrder = nextOrder()
createToggle(content, "Distance", CONFIG.ESP.Distance, function(v) CONFIG.ESP.Distance = v end).LayoutOrder = nextOrder()
createToggle(content, "Health Bar", CONFIG.ESP.Health, function(v) CONFIG.ESP.Health = v end).LayoutOrder = nextOrder()
createToggle(content, "Tracer", CONFIG.ESP.Tracer, function(v) CONFIG.ESP.Tracer = v end).LayoutOrder = nextOrder()
createToggle(content, "Highlight (through walls)", CONFIG.ESP.Highlight, function(v)
CONFIG.ESP.Highlight = v
if not v then
for _, o in pairs(ESP_OBJ) do
if o.highlight then o.highlight.Enabled = false end
end
end
end).LayoutOrder = nextOrder()
createToggle(content, "ESP Wall Check (hide behind walls)", CONFIG.ESP.WallCheck, function(v) CONFIG.ESP.WallCheck = v end).LayoutOrder = nextOrder()
createSlider(content, "ESP Max Distance", 50, 2000, CONFIG.ESP.MaxDistance, true, function(v)
CONFIG.ESP.MaxDistance = v
end).LayoutOrder = nextOrder()
createSlider(content, "ESP / FOV Hue", 0, 360, 160, true, function(v)
local c = Color3.fromHSV(v/360, 0.9, 1.0)
CONFIG.ESP.BoxColor = c
CONFIG.FovColor = c
fovStroke.Color = c
titleDot.BackgroundColor3 = c
end).LayoutOrder = nextOrder()
--───────────────────────────────────────────────────────────
-- Minimize helper
--───────────────────────────────────────────────────────────
local fullSize = UDim2.fromOffset(PANEL_W, PANEL_H)
local function setMinimized(v)
if destroyed then return end
minimized = v
content.Visible = not v
main.Size = v and UDim2.fromOffset(PANEL_W, TITLE_H) or fullSize
minBtn.Text = v and "+" or "–"
end
minBtn.MouseButton1Click:Connect(function()
if destroyed then return end
setMinimized(not minimized)
end)
--───────────────────────────────────────────────────────────
-- Terminate
--───────────────────────────────────────────────────────────
local function terminate()
if destroyed then return end
destroyed = true
pcall(function() RunService:UnbindFromRenderStep("AimbotLogic") end)
for _, c in ipairs(CONNECTIONS) do
pcall(function() c:Disconnect() end)
end
CONNECTIONS = {}
for _, o in pairs(ESP_OBJ) do
for k, obj in pairs(o) do
if typeof(obj) == "Instance" then
pcall(function() obj:Destroy() end)
else
pcall(function() obj:Remove() end)
end
end
end
ESP_OBJ = {}
for _, hl in ipairs(workspace:GetDescendants()) do
if hl:IsA("Highlight") and hl.Name == "AimbotESP_HL" then
pcall(function() hl:Destroy() end)
end
end
pcall(function() fovGui:Destroy() end)
pcall(function() gui:Destroy() end)
PlayerData = {}
aimLookDir = nil
aimTarget = nil
print("[Aimbot+ESP] Terminated.")
end
closeBtn.MouseButton1Click:Connect(terminate)
--───────────────────────────────────────────────────────────
-- Dragging
--───────────────────────────────────────────────────────────
local dragStart, startPos
titleBar.InputBegan:Connect(function(i)
if destroyed then return end
if i.UserInputType == Enum.UserInputType.MouseButton1
or i.UserInputType == Enum.UserInputType.Touch then
dragStart = i.Position; startPos = main.Position
end
end)
track(UserInputService.InputChanged:Connect(function(i)
if destroyed or not dragStart then return end
if i.UserInputType == Enum.UserInputType.MouseMovement
or i.UserInputType == Enum.UserInputType.Touch then
local d = i.Position - dragStart
main.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + d.X,
startPos.Y.Scale, startPos.Y.Offset + d.Y)
end
end))
track(UserInputService.InputEnded:Connect(function(i)
if destroyed then return end
if i.UserInputType == Enum.UserInputType.MouseButton1
or i.UserInputType == Enum.UserInputType.Touch then dragStart = nil end
end))
--───────────────────────────────────────────────────────────
-- Hotkeys + right-click tracking
--───────────────────────────────────────────────────────────
track(UserInputService.InputBegan:Connect(function(i, processed)
if destroyed then return end
if i.UserInputType == Enum.UserInputType.MouseButton2 then
rightHeld = true
end
if processed then return end
if i.KeyCode == CONFIG.ToggleKey then
CONFIG.Enabled = not CONFIG.Enabled
print(("[Aimbot] %s"):format(CONFIG.Enabled and "Enabled" or "Disabled"))
elseif i.KeyCode == Enum.KeyCode.L then
CONFIG.ESP.Enabled = not CONFIG.ESP.Enabled
if not CONFIG.ESP.Enabled then hideAllESP() end
print(("[ESP] %s"):format(CONFIG.ESP.Enabled and "Enabled" or "Disabled"))
elseif i.KeyCode == CONFIG.MenuKey then
setMinimized(not minimized)
print(("[Menu] %s"):format(minimized and "Minimized" or "Restored"))
end
end))
track(UserInputService.InputEnded:Connect(function(i)
if destroyed then return end
if i.UserInputType == Enum.UserInputType.MouseButton2 then
rightHeld = false
end
end))
print("[Aimbot+ESP] v9 loaded. K = aim, L = ESP, Home = minimize/restore, × = terminate.")
print("[Aimbot+ESP] Team check: Players:FindFirstChild(name) → player.Character:GetAttribute('team').")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place