Создание скриптов в GTA 5 на C#: интерактивное меню с помощью NativeUI: часть первая

13 ноября 2018
Пейдж


NativeUI - многофункциональный плагин, позволяющий работать с графическим интерфейсом GTA 5: создавать меню, тексты, выводить на экран текстуры и многое другое. Меня зовут Пейдж и сегодня мы создадим с тобой полноценное рабочее меню. Урок разделен на две части, рекомендую читать их по порядку.


Для работы потребуется:
* ScriptHookVDotNet
* NativeUI
* Базовые знания языка C# и работы в Visual Studio.


Начало работы
Открой Visual Studio и создай новый проект.



Добавь в проект ScriptHookVDotNet.dll и NativeUI.dll



Так же подключи к проекту стандартные библиотеки System.Windows.Forms и System.Drawing:



После этого добавь пространство имен в начало проекта:



Допишем настройки, чтобы наш класс унаследовал GTA.Script:



Теперь пару слов о NativeUI. Все созданные меню содержатся в MenuPool. Нам нужно создать главное меню, в которое затем можно поместить все остальные подменю. Давай сделаем это!



Добавим конструктор, который будет запускать созданные нами классы:



Разберем данный код:
modMenuPool = new MenuPool();
Создает экземпляр класса menuPool, чтобы добавить его в пул всех созданных меню.
mainMenu = new UIMenu("Mod Menu", "ВЫБЕРИТЕ ОПЦИЮ");
Создает основу меню с заголовком "Mod Menu" и подзаголовком "Выберите опцию". Ты можешь вписать сюда что угодно, в том числе и на русском языке. Последняя строчка кода добавляет наше созданное меню (mainMenu) в modMenuPool.
Теперь добавим основные события (onkeydown, OnTick):



Так же необходимо дописать функцию menuPool.ProcessMenus, иначе наше меню не будет отображаться на экране:



Теперь сделаем открытие и закрытие меню по нажатию клавиши. Делается это очень просто:



Давай проверим работоспособность нашего кода в игре:



Как видишь, наше меню пока что пустое, но оно работает! Давай добавим пункт в меню, который будет снимать розыск с игрока. Сделаем это с помощью приватной функции:



Сначала объявляем глобальную переменную resetWantedLevel типа UIMenuItem, значение которой устанавливается в функции Setup. Это добавит в меню пункт, но при его выборе ничего не произойдет. Для его активации нам нужно использовать событие, которое является встроенным классом NativeUI:



Это событие вызывается всякий раз, когда мы выбираем пункт меню, и возвращает ID этого пункта. Таким образом, мы можем легко расширить наше меню, добавив больше различных пунктов, и легко отслеживая, какой был выбран. Однако давай реализуем наш базовый функционал сброса уровня:



Протестируем скрипт в игре!



Если ты сделал всё правильно, скрипт должен работать. Если что-то пошло не так, пиши в комментариях и я постараюсь тебе помочь!
Теперь немного усложним наше меню и добавим возможность выбрать любое оружие, которое есть в игре. Для этого создадим подменю.



Это создает подменю внутри нашего mainMenu с заголовком "Выбор оружия". Мы воспользуемся функцией UIMenuListItem, с помощью которой создадим динамический список, перебрав в цикле всё существующее в игре оружие.



Здесь начинается самая сложная часть. Нам нужно получить все значения из массива WeaponHash и бросить их в WeaponHash:



Теперь у нас есть все хеши оружия. Давай настроим нашу вторую половину меню:



Чтобы не создавать ещё одно событие, можно поместить весь код в одну функцию, и делается это следующим образом:



Теперь добавим в наше меню кнопку выбора оружия:



Теперь нам необходимо получить хеш выбранного оружия из раннее созданного списка. Для этого добавим следующий код:



Вернемся к началу кода и пропишем в паблик наши созданные функции:



Всё готово, отправляемся в игру!




Задание
Прочитай вторую часть данного урока. Там ты найдешь задание, за которое сможешь получить небольшое вознаграждение на сайте. Желаю удачи!
Рейтинг: 5 (2 голосов)
(признано в России экстремистской организацией)