Среда, 15.05.2024, 00:17
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Облако Тегов
начата планы Работа следуй roleplay ролеплей GMOD R.U.S.E Ruse бета игра рп мечты бесплатно intv intv без рекламы scifi-sofa wwf wwf России microsoft OneNote Альтернатива lua MTV кролик книга книженка О нет О вечном) uCoz Дизайн Matt а схуяли тебе нужны теги ня linux MINT wine Work yeah japan mario username годный пост Гарри
Поиск
Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 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)
Просмотров: 2854 | Комментарии: 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
Пользователь
Точное время 00:17
Опрос
Оцените сайт
Всего ответов: 2271