ClosestEnemy (GetPlayersInRange)

local function getClosestEnemy(playersInRange)
    local localPlayer = Players.LocalPlayer
    local localCharacter = localPlayer.Character
    if not localCharacter then
        return nil
    end

    local localRootPart = localCharacter:FindFirstChild("HumanoidRootPart")
    if not localRootPart then
        return nil
    end

    local closestEnemy = nil
    local shortestDistance = math.huge

    for _, enemyPlayer in pairs(playersInRange) do
        if enemyPlayer ~= localPlayer then
            local enemyCharacter = enemyPlayer.Character
            if enemyCharacter then
                local enemyRootPart = enemyCharacter:FindFirstChild("HumanoidRootPart")
                if enemyRootPart then
                    local enemyPosition, onScreen = workspace.CurrentCamera:WorldToViewportPoint(enemyRootPart.Position)
                    if onScreen then
                        local distance = (localRootPart.Position - enemyRootPart.Position).Magnitude
                        if distance < shortestDistance then
                            closestEnemy = enemyPlayer
                            shortestDistance = distance
                        end
                    end
                end
            end
        end
    end

    return closestEnemy
end

Last updated