Garry's Mod

Garry's Mod

92 ratings
Руководство по Derma
By SHooTeR
Руководство о большинстве элементов Derma.
2
   
Award
Favorite
Favorited
Unfavorite
Что такое Derma?
Это VGUI элементы в Garry's Mod. Например окна, настройки инструментов, меню спавна и прочее.
Что с этим можно сделать?
С помощью Derma можно сделать настройки для своего аддона, меню админа, окно приветствия, и всё то, что можно потыкать :).
Что для этого надо?
Для начала, давайте подготовим всё, что нам пригодится для этого.

Я советую использовать Notepad++ с установленным плагином "Gmod Lua Lexer", который можно установить в менеджере плагинов.

Зайдите в папку "Steam/steamapps/common/GarrysMod/garrysmod/lua/autorun/client", и создайте там файл c любым именем (например derma) и с расширением lua. Сразу можете вписать в него этот код:
function TestFunction() //Создание и начало функции. //Между началом и концом функции будет находится то, что будет выполнять функция. end //Конец функции concommand.Add( "DermaTest", TestFunction) //Добавление консольной команды, запускающей функцию.
(Если в этот момент Вы уже были в игре, то перезапустите игру, что бы файл нормально загрузился. Если Вы не находились в игре, то просто зайдите в неё и файл сам загрузится.)
С помощью этого кода мы будет открывать наше окно, введя в консоль DermaTest.

Теперь Вы готовы к основной части руководства.
DFrame
DFrame - это окно. Почти самый главный элемент, используемый почти всегда.
local DermaFrame = vgui.Create( "DFrame" ) //Создаёт окно. DermaFrame:SetTitle( "Простенькое окно" ) //Устанавливает название окна. DermaFrame:SetPos( 100,100 ) //Устанавливает позицию окна. DermaFrame:SetSize( 300, 200 ) //Устанавливает размер окна. DermaFrame:SetSizable(true) //Если True, окно можно будет растянуть. DermaFrame:SetVisible( true ) //Если True, окно сразу включается при запуске функции, при false будет ждать команду на запуск. DermaFrame:SetDraggable( true ) //Если True, окно можно перетаскивать. DermaFrame:ShowCloseButton( true ) //Если True, у окна есть кнопка закрытия (не советую убирать на время тестов). DermaFrame:MakePopup(true) //Если True, экран блокируется и появляется курсор.
DLabel
DLabel - текст. Можно использовать просто как дополнение или описание.
local DermaLabel = vgui.Create("DLabel") DermaLabel:SetParent( DermaFrame ) //Устанавливает родительский элемент(то, на чём распологается кнопка). DermaLabel:SetPos(10,40) //Устанавливает позицию текста DermaLabel:SetColor(Color(255,255,255,255)) //Устанавливает цвет текста DermaLabel:SetFont("default") //Устанавливает шрифт текста. (можно использовать только те шрифты, которые доступны в игре) DermaLabel:SetText("Я текст, а ты мой хозяин.") //Устанавливает текст DermaLabel:SizeToContents() //Автоматически подогнать размер (если размер будет меньше текста, он оборвётся многоточием)
DButton
DButton - кнопка. Просто кнопка.
local DermaButton = vgui.Create( "DButton", DermaFrame ) //Создаёт кнопку. DermaButton:SetText( "Нажми меня" ) //Устанавливает текст на кнопке. DermaButton:SetPos( 100, 40 ) //Устанавливает позицию кнопка. DermaButton:SetSize( 100, 30 ) //Устанавливает размер кнопки. DermaButton.DoClick = function () //Функция, выполняющую кнопка. RunConsoleCommand( "act", "muscle" ) //То, что делает кнопка. В данном случае включает анимацию (насмешка/жест). DermaButton:SetText( "Ты меня нажал" ) //То, что делает кнопка. В данном случае меняет текст на себе. end //Конец функции кнопки.

