local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local GunUtility = require(ReplicatedStorage:WaitForChild("Modules"):WaitForChild("Libraries"):WaitForChild("GunUtility")) local Enabled = true local TeamCheck = true local FOVRadius = 300 local HeadChance = 10 local HitChance = 100 local R6Parts = {"Torso", "Left Arm", "Right Arm", "Left Leg", "Right Leg"} local FOVCircle = Drawing.new("Circle") FOVCircle.Visible = true FOVCircle.Radius = FOVRadius FOVCircle.Thickness = 1 FOVCircle.Color = Color3.fromRGB(255, 255, 255) FOVCircle.Transparency = 0.7 FOVCircle.NumSides = 60 FOVCircle.Filled = false local TargetDot = Drawing.new("Circle") TargetDot.Visible = false TargetDot.Radius = 3 TargetDot.Color = Color3.fromRGB(255, 0, 0) TargetDot.Filled = true TargetDot.Transparency = 1 local function ShuffleTable(Tbl) local Shuffled = table.clone(Tbl) for I = #Shuffled, 2, -1 do local J = math.random(1, I) Shuffled[I], Shuffled[J] = Shuffled[J], Shuffled[I] end return Shuffled end local function GetRandomBodyPart() if math.random(1, 100) <= HeadChance then return "Head" end return ShuffleTable(R6Parts)[1] end local function GetTeam(Character) local Player = Players:GetPlayerFromCharacter(Character) if Player then local TeamValue = Player:FindFirstChild("_Team") if TeamValue then return TeamValue.Value end return Player.Team end local TeamValue = Character:FindFirstChild("_Team") if TeamValue then return TeamValue.Value end return nil end local function IsEnemy(Player) if Player == LocalPlayer then return false end if not Player.Character then return false end local Humanoid = Player.Character:FindFirstChildOfClass("Humanoid") if not Humanoid or Humanoid.Health <= 0 then return false end if TeamCheck then local LocalCharacter = LocalPlayer.Character if not LocalCharacter then return false end local MyTeam = GetTeam(LocalCharacter) local TheirTeam = GetTeam(Player.Character) if MyTeam and TheirTeam and MyTeam == TheirTeam then return false end end return true end local function IsDummy(Model) if not Model:IsA("Model") then return false end if Model.Name ~= "Dummy" then return false end local Humanoid = Model:FindFirstChildOfClass("Humanoid") if not Humanoid or Humanoid.Health <= 0 then return false end if not Model:FindFirstChild("Head") then return false end return true end local function GetMousePosition() return UserInputService:GetMouseLocation() end local function GetClosestTargetToMouse() local ClosestCharacter = nil local ClosestDistance = FOVRadius local MousePos = GetMousePosition() local Cam = workspace.CurrentCamera if not Cam then return nil end local AllPlayers = Players:GetPlayers() for I = 1, #AllPlayers do local Player = AllPlayers[I] if IsEnemy(Player) and Player.Character:FindFirstChild("Head") then local HeadPos, OnScreen = Cam:WorldToViewportPoint(Player.Character.Head.Position) if OnScreen then local ScreenPos = Vector2.new(HeadPos.X, HeadPos.Y) local Distance = (ScreenPos - MousePos).Magnitude if Distance < ClosestDistance then ClosestDistance = Distance ClosestCharacter = Player.Character end end end end local Dummies = workspace:GetChildren() for I = 1, #Dummies do local Child = Dummies[I] if IsDummy(Child) then local HeadPos, OnScreen = Cam:WorldToViewportPoint(Child.Head.Position) if OnScreen then local ScreenPos = Vector2.new(HeadPos.X, HeadPos.Y) local Distance = (ScreenPos - MousePos).Magnitude if Distance < ClosestDistance then ClosestDistance = Distance ClosestCharacter = Child end end end end return ClosestCharacter end local OldRaycastForFire = GunUtility.RaycastForFire GunUtility.RaycastForFire = function(Origin, Direction, Params) if Enabled and math.random(1, 100) <= HitChance then local TargetCharacter = GetClosestTargetToMouse() if TargetCharacter then local PartName = GetRandomBodyPart() local TargetPart = TargetCharacter:FindFirstChild(PartName) or TargetCharacter:FindFirstChild("Head") if TargetPart then local NewDirection = (TargetPart.Position - Origin).Unit * Direction.Magnitude return OldRaycastForFire(Origin, NewDirection, Params) end end end return OldRaycastForFire(Origin, Direction, Params) end RunService.RenderStepped:Connect(function() FOVCircle.Position = GetMousePosition() local TargetCharacter = GetClosestTargetToMouse() if TargetCharacter and TargetCharacter:FindFirstChild("Head") then local Cam = workspace.CurrentCamera if Cam then local HeadPos, OnScreen = Cam:WorldToViewportPoint(TargetCharacter.Head.Position) if OnScreen then TargetDot.Position = Vector2.new(HeadPos.X, HeadPos.Y) TargetDot.Visible = true else TargetDot.Visible = false end else TargetDot.Visible = false end else TargetDot.Visible = false end end)