local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Camera = workspace.CurrentCamera -- Check if Drawing API is supported if not Drawing then print("Error: Drawing API is not supported by your executor (Solara, AWP, or Bunni). Try updating your executor.") return end -- ESP and Aimbot settings local espEnabled = true local aimbotEnabled = true local boxColor = Color3.fromRGB(255, 0, 0) -- Default red local espBoxes = {} -- Store ESP boxes for each player local aiming = false -- Track if aimbot key is held local targetPlayer = nil -- Current aimbot target local aimbotKeybind = Enum.UserInputType.MouseButton2 -- Default RMB local aimbotTargetPart = "HumanoidRootPart" -- Default body local aimbotSmoothness = 0.5 -- Default smoothness (0 = instant, 1 = very smooth) -- Function to check if two players are on the same team in Arsenal local function isSameTeam(player1, player2) if not player1 or not player2 then print("Error: Invalid player object for team check") return false end if player1.Neutral or player2.Neutral then print(player1.Name .. " or " .. player2.Name .. " is Neutral, treating as enemy (FFA mode)") return false -- Treat neutral players as enemies (e.g., FFA mode) end local team1 = player1.Team and player1.Team.Name or "None" local team2 = player2.Team and player2.Team.Name or "None" print(player1.Name .. " team: " .. team1 .. ", " .. player2.Name .. " team: " .. team2) return team1 == team2 and team1 ~= "None" end -- Function to create a box ESP for a player local function createESP(player) if player == Players.LocalPlayer then print("Skipping ESP for local player: " .. player.Name) return end if isSameTeam(player, Players.LocalPlayer) then print(player.Name .. " is on the same team, skipping ESP") return end if espBoxes[player] then print(player.Name .. " already has ESP, skipping creation") return end local character = player.Character if not character or not character:FindFirstChild("HumanoidRootPart") or not character:FindFirstChildOfClass("Humanoid") then print("Waiting for " .. player.Name .. "'s character to load") player.CharacterAdded:Wait() character = player.Character end print("Creating box ESP for " .. player.Name) local box = { Top = Drawing.new("Line"), Bottom = Drawing.new("Line"), Left = Drawing.new("Line"), Right = Drawing.new("Line") } for _, line in pairs(box) do line.Color = boxColor line.Thickness = 1 -- 1-pixel thickness line.Transparency = 1 -- Fully opaque line.Visible = espEnabled end espBoxes[player] = box player.CharacterAdded:Connect(function(newCharacter) print(player.Name .. " respawned, updating ESP") if not isSameTeam(player, Players.LocalPlayer) and espEnabled then if espBoxes[player] then for _, line in pairs(espBoxes[player]) do line.Visible = newCharacter:FindFirstChild("HumanoidRootPart") and newCharacter:FindFirstChildOfClass("Humanoid") and newCharacter.Humanoid.Health > 0 end end else if espBoxes[player] then for _, line in pairs(espBoxes[player]) do line.Visible = false end end end end) player:GetPropertyChangedSignal("Team"):Connect(function() if isSameTeam(player, Players.LocalPlayer) then print(player.Name .. " switched to same team, hiding ESP") if espBoxes[player] then for _, line in pairs(espBoxes[player]) do line.Visible = false end end elseif player.Character and not isSameTeam(player, Players.LocalPlayer) and espEnabled then print(player.Name .. " switched to different team, showing ESP") if espBoxes[player] then for _, line in pairs(espBoxes[player]) do line.Visible = player.Character:FindFirstChild("HumanoidRootPart") and player.Character:FindFirstChildOfClass("Humanoid") and player.Character.Humanoid.Health > 0 end end end end) end -- Function to refresh ESP for new players local function refreshESP() while true do for _, player in ipairs(Players:GetPlayers()) do if not espBoxes[player] then createESP(player) end end wait(2) -- Refresh every 2 seconds end end -- Start ESP refresh coroutine coroutine.wrap(refreshESP)() -- Function to find the closest enemy player to the mouse cursor local function findClosestEnemyToMouse() local localPlayer = Players.LocalPlayer local character = localPlayer.Character if not character or not character:FindFirstChild("HumanoidRootPart") then return nil end local mousePos = UserInputService:GetMouseLocation() local closestPlayer = nil local closestDistance = math.huge for _, player in ipairs(Players:GetPlayers()) do if player ~= localPlayer and not isSameTeam(player, localPlayer) and player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character:FindFirstChildOfClass("Humanoid") and player.Character.Humanoid.Health > 0 then local targetPart = player.Character:FindFirstChild(aimbotTargetPart) if targetPart then local screenPos, onScreen = Camera:WorldToViewportPoint(targetPart.Position) if onScreen then local distance = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude if distance < closestDistance then closestDistance = distance closestPlayer = player end end end end end return closestPlayer end -- Function to update box positions and aimbot local function updateESPandAimbot() if espEnabled then for player, box in pairs(espBoxes) do if player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character:FindFirstChildOfClass("Humanoid") and player.Character.Humanoid.Health > 0 and not isSameTeam(player, Players.LocalPlayer) then local rootPart = player.Character.HumanoidRootPart local rootPos, onScreen = Camera:WorldToViewportPoint(rootPart.Position) if onScreen then local distance = (Camera.CFrame.Position - rootPart.Position).Magnitude local boxSize = 2000 / distance local boxHeight = boxSize * 1.5 local topLeft = Vector2.new(rootPos.X - boxSize / 2, rootPos.Y - boxHeight / 2) local topRight = Vector2.new(rootPos.X + boxSize / 2, rootPos.Y - boxHeight / 2) local bottomLeft = Vector2.new(rootPos.X - boxSize / 2, rootPos.Y + boxHeight / 2) local bottomRight = Vector2.new(rootPos.X + boxSize / 2, rootPos.Y + boxHeight / 2) box.Top.From = topLeft box.Top.To = topRight box.Bottom.From = bottomLeft box.Bottom.To = bottomRight box.Left.From = topLeft box.Left.To = bottomLeft box.Right.From = topRight box.Right.To = bottomRight for _, line in pairs(box) do line.Color = boxColor line.Visible = true end else for _, line in pairs(box) do line.Visible = false end end else for _, line in pairs(box) do line.Visible = false end end end end if aimbotEnabled and aiming then targetPlayer = findClosestEnemyToMouse() if targetPlayer and targetPlayer.Character and targetPlayer.Character:FindFirstChild(aimbotTargetPart) then print("Aimbot targeting: " .. targetPlayer.Name .. " (" .. aimbotTargetPart .. ")") local targetCFrame = CFrame.new(Camera.CFrame.Position, targetPlayer.Character[aimbotTargetPart].Position) Camera.CFrame = Camera.CFrame:Lerp(targetCFrame, 1 - aimbotSmoothness) else print("Aimbot: No valid target found near mouse") end end end -- Create draggable GUI local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ESPAimbotGui" ScreenGui.Parent = game:GetService("CoreGui") local Frame = Instance.new("Frame") Frame.Size = UDim2.new(0, 200, 0, 280) Frame.Position = UDim2.new(0.1, 0, 0.1, 0) Frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) Frame.BorderSizePixel = 1 Frame.Active = true Frame.Draggable = true Frame.Parent = ScreenGui local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, 0, 0, 30) Title.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Title.Text = "Arsenal ESP & Aimbot" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.Font = Enum.Font.SourceSansBold Title.TextSize = 16 Title.Parent = Frame local ESPToggleButton = Instance.new("TextButton") ESPToggleButton.Size = UDim2.new(0.9, 0, 0, 30) ESPToggleButton.Position = UDim2.new(0.05, 0, 0.12, 0) ESPToggleButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) ESPToggleButton.Text = "ESP: ON" ESPToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ESPToggleButton.Font = Enum.Font.SourceSans ESPToggleButton.TextSize = 14 ESPToggleButton.Parent = Frame local AimbotToggleButton = Instance.new("TextButton") AimbotToggleButton.Size = UDim2.new(0.9, 0, 0, 30) AimbotToggleButton.Position = UDim2.new(0.05, 0, 0.22, 0) AimbotToggleButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) AimbotToggleButton.Text = "Aimbot: ON" AimbotToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) AimbotToggleButton.Font = Enum.Font.SourceSans AimbotToggleButton.TextSize = 14 AimbotToggleButton.Parent = Frame local KeybindLabel = Instance.new("TextLabel") KeybindLabel.Size = UDim2.new(0.9, 0, 0, 20) KeybindLabel.Position = UDim2.new(0.05, 0, 0.32, 0) KeybindLabel.BackgroundTransparency = 1 KeybindLabel.Text = "Aimbot Keybind (e.g., E, MouseButton1):" KeybindLabel.TextColor3 = Color3.fromRGB(255, 255, 255) KeybindLabel.Font = Enum.Font.SourceSans KeybindLabel.TextSize = 12 KeybindLabel.Parent = Frame local KeybindInput = Instance.new("TextBox") KeybindInput.Size = UDim2.new(0.9, 0, 0, 30) KeybindInput.Position = UDim2.new(0.05, 0, 0.38, 0) KeybindInput.BackgroundColor3 = Color3.fromRGB(100, 100, 100) KeybindInput.Text = "MouseButton2" KeybindInput.TextColor3 = Color3.fromRGB(255, 255, 255) KeybindInput.Font = Enum.Font.SourceSans KeybindInput.TextSize = 14 KeybindInput.Parent = Frame local TargetToggleButton = Instance.new("TextButton") TargetToggleButton.Size = UDim2.new(0.9, 0, 0, 30) TargetToggleButton.Position = UDim2.new(0.05, 0, 0.50, 0) TargetToggleButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) TargetToggleButton.Text = "Aimbot Target: Body" TargetToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) TargetToggleButton.Font = Enum.Font.SourceSans TargetToggleButton.TextSize = 14 TargetToggleButton.Parent = Frame local SmoothnessLabel = Instance.new("TextLabel") SmoothnessLabel.Size = UDim2.new(0.9, 0, 0, 20) SmoothnessLabel.Position = UDim2.new(0.05, 0, 0.62, 0) SmoothnessLabel.BackgroundTransparency = 1 SmoothnessLabel.Text = "Aimbot Smoothness (0-1):" SmoothnessLabel.TextColor3 = Color3.fromRGB(255, 255, 255) SmoothnessLabel.Font = Enum.Font.SourceSans SmoothnessLabel.TextSize = 12 SmoothnessLabel.Parent = Frame local SliderFrame = Instance.new("Frame") SliderFrame.Size = UDim2.new(0.9, 0, 0, 20) SliderFrame.Position = UDim2.new(0.05, 0, 0.68, 0) SliderFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) SliderFrame.BorderSizePixel = 1 SliderFrame.Parent = Frame local SliderHandle = Instance.new("TextButton") SliderHandle.Size = UDim2.new(0.1, 0, 1, 0) SliderHandle.Position = UDim2.new(0.5, -10, 0, 0) -- Start at 50% (smoothness 0.5) SliderHandle.BackgroundColor3 = Color3.fromRGB(150, 150, 150) SliderHandle.Text = "" SliderHandle.Parent = SliderFrame local ColorLabel = Instance.new("TextLabel") ColorLabel.Size = UDim2.new(0.9, 0, 0, 20) ColorLabel.Position = UDim2.new(0.05, 0, 0.78, 0) ColorLabel.BackgroundTransparency = 1 ColorLabel.Text = "ESP Color (R,G,B):" ColorLabel.TextColor3 = Color3.fromRGB(255, 255, 255) ColorLabel.Font = Enum.Font.SourceSans ColorLabel.TextSize = 12 ColorLabel.Parent = Frame local ColorInput = Instance.new("TextBox") ColorInput.Size = UDim2.new(0.9, 0, 0, 30) ColorInput.Position = UDim2.new(0.05, 0, 0.84, 0) ColorInput.BackgroundColor3 = Color3.fromRGB(100, 100, 100) ColorInput.Text = "255, 0, 0" ColorInput.TextColor3 = Color3.fromRGB(255, 255, 255) ColorInput.Font = Enum.Font.SourceSans ColorInput.TextSize = 14 ColorInput.Parent = Frame -- Slider functionality local dragging = false SliderHandle.MouseButton1Down:Connect(function() dragging = true end) UserInputService.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 mousePos = UserInputService:GetMouseLocation() local framePos = SliderFrame.AbsolutePosition local frameSize = SliderFrame.AbsoluteSize local relativeX = math.clamp((mousePos.X - framePos.X) / frameSize.X, 0, 1) SliderHandle.Position = UDim2.new(relativeX, -10, 0, 0) aimbotSmoothness = relativeX print("Aimbot smoothness set to: " .. string.format("%.2f", aimbotSmoothness)) end end) -- GUI functionality ESPToggleButton.MouseButton1Click:Connect(function() espEnabled = not espEnabled ESPToggleButton.Text = "ESP: " .. (espEnabled and "ON" or "OFF") print("ESP toggled: " .. (espEnabled and "ON" or "OFF")) for player, box in pairs(espBoxes) do if player.Character and not isSameTeam(player, Players.LocalPlayer) then for _, line in pairs(box) do line.Visible = espEnabled and player.Character:FindFirstChild("HumanoidRootPart") and player.Character:FindFirstChildOfClass("Humanoid") and player.Character.Humanoid.Health > 0 end else for _, line in pairs(box) do line.Visible = false end end end end) AimbotToggleButton.MouseButton1Click:Connect(function() aimbotEnabled = not aimbotEnabled AimbotToggleButton.Text = "Aimbot: " .. (aimbotEnabled and "ON" or "OFF") print("Aimbot toggled: " .. (aimbotEnabled and "ON" or "OFF")) if not aimbotEnabled then aiming = false targetPlayer = nil end end) KeybindInput.FocusLost:Connect(function(enterPressed) if enterPressed then local input = KeybindInput.Text local success = false for _, enum in pairs(Enum.KeyCode:GetEnumItems()) do if input:lower() == tostring(enum):lower() then aimbotKeybind = enum success = true print("Aimbot keybind changed to: " .. tostring(enum)) break end end if not success then for _, enum in pairs(Enum.UserInputType:GetEnumItems()) do if input:lower() == tostring(enum):lower() then aimbotKeybind = enum success = true print("Aimbot keybind changed to: " .. tostring(enum)) break end end end if not success then print("Error: Invalid keybind. Use a key (e.g., 'E', 'Q') or mouse button (e.g., 'MouseButton1', 'MouseButton2')") end end end) TargetToggleButton.MouseButton1Click:Connect(function() aimbotTargetPart = (aimbotTargetPart == "HumanoidRootPart") and "Head" or "HumanoidRootPart" TargetToggleButton.Text = "Aimbot Target: " .. (aimbotTargetPart == "HumanoidRootPart" and "Body" or "Head") print("Aimbot target changed to: " .. aimbotTargetPart) end) ColorInput.FocusLost:Connect(function(enterPressed) if enterPressed then local r, g, b = ColorInput.Text:match("(%d+),%s*(%d+),%s*(%d+)") if r and g and b then r, g, b = tonumber(r), tonumber(g), tonumber(b) if r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255 then boxColor = Color3.fromRGB(r, g, b) print("Box color changed to RGB(" .. r .. ", " .. g .. ", " .. b .. ")") for _, box in pairs(espBoxes) do for _, line in pairs(box) do line.Color = boxColor end end else print("Error: RGB values must be between 0 and 255") end else print("Error: Invalid RGB format. Use 'R, G, B' (e.g., '255, 0, 0')") end end end) -- Aimbot input handling (dynamic keybind) UserInputService.InputBegan:Connect(function(input, gameProcessed) if (input.UserInputType == aimbotKeybind or input.KeyCode == aimbotKeybind) and not gameProcessed and aimbotEnabled then aiming = true print("Aimbot activated (" .. tostring(aimbotKeybind) .. " held)") end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == aimbotKeybind or input.KeyCode == aimbotKeybind then aiming = false targetPlayer = nil print("Aimbot deactivated (" .. tostring(aimbotKeybind) .. " released)") end end) -- Initialize ESP for existing players for _, player in ipairs(Players:GetPlayers()) do createESP(player) end -- Add ESP for new players Players.PlayerAdded:Connect(function(player) print("New player joined: " .. player.Name) createESP(player) end) -- Remove ESP when a player leaves Players.PlayerRemoving:Connect(function(player) print(player.Name .. " left, removing ESP") if espBoxes[player] then for _, line in pairs(espBoxes[player]) do line:Remove() end espBoxes[player] = nil end end) -- Update ESP and Aimbot every frame RunService.RenderStepped:Connect(function() pcall(updateESPandAimbot) end) -- Initial debug message print("Box ESP and Aimbot script with GUI loaded. Hold keybind (default RMB) to aim at closest player to mouse with smoothness. ESP refreshes every 2 seconds.")