Загрузка данных


-- Стабильный цвет по нику
local function getColorFromNick(nick)
    local hash = 0
    for i = 1, #nick do
        hash = (hash * 31 + string.byte(nick, i)) % 360
    end
    return HSVToColor(hash, 0.55, 0.75)
end

local function drawAvatar(ply, x, y, size)
    -- Сначала пробуем получить настоящую аватарку
    local av = nil
    if ply.GetAvatar then
        pcall(function() av = ply:GetAvatar() end)
    end

    if av then
        surface.SetDrawColor(255, 255, 255)
        surface.SetMaterial(av)
        surface.DrawTexturedRect(x, y, size, size)
    else
        -- Красивая заглушка: цветной круг с буквой
        local nick = ply:Nick() or "?"
        local color = getColorFromNick(nick)
        local letter = string.upper(string.sub(nick, 1, 1))

        -- Цветной фон (круг через DrawRect с закруглением не сделать, делаем квадрат)
        surface.SetDrawColor(color.r, color.g, color.b, 255)
        surface.DrawRect(x, y, size, size)

        -- Затемнение по краям для объёма
        surface.SetDrawColor(0, 0, 0, 60)
        surface.DrawRect(x, y + size - 6, size, 6)
        surface.DrawRect(x + size - 6, y, 6, size)

        -- Буква
        surface.SetFont("tab_nick")
        local tw, th = surface.GetTextSize(letter)
        draw.SimpleText(
            letter,
            "tab_nick",
            x + size / 2, y + size / 2 - 1,
            Color(255, 255, 255),
            TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER
        )
    end

    -- Обводка по пингу
    surface.SetDrawColor(pingColor(ply:Ping()))
    surface.DrawOutlinedRect(x - 1, y - 1, size + 2, size + 2, 2)
end