Description

Key is "XIRO".
Offers a wide variety of features with a friendly user interface.

Features

  • + Aimbot
  • + Show FOV
  • + Visible check
  • + Team check
  • + Smoothness
  • + FOV changer
  • + ESP (2D box, name, health, healthbar, tracers, skeleton & head)
  • + Noclip
  • + Velocity fly
  • + Spinbot
  • + Walkspeed

Script

Add Xeno Scripts as a preferred source
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local camera = workspace.CurrentCamera
local mouse = player:GetMouse()

-- Key System
local correctKey = "XIRO"
local keyVerified = false

-- Loading Animation
local loadingFrame = Instance.new("Frame")
loadingFrame.Size = UDim2.new(0, 200, 0, 100)
loadingFrame.Position = UDim2.new(0.5, -100, 0.5, -50)
loadingFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
loadingFrame.BorderSizePixel = 0
loadingFrame.Visible = true

local loadingText = Instance.new("TextLabel")
loadingText.Size = UDim2.new(1, 0, 0, 30)
loadingText.Position = UDim2.new(0, 0, 0, 0)
loadingText.BackgroundTransparency = 1
loadingText.TextColor3 = Color3.fromRGB(255, 255, 255)
loadingText.Text = "KEY IS XIRO"
loadingText.Font = Enum.Font.SourceSansBold
loadingText.TextSize = 20
loadingText.Parent = loadingFrame

local keyBox = Instance.new("TextBox")
keyBox.Size = UDim2.new(0.8, 0, 0, 30)
keyBox.Position = UDim2.new(0.1, 0, 0.4, 0)
keyBox.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
keyBox.TextColor3 = Color3.fromRGB(255, 255, 255)
keyBox.PlaceholderText = "Enter Key ur NIGGA KEY"
keyBox.Font = Enum.Font.SourceSans
keyBox.TextSize = 16
keyBox.Parent = loadingFrame

local submitButton = Instance.new("TextButton")
submitButton.Size = UDim2.new(0.6, 0, 0, 25)
submitButton.Position = UDim2.new(0.2, 0, 0.75, 0)
submitButton.BackgroundColor3 = Color3.fromRGB(60, 60, 120)
submitButton.TextColor3 = Color3.fromRGB(255, 255, 255)
submitButton.Text = "Submit"
submitButton.Font = Enum.Font.SourceSans
submitButton.TextSize = 16
submitButton.Parent = loadingFrame

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "CustomMenu"
screenGui.Parent = playerGui
loadingFrame.Parent = screenGui

submitButton.MouseButton1Click:Connect(function()
    if keyBox.Text == correctKey then
        keyVerified = true
        loadingFrame.Visible = false
        -- Main menu will be shown later
    else
        keyBox.Text = ""
        keyBox.PlaceholderText = "Wrong Key! Try Again"
    end
end)

-- Features
local Features = {
    Aimbot = false,
    FOV = false,
    VisibleCheck = false,
    TeamCheck = false,
    BoxESP = false,
    NameESP = false,
    HealthESP = false,
    HealthBar = false,
    Tracers = false,
    Snaplines = false,
    SkeletonESP = false,
    HeadCircle = false,
    VelocityFly = false,
    NoClip = false,
    Spinbot = false
}

local AimbotMode = "Camera" -- "Mouse" oder "Camera"
local TracerOrigin = "Bottom" -- "Bottom", "Middle", "Top"
local Smoothness = 0.15
local FOVSize = 150
local FlySpeed = 50
local WalkSpeed = 16
local FlyKeybind = Enum.KeyCode.F
local NoclipKeybind = Enum.KeyCode.V
local SpinbotKeybind = Enum.KeyCode.C

-- FOV Circle
local FOVCircle = Drawing.new("Circle")
FOVCircle.Visible = false
FOVCircle.Radius = FOVSize
FOVCircle.Thickness = 2
FOVCircle.Filled = false
FOVCircle.Color = Color3.fromRGB(255, 255, 255)
FOVCircle.Transparency = 1

-- ESP SETTINGS

local settings = {
    defaultcolor = Color3.fromRGB(255,0,0),
    teamcheck = false,
    teamcolor = true,
    boxColor = Color3.fromRGB(255, 0, 0),
    nameColor = Color3.fromRGB(255, 255, 255),
    healthColor = Color3.fromRGB(0, 255, 0),
    healthBarColor = Color3.fromRGB(0, 255, 0),
    tracerColor = Color3.fromRGB(255, 255, 0),
    snaplineColor = Color3.fromRGB(0, 255, 255),
    skeletonColor = Color3.fromRGB(0, 0, 255),
    headCircleColor = Color3.fromRGB(255, 0, 0)
}

-- services
local runService = game:GetService("RunService");
local players = game:GetService("Players");

-- variables
local localPlayer = players.LocalPlayer;
local camera = workspace.CurrentCamera;

