Создание скриптов в GTA 5 на C#: интерактивное меню с помощью NativeUI: часть первая
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:
Теперь у нас есть все хеши оружия. Давай настроим нашу вторую половину меню:
Чтобы не создавать ещё одно событие, можно поместить весь код в одну функцию, и делается это следующим образом:
Теперь добавим в наше меню кнопку выбора оружия:
Теперь нам необходимо получить хеш выбранного оружия из раннее созданного списка. Для этого добавим следующий код:
Вернемся к началу кода и пропишем в паблик наши созданные функции:
Всё готово, отправляемся в игру!
Задание
Прочитай вторую часть данного урока. Там ты найдешь задание, за которое сможешь получить небольшое вознаграждение на сайте. Желаю удачи!