✅ Как сделать свой TAB и логотип в нем

Я учусь делать hud для сервера. Если сделать отображение патронов, здоровья, брони легко по гайдам из интернета, то как сделать худ для таба (кнопка tab или же scoreboard) является для меня проблемой. Мне конкретно нужно добавить свой логотип в таб, как это делают большинство серверов. Что бы он появлялся сверху таблицы, когда игрок нажимает кнопку tab и так же исчезает, когда игрок отпускает кнопку tab.

Хуки для открытия/закрытия ТАБ-меню

local panel
hook.Add( "ScoreboardShow", "Scoreboard_Open", function()
    -- Отрисовать панель.
    -- Пример:
   panel = vgui.Create("DFrame")
   panel:SetSize(500, 500)
   panel:Center()
   panel:ShowCloseButton(true)
   panel:SetDraggable(false)
end )

-- Скрыть панель
hook.Add( "ScoreboardHide", "Scoreboard_Close", function()
   if (IsValid(panel) then
      panel:Close()    -- или panel:Remove()
   end
end )

Чтобы добавить логотип, нужно добавить его в папку materials/<твоя папка>/example.png. Учти что это нужно делать контентом(чтобы это было он был и у других)!
Дальше кодом в панели можешь его отобразить к примеру так:

local img = vgui.Create("DImage", panel)
img:SetPos(10, 10)
img:SetSize(380, 380)		
img:SetImage("materials/<твоя папка>/example.png")

По вашему коду у меня получилось сделать первую часть, а именно отрисовать логотип при открытии таба. Но при закрытии он не исчезает. Пробовал так же panel:Remove()

Прошу прощения. Убери из хука ScoreboardHide проверку на валидность, она там вероятно лишняя.

hook.Add( "ScoreboardHide", "Scoreboard_Close", function()
  panel:Close()    -- или panel:Remove()
end)

Может я что то делаю не так, но без проверки на валидность, консоль ругается на строку panel:Close или panel:Remove и выдаёт такую ошибку: attempt to index upvalue ‘panel’ (a nil value)

можешь скинуть код?

Проверку эту убирать не надо. Вполне возможно что ты отредактировал код во время того, как у тебя был открыт таб и панелька сохранилась до перезахода. Код должен работать исправно, но желательно добавить в ScoreboardShow это:

-- В начале хука
if IsValid(panel) then panel:Remove() end

-- В самом конце хука
return true