-- functions
local newVector2, newColor3, newDrawing = Vector2.new, Color3.new, Drawing.new;
local tan, rad = math.tan, math.rad;
local round = function(...) local a = {}; for i,v in next, table.pack(...) do a[i] = math.round(v); end return unpack(a); end;
local wtvp = function(...) local a, b = camera.WorldToViewportPoint(camera, ...) return newVector2(a.X, a.Y), b, a.Z end;

-- Skeleton connections
local SkeletonBones = {
    {"Head","UpperTorso"},
    {"UpperTorso","LowerTorso"},
    {"UpperTorso","LeftUpperArm"},
    {"LeftUpperArm","LeftLowerArm"},
    {"LeftLowerArm","LeftHand"},
    {"UpperTorso","RightUpperArm"},
    {"RightUpperArm","RightLowerArm"},
    {"RightLowerArm","RightHand"},
    {"LowerTorso","LeftUpperLeg"},
    {"LeftUpperLeg","LeftLowerLeg"},
    {"LeftLowerLeg","LeftFoot"},
    {"LowerTorso","RightUpperLeg"},
    {"RightUpperLeg","RightLowerLeg"},
    {"RightLowerLeg","RightFoot"},
}

local espCache = {};
local function createEsp(player)
   if espCache[player] then return end
   
   local drawings = {};
   
   -- Box ESP
   drawings.box = newDrawing("Square");
   drawings.box.Thickness = 1;
   drawings.box.Filled = false;
   drawings.box.Color = settings.boxColor;
   drawings.box.Visible = false;
   drawings.box.ZIndex = 2;

   drawings.boxoutline = newDrawing("Square");
   drawings.boxoutline.Thickness = 3;
   drawings.boxoutline.Filled = false;
   drawings.boxoutline.Color = newColor3();
   drawings.boxoutline.Visible = false;
   drawings.boxoutline.ZIndex = 1;
   
   -- Name ESP
   drawings.name = newDrawing("Text")
   drawings.name.Text = player.Name
   drawings.name.Size = 16
   drawings.name.Center = true
   drawings.name.Outline = true
   drawings.name.Color = settings.nameColor
   drawings.name.Visible = false
   drawings.name.ZIndex = 3
   
   -- Health ESP
   drawings.health = newDrawing("Text")
   drawings.health.Size = 14
   drawings.health.Center = true
   drawings.health.Outline = true
   drawings.health.Color = settings.healthColor
   drawings.health.Visible = false
   drawings.health.ZIndex = 3
   
   -- Health Bar
   drawings.healthBar = newDrawing("Square")
   drawings.healthBar.Thickness = 1
   drawings.healthBar.Filled = true
   drawings.healthBar.Color = settings.healthBarColor
   drawings.healthBar.Visible = false
   drawings.healthBar.ZIndex = 3
   
   drawings.healthBarOutline = newDrawing("Square")
   drawings.healthBarOutline.Thickness = 1
   drawings.healthBarOutline.Filled = false
   drawings.healthBarOutline.Color = newColor3(0, 0, 0)
   drawings.healthBarOutline.Visible = false
   drawings.healthBarOutline.ZIndex = 2
   
   -- Tracers
   drawings.tracer = newDrawing("Line")
   drawings.tracer.Thickness = 1
   drawings.tracer.Color = settings.tracerColor
   drawings.tracer.Visible = false
   drawings.tracer.ZIndex = 2
   
   -- Snaplines
   drawings.snapline = newDrawing("Line")
   drawings.snapline.Thickness = 1
   drawings.snapline.Color = settings.snaplineColor
   drawings.snapline.Visible = false
   drawings.snapline.ZIndex = 2
   
   -- Skeleton ESP
   drawings.skeleton = {}
   
   -- Head Circle
   drawings.headCircle = newDrawing("Circle")
   drawings.headCircle.Thickness = 2
   drawings.headCircle.Filled = false
   drawings.headCircle.Color = settings.headCircleColor
   drawings.headCircle.Visible = false
   drawings.headCircle.ZIndex = 3

   espCache[player] = drawings;
end

local function removeEsp(player)
   if rawget(espCache, player) then
       for _, drawing in next, espCache[player] do
           if type(drawing) == "table" then
               for _, line in pairs(drawing) do
                   if line and line.Remove then
                       line:Remove()
                   end
               end
           elseif drawing and drawing.Remove then
               drawing:Remove();
           end
       end
       espCache[player] = nil;
   end
end

