-- Стабильный цвет по нику
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