1.6.8174
Март — крупные изменения в макросах и BT
Крупные изменения в макросах
Система макросов получила серьёзное обновление: стало больше возможностей и поддерживаемых операций. На практике деревья поведения нередко оказывались довольно сложными для освоения, тогда как макросы изначально задумывались как промежуточный вариант между очень простыми аурами и более продвинутыми behavior trees. Эти изменения не только укрепляют эту роль, но и переносят в макросы многие сильные стороны и аур, и деревьев.
Разберём по порядку.
OnEnter / WhileActive / OnExit
Это базовая концепция из системы аур. Когда что-то происходит, срабатывает триггер. После этого в ауре последовательно вызываются следующие блоки:
- OnEnter — вызывается сразу в момент активации триггера.
- WhileActive — вызывается повторно, пока триггер остаётся активным.
- OnExit — вызывается один раз в момент деактивации триггера.
Такое сочетание блоков позволяет описывать множество ситуаций и автоматизировать геймплей. Но ему часто не хватало гибкости — например, нельзя было добавлять дополнительные условия внутри блоков или повторять действия несколько раз. Для аур это и не было основной задачей, а вот для макросов такие возможности принципиальны.
Макросам не хватало только одного: возможности проверять собственное текущее состояние — понимать, должны ли они быть активны в данный момент.
Новая операция — CheckIsActive
Именно для этого добавлен новый узел CheckIsActive. Его единственная задача — позволить телу макроса проверить, активен ли макрос сейчас. Уже одного этого узла достаточно, чтобы макросы могли воспроизводить ту же логику, которую ауры использовали годами.
Вариантов, как может выглядеть такой макрос, много. Вот один из примеров:

Идея простая:
- Первый блок (
OnEnter) выполняется при входе. - Второй блок (
WhileActive) на самом деле представляет собой циклRepeat, который выполняется каждые 250ms, пока макрос остаётся активным. - Когда макрос деактивируется, цикл останавливается, и управление переходит к третьему блоку (
OnExit), где выполняется логика выхода.
В ближайшем будущем появятся и дополнительные улучшения, которые сделают создание макросов в стиле аур ещё проще.
Вот ещё один пример — макрос, который ждёт деактивации и выполняет действие только при выходе. Это повторяет поведение ауры, в которой используется только OnExit.

Узлы из Behavior Trees теперь доступны и в макросах
Целый набор узлов, который раньше был доступен только в Behavior Trees, теперь поддерживается и в макросах:
Примечание: первые три узла (Selector/Sequence/Cooldown) особенно полезны внутри блока
Repeat— именно там они раскрываются лучше всего.
Пример: ротация на макросах
Соберём простую ротацию с двумя скиллами и базовой атакой, используя макросы:

Здесь ничего необычного: проверяем кулдауны, затем доступность умений, после чего используем их по порядку. Если скиллы недоступны, выполняется базовая атака.
А вот точно та же самая логика, но уже оформленная внутри макроса:

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

Исправления / улучшения
- [BTs] Теперь макросы должны корректно останавливаться, когда активным становится главное окно программы.