local function updateEsp(player, esp)
   local character = player and player.Character;
   if character and character:FindFirstChild("HumanoidRootPart") and character:FindFirstChild("Humanoid") then
       local humanoid = character:FindFirstChild("Humanoid")
       local rootPart = character:FindFirstChild("HumanoidRootPart")
       local head = character:FindFirstChild("Head")
       local cframe = rootPart and rootPart.CFrame;
       local position, visible, depth = wtvp(cframe.Position);
       
       -- Update visibility based on features
       esp.box.Visible = visible and Features.BoxESP
       esp.boxoutline.Visible = visible and Features.BoxESP
       esp.name.Visible = visible and Features.NameESP
       esp.health.Visible = visible and Features.HealthESP
       esp.healthBar.Visible = visible and Features.HealthBar
       esp.healthBarOutline.Visible = visible and Features.HealthBar
       esp.tracer.Visible = visible and Features.Tracers
       esp.snapline.Visible = visible and Features.Snaplines
       esp.headCircle.Visible = visible and Features.HeadCircle and head ~= nil

       -- Skeleton ESP
       if Features.SkeletonESP then
           -- Remove old skeleton lines
           for _, line in pairs(esp.skeleton) do
               if line and line.Remove then
                   line:Remove()
               end
           end
           esp.skeleton = {}
           
           -- Create new skeleton lines
           for _, bone in pairs(SkeletonBones) do
               local part0 = character:FindFirstChild(bone[1])
               local part1 = character:FindFirstChild(bone[2])
               
               if part0 and part1 then
                   local screen0, onScreen0 = camera:WorldToViewportPoint(part0.Position)
                   local screen1, onScreen1 = camera:WorldToViewportPoint(part1.Position)
                   
                   if onScreen0 and onScreen1 then
                       local line = newDrawing("Line")
                       line.Color = settings.skeletonColor
                       line.Thickness = 2
                       line.From = newVector2(screen0.X, screen0.Y)
                       line.To = newVector2(screen1.X, screen1.Y)
                       line.Visible = true
                       line.ZIndex = 3
                       
                       table.insert(esp.skeleton, line)
                   end
               end
           end
       else
           -- Remove skeleton lines if disabled
           for _, line in pairs(esp.skeleton) do
               if line and line.Remove then
                   line:Remove()
               end
           end
           esp.skeleton = {}
       end

       if cframe and visible then
           local scaleFactor = 1 / (depth * tan(rad(camera.FieldOfView / 2)) * 2) * 1000;
           local width, height = round(4 * scaleFactor, 5 * scaleFactor);
           local x, y = round(position.X, position.Y);

           -- Box ESP
           esp.box.Size = newVector2(width, height);
           esp.box.Position = newVector2(round(x - width / 2, y - height / 2));
           esp.box.Color = settings.teamcolor and player.TeamColor.Color or settings.boxColor;

           esp.boxoutline.Size = esp.box.Size;
           esp.boxoutline.Position = esp.box.Position;
           
           -- Name ESP
           esp.name.Position = newVector2(x, y - height / 2 - 20)
           esp.name.Color = settings.teamcolor and player.TeamColor.Color or settings.nameColor
           
           -- Health ESP
           esp.health.Text = "HP: " .. math.floor(humanoid.Health)
           esp.health.Position = newVector2(x, y + height / 2 + 10)
           
           -- Health color based on percentage
           local healthPercent = humanoid.Health / humanoid.MaxHealth
           esp.health.Color = Color3.new(1 - healthPercent, healthPercent, 0)
           
           -- Health Bar
           if Features.HealthBar then
               local barWidth = 40
               local barHeight = 3
               local barX = x - barWidth / 2
               local barY = y - height / 2 - 10
               
               esp.healthBarOutline.Size = newVector2(barWidth, barHeight)
               esp.healthBarOutline.Position = newVector2(barX, barY)
               
               esp.healthBar.Size = newVector2(barWidth * healthPercent, barHeight)
               esp.healthBar.Position = newVector2(barX, barY)
               esp.healthBar.Color = Color3.new(1 - healthPercent, healthPercent, 0)
           end
           
           -- Tracers
           if Features.Tracers then
               local fromPoint
               if TracerOrigin == "Bottom" then
                   fromPoint = newVector2(camera.ViewportSize.X / 2, camera.ViewportSize.Y)
               elseif TracerOrigin == "Middle" then
                   fromPoint = newVector2(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2)
               else -- Top
                   fromPoint = newVector2(camera.ViewportSize.X / 2, 0)
               end
               
               esp.tracer.From = fromPoint
               esp.tracer.To = newVector2(x, y + height / 2)
               esp.tracer.Color = settings.teamcolor and player.TeamColor.Color or settings.tracerColor
           end
           
           -- Snaplines
           if Features.Snaplines then
               esp.snapline.From = newVector2(camera.ViewportSize.X / 2, 0)
               esp.snapline.To = newVector2(x, y - height / 2)
               esp.snapline.Color = settings.teamcolor and player.TeamColor.Color or settings.snaplineColor
           end
           
           -- Head Circle
           if Features.HeadCircle and head then
               local headPos = camera:WorldToViewportPoint(head.Position)
               if headPos then
                   esp.headCircle.Position = newVector2(headPos.X, headPos.Y)
                   esp.headCircle.Radius = 10
                   esp.headCircle.Color = settings.teamcolor and player.TeamColor.Color or settings.headCircleColor
               end
           end
       end
   else
       esp.box.Visible = false;
       esp.boxoutline.Visible = false;
       esp.name.Visible = false
       esp.health.Visible = false
       esp.healthBar.Visible = false
       esp.healthBarOutline.Visible = false
       esp.tracer.Visible = false
       esp.snapline.Visible = false
       esp.headCircle.Visible = false
       
       -- Remove skeleton lines
       for _, line in pairs(esp.skeleton) do
           if line and line.Remove then
               line:Remove()
           end
       end
       esp.skeleton = {}
   end
