local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera local function areSameTeam(player1, player2) local success, areSameTeamFunc = pcall(function() return shared("AreSameTeam") end) if success and areSameTeamFunc then return areSameTeamFunc(player1, player2) end return player1.Team == player2.Team end local function getClosestHeadToCursor() local cameraCFrame = Camera.CFrame local cameraPos = cameraCFrame.Position local lookVector = cameraCFrame.LookVector local bestHead = nil local bestScreenDistance = math.huge local maxScreenDistance = 1000 for _, model in ipairs(Workspace:GetChildren()) do if not model:IsA("Model") then continue end local head = model:FindFirstChild("Head") if not (head and head:IsA("BasePart")) then continue end local character = model local humanoid = character:FindFirstChildOfClass("Humanoid") if not (humanoid and humanoid.Health > 0) then continue end local player = Players:GetPlayerFromCharacter(character) if not player then elseif player == LocalPlayer or areSameTeam(player, LocalPlayer) then continue end local headPos = head.Position local screenPos, onScreen = Camera:WorldToScreenPoint(headPos) if not onScreen then continue end local screenCenter = Camera.ViewportSize / 2 local screenDistance = (Vector2.new(screenPos.X, screenPos.Y) - screenCenter).Magnitude if screenDistance > maxScreenDistance then continue end local raycastParams = RaycastParams.new() raycastParams.FilterType = Enum.RaycastFilterType.Exclude raycastParams.FilterDescendantsInstances = { LocalPlayer.Character, Camera } local ray = Workspace:Raycast(cameraPos, headPos - cameraPos, raycastParams) if ray and ray.Instance:IsDescendantOf(character) then if screenDistance < bestScreenDistance then bestScreenDistance = screenDistance bestHead = head end end end return bestHead end local hitscanModule local success, err = pcall(function() hitscanModule = require(LocalPlayer.PlayerScripts.Client.game.classes.Projectiles.HitscanProjectile) end) if not success then warn("HitscanProjectile module doesnt exist anymore:", err) return end local originalNew = hitscanModule.new hitscanModule.new = function(origin, velocity, magnetStrength, owner, uniqueId, weaponConfig, tracerConfig, tracerOffset) if owner == LocalPlayer then local targetHead = getClosestHeadToCursor() if targetHead then local cameraPos = Camera.CFrame.Position local newDirection = (targetHead.Position - cameraPos).Unit local speed = velocity.Magnitude velocity = newDirection * speed end end return originalNew(origin, velocity, magnetStrength, owner, uniqueId, weaponConfig, tracerConfig, tracerOffset) end