Введение в плагиноведение RPG Maker MZ: как устроен плагин?
В прошлой статье мы с вами говорили о том, что вообще делает плагин RMMZ: он переопределяет методы и свойства классов движка, написанных на JS. Настало время посмотреть на специфику этих скриптов и понять, как они оформляются. Ничего сложного, я пошагово разберу это дело, надеюсь, кому-то пригодится.
За основу материала взял свой самый первый микро-плагин, который просто меняет пару цветов в ColorManager (но с возможностью указать их в визуальном редакторе). Обратите внимание на номера строк. Я выдаю листинг подряд, ни одну строчку не пропуская.
1. Понятное название плагина
Итак, начинается плагин, естественно, с оформления названия (это ведь самое важное, верно?). Это просто закомментированный блок, который вообще ни на что не влияет, но правила хорошего тона требуют указать, в какой версии RMMZ вы работаете, и как называется собственно плагин.
А вот дальше начинаются приколы. Следующий блок, хоть и выглядит как комментарий, и редактором кода воспринимается, как комментарий, представляет собой объявление команд и переменных, которые будут использоваться в нашем плагине.
Давайте же разберёмся, что есть в этом блоке, и зачем оно там есть.
2. Объявляем данные плагина
Тут понятно:
Строчка 6: для какой версии RPG Maker разработан плагин,
Строчка 7: описание плагина, полезное для других разработчиков и для тех, кто его скачает, а потом забудет, зачем качал =),
Строчка 8: автор, то есть вы.
3. Блок помощи
Тут можно написать очень длинный текст. Я ограничился просто названием файла, потому что мне было лень, но важно то, что этот текст потом будет показываться в визуальном редакторе RMMZ в блоке описания плагина. Если вы делаете плагин на экспорт, или, тем более, хотите его продавать, этот блок придётся заполнить. Ну и для себя завтрашнего не грех постараться.
Это я сам себя уговариваю)
4. Объявляем доступные команды
На самом деле, для простых скриптов команды особо и не нужны. Имейте в виду, вам придётся описывать их действия в коде самого плагина, что для новичка может оказаться затруднительным. Я на всякий случай указал одну команду, а именно set, команды задаются тремя строчками:
Строчка 12: объявление синтаксиса команды,
Строчка 13: человекопонятное название команды,
Строчка 14: подробное описание того, что делает команда.
Я в своём первом плагине команды не использовал, но во многих сложных надстройках, типа специфических боевых систем и пр. без команд не обойтись - иначе просто пришлось бы дублировать один и тот же код сто миллионов раз, что, как бы, нехорошо.
5. Объявляем переменные скрипта и помещаем их в визуальный редактор RMMZ
Пожалуй, самый интересный блок. Добавляя в него переменную, мы говорим движку, что он должен дать нам возможность редактировать её прямо в визуальном редакторе, в разделе Плагина.
Объявление переменной включает в себя:
Строчка 16 (20): имя переменной,
Строчка 17 (21): текстовое описание переменной (оно будет видно в админке),
Строчка 18 (22): дефолтное значение.
Дефолтное значение - это если вы в админке ничего не выставили ещё, оно будет вот таким.
6. Код плагина
Как вы можете заметить, у нас уже 24 строчки, и все они зелёненькие, в смысле, всё это комментарии. Мы уже знаем, что это не совсем так, но суть в том, что всё это было лишь подготовкой к созданию плагина, впереди же собственно его код.
А вот и он:
Очень простой.
Мы создаём собственную функцию, которая будет выполняться в общем потоке при загрузке игры (но ПОСЛЕ загрузки всего ядра, что важно, так как нам нужно переопределить какую-то часть кода, а для этого она должна быть уже загружена) и будет менять два цвета в ColorManager на те, что мы указываем в визуальном редакторе RPG Maker. Что нам нужно для того, чтобы это реализовать? Переменные мы объявили, они появились в админке, но нам теперь надо получить их значения из скрипта.
За это отвечают строчки 28 и 29.
На 28 строчке мы создаём константу, содержащую название плагина (это вообще пригодится во многих случаях, так что я бы рекомендовал всегда в начале скрипта её объявлять), а на 29 по имени этой константы получаем из PluginManager параметры плагина (это как раз и есть те самые созданные нами переменные param). Как вы помните, формат у них - строка вида "0,0,0,0" - а это RGBa. Но чтобы присвоить это дело окну, его нужно немного видоизменить. На строчках 32 и 33 мы как раз помещаем значения этих параметров в обёртку, чтобы получилась строка вида "rgba(0,0,0,0)".
Отдельные строчки под это можно было и не делать, но я хотел больше визуальности для данной статьи.
Итак, мы получили описание цвета двух параметров плагина (причём с альфа-каналом, то есть, прозрачностью), и нам осталось только закинуть их в ColorManager. За это отвечают строчки 37 и 38. Они ПОЛНОСТЬЮ дублируют аналогичные строчки из rmmz_managers, то есть, переопределяют их, подставляя вместо установленных разработчиком значений значения из плагина.
Вот, собственно, и всё. Закрываем блок кода, сохраняем и наблюдаем результат.
***
Как я уже говорил, любой JS код тут заработает, потому что запускается игра в браузере. Как мне указали в одной из моих статей, есть ещё великое многообразие WEB API, которое может обеспечить в том числе и асинхронность, и многопоточность, и прочие плюшки. Что ж, если вам хочется - используйте всю мощь жабаскрипта на полную!
А у меня на сегодня всё. Пишите свои мысли, задавайте вопросы, будем вместе искать на них ответы. Спасибо за внимание и до скорых встреч!
Рассуждения о "браузерности" RPG Maker тут: https://pikabu.ru/story/nemnogo_rassuzhdeniy_o_brauzernosti_rpg_maker_mz_10185619






Лига Разработчиков Видеоигр
9.2K постов23.2K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"