65

RPG Maker MZ: урок №10. Переключатели, локальные переключатели и страницы ивента

В прошлом уроке мы рассмотрели Ветвление Условий, а сегодня, наконец, разберемся с Переключателями.


Для любителей видео уроков я сделяль… видео урок:

Многие уже заметили, что Переключатели можно использовать в качестве условия запуска страницы ивента, а так же в ветвлениях.

Что же они из себя представляют?


Переключатель – в мукере, по сути, является переменной, которая способна хранить лишь два значения: ноль или единицу, и только их. В движке эти значения обозначаются, как ВКЛ и ВЫКЛ, соответственно.


Некоторые разработчики часто называют переключатели свитчами (привыкли к англ.версии движка), но не следует путать их с оператором switch из того же Си, так как принцип действия мукерского свитча не имеет с программерским свитчом ничего общего.


Обычно никто не объясняет этих тонкостей, но мне кажется, что когда человек понимает принцип работы, ему и пользоваться проще.


Итак, у нас есть переключатели, и они могут быть либо включены, либо выключены. Их команда располагается в поле «Внутренние данные», прямо над переменными:

Команда имеет минимум настроек в своем окне, где можно выбрать нужный переключатель, или диапазон из нескольких штук.

При выборе переключателя открывается окно, очень похожее на окна выбора переменной – здесь точно так же можно увеличить их количество до 5000 штук, которые так же заведены заранее, и задать переключателю название для удобства использования при разработке. Название так же не используется игрой и не видно игроку, и существует исключительно для разработчика, а движок работает с его ID-номером.

Точно так же, как и переменная, переключатель, приняв свое значение однажды, будет его сохранять до тех пор, пока не будет изменен кодом игры. Т.е. если мы где-то в игре переключатель поставили в положение ВКЛ, то он будет оставаться включенным хоть до самого конца, пока его где-то еще не отключит другое событие.


Что нам это дает?

В принципе, как вы, вероятно, догадались, работу переключателя может спокойно заменить переменная, но очень часто нам действительно не требуется весь функционал переменной для простого действия, например, определения того, запущен квест или нет. И тут проще использовать переключатели.


Вернемся к нашим грибным делам и еще немного доработаем их, с учетом новых возможностей.

Возьмем ивент Любителя Опят и скопируем-вставим его страницу, получив таким образом дубликат. Содержимое страницы 1 удалим и вместо него добавим сообщение с выдачей квеста и команду на включение переключателя:

На второй же странице внесем изменения в сообщение, которое отвечает за ситуацию с переменной равной нулю, а условиях запуска страницы поставим галочку в графе «переключатель» и выберем наш переключатель, соответственно.

Теперь, НПС будет различать, выдавал ли он этот квест ранее. Проверим:

Работает. Первый раз НПС дает квест, а в последующие напоминает, что уже просил об этой услуге.


Но почему я сделал именно так, а не просто создал новую страницу, задав на ней первое сообщение и включение переключателя, а на первой не поставил его в условиях?


Дело в принципе приоритета выбора страниц при равных условиях. У нас есть две страницы одного ивента – одна вообще без условий, а вторая с переключателем. Если переключатель включен, то они вроде бы обе могут быть выполнены.


В Содержимом все выполняется подряд, если условия выполнены, это мы с вами уяснили, я надеюсь. Теперь придется понять и запомнить то, как мукер обрабатывает условия страниц.

Проверка соответствия условий на возможность запуска осуществляется в обратном порядке, согласно нумерации страниц. Выполнена может быть только одна из страниц, если в ее Содержимом нет команды для перехода на другую.


Сложно? Попробую объяснить.

Если у нас есть страницы 1,2 и 3, то проверка условий будет осуществляться сперва у 3, потом у 2 и потом у 1. Проверка идет в этом обратном порядке до тех пор, пока движок не натыкается на страницу, которую может запустить. Короче, тут как в армии – при прочих равных исполняется тот приказ, который был отдан последним:)


Именно поэтому я и поставил страницу с условием второй, а не первой. Да, понимаю, это не интуитивно нифига, но что поделаешь – такое уж устройство у движка.


Хорошо, с этим разобрались, пора поработать под с грибами. У нас теперь есть запускаемый с помощью переключателя квест, но объект этого квеста, т.е. те же опята, собираются в любое время. А нам это не нужно, это квестовый предмет уже, зачем нам их собирать вне квеста?


Переходим в ивент опят:

Принцип тот же самый – копируем-вставляем страницу,создав новую (я рекомендую это делать потому, что так вы не накосячите с графикой и прочими настройками страницы), первая страница у нас будет без условий, но с сообщением, мол, тут растут опята, но нам они не нужны:

Ну, а вторая останется прежней, только добавим в ее выполнение условие включенного переключателя.

Теперь вне квеста сорвать опенок будет невозможно. Ерунда, но это лучше, чем было.Однако, квест все еще не доделан до конца. Мы его начали, но не поставили никаких условий для завершения. Собственно, никакого завершения тут и не будет – у НПС нет определенных требований, мы потом его изменим и допилим, когда до команды «Показать Выбор» дойдем.


А пока, давайте разберем завершение квеста на примере Ведьмы – ведь у нее есть четкое требование, она хочет ровно пять грибов.


Ну, с ее страницами все понятно – уже два раза показывал, повторяем то же самое. Как вы догадываетесь, квест будет завершаться командой выключения переключателя. Ее нужно вставить после сообщения «Ты собрал пять грибов!» - это и будет точка окончания квеста.

Обратите внимание, что я использую отдельный переключатель для ее квеста (его я включаю на странице 1, как в предыдущих примерах) – так проще разбираться в том, какой и для чего в игре служит, чем вешать кучу событий в зависимость от одного переключателя. Но, бывает и обратная ситуация, например, когда вы реализуете смену дня и ночи, в этом случае можно ночные события поставить в зависимость от одного переключателя. Короче, это штука ситуативная, но все-таки, по возможности, лучше разделять.


Так, теперь у нас есть квест, возможность его взять, выполнить и завершить. Но он многоразовый! У нас нет варианта диалога на случай, если мы квест уже выполнили! Что делать? Заводить еще один переключатель типа «квест Грибы вып.»? Можно так, но можно проще – воспользуемся Локальным Переключателем.


Локальный переключатель – это точно такой же переключатель, но его действие ограничено рамками ивента, внутри которого он использован.


Локальные переключатели служат для ручного переключения страниц внутри ивента. Всего их 4 – A,B,C и D. Локальный переключатель А(например) использованный в одном ивенте, не имеет ничего общего с локальным переключателем А в ивенте другом.


Если вы заметили, то под локальные переключатели выделено отдельное поле в Условиях запуска страницы ивента.

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


Воспользуемся этой фичей и впихнем локалку сразу после выключения переключателя на сбор грибов:

Теперь создаем страницу 3 (можно копированием, как и раньше), где пишем новое сообщение:

Ну и остается нам немножко доработать Мухоморы и Опята. Если с Мухоморами все просто – ставим галочку и добавляем в условия переключатель Сбор Грибов, то у Опёнка, как мы видим, уже заюзано условие на сбор именно Опят.


Можно, конечно, включать переключатель Сбор Опят у ведьмы, но зачем? Это будет не совсем правильно – игрок же не общался с Любителем Опят. Поэтому просто скопируем страницу 2 ивента Опёнок и в копии поставим условием переключатель Сбор грибов.

Не забудьте повторить это все и для мухоморов тоже.

Ну, что же? Проверим) Ссылкой с таймкодом я вам результат скину, так как в гифку не влезает)


youtu.be/aB-3WoCpsYM?t=1101


Напоследок скажу, что Переключатели – прекрасный инструмент для управления всем, что происходит в игре. Это ваши кнопки, которыми вы запускаете события, катсцены, заскриптованные моменты и т.д. А локальные переключатели – прекрасный способ делать одноразовые «исчезающие» ивенты. Попробуйте на досуге сделать наши грибы срываемыми, чтобы они пропадали с карты после того, как игрок их заберет. А я на следующем уроке это упомяну, если не забуду


Солёнора!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"