Створення скриптів в 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:




Тепер у нас є всі хеші зброї. Давай налаштуємо нашу другу половину меню:




Щоб не створювати ще одну подію, можна помістити весь код в одну функцію, і робиться це наступним чином:




Тепер додамо в наше меню кнопку вибору зброї:




Тепер нам необхідно отримати хеш обраної зброї з раніше створеного списку. Для цього додамо наступний код:




Повернемося на початок коду і пропишемо в паблік наші створені функції:




Усе готово, вирушаємо в гру!






Завдання

Прочитай другу частину цього уроку. Там ти знайдеш завдання, за яке зможеш отримати невелику винагороду на сайті. Бажаю удачі!