local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer local Devv = require(ReplicatedStorage:WaitForChild("Devv")) local load = Devv.load local ClientGuns = load("ClientTools").ToolModules.ClientGuns local ClientTools = load("ClientTools") local function getEnemies() local enemies = {} for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("Humanoid") and player.Character.Humanoid.Health > 0 then table.insert(enemies, player) end end return enemies end local function getAimedDirection(originalCFrame, toolId, ownerId) if ownerId ~= LocalPlayer.UserId then return originalCFrame end local muzzlePos = originalCFrame.Position local bestTarget = nil local bestDist = 2500 for _, enemy in ipairs(getEnemies()) do local head = enemy.Character and enemy.Character:FindFirstChild("Head") if head then local screenPos, onScreen = Camera:WorldToViewportPoint(head.Position) if onScreen then local mousePos = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude if dist < bestDist then bestDist = dist bestTarget = head.Position end end end end return bestTarget and CFrame.lookAt(muzzlePos, bestTarget) or originalCFrame end local originalMakeGunProjectiles = ClientGuns.MakeGunProjectiles ClientGuns.MakeGunProjectiles = function(ownerId, toolId, muzzleCFrame, projectilesData) local newProjectilesData = {} for _, proj in ipairs(projectilesData) do local projId = proj[1] local aimCFrame = proj[2] local newAimCFrame = getAimedDirection(aimCFrame, toolId, ownerId) table.insert(newProjectilesData, {projId, newAimCFrame}) end return originalMakeGunProjectiles(ownerId, toolId, muzzleCFrame, newProjectilesData) end