Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Players = game:GetService("Players")
- local UserInputService = game:GetService("UserInputService")
- local RunService = game:GetService("RunService")
- local LocalPlayer = Players.LocalPlayer
- local Camera = workspace.CurrentCamera
- local Drawing = Drawing or getgenv().Drawing -- Support for exploit Drawing API
- local Whitelist = {}
- local Aimbot = {
- Enable = false,
- TeamCheck = false,
- Fov = false,
- FovRange = 150, -- Default FOV radius in pixels
- FovColor = Color3.fromRGB(255, 255, 0), -- Default FOV circle color
- Predict = false, -- Predict player movement
- }
- local Target = nil
- local AimbotActive = false
- local FovCircle = nil
- local NEAR_TARGET_DISTANCE = 5 -- in meters
- function Aimbot.AddToWhitelist(name)
- Whitelist[name] = true
- end
- function Aimbot.RemoveFromWhitelist(name)
- Whitelist[name] = nil
- end
- function Aimbot.getWhitelist()
- local list = {}
- for name, _ in pairs(Whitelist) do
- table.insert(list, name)
- end
- return list
- end
- local function IsOnScreen(pos)
- local _, onScreen = Camera:WorldToViewportPoint(pos)
- return onScreen
- end
- local function IsEnemy(player)
- if not player or not player.Team or not LocalPlayer.Team then return true end
- if Aimbot.TeamCheck then
- return player.Team ~= LocalPlayer.Team
- end
- return true
- end
- local function IsInFOV(screenPos)
- if not Aimbot.Fov then return true end
- local mousePos = UserInputService:GetMouseLocation()
- local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude
- return dist <= Aimbot.FovRange
- end
- local function GetPlayerInFOV()
- local closest = nil
- local closestDist = math.huge
- for _, player in ipairs(Players:GetPlayers()) do
- if player ~= LocalPlayer and not Whitelist[player.Name] and IsEnemy(player) then
- local char = player.Character
- local head = char and char:FindFirstChild("Head")
- if head and IsOnScreen(head.Position) then
- local screenPos = Camera:WorldToViewportPoint(head.Position)
- if IsInFOV(screenPos) then
- local mousePos = UserInputService:GetMouseLocation()
- local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude
- if dist < closestDist then
- closestDist = dist
- closest = player
- end
- end
- end
- end
- end
- return closest
- end
- local function GetNearTarget()
- local closest = nil
- local closestDist = NEAR_TARGET_DISTANCE
- local character = LocalPlayer.Character
- local root = character and character:FindFirstChild("HumanoidRootPart")
- if not root then return nil end
- for _, player in ipairs(Players:GetPlayers()) do
- if player ~= LocalPlayer and not Whitelist[player.Name] and IsEnemy(player) then
- local char = player.Character
- local root2 = char and char:FindFirstChild("HumanoidRootPart")
- if root2 then
- local dist = (root.Position - root2.Position).Magnitude
- if dist < closestDist then
- closestDist = dist
- closest = player
- end
- end
- end
- end
- return closest
- end
- local function GetClosestPlayerOnScreen()
- local closest = nil
- local closestDist = math.huge
- for _, player in ipairs(Players:GetPlayers()) do
- if player ~= LocalPlayer and not Whitelist[player.Name] and IsEnemy(player) then
- local char = player.Character
- local head = char and char:FindFirstChild("Head")
- if head and IsOnScreen(head.Position) then
- local screenPos = Camera:WorldToViewportPoint(head.Position)
- local mousePos = UserInputService:GetMouseLocation()
- local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude
- if dist < closestDist then
- closestDist = dist
- closest = player
- end
- end
- end
- end
- return closest
- end
- local function IsTargetValid(player)
- if not player or Whitelist[player.Name] or not IsEnemy(player) then return false end
- local char = player.Character
- local head = char and char:FindFirstChild("Head")
- if not head then return false end
- return IsOnScreen(head.Position)
- end
- -- Smoothing predict movement, not exceeding 1 stud
- local lastPredictedPos = nil
- local function GetPredictedPosition(target)
- local char = target.Character
- if not char then return nil end
- local head = char:FindFirstChild("Head")
- local hrp = char:FindFirstChild("HumanoidRootPart")
- if not head or not hrp then return head and head.Position or nil end
- local velocity = hrp.Velocity or Vector3.new(0,0,0)
- local origin = Camera.CFrame.Position
- local distance = (origin - head.Position).Magnitude
- local projectileSpeed = 50
- local travelTime = distance / projectileSpeed
- local predicted = head.Position + (velocity * travelTime)
- -- Smooth: Clamp movement to max 1 stud from last prediction
- if lastPredictedPos then
- local delta = predicted - lastPredictedPos
- if delta.Magnitude > 1 then
- predicted = lastPredictedPos + delta.Unit
- end
- end
- lastPredictedPos = predicted
- return predicted
- end
- local function AimAt(player)
- local char = player.Character
- if char then
- local head = char:FindFirstChild("Head")
- if head then
- local aimPos = head.Position
- if Aimbot.Predict then
- local predicted = GetPredictedPosition(player)
- if predicted then
- aimPos = predicted
- end
- else
- lastPredictedPos = nil
- end
- Camera.CFrame = CFrame.new(Camera.CFrame.Position, aimPos)
- end
- end
- end
- local function CreateFovCircle()
- if FovCircle then FovCircle:Remove() end
- FovCircle = Drawing.new("Circle")
- FovCircle.Transparency = 1
- FovCircle.Filled = false
- FovCircle.Color = Aimbot.FovColor
- FovCircle.Thickness = 2
- FovCircle.Radius = Aimbot.FovRange
- FovCircle.Visible = false
- end
- local function UpdateFovCircle()
- if not FovCircle then return end
- if Aimbot.Fov and Aimbot.Enable then
- local mousePos = UserInputService:GetMouseLocation()
- FovCircle.Position = mousePos
- FovCircle.Color = Aimbot.FovColor
- FovCircle.Radius = Aimbot.FovRange
- FovCircle.Visible = true
- else
- FovCircle.Visible = false
- end
- end
- function Aimbot.Load()
- if Aimbot._loaded then return end
- Aimbot._loaded = true
- CreateFovCircle()
- UserInputService.InputBegan:Connect(function(input, processed)
- if input.UserInputType == Enum.UserInputType.MouseButton2 and not processed then
- if not Aimbot.Enable then return end
- AimbotActive = true
- -- Prioritas: FOV > NearTarget > ClosestOnScreen
- if Aimbot.Fov then
- Target = GetPlayerInFOV()
- end
- if not Target then
- Target = GetNearTarget()
- end
- if not Target then
- Target = GetClosestPlayerOnScreen()
- end
- end
- end)
- UserInputService.InputEnded:Connect(function(input, processed)
- if input.UserInputType == Enum.UserInputType.MouseButton2 and not processed then
- if not Aimbot.Enable then return end
- AimbotActive = false
- Target = nil
- lastPredictedPos = nil
- end
- end)
- RunService.RenderStepped:Connect(function()
- UpdateFovCircle()
- if not Aimbot.Enable then return end
- if AimbotActive then
- if not IsTargetValid(Target) then
- if Aimbot.Fov then
- Target = GetPlayerInFOV()
- end
- if not Target then
- Target = GetNearTarget()
- end
- if not Target then
- Target = GetClosestPlayerOnScreen()
- end
- end
- if Target then
- AimAt(Target)
- end
- end
- end)
- end
- return Aimbot
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement