И так приступим. Что такое derma? Это библиотека для работы с VGUI, написанная Гарри и TAD2020. Проше говоря - это разнообразные менюшки в GMod'e. Что умеет она делать? Окошки, кнопки, ползунки, чек-боксы, скролл бары и многое другое. Полный список контроллов Этот туториал не расскажет вам о всей derma. Лишь о ее части, так как расчитан на новичков. И так приступим: Первым делом открываем ваш редактор скриптов (Я использую gedit) Сейчас мы создадим простое окошко, которые будет появляться при запуске скрипта: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку Не сложно, да? Темболее весть код расписан. И так, сохраняем наш скрипт, и запускаем его в GMod'e. Появится окошко с названием Derma frame. Ура! Теперь добавим кнопку в это окошко: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку
local DermaButton = vgui.Create( "DButton", DermaPanel ) -- Создает кнопку DermaButton:SetText( "Suicide" ) -- Текст на кнопке DermaButton:SetPos( 25, 50 ) -- Позиция кнопки DermaButton:SetSize( 100, 25 ) -- Размер кнопки DermaButton.DoClick = function() -- ЛКМ RunConsoleCommand( "kill" ) -- Происходит когда жмете кнопку end DermaButton.DoRightClick = function() -- ПКМ RunConsoleCommand( "say OMG LOL, RIGHT CLICK!!!1!1!!" ) -- Происходит когда вы жмете на кнопку правой кнопкой мыши end Тоже было не сложно. Теперь сохраняем скрипт и запускаем. Появляется окошко с кнопкой "Suicide". Жмете ЛКМ - умираете. ПКМ - выводится сообщение в чат. Теперь создадим кнопку, но на этот раз с изображением на ней. Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку
local SystemButton = vgui.Create("DSysButton", DermaPanel) -- Создает кнопку SystemButtone:SetPos( 25,50 ) -- Позиция кнопки SystemButtone:SetSize( 50, 25 ) -- Размер кнопки SystemButton:SetType( "close" ) -- Может иметь значение "up", "down", "left", "right", "updown", "close", "grip", "tick", "question" и "none". SystemButton.DoClick = function() -- ЛКМ RunConsoleCommand( "say OH SHI~" )n") -- Происходит когда вы нажали на кнопку end Это тоже было лекго. Сохраняем скрипт. Запускаем и видим кнопку с крестиком. Жмем - выводится сообщение. Сейчас займемся чек-боксами: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку llocal CheckBox = vgui.Create( "DCheckBoxLabel", DermaPanel ) -- Создает чек-бокс CheckBox:SetPos( 10, 50 ) -- Позиция чек бокса CheckBox:SetText( "Noclip" ) -- Текст рядом с чек-боксом CheckBox:SetConVar( "sbox_noclip" ) -- Консольная команда с переменной 0 и 1 CheckBox:SetValue( 1 ) -- Задоет значение, если нажато Легко? А я заебался писать. И так сохраняем наш скрипт, запускаем. Появляется окошко с чек-боксом. Включает/отключает noclip на сервере. Теперь ползунки: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку
local NumSlider = vgui.Create( "DNumSlider", DermaPanel ) -- Создает ползунок NumSlider:SetPos( 25,50 ) -- Позиция ползунка NumSlider:SetSize( 150, 100 ) -- Размер ползунка NumSlider:SetText( "Max Props" ) -- Текст на ползунке NumSlider:SetMin( 0 ) -- Минимальное значение ползунка NumSlider:SetMax( 256 ) -- Максимальное значение ползунка NumSlider:SetDecimals( 0 ) -- Позиция точки на ползунке NumSlider:SetConVar( "sbox_maxprops" ) -- Переменная в консоли Сохраняем, запускаем и получаем ползунок устанавливающий максимальное количество пропов. А сейчас мы сделаем панель на которой будут отображаться несколько чек-боксов и ползунок. Комментировать весь код не буду, покажу только главное: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку DermaList = vgui.Create( "DPanelList", DermaPanel ) DermaList:SetPos( 25,25 ) DermaList:SetSize( 200, 200 ) DermaList:SetSpacing( 5 ) -- Расстояние между вещами DermaList:EnableHorizontal( false ) -- Все расположено по вертикали DermaList:EnableVerticalScrollbar( true ) -- Включает скролл-бар, если вещи ушли за макс. Y local CategoryContentOne = vgui.Create( "DCheckBoxLabel" ) CategoryContentOne:SetText( "God Mode" ) CategoryContentOne:SetConVar( "sbox_godmode" ) CategoryContentOne:SetValue( 1 ) CategoryContentOne:SizeToContents() DermaList:AddItem( CategoryContentOne ) -- Добавляет local CategoryContentTwo = vgui.Create( "DCheckBoxLabel" ) CategoryContentTwo:SetText( "Fall Damage" ) CategoryContentTwo:SetConVar( "mp_falldamage" ) CategoryContentTwo:SetValue( 1 ) CategoryContentTwo:SizeToContents() DermaList:AddItem( CategoryContentTwo ) -- Добавляет local CategoryContentThree = vgui.Create( "DCheckBoxLabel" ) CategoryContentThree:SetText( "All Talk" ) CategoryContentFThree:SetConVar( "sv_alltalk" ) CategoryContentThree:SetValue( 1 ) CategoryContentThree:SizeToContents() DermaList:AddItem( CategoryContentThree ) -- Добавляет local CategoryContentFour = vgui.Create( "DNumSlider" ) CategoryContentFour:SetSize( 150, 50 ) CategoryContentFour:SetText( "Max Props" ) CategoryContentFour:SetMin( 0 ) CategoryContentFour:SetMax( 256 ) CategoryContentFour:SetDecimals( 0 ) CategoryContentFour:SetConVar( "sbox_maxprops" ) DermaList:AddItem( CategoryContentFour ) -- Добавляет local CategoryContentSix = vgui.Create("DSysButton", DermaPanel) CategoryContentSix:SetType( "close" ) CategoryContentSix.DoClick = function() RunConsoleCommand("sv_password", "Password") end CategoryContentSeven.DoRightClick = function() RunConsoleCommand("sv_password", "**") end DermaList:AddItem( CategoryContentSix ) -- Добавляет Опять сохраняем, запускаем. Видим окошко с тем, чем оно должно быть. Тыкайте, изменяйте переменные. Поле для ввода текста: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку
local DermaText = vgui.Create( "DTextEntry", DermaPanel ) -- Создает поле DermaText:SetPos( 20,25 ) -- Позиция поля DermaText:SetTall( 20 ) -- Высота поля DermaText:SetWide( 200 ) -- Ширина поля DermaText:SetEnterAllowed( true ) -- Разрешает вводить текст DermaText.OnEnter = function() -- Нажатие Enter RunConsoleCommand( "say I'm entered "..DermaText:GetValue().."!!! yippy!!!") -- Происходит когда жмете Enter DermaPanel:SetVisible( false ) -- Убирает панель когда жмете Enter end Сохраняем, запускаем. Откроется окно. Пишем туда любой текст и жмем enter. Окошко закроется, в чате появится: I'm entered "Введенный текст"!!! yippy!!! Вкладки: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку
local PropertySheet = vgui.Create( "DPropertySheet" ) -- Создает место для вкладок PropertySheet:SetParent( DermaPanel ) -- Прикрепляется к окошку PropertySheet:SetPos( 5, 30 ) -- Позиция PropertySheet:SetSize( 340, 315 ) -- Размер local SheetItemOne = vgui.Create( "DCheckBoxLabel" ) SheetItemOne:SetText( "Player damage" ) SheetItemOne:SetConVar( "sbox_plpdamage" ) SheetItemOne:SetValue( 1 ) SheetItemOne:SizeToContents() local SheetItemTwo = vgui.Create( "DCheckBoxLabel" ) SheetItemTwo:SetText( "Weapons" ) SheetItemTwo:SetConVar( "sbox_weapons" ) SheetItemTwo:SetValue( 1 ) SheetItemTwo:SizeToContents() PropertySheet:AddSheet( "Damage options", SheetItemOne, "gui/silkicons/user", false, false, "Set damage options" ) -- Создает вкладку с первым чек-боксом PropertySheet:AddSheet( "Other options", SheetItemTwo, "gui/silkicons/group", false, false, "Set other options, such as endable/distable weapons" ) -- Создает вкладку со вторым чек-боксом Сохраняем, запускаем. Ура! У нас есть менюшка с двумя вкладками и опциями в них! Ура товарищи! Теперь создадим список: Code local DermaPanel = vgui.Create( "DFrame" ) -- Создает рамку DermaPanel:SetPos( 50,50 ) -- Позиция на экране DermaPanel:SetSize( 800, 800 ) -- Размер панели X Y DermaPanel:SetTitle( "Derma frame" ) -- Название панели DermaPanel:SetVisible( true ) -- Делает видимой DermaPanel:SetDraggable( true ) -- Включает возможность таскания мышкой DermaPanel:ShowCloseButton( true ) -- Создает закрывающую кнопку DermaPanel:MakePopup() -- Показывает рамку
local DermaListView = vgui.Create("DListView") -- Создает список DermaListView:SetParent(DermaPanel) -- Выводит на нашу рамку DermaListView:SetPos(25, 50) -- Позиция списка DermaListView:SetSize(450, 625) -- Размер списка DermaListView:SetMultiSelect(false) -- Выбор нескольких пунктов списка отключен DermaListView:AddColumn("Name") -- Добавлять колонку DermaListView:AddColumn("Score") Добавляет колонку for k,v in pairs(player.GetAll()) do DermaListView:AddLine(v:Nick(),v:Frags()) -- Добавляет линии end Сохраняем, запускаем. Появляется список игроков на сервере и их очки. Ну я думаю пока вам хватит. Задание: написать красивую, не ULX подобную админку для зверя. Не обязательно функциональную. P.S. Если вы хотите увидеть в этом туториале еще что-то про дерму, пишите, добавлю. P.P.S. Всякие Derma desinger'ы - не труЪ Автор: KaRaTeL_VIP Запрещено полное или частичное копирование материалов без согласия автора.
|