Четверг, 26.12.2024, 03:35
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Облако Тегов
tutorial Addon map карты RP Аддон STOOL roleplay Combine pack Models sent Garry's Mod 10 adv Dupe maps stools Tools Tool lua sweps weapons Realistic Guns kermite admin GMOD Source PLAY NPC NUKE spacebuild laser background stargate Maker dark ori css atlantis Big Zombie anime gun ttt
Поиск
Статистика


Онлайн всего: 14
Гостей: 14
Пользователей: 0
 Каталог статей
Главная » Статьи » Статья

Derma: что это и с чем её едят
И так приступим.
Что такое 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

Запрещено полное или частичное копирование материалов без согласия автора.
Категория: Статья | Добавил: КаРаТеЛь (17.06.2010)
Просмотров: 2952 | Комментарии: 5 | Рейтинг: 4.5/4
Всего комментариев: 5
0  
#5 Алексей  (30.08.2010 08:45) [Материал]
Есть такая великая штука как LUAPAD -.-

0  
Да, но после большого количества запуска скрипта, гмод начинает лагать, и еще при чем тут обленились?
Тут ты уже просто оправдываешься... Если можно сделать быстрее - зачем делать долго?
Имхо моя прошлая аналогия со стариком так и остается актуальной.

0  
Нус, так себе честно говоря... Вот по чему:
Во первых - весь код взят с gmodwiki так что не надо тут:
Quote (KaRaTeL_VIP)
Легко? А я заебался писать.

Во вторых - зачем? Зачем все это? :). Имхо геймерам оно не надо, а те кому это нужно лучше пойдут и почитают оригинальную версию на gmodwiki с объяснениями автора.
В третьих - Ты тут по сути не чего не расписал, т.е. ты привел готовый код с gmodwiki, а лучше бы расписал каждый элемент и доступные для него параметры.
В четвертых - О_о
Code

for k,v in pairs(player.GetAll()) do      
      DermaListView:AddLine(v:Nick(),v:Frags()) [-- Добавляет линии
end

Фраза убила, т.е. добовляет линию? О_о
Тут создается непрерывный цикл который берет весь список пользователей, создает строку таблицы для каждого из них, и в первый столбец заносит ник, а во второй фраги!
Имхо не бери чужой код если не разобрал его, а объяснять тут функции по их названию это бред)
В пятых -
Code
P.P.S. Всякие Derma desinger'ы - не труЪ
- бред! Т.е. по твоему я должен прыгать из Notepad'а++ в gmod и обратно чтобы разместить элемент там где мне надо, и придать ему такой размер какой мне надо? Бред, везде приходит автоматизация, и это нормально! Гораздо удобнее в Derma disanger'е разместить все элементы так как нужно, придать им нужный размер, а потом скопировать код и дописывать ему функции! А ты говоришь как упрямый старик, который закручивал всю жизнь все отверткой, и отказывается от шуроповерта....
Мб и жесткая критика, но правдивая!

0  
#2 Максим [ КаРаТеЛь(19.06.2010 02:59) [Материал]
ЩИТО?! Ладно, позже распишу все настройки.
Quote
бред! Т.е. по твоему я должен прыгать из Notepad'а++ в gmod

Вы, сударь, в конец обленились. Гмод запускается в окне, так что все исправляется (Не все конечно) не выходя от туда.

0  
#4 Сергей [ tripledesu(19.06.2010 22:34) [Материал]
Время OLD SCHOOL прошло, проснись - ты в будущем. Бугагашеньки.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright NextSoft © Garrys Mod Community 2024 | Хостинг от uCoz
Пользователь
Точное время 03:35
Опрос
Оцените сайт
Всего ответов: 2272