Гайд [GLua] Как правильно писать клиентские меню?

  • 49
  • 1
  • 5
В этом гайде я покажу свой код, в котором все подписано, делаю ибо заебался заходить в клиентские части серверов и видеть там немного говнокода
Само меню не смогу показать, ибо сейчас нет рядом компа

Код меню:
local cols = {Color(0,0,0,150), Color(255,255,255)} -- кеширование цветов, ниже второй вариант, использовать cols[1] cols[2] .....
local col = { -- 1-й вариант использовать лучше, но пока забьм хуй на оптимизацию, использовать col.crasniy
    crasniy = Color(255,0,0),
    blackcol = Color(0,0,0)
}
-- сука, не делайте пожалуйста for i = 1, 128 do surface.CreateFont, нагрузка пиздец
surface.CreateFont('btnfont', {
    font = 'Roboto', -- ваш шрифт
    size = 20, -- размер,
    weight = 500, -- толщина
    extended = true -- поддержка киррилицы :okay?:
})

local function tmenu() -- локальные функции работают чуть быстрее
    local fr = vgui.Create('EditablePanel')
    fr:SetSize(ScrW() * .5, ScrH() * .5)
    fr:Center()
    fr:MakePopup()
    -- В EditablePanel нету методов: setdraggable, showclosebutton, settitle, проще говоря - чистый dframe
    fr.Paint = function(s,w,h) -- self, wight, height
        draw.RoundedBox(5,0,0,w,h,cols[1]) -- закругленный бокс
    end
    local btn = vgui.Create('DButton', fr)
    btn:Dock(BOTTOM) -- кнопка будет внизу, значения: Top, Bottom, Right, Left
    btn:SetTall(35) -- сетаем высоту, setsize не будет работать с dock'ом
    btn:SetText('Первая кнопка')
    btn:SetColor(cols[2])
    btn:SetFont('btnfont')
    btn.DoClick = function() -- действие при нажатии на кнопку
        chat.AddText(Color(175,0,0), 'ты нажал на кнопку!')
    end
    btn.Paint = function(s,w,h)
        draw.RoundedBox(5,0,0,w,h,cols[1]) -- закругленный бокс
    end
    local cls = vgui.Create('DButton', fr)
    cls:SetSize(32,32) -- значение должно быть одинаковое т.е если тут 48, 48, то в сет сайз тоже должно быть 48
    cls:SetPos(fr:GetWide() - 32,0) -- получаем ширину от нашего фрейма
    cls:SetText('X')
    cls:SetColor(cols[2])
    cls:SetFont('btnfont')
    cls.DoClick = function() -- действие при нажатии на кнопку
        fr:SetVisible(false) -- закрываем наш фрейм
    end
    cls.Paint = function(s,w,h)
        draw.RoundedBox(5,0,0,w,h,cols[1]) -- закругленный бокс
    end
end

--Осталась хуйня, кон комманд
concommand.Add('openmymenu', tmenu) -- вызываем наше меню
 
  • 175
  • 16
  • 61
Нет смысла убирать меню с помощью SetVisible, чтобы потом через консольную команду создавать сзаного меню (помня, что предыдущие ты только скрыл, оно не удалено). Заменил бы тогда на Remove
 
  • 49
  • 1
  • 5
Писал на ноуте, поэтому использовал что мог, но спасибо что напомнил
 
  • 9
  • 1
Контакты для связи отсутствуют.
может я тупой, но у меня пишет вот это

[ERROR] lua/print.lua:7: attempt to index global 'surface' (a nil value)
1. unknown - lua/print.lua:7
 
  • 175
  • 16
  • 61
может я тупой, но у меня пишет вот это

[ERROR] lua/print.lua:7: attempt to index global 'surface' (a nil value)
1. unknown - lua/print.lua:7
Скрипт работает и на серверной части, из-за чего выдаёт ошибку. На сервере нет surface
Решение для тебя: перемести в lua/client/ свой скрипт
 
Активность
Пока что здесь никого нет
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше...