Skip to content

Latest commit

 

History

History
92 lines (56 loc) · 12.3 KB

События.md

File metadata and controls

92 lines (56 loc) · 12.3 KB

События это, по сути, программируемые системы нодов которые позволяют вам программировать логику ваших карт без необходимости писать какие-либо скрипты или код. В вашем распоряжении находится множество типов нодов, с помощью которых вы можете создавать логику. Соединеняя эти ноды, вы можете создать содержательную программу, которая может делать что-либо с миром, игроком, NPC и т.д. по вашему усмотрению.

События можно триггерить либо триггерами, либо командой /mp event trigger.

Событиями можно управлять в главной панели Маппета. Третья панель в левом боковом меню откроет редактор.

Редактирование

Как только вы создадите или выберете событие, вы увидите вот такой редактор:

Редактор нодов

Система событий поддерживает следующие типы нодов:

  • Нод Команда позволяет исполнять команды и перенаправлять поток в заисимости от полученного результата
  • Нод Условие позволяет проверять выражение и, в зависимости от полученных результатов, перенаправлять поток исполнения
  • Нод Переключатель позволяет направить поток исполнения в зависимости от результат заданного выражения
  • Нод Таймер позволяет задержать исполнение

Нод "Команда"

Нод "Команда" исполняет команду с перспективы субъекта, на которого нацелена команда. Субъектом этой команды может быть сам игрок, если событие было затриггерено с помозьюкоманды /mp event trigger, блока-триггера, блока-региона, или NPC, если оно было затриггерено одним из триггеров NPC.

Кроме того, команды в нодах "Команда" могут использовать особое форматирование, дабы оценивать выражения в ${...}. К примеру, если вы хотите использовать команду /setblock, дабы разместить блок, однако хотите, чтобы ночью на месте этого блока был огонь, а днём камень, то вы можете просто ввести следующую команду:

/setblock -1514 4 1981 minecraft:${world_is_day() ? "stone" : "fire"}

Это заменит ${world_is_day() ? "stone" : "fire"} в зависимости от того, какое чейчас время суток. Т.е. ночью будет огонь, а днём камень. Также, если вам когда-нибудь понадобится сослаться на игрока/NPC-субъекта в командах, вы можете использовать выражение ${subject} (которое являет собой UUID целевой сущности), которое работает со всеми командами, которые предоставляют аргументы селектора целей.

Если при исполнении команды не случилось ошибки, то исполнение перейдёт дальше ко всем вводным (дочерним) нодам. Однако, если команда выдала ошибку, то исполнение дальше не продолжится. Переключатель Бинарный позволяет переключить режим поведения нода. Вместо активации всего при успехе и активации ничего при ошибке, бинарный мод будет работать вот так: при успехе, исполнение будет передано к первому ноду (обозначающемуся 0 и зелёным потоком), в то время как при ошибке исполнение перейдёт ко второму ноду (обозначающемуся 1 и красным потоком). Все остальные присоединённые ноды будут проигнорированны (как показано нодом 2 с жёлтым, полупрозрачным потоком).

Бинарный режим в действии

Нод "Условие"

Нод "Условие" оценивает своё выражение, и, в зависимости от полученного значения, передаёт исполнение дальше. Если получившееся значение не равняется нулю (всё кроме 0), то нод передаст исполнение всем соединённым (дочерним) нодам. Если полученное значени равняется 0, то ни один нод не будет исполнен. Также, как и с нодом "Команда", переключатель Бинарный позволяет сменить модель исполнения нодов с все-либо-никто на первый-либо-второй.

Используя опцию бинарности, вы можете создать выражение типа if-elseif-else (либо-или же либо - или же) вот таким образом:

Исполнение if-elseif-else

Нод "Переключатель"

Нод "Переключатель" похож на нод "Условие", только вместо передачи исполнения по механизму все-либо-никто или бинарной модели, он оценивает собственное выражение, и передаёт исполнение дочернему ноду с индексом получившегося значения. К примеру, скажем вы хотите случайно передать исполнение одному из трёх нодов типа "Команда". Этого можно добиться посредством ввода floor(random(0, 3)) в нод "Переключатель", тогда у вас выйдет что-то в роде того:

Случайное исполнение

Нод "Таймер"

Нод "Таймер" позволяет задержать исполнение системы нодов на заданное количество тиков. Если вы хотите исполнять команды постепенно, вы можете использовать этот нод, дабы задерживать команды.

Иерархия

Касаемо иерархии никаких ограничений нет, как и касаемо того, в каком порядке необходимо организовывать нолы, однако, дабы инициализировать нод "Событие", вам необходимо указать главный нод, как это было описано на странице Нодов.

Контекст события

Когда происходит триггер события (или диалога, то в событие поступают некоторые данные. У этих данных есть две главные переменные, отвечающие за контекст, которыми являются:

  • subject это иницатор события, к примеру, игрок, на которого было затриггерено событие посредством команды /mp event trigger.
  • object это дополнительная сущность, триггер которой подействовал на момент выполнения, то есть, к примеру, в случае с NPC с триггером на взаимодействии, на которого кликнули правой кнопкой мыши, NPC выступает субъектом, а игрок, кликнувший по нему - объектом. subject и object это строки, содержащие UUID, которые можно использовать для команд или выражений. Кнопки цели в нодах условий в состояниях Субъект и Объект имеют ровно такие же свойства, что и subject с object.

Использование с командами

Скажем, у вас есть событие с нодом типа "Команда" и вы хотите, чтобы он телепортировал игрока на два блока вверх. Для этого, введите в нод следующую команду:

/tp ${subject} ~ ~2 ~

После чего, выполните команду /mp event trigger @r EVENT и тогда случайного игрока должно телепортировать на два блока вверх.

Использование с выражениями

Скажем, у вас есть событие, в котором есть нод типа "Условие" и вы хотите, чтобы он проверял есть ли у игрока 10 ХП (5 сердец):

player_hp(subject) >= 10

После чего, выполните команду /mp event trigger @r EVENT и если у игрока будет более чем либо же точно 5 сердец, то нод "Условие" продолжит цепочку выполнения, а если нет, то дальнейшее выполнение не осуществится.

Передача пользовательских данных

У команды /mp event trigger есть опциональный аргумент под названием [data] (данные). Через него вы можете передавать опциональные данные NBT, которые будут использованы в событии. К примеру, скажем у нас в событии есть нод "Переключатель", которым нужно управлять со стороны, что-то в таком роде:

Пользовательская переменная

Так что, теперь можно пределать переменную используя последний аргумент посредством NBT вот таким образом:

/mp event trigger @r fire {input:2}

Эта команда передаст в input значение 2, что, по принципу действия нода "Переключатель", передаст выполнение ноду с индексом 2 (самый правый). В графу [data] вы можете вводить только нумерические значения и строки. Комплексные тэги и тэги-списки не поддерживаются!