DCheckBoxLabel
DCheckBoxLabel - галочка, метка. Обычно используется для переключения переменных.
local DermaCheckBoxLabel = vgui.Create( "DCheckBoxLabel", DermaFrame ) //Создаёт чекбокс, и сразу прикрепляет его к родительскому элементу DermaCheckBoxLabel:SetPos( 15,40 ) //Устанавливает позицию. DermaCheckBoxLabel:SetText( "Разрешить режим полёта?" ) //Устанавливает текст рядом. DermaCheckBoxLabel:SetConVar( "sbox_noclip" ) //Консольная команда, которая будет изменена DermaCheckBoxLabel:SetValue( 1 ) //Значение, которое устанавливается при включение DermaCheckBoxLabel:SizeToContents() //Автоматически подогнать размер.
DNumSlider
DNumSlider - ползунок.
Примечание: Менять значение можно не только перетаскивая ползунок, но и зажав текст.
local DermaNumSlider = vgui.Create( "DNumSlider", DermaFrame ) //Создаёт ползунок (слайдер). DermaNumSlider:SetPos( 20,40 ) //Устанавливает позицию ползунки. DermaNumSlider:SetSize( 260, 20 ) //Устанавливает размер ползунка. DermaNumSlider:SetText( "Кол-во пропов." ) //Устанавливает текст перед ползунком. DermaNumSlider:SetMin( 0 ) //Минимальное значение, которое можно выбрать. DermaNumSlider:SetMax( 300 ) //Максимальное значение, которое можно выбрать. DermaNumSlider:SetDecimals( 0 ) //Кол-во допустимых знаков после запятой. Если 0, то число будет всегда целое. DermaNumSlider:SetConVar( "sbox_maxprops" ) //Переменная, которая будет меняться
DTextEntry
DTextEntry - поле для ввода текста.
local DermaTextEntry = vgui.Create( "DTextEntry", DermaFrame ) //Создаёт поле для ввода. DermaTextEntry:SetPos( 20,40 ) //Устанавливает позицию. DermaTextEntry:SetSize( 260,20 ) //Устанавливает размер. DermaTextEntry:SetText("Введите сюда текст") //Устанавливает текст, который будет введён по умолчанию. DermaTextEntry:SetMultiline( false ) //Если True, текст можно будет переносить на новые строчки. DermaTextEntry:SetEditable( true ) //Если True, текст можно изменять. DermaTextEntry:SetAllowNonAsciiCharacters( true ) //Разрешить все символы (включая русские) DermaTextEntry:SetEnterAllowed( true ) //Если True, будет работать кнопка Enter. DermaTextEntry.OnEnter = function() //Действие при нажатие Enter. Msg("Вы написали "..DermaTextEntry:GetValue().."." ) //То, что происходит. end
DImage
DImage - изображение.
local DermaImage = vgui.Create( "DImage", DermaFrame ) //Создаёт изображение. DermaImage:SetPos( 100, 40 ) //Устанавливает позицию. DermaImage:SetImage( "icon64/playermodel.png" ) //Указывает путь к изображению. DermaImage:SizeToContents() //Автоматически подгоняет размер под размер оригинального изображения (можно сделать и свой размер с помощью SetSize() )
DImageButton
DImageButton - Кнопка в виде изображения.
Примечание: не чем не отличается от простого изображения, кроме выполнения действия при нажатие.
local DermaImageButton = vgui.Create( "DImageButton", DermaFrame ) //Создаёт кнопку. DermaImageButton:SetPos( 100, 40 ) //Устанавливает позицию. DermaImageButton:SetImage( "icon64/playermodel.png" ) //Указывает путь к изображению. DermaImageButton:SizeToContents() //Автоматически подгоняет размер под размер оригинального изображения (можно сделать и свой размер с помощью SetSize() ). DermaImageButton.DoClick = function() //Действие кнопки. print("Нажми меня ещё раз.") //То, что делает кнопка. end
DColorMixer
DColorMixer - выбор цвета.
local DermaColorMixer = vgui.Create( "DColorMixer", DermaFrame ) //Создаёт цветовой миксер. DermaColorMixer:SetPos( 20, 30 ) //Устанавливает позицию. DermaColorMixer:SetSize( 260, 160) //Устанавливает размер. DermaColorMixer:SetColor(Color(0,255,255,255)) //Устанавливает цвет, который будет стандартно выбран.
DPanelList
DPanelList - панель со списком элементов.
Примечание: не надо указывать позицию для элементов в списке. они сами будут распологатся по очереди.
DermaPanelList = vgui.Create( "DPanelList", DermaFrame ) //Создаёт список. DermaPanelList:SetPos( 20,25 ) //Устанавливает позицию. DermaPanelList:SetSize( 280, 170 ) //Устанавливает позицию. DermaPanelList:SetSpacing( 3 ) //Кол-во элементов в списке. DermaPanelList:EnableHorizontal( false ) //Если false, элементы будут только по вертикале. DermaPanelList:EnableVerticalScrollbar( true ) // Если True, будет появляться прокрутка по горизонтали (если элементы не будут помещаться). local FirstObject = vgui.Create( "DCheckBoxLabel" ) FirstObject:SetText( "Режим полёта" ) FirstObject:SetConVar( "sbox_noclip" ) FirstObject:SetValue( 1 ) FirstObject:SizeToContents() local SecondObject = vgui.Create( "DNumSlider" ) SecondObject:SetText( "Кол-во пропов" ) SecondObject:SetConVar( "sbox_maxprops" ) SecondObject:SetMin(0) SecondObject:SetMax(300) SecondObject:SetDecimals( 0 ) SecondObject:SizeToContents() local ThirdObject = vgui.Create( "DButton" ) ThirdObject:SetText( "Кнопка закрытия" ) ThirdObject.DoClick = function() DermaFrame:Remove() end DermaPanelList:AddItem( FirstObject ) //Добавляет указанный элемент в список. DermaPanelList:AddItem( SecondObject ) //Добавляет указанный элемент в список. DermaPanelList:AddItem( ThirdObject ) //Добавляет указанный элемент в список.
DPanel
DPanel - как прошлая панель, только элементы можно размещать где угодно.
local DermaPanel = vgui.Create( "DPanel", DermaFrame ) //Создаёт панель DermaPanel:SetPos( 5, 25 ) //Устанавливает позицию DermaPanel:SetSize( 290, 170 ) //Угадайте, что это делает :D local DermaLabel = vgui.Create("DLabel", DermaPanel) //В данном случае прикреплять надо к панеле DermaPanel DermaLabel:SetPos(10,155) //В данном случае позиция рассчитывается относительно панели DermaPanel, а не основного окна DermaLabel:SetFont("default") DermaLabel:SetColor(Color(0,0,0,255)) DermaLabel:SetText("Простенький текст внизу панельки.") DermaLabel:SizeToContents()
DPropertySheet
DPropertySheet - Вкладки сверху.
Примечание: в одной вкладке можно разместить только 1 элемент, поэтому сначала поместите туда одну из панелей выше, а потом в эту панель уже остальные элементы.
local DermaPropertySheet = vgui.Create( "DPropertySheet", DermaFrame ) //Создаёт вкладки DermaPropertySheet:SetPos( 5, 30 ) DermaPropertySheet:SetSize( 340, 315 ) local DermaPanel1 = vgui.Create( "DPanel") DermaPanel1:SetPos( 5, 25 ) DermaPanel1:SetSize( 50, 50 ) //Неважно, какой размер вы тут укажете. Панель всё-равно изменит размер под вкладку. local DermaPanel2 = vgui.Create( "DPanel") DermaPanel2:SetPos( 5, 25 ) DermaPropertySheet:AddSheet( "Вкладка 1", DermaPanel1, "icon16/application.png", false, false, "Основное меню" ) //Эта строчка добавляет элемент во вкладку. Её формат: Имя, Элемент, Иконка, незнаю, незнаю, всплывающая подсказка. DermaPropertySheet:AddSheet( "Вкладка 2", DermaPanel2, "icon16/bullet_wrench.png", false, false, "Меню настроек" )
Завершение
Надеюсь кому-то это помогло :).
На всякий случай ещё выкладываю код со всеми элементами сразу.
function TestFunction() //Создание и начало функции. local DermaFrame = vgui.Create( "DFrame" ) //Создаёт окно. DermaFrame:SetTitle( "Простенькое окно" ) //Устанавливает название окна. DermaFrame:SetPos( 100,100 ) //Устанавливает позицию окна. DermaFrame:SetSize( 800, 220 ) //Устанавливает размер окна. DermaFrame:SetSizable(true) //Если True, окно можно будет растянуть. DermaFrame:SetVisible( true ) //Если True, окно сразу включается при запуске функции, при false будет ждать команду на запуск. DermaFrame:SetDraggable( true ) //Если True, окно можно перетаскивать. DermaFrame:ShowCloseButton( true ) //Если True, у окна есть кнопка закрытия (не советую убирать на время тестов) DermaFrame:MakePopup(true) //Если True, экран блокируется и появляется курсор. local DermaLabel = vgui.Create("DLabel") DermaLabel:SetParent( DermaFrame ) //Устанавливает родительский элемент(то, на чём распологается кнопка). DermaLabel:SetPos(10,25) //Устанавливает позицию текста DermaLabel:SetColor(Color(255,255,255,255)) //Устанавливает цвет текста DermaLabel:SetFont("default") //Устанавливает шрифт текста. (можно использовать только те шрифты, которые доступны в игре) DermaLabel:SetText("Окно со всеми элементами из руководства.") //Устанавливает текст DermaLabel:SizeToContents() //Автоматически подогнать размер (если размер будет меньше текста, он оборвётся многоточием) local DermaButton = vgui.Create( "DButton", DermaFrame ) //Создаёт кнопку. DermaButton:SetText( "Нажми меня" ) //Устанавливает текст на кнопке. DermaButton:SetPos( 300, 25 ) //Устанавливает позицию кнопка. DermaButton:SetSize( 100, 30 ) //Устанавливает размер кнопки. DermaButton.DoClick = function () //Функция, выполняющую кнопка. RunConsoleCommand( "act", "muscle" ) //То, что делает кнопка. В данном случае включает анимацию (насмешка/жест). DermaButton:SetText( "Ты меня нажал" ) //То, что делает кнопка. В данном случае меняет текст на себе. end local DermaCheckBoxLabel = vgui.Create( "DCheckBoxLabel", DermaFrame ) //Создаёт чекбокс, и сразу прикрепляет его к родительскому элементу DermaCheckBoxLabel:SetPos( 300,60 ) //Устанавливает позицию. DermaCheckBoxLabel:SetText( "Разрешить режим полёта?" ) //Устанавливает текст рядом. DermaCheckBoxLabel:SetConVar( "sbox_noclip" ) //Консольная команда, которая будет изменена DermaCheckBoxLabel:SetValue( 1 ) //Значение, которое устанавливается при включение DermaCheckBoxLabel:SizeToContents() //Автоматически подогнать размер. local DermaNumSlider = vgui.Create( "DNumSlider", DermaFrame ) //Создаёт ползунок (слайдер). DermaNumSlider:SetPos( 300,80 ) //Устанавливает позицию ползунки. DermaNumSlider:SetSize( 260, 20 ) //Устанавливает размер ползунка. DermaNumSlider:SetText( "Кол-во пропов." ) //Устанавливает текст перед ползунком. DermaNumSlider:SetMin( 0 ) //Минимальное значение, которое можно выбрать. DermaNumSlider:SetMax( 300 ) //Максимальное значение, которое можно выбрать. DermaNumSlider:SetDecimals( 0 ) //Кол-во допустимых знаков после запятой. Если 0, то число будет всегда целое. DermaNumSlider:SetConVar( "sbox_maxprops" ) //Переменная, которая будет меняться local DermaTextEntry = vgui.Create( "DTextEntry", DermaFrame ) //Создаёт поле для ввода. DermaTextEntry:SetPos( 300,100 ) //Устанавливает позицию. DermaTextEntry:SetSize( 260,20 ) //Устанавливает размер. DermaTextEntry:SetText("Введите сюда текст") //Устанавливает текст, который будет введён по умолчанию. DermaTextEntry:SetMultiline( false ) //Если True, текст можно будет переносить на новые строчки. DermaTextEntry:SetEditable( true ) //Если True, текст можно изменять. DermaTextEntry:SetAllowNonAsciiCharacters( true ) //Разрешить все символы (включая русские) DermaTextEntry:SetEnterAllowed( true ) //Если True, будет работать кнопка Enter. DermaTextEntry.OnEnter = function() //Действие при нажатие Enter. Msg("Вы написали "..DermaTextEntry:GetValue().."." ) //То, что происходит. end local DermaImage = vgui.Create( "DImage", DermaFrame ) //Создаёт изображение. DermaImage:SetPos( 300, 120 ) //Устанавливает позицию. DermaImage:SetImage( "icon64/playermodel.png" ) //Указывает путь к изображению. DermaImage:SizeToContents() //Автоматически подгоняет размер под размер оригинального изображения (можно сделать и свой размер с помощью SetSize() ) local DermaImageButton = vgui.Create( "DImageButton", DermaFrame ) //Создаёт кнопку. DermaImageButton:SetPos( 380, 120 ) //Устанавливает позицию. DermaImageButton:SetImage( "icon64/playermodel.png" ) //Указывает путь к изображению. DermaImageButton:SizeToContents() //Автоматически подгоняет размер под размер оригинального изображения (можно сделать и свой размер с помощью SetSize() ). DermaImageButton.DoClick = function() //Действие кнопки. DermaTextEntry:SetText("Ты нажал на кнопку внизу... Это не хорошо!") //То, что делает кнопка. end local DermaColorMixer = vgui.Create( "DColorMixer", DermaFrame ) //Создаёт цветовой миксер. DermaColorMixer:SetPos( 580, 30 ) //Устанавливает позицию. DermaColorMixer:SetSize( 200, 170) //Устанавливает размер. DermaColorMixer:SetColor(Color(0,255,255,255)) //Устанавливает цвет, который будет стандартно выбран. local DermaPropertySheet = vgui.Create( "DPropertySheet", DermaFrame ) //Создаёт вкладки DermaPropertySheet:SetPos( 5, 40 ) DermaPropertySheet:SetSize( 290, 175 ) DermaPanelList = vgui.Create( "DPanelList", DermaFrame ) //Создаёт список. DermaPanelList:SetPos( 20,25 ) //Устанавливает позицию. DermaPanelList:SetSize( 280, 170 ) //Устанавливает позицию. DermaPanelList:SetSpacing( 3 ) //Кол-во элементов в списке. DermaPanelList:EnableHorizontal( false ) //Если false, элементы будут только по вертикале. DermaPanelList:EnableVerticalScrollbar( true ) // Если True, будет появляться прокрутка по горизонтали (если элементы не будут помещаться). local FirstObject = vgui.Create( "DCheckBoxLabel" ) FirstObject:SetText( "Режим полёта" ) FirstObject:SetConVar( "sbox_noclip" ) FirstObject:SetValue( 1 ) FirstObject:SizeToContents() local SecondObject = vgui.Create( "DNumSlider" ) SecondObject:SetText( "Кол-во пропов" ) SecondObject:SetConVar( "sbox_maxprops" ) SecondObject:SetMin(0) SecondObject:SetMax(300) SecondObject:SetDecimals( 0 ) SecondObject:SizeToContents() local ThirdObject = vgui.Create( "DButton" ) ThirdObject:SetText( "Кнопка закрытия" ) ThirdObject.DoClick = function() DermaFrame:Remove() end DermaPanelList:AddItem( FirstObject ) //Добавляет указанный элемент в список. DermaPanelList:AddItem( SecondObject ) //Добавляет указанный элемент в список. DermaPanelList:AddItem( ThirdObject ) //Добавляет указанный элемент в список. local DermaPanel = vgui.Create( "DPanel", DermaFrame ) //Создаёт панель DermaPanel:SetPos( 5, 25 ) //Устанавливает позицию DermaPanel:SetSize( 290, 170 ) //Угадайте, что это делает :D local DermaLabel1 = vgui.Create("DLabel", DermaPanel) //В данном случае прикреплять надо к панеле DermaPanel DermaLabel1:SetPos(10,155) //В данном случае позиция рассчитывается относительно панели DermaPanel, а не основного окна DermaLabel1:SetFont("default") DermaLabel1:SetColor(Color(0,0,0,255)) DermaLabel1:SetText("Простенький текст внизу панельки.") DermaLabel1:SizeToContents() DermaPropertySheet:AddSheet( "Вкладка 1", DermaPanelList, "icon16/application.png", false, false, "Основное меню" ) //Эта строчка добавляет элемент во вкладку. Её формат: Имя, Элемент, Иконка, незнаю, незнаю, всплывающая подсказка. DermaPropertySheet:AddSheet( "Вкладка 2", DermaPanel, "icon16/bullet_wrench.png", false, false, "Меню настроек" ) end //Конец функции concommand.Add( "DermaTest", TestFunction) //Консольная команда, запускающая функцию.
25 Comments
MARK2580 22 Mar, 2024 @ 12:44pm 
А есть какая инфа чтобы размер шрифта менять и у окна и у кнопок ?
homuncul 1 Feb, 2024 @ 11:57am 
спасибо за гайд, могу еще спросить? вообщем я раньше смотрел гайды по Expression 2 на wiremod. Я видел как там человек создавал такую же панель только вот уже на E2. Только этой команды которю вводил тот чел у меня небыло даже в подсказках и E2 helper. ничего не было.
bo en 8 Jan, 2024 @ 6:51am 
ахуенный гайд, спасибо!!
P0Ha71 7 Aug, 2022 @ 10:21am 
Правильно будет: Руководство по Der'mу
AronLoid 11 Mar, 2021 @ 4:23am 
ошибок много в гайде
Jabka 25 Nov, 2017 @ 10:27am 
Про Dock расскажи
Artes 4 Sep, 2017 @ 8:06am 
Чтоб жизн малина не казалась
palisan 4 Sep, 2017 @ 8:00am 
ну и че ето за реклама хочеш пояснять мм а ммм а
Artes 4 Sep, 2017 @ 4:09am 
Хоба https://www.youtube.com/user/ArtesDD Я тут замутил да.
palisan 20 Dec, 2016 @ 5:04am 
спас иба спас иба всеем дос видания всееем баю баи