end

-- Initialize ESP for players
for _, player in next, players:GetPlayers() do
   if player ~= localPlayer then
       createEsp(player);
   end
end

players.PlayerAdded:Connect(function(player)
   player.CharacterAdded:Connect(function()
       wait(0.5) -- Wait for character to fully load
       createEsp(player);
   end)
end);

players.PlayerRemoving:Connect(function(player)
   removeEsp(player);
end)

-- Handle character respawns
for _, player in next, players:GetPlayers() do
   if player ~= localPlayer then
       player.CharacterAdded:Connect(function()
           wait(0.5) -- Wait for character to fully load
           if not espCache[player] then
               createEsp(player)
           end
       end)
   end
end

runService:BindToRenderStep("esp", Enum.RenderPriority.Camera.Value, function()
   for player, drawings in next, espCache do
       if Features.TeamCheck and player.Team == localPlayer.Team then
           drawings.box.Visible = false
           drawings.boxoutline.Visible = false
           drawings.name.Visible = false
           drawings.health.Visible = false
           drawings.healthBar.Visible = false
           drawings.healthBarOutline.Visible = false
           drawings.tracer.Visible = false
           drawings.snapline.Visible = false
           drawings.headCircle.Visible = false
           
           -- Remove skeleton lines
           for _, line in pairs(drawings.skeleton) do
               if line and line.Remove then
                   line:Remove()
               end
           end
           drawings.skeleton = {}
           continue;
       end

       if drawings and player ~= localPlayer then
           updateEsp(player, drawings);
       end
   end
end)


-- VELOCITY FLY

local flying = false
local flyBodyVelocity = nil
local flyBodyGyro = nil

local function enableFly()
    if flying then return end
    
    local character = player.Character
    if not character then return end
    
    local humanoid = character:FindFirstChild("Humanoid")
    local rootPart = character:FindFirstChild("HumanoidRootPart")
    
    if not humanoid or not rootPart then return end
    
    flying = true
    
    -- Create fly parts
    flyBodyVelocity = Instance.new("BodyVelocity")
    flyBodyVelocity.Velocity = Vector3.new(0, 0, 0)
    flyBodyVelocity.MaxForce = Vector3.new(10000, 10000, 10000)
    flyBodyVelocity.P = 10000
    flyBodyVelocity.Parent = rootPart
    
    flyBodyGyro = Instance.new("BodyGyro")
    flyBodyGyro.MaxTorque = Vector3.new(10000, 10000, 10000)
    flyBodyGyro.P = 10000
    flyBodyGyro.D = 100
    flyBodyGyro.Parent = rootPart
    
    humanoid.PlatformStand = true
    
    -- Fly control loop
    local flyConnection
    flyConnection = runService.Heartbeat:Connect(function()
        if not flying or not rootPart or not flyBodyVelocity or not flyBodyGyro then
            flyConnection:Disconnect()
            return
        end
        
        flyBodyGyro.CFrame = camera.CFrame
        
        local direction = Vector3.new()
        if UserInputService:IsKeyDown(Enum.KeyCode.W) then
            direction = direction + (camera.CFrame.LookVector * FlySpeed)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.S) then
            direction = direction - (camera.CFrame.LookVector * FlySpeed)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.A) then
            direction = direction - (camera.CFrame.RightVector * FlySpeed)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.D) then
            direction = direction + (camera.CFrame.RightVector * FlySpeed)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
            direction = direction + (Vector3.new(0, 1, 0) * FlySpeed)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then
            direction = direction - (Vector3.new(0, 1, 0) * FlySpeed)
        end
        
        flyBodyVelocity.Velocity = direction
    end)
end

local function disableFly()
    if not flying then return end
    
    flying = false
    
    local character = player.Character
    if not character then return end
    
    local humanoid = character:FindFirstChild("Humanoid")
    local rootPart = character:FindFirstChild("HumanoidRootPart")
    
    if humanoid then
        humanoid.PlatformStand = false
    end
    
    if flyBodyVelocity then
        flyBodyVelocity:Destroy()
        flyBodyVelocity = nil
    end
    
    if flyBodyGyro then
        flyBodyGyro:Destroy()
        flyBodyGyro = nil
    end
end


-- NO CLIP

local noclip = false
local noclipConnection = nil

local function enableNoclip()
    if noclip then return end
    
    noclip = true
    local character = player.Character
    if not character then return end
    
    for _, part in pairs(character:GetDescendants()) do
        if part:IsA("BasePart") then
            part.CanCollide = false
        end
    end
    
    noclipConnection = character.DescendantAdded:Connect(function(part)
        if part:IsA("BasePart") then
            part.CanCollide = false
        end
    end)
end

local function disableNoclip()
    if not noclip then return end
    
    noclip = false
    local character = player.Character
    if not character then return end
    
    if noclipConnection then
        noclipConnection:Disconnect()
        noclipConnection = nil
    end
    
    for _, part in pairs(character:GetDescendants()) do
        if part:IsA("BasePart") then
            part.CanCollide = true
        end
    end
end


-- SPINBOT

local spinning = false
local spinbotConnection = nil

local function enableSpinbot()
    if spinning then return end
    
    spinning = true
    local character = player.Character
    if not character then return end
    
    local rootPart = character:FindFirstChild("HumanoidRootPart")
    if not rootPart then return end
    
    spinbotConnection = runService.Heartbeat:Connect(function()
        if not spinning or not rootPart then
            spinbotConnection:Disconnect()
            return
        end
        
        rootPart.CFrame = rootPart.CFrame * CFrame.Angles(0, math.rad(20), 0)
    end)
end

local function disableSpinbot()
    if not spinning then return end
    
    spinning = false
    
    if spinbotConnection then
        spinbotConnection:Disconnect()
        spinbotConnection = nil
    end
end


-- WALKSPEED

local function setWalkSpeed()
    local character = player.Character
    if not character then return end
    
    local humanoid = character:FindFirstChild("Humanoid")
    if humanoid then
        humanoid.WalkSpeed = WalkSpeed
    end
end

-- Apply walkspeed when character is added
player.CharacterAdded:Connect(function()
    wait(0.5)
    setWalkSpeed()
end)

-- Apply walkspeed initially
if player.Character then
    setWalkSpeed()
end

-- Keybinds
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    
    -- Fly toggle
    if input.KeyCode == FlyKeybind then
        if Features.VelocityFly then
            if flying then
                disableFly()
            else
                enableFly()
            end
        end
    end
    
    -- Noclip toggle
    if input.KeyCode == NoclipKeybind then
        if Features.NoClip then
            if noclip then
                disableNoclip()
            else
                enableNoclip()
            end
        end
    end
    
    -- Spinbot toggle
    if input.KeyCode == SpinbotKeybind then
        if Features.Spinbot then
            if spinning then
                disableSpinbot()
            else
                enableSpinbot()
            end
        end
    end
end)


-- UI CODE

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 400, 0, 300)
frame.Position = UDim2.new(0.5, -200, 0.5, -150)
frame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
frame.BorderSizePixel = 0
frame.Visible = false
frame.Parent = screenGui

-- Drag
local dragging, dragInput, dragStart, startPos
local function update(input)
    local delta = input.Position - dragStart
    frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X,
        startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end

frame.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging = true
        dragStart = input.Position
        startPos = frame.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then 
                dragging = false 
            end
        end)
    end
end)

frame.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement then 
        dragInput = input 
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if input == dragInput and dragging then 
        update(input) 
    end
end)

-- Header
local header = Instance.new("TextLabel")
header.Size = UDim2.new(1, 0, 0, 25)
header.BackgroundColor3 = Color3.fromRGB(40, 40, 120)
header.TextColor3 = Color3.fromRGB(255, 255, 255)
header.Text = "CHEAT INTERNAL"
header.Font = Enum.Font.SourceSansBold
header.TextSize = 18
header.Parent = frame

-- Close button
local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 25, 0, 25)
closeButton.Position = UDim2.new(1, -25, 0, 0)
closeButton.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
closeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
closeButton.Text = "X"
closeButton.Font = Enum.Font.SourceSansBold
closeButton.TextSize = 16
closeButton.Parent = frame

closeButton.MouseButton1Click:Connect(function()
    frame.Visible = false
end)

-- Left Tabs
local leftPanel = Instance.new("Frame")
leftPanel.Size = UDim2.new(0, 120, 1, -25)
leftPanel.Position = UDim2.new(0, 0, 0, 25)
leftPanel.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
leftPanel.BorderSizePixel = 0
leftPanel.Parent = frame

-- Right Panel
local rightPanel = Instance.new("Frame")
rightPanel.Size = UDim2.new(1, -120, 1, -25)
rightPanel.Position = UDim2.new(0, 120, 0, 25)
rightPanel.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
rightPanel.BorderSizePixel = 0
rightPanel.Parent = frame

-- Tabs
local tabs = {}
local function createTab(name, y)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(1, -10, 0, 35)
    btn.Position = UDim2.new(0, 5, 0, y)
    btn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    btn.BorderSizePixel = 0
    btn.TextColor3 = Color3.fromRGB(255, 255, 255)
    btn.Text = name
    btn.Font = Enum.Font.SourceSansBold
    btn.TextSize = 16
    btn.Parent = leftPanel
    
    tabs[name] = Instance.new("ScrollingFrame")
    tabs[name].Size = UDim2.new(1, 0, 1, 0)
    tabs[name].BackgroundTransparency = 1
    tabs[name].ScrollBarThickness = 4
    tabs[name].CanvasSize = UDim2.new(0, 0, 2, 0)
    tabs[name].Parent = rightPanel
    tabs[name].Visible = false
    
    btn.MouseButton1Click:Connect(function()
        for _, f in pairs(tabs) do 
            f.Visible = false 
        end
        tabs[name].Visible = true
    end)
    
    return btn, tabs[name]
end

local aimbotBtn, aimbotTab = createTab("Aimbot", 10)
local visualsBtn, visualsTab = createTab("Visuals", 55)
local extrasBtn, extrasTab = createTab("Extras", 100)

-- Toggle Menu with Q
UserInputService.InputBegan:Connect(function(input, gp)
    if not gp and input.KeyCode == Enum.KeyCode.Q and keyVerified then
        frame.Visible = not frame.Visible
    end
end)

-- Checkbox helper
local function createCheckbox(parent, text, y, key)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(0, 18, 0, 18)
    btn.Position = UDim2.new(0, 15, 0, y)
    btn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    btn.BorderSizePixel = 0
    btn.Text = ""
    btn.TextColor3 = Color3.fromRGB(255, 255, 255)
    btn.Font = Enum.Font.SourceSansBold
    btn.TextSize = 16
    btn.Parent = parent
    
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0, 180, 0, 18)
    lbl.Position = UDim2.new(0, 40, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
    lbl.Text = text
    lbl.Font = Enum.Font.SourceSans
    lbl.TextSize = 14
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = parent
    
    btn.MouseButton1Click:Connect(function()
        Features[key] = not Features[key]
        btn.Text = Features[key] and "✓" or ""
        
        -- Special handling for certain features
        if key == "VelocityFly" and not Features[key] and flying then
            disableFly()
        elseif key == "NoClip" and not Features[key] and noclip then
            disableNoclip()
        elseif key == "Spinbot" and not Features[key] and spinning then
            disableSpinbot()
        elseif key == "teamcolor" then
            settings.teamcolor = Features[key]
        elseif key == "TeamCheck" then
            settings.teamcheck = Features[key]
        end
    end)
end

-- Dropdown helper
local function createDropdown(parent, text, y, options, default, callback)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0, 150, 0, 18)
    lbl.Position = UDim2.new(0, 15, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
    lbl.Text = text
    lbl.Font = Enum.Font.SourceSans
    lbl.TextSize = 14
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = parent
    
    local dropdown = Instance.new("TextButton")
    dropdown.Size = UDim2.new(0, 100, 0, 20)
    dropdown.Position = UDim2.new(0, 170, 0, y)
    dropdown.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    dropdown.BorderSizePixel = 0
    dropdown.TextColor3 = Color3.fromRGB(255, 255, 255)
    dropdown.Text = default
    dropdown.Font = Enum.Font.SourceSans
    dropdown.TextSize = 14
    dropdown.Parent = parent
    
    dropdown.MouseButton1Click:Connect(function()
        local currentIndex = table.find(options, dropdown.Text) or 1
        local nextIndex = currentIndex % #options + 1
        dropdown.Text = options[nextIndex]
        callback(options[nextIndex])
    end)
    
    return dropdown
end

-- Sliders
local function createSlider(parent, text, y, minVal, maxVal, defaultVal, callback)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0, 180, 0, 18)
    lbl.Position = UDim2.new(0, 15, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
    lbl.Text = text .. ": " .. defaultVal
    lbl.Font = Enum.Font.SourceSans
    lbl.TextSize = 14
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = parent
    
    local slider = Instance.new("TextButton")
    slider.Size = UDim2.new(0, 180, 0, 8)
    slider.Position = UDim2.new(0, 15, 0, y + 22)
    slider.BackgroundColor3 = Color3.fromRGB(0, 50, 150)
    slider.BorderSizePixel = 0
    slider.Text = ""
    slider.Parent = parent
    
    local fill = Instance.new("Frame")
    fill.Size = UDim2.new((defaultVal - minVal) / (maxVal - minVal), 0, 1, 0)
    fill.BackgroundColor3 = Color3.fromRGB(0, 120, 255)
    fill.BorderSizePixel = 0
    fill.Parent = slider
    
    local function update(inputX)
        local rel = math.clamp((inputX - slider.AbsolutePosition.X) / slider.AbsoluteSize.X, 0, 1)
        local val = math.floor(minVal + (maxVal - minVal) * rel)
        fill.Size = UDim2.new(rel, 0, 1, 0)
        lbl.Text = text .. ": " .. val
        callback(val)
    end
    
    slider.MouseButton1Down:Connect(function()
        update(UserInputService:GetMouseLocation().X)
        local moveConn, releaseConn
        moveConn = UserInputService.InputChanged:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseMovement then 
                update(UserInputService:GetMouseLocation().X) 
            end
        end)
        releaseConn = UserInputService.InputEnded:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 then 
                moveConn:Disconnect() 
                releaseConn:Disconnect() 
            end
        end)
    end)
end

-- Keybind selector
local function createKeybindSelector(parent, text, y, defaultKey, callback)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0, 150, 0, 18)
    lbl.Position = UDim2.new(0, 15, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
    lbl.Text = text
    lbl.Font = Enum.Font.SourceSans
    lbl.TextSize = 14
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = parent
    
    local keyBtn = Instance.new("TextButton")
    keyBtn.Size = UDim2.new(0, 40, 0, 20)
    keyBtn.Position = UDim2.new(0, 170, 0, y)
    keyBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    keyBtn.BorderSizePixel = 0
    keyBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    keyBtn.Text = defaultKey.Name
    keyBtn.Font = Enum.Font.SourceSans
    keyBtn.TextSize = 14
    keyBtn.Parent = parent
    
    local listening = false
    keyBtn.MouseButton1Click:Connect(function()
        if not listening then
            listening = true
            keyBtn.Text = "..."
            keyBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
            
            local connection
            connection = UserInputService.InputBegan:Connect(function(input)
                if input.UserInputType == Enum.UserInputType.Keyboard then
                    keyBtn.Text = input.KeyCode.Name
                    keyBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
                    callback(input.KeyCode)
                    listening = false
                    connection:Disconnect()
                end
            end)
        end
    end)
    
    return keyBtn
end

-- Color picker helper
local function createColorPicker(parent, text, y, defaultColor, callback)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0, 150, 0, 18)
    lbl.Position = UDim2.new(0, 15, 0, y)
    lbl.BackgroundTransparency = 1
    lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
    lbl.Text = text
    lbl.Font = Enum.Font.SourceSans
    lbl.TextSize = 14
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = parent
    
    local colorBtn = Instance.new("TextButton")
    colorBtn.Size = UDim2.new(0, 40, 0, 20)
    colorBtn.Position = UDim2.new(0, 170, 0, y)
    colorBtn.BackgroundColor3 = defaultColor
    colorBtn.BorderSizePixel = 0
    colorBtn.Text = ""
    colorBtn.Parent = parent
    
    -- Simple color picker UI
    local colorPickerFrame = Instance.new("Frame")
    colorPickerFrame.Size = UDim2.new(0, 150, 0, 150)
    colorPickerFrame.Position = UDim2.new(0, 220, 0, y)
    colorPickerFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    colorPickerFrame.BorderSizePixel = 0
    colorPickerFrame.Visible = false
    colorPickerFrame.Parent = parent
    
    -- Color spectrum
    local colorSpectrum = Instance.new("ImageButton")
    colorSpectrum.Size = UDim2.new(0, 130, 0, 130)
    colorSpectrum.Position = UDim2.new(0, 10, 0, 10)
    colorSpectrum.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
    colorSpectrum.Image = "rbxassetid://2615689005" -- Color spectrum image
    colorSpectrum.Parent = colorPickerFrame
    
    -- Close button for color picker
    local closeColorPicker = Instance.new("TextButton")
    closeColorPicker.Size = UDim2.new(0, 20, 0, 20)
    closeColorPicker.Position = UDim2.new(1, -20, 0, 0)
    closeColorPicker.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
    closeColorPicker.TextColor3 = Color3.fromRGB(255, 255, 255)
    closeColorPicker.Text = "X"
    closeColorPicker.Font = Enum.Font.SourceSansBold
    closeColorPicker.TextSize = 14
    closeColorPicker.Parent = colorPickerFrame
    
    colorBtn.MouseButton1Click:Connect(function()
        colorPickerFrame.Visible = not colorPickerFrame.Visible
    end)
    
    closeColorPicker.MouseButton1Click:Connect(function()
        colorPickerFrame.Visible = false
    end)
    
    colorSpectrum.MouseButton1Click:Connect(function()
        -- This is a simplified color picker
        -- In a real implementation, you would calculate the color based on mouse position
        local newColor = Color3.new(math.random(), math.random(), math.random())
        colorBtn.BackgroundColor3 = newColor
        callback(newColor)
        colorPickerFrame.Visible = false
    end)
    
    return colorBtn
end

-- Aimbot Tab
createCheckbox(aimbotTab, "Aimbot", 20, "Aimbot")
createCheckbox(aimbotTab, "Enable FOV", 50, "FOV")
createCheckbox(aimbotTab, "Visible Check", 80, "VisibleCheck")
createCheckbox(aimbotTab, "Team Check", 110, "TeamCheck")
createDropdown(aimbotTab, "Aimbot Mode", 140, {"Camera"}, AimbotMode, function(mode)
    AimbotMode = mode
end)
createSlider(aimbotTab, "Smoothing", 170, 0, 100, 15, function(val) 
    Smoothness = val / 100 
end)
createSlider(aimbotTab, "FOV Size", 210, 50, 300, 150, function(val) 
    FOVSize = val 
    FOVCircle.Radius = val 
end)

-- Visuals Tab
createCheckbox(visualsTab, "2D Box ESP", 20, "BoxESP")
createCheckbox(visualsTab, "Name ESP", 50, "NameESP")
createCheckbox(visualsTab, "Health ESP", 80, "HealthESP")
createCheckbox(visualsTab, "Health Bar", 110, "HealthBar")
createCheckbox(visualsTab, "Tracers", 140, "Tracers")
createDropdown(visualsTab, "Tracer Origin", 170, {"Bottom", "Middle", "Top"}, TracerOrigin, function(origin)
    TracerOrigin = origin
end)
createCheckbox(visualsTab, "Snaplines", 200, "Snaplines")
createCheckbox(visualsTab, "Skeleton ESP", 230, "SkeletonESP")
createCheckbox(visualsTab, "Head Circle", 260, "HeadCircle")

-- Color pickers for ESP
createColorPicker(visualsTab, "Box Color", 290, settings.boxColor, function(color)
    settings.boxColor = color
end)

createColorPicker(visualsTab, "Name Color", 320, settings.nameColor, function(color)
    settings.nameColor = color
end)

createColorPicker(visualsTab, "Tracer Color", 350, settings.tracerColor, function(color)
    settings.tracerColor = color
end)

createColorPicker(visualsTab, "Snapline Color", 380, settings.snaplineColor, function(color)
    settings.snaplineColor = color
end)

createColorPicker(visualsTab, "Skeleton Color", 410, settings.skeletonColor, function(color)
    settings.skeletonColor = color
end)

createColorPicker(visualsTab, "Head Circle Color", 440, settings.headCircleColor, function(color)
    settings.headCircleColor = color
end)

-- Extras Tab
createCheckbox(extrasTab, "Team Check", 20, "TeamCheck")
createCheckbox(extrasTab, "Team Color", 50, "teamcolor")
createCheckbox(extrasTab, "Velocity Fly", 80, "VelocityFly")
createKeybindSelector(extrasTab, "Fly Keybind", 110, FlyKeybind, function(key)
    FlyKeybind = key
end)
createSlider(extrasTab, "Fly Speed", 140, 10, 200, 50, function(val) 
    FlySpeed = val 
end)
createCheckbox(extrasTab, "NoClip", 170, "NoClip")
createKeybindSelector(extrasTab, "Noclip Keybind", 200, NoclipKeybind, function(key)
    NoclipKeybind = key
end)
createCheckbox(extrasTab, "Spinbot", 230, "Spinbot")
createKeybindSelector(extrasTab, "Spinbot Keybind", 260, SpinbotKeybind, function(key)
    SpinbotKeybind = key
end)
createSlider(extrasTab, "WalkSpeed", 290, 16, 100, 16, function(val) 
    WalkSpeed = val 
    setWalkSpeed()
end)

-- By XIRO Text
local creditText = Instance.new("TextLabel")
creditText.Size = UDim2.new(0, 100, 0, 20)
creditText.Position = UDim2.new(0, 10, 1, -30)
creditText.BackgroundTransparency = 1
creditText.TextColor3 = Color3.fromRGB(255, 255, 255)
creditText.Text = "By XIRO"
creditText.Font = Enum.Font.SourceSansBold
creditText.TextSize = 16
creditText.TextXAlignment = Enum.TextXAlignment.Left
creditText.Parent = screenGui


-- AIMBOT LOGIC

RunService.RenderStepped:Connect(function()
    FOVCircle.Position = Vector2.new(mouse.X, mouse.Y + 36)
    FOVCircle.Visible = Features.FOV

    if Features.Aimbot and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then
        local closest, dist = nil, math.huge
        for _, plr in ipairs(Players:GetPlayers()) do
            if plr ~= player and plr.Character and plr.Character:FindFirstChild("Head") then
                if Features.TeamCheck and plr.Team == player.Team then 
                    continue 
                end
                
                if Features.VisibleCheck then
                    -- Simple visible check (you can enhance this with raycasting)
                    local head = plr.Character.Head
                    local headPos, onScreen = camera:WorldToViewportPoint(head.Position)
                    if not onScreen then 
                        continue 
                    end
                end
                
                local head = plr.Character.Head
                local headPos, onScreen = camera:WorldToViewportPoint(head.Position)
                if onScreen then
                    local diff = Vector2.new(mouse.X, mouse.Y) - Vector2.new(headPos.X, headPos.Y)
                    local mag = diff.Magnitude
                    if Features.FOV and mag > FOVSize then 
                        continue 
                    end
                    if mag < dist then 
                        dist, closest = mag, head 
                    end
                end
            end
        end
        
        if closest then
            -- Camera aimbot (rotate camera)
            if Smoothness > 0 then
                camera.CFrame = camera.CFrame:Lerp(CFrame.new(camera.CFrame.Position, closest.Position), Smoothness)
            else
                camera.CFrame = CFrame.new(camera.CFrame.Position, closest.Position)
            end
        end
    end
end)
Script worked? 🚀 Boost it to #1 so others find it too.

Comments (0)

Log in to add a comment.