Перейти к основному содержимому

MythicMobs

Спавн мобов MythicMobs, использование умений, цели на убийство и региональные спавнеры из TypeWriter.

Бесплатныеv0.12Интеграции
ТребуетсяTypeWriter0.9Quest (TypeWriter extension)MythicMobsPacketEventsнеобязательно

Обзор​

MythicMobs соединяет плагин MythicMobs с TypeWriter. Мобы и навыки по-прежнему определяются в MythicMobs; TypeWriter решает, когда и для кого они появляются. Вы можете призвать или убрать моба из последовательности, применить навык, реагировать, когда игрок убивает моба или взаимодействует с ним, засчитывать убийства как цель квеста или заставить регион спавнить мобов, пока рядом находятся игроки.

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

Начиная с 0.12, видимость может также следовать фактам TypeWriter: с visibilityCriteria моба видят, выбирают целью и ранят только игроки, выполняющие criteria, которые постоянно перепроверяются. Приватной арене на основе фактов группа не нужна.

Расширение работает на Paper и Folia, а для цели на убийство ему нужно расширение TypeWriter Quest. Настоящий репозиторий исходного кода — Typewriter-MythicMobs.

Возможности​

  • Призыв и удаление — призыв моба в позиции с уровнем или удаление всех активных мобов определённого типа.
  • Применение навыков — запуск навыка MythicMobs от имени игрока из действия или из сегмента кинематографической сцены.
  • События мобов — запуск последовательностей, когда игрок убивает моба, моб убивает игрока или игрок кликает правой кнопкой по мобу.
  • Цель на убийство — цель квеста, которая считает убийства MythicMobs по имени или регулярному выражению, а также убийства снарядами и прирученными питомцами.
  • Региональный спавнер — призыв мобов в одном или нескольких боксах, когда игроки рядом, с ограничением числа, задержкой и разогревом. Необязательный group ограничивает его участниками группы, у каждой группы свой цикл.
  • Приватные мобы — видимость ограничена игроком, группой или игроками, выполняющими criteria (факты), включая урон, выбор цели, взаимодействие, звуки и частицы.
  • Мобы в кинематографических сценах — призыв моба во время сцены, скрытого от всех остальных игроков, и применение навыков по таймлайну.
  • Факт количества мобов — сколько мобов определённого типа сейчас активно, для диалогов и условий.

Установка​

  1. Установите на сервер MythicMobs.
  2. Установите официальное расширение TypeWriter Quest.
  3. Рекомендуется: установите PacketEvents. Он используется, чтобы скрывать звуки и частицы приватных мобов. Без него расширение пишет в лог PacketEvents not loaded — sound isolation disabled, и приватные мобы остаются невидимыми для других, но не беззвучными.
  4. Положите JAR-файл расширения MythicMobs в plugins/Typewriter/extensions/.
  5. Перезапустите сервер.

Быстрый старт​

Сделаем так, чтобы босс появлялся только для игрока, принявшего квест, и чтобы цель засчитывалась после его смерти:

  1. В MythicMobs создайте моба, например CryptKing.
  2. В веб-панели TypeWriter откройте страницу sequence и добавьте действие Spawn Mob.
  3. Задайте mobName равным CryptKing, level равным 1, spawnLocation — нужное место (захватите позицию в игре) и включите onlyVisibleForPlayer.
  4. Свяжите триггер или criteria так, чтобы действие выполнялось при начале квеста.
  5. Откройте страницу квеста и добавьте MythicMob Kill Objective. Свяжите quest, fact (кэшируемый факт, хранящий прогресс), задайте mythicMobName равным CryptKing, amount равным 1 и напишите текст display.
  6. По желанию задайте onComplete — последовательность, выдающую награду.
  7. Опубликуйте и проверьте: другие игроки не могут видеть, бить или слышать босса.
Реакция на убийство без квеста

Используйте Mob Death Event с mobName и свяжите triggers с последовательностью, которую нужно выполнить. Оно срабатывает, когда убийцей моба стал игрок.

Бой, видимый только некоторым игрокам​

Приватная арена: моба видят, становятся его целью и могут с ним сражаться только игроки, выполняющие определённые факты.

  1. Создайте факт (например, in_arena) и задайте его игрокам, входящим на арену.
  2. Добавьте действие Spawn Mob и укажите этот факт в visibilityCriteria. Criteria перепроверяются каждые visibilityRefreshInterval (по умолчанию 1 секунда): игрок, покинувший арену, сразу теряет моба, а моб бросает свою цель.
  3. Запустите бой любым подходящим триггером.
  4. Завершите его действием Despawn Mob с scope, равным VISIBLE_TO_PLAYER (удаляет только мобов, которых видит игрок), либо позвольте мобу уйти самому через abandonRange (больше 0) и abandonDelay: он удаляется, если ни один допущенный игрок не остаётся в радиусе в течение задержки. Веб-редактор подставляет в новые длительности 1 секунду, поэтому проверьте abandonDelay.
  5. По желанию: задайте collidable равным false, чтобы убрать столкновения и отталкивание. Тогда это действует для всех.

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

Навыки без урона (зелье, бросок...) нельзя отнести к игроку. Добавьте к ним условие цели MythicMobs typewritervisible (псевдоним twvisible): оно истинно, только если цель вправе видеть заклинателя.

Прямо в строке, как условие таргетера. Сохраните два пробела после [ и один перед ], MythicMobs они необходимы:

Skills:
- potion{type=SLOW;duration=100} @PlayersInRadius{r=10;conditions=[ - twvisible true ]} ~onTimer:40

Не пишите ?twvisible в конце строки: MythicMobs проверяет такие условия у моба, а не у игроков, на которых он нацелен.

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

# Файл мобов
Skills:
- skill{s=ArenaBossSlow} @PlayersInRadius{r=10} ~onTimer:40

# Файл навыков
ArenaBossSlow:
TargetConditions:
- twvisible
Skills:
- potion{type=SLOW;duration=100}

twvisible false в таргетере — наоборот: только игроки, которым нельзя видеть моба.

примечание

MythicMobs читает свои файлы до загрузки Typewriter. Если в них встречается twvisible, расширение один раз выполняет /mm reload при запуске сервера, так что делать ничего не нужно. Условие продолжает работать после перезагрузки Typewriter. Если Typewriter остановлен, оно пропускает всех игроков и один раз записывает в лог предупреждение с просьбой выполнить /mm reload.

Ограничения. Столкновения работают по принципу «всё или ничего». Навыки без урона не фильтруются без twvisible. Звуки и частицы, проигрываемые вдали от моба, не скрываются. Моб, чья исходная запись удалена, остаётся скрытым для всех. После перезапуска сервера моб с abandonRange удаляется, если за время abandonDelay рядом не окажется ни одного допущенного игрока.

Как это работает​

Конфигурация​

Большинство настроек — поля записей. Стоит знать о двух особенностях поведения:

  • Автоматическая изоляция. В файле моба MythicMobs задайте Options.VisibilityGroup: nearby, чтобы при появлении моб был виден только ближайшему игроку (в пределах 100 блоков). Мобы, появившиеся по причинам NATURAL, RANDOM или RANDOM_SPAWN, получают ту же обработку даже без этой опции. Мобы, уже ограниченные записью TypeWriter, остаются как есть.

  • Сопоставление мобов. Поля mobName у событий — это регулярные выражения, сопоставляемые с внутренним именем MythicMobs; в Mob Death Event и MythicMob Interact Event регистр не учитывается. Используйте .*, чтобы подходил любой моб.

  • Формат отображения цели. Строка MythicMob Kill Objective в трекере квестов не зашита в код. Она читается из двух сниппетов TypeWriter, которые редактируются в plugins/Typewriter/snippets.yml: advancedQuest.display (в процессе, по умолчанию <display> (<current>/<required>) в серых тонах) и advancedQuest.completed (количество достигнуто, по умолчанию ✔, затем зачёркнутый <display> и прогресс). Плейсхолдеры: <display> (поле display цели), <current> и <required>; плейсхолдеры PlaceholderAPI тоже обрабатываются. Два ключа общие с другими расширениями целей BTC, поэтому одна правка меняет оформление каждой цели-счётчика.

Записи​

Записей: 14, сгенерированы из исходного кода расширения.

Действия3
События3
Цели1
Факты4
Кинематики2
Определения1
Факты-заглушки

MythicMob Faction, MythicMob Level и MythicMob Stance в текущем релизе всегда возвращают 0. Они зарезервированы для будущей версии: не стройте на них условия.

Устранение неполадок​

Ничего не появляется. mobName должен быть внутренним именем MythicMobs существующего моба. Если моб неизвестен, Spawn Mob молча ничего не делает. Сравните его с именем файла моба в MythicMobs.

Ошибка «Skill ... not found» в логе. Execute Skill и Skill Cinematic выдают эту ошибку, если skillName не является навыком MythicMobs. Если в логе написано, что навык «is not usable at this time», он находится на перезарядке или его условия не выполнились.

Спавнер никогда ничего не призывает. Игрок должен находиться в пределах defaultActivationRange (по умолчанию 24 блока, считая до центра региона) от региона. Спавнер проверяется раз в секунду и начинает работать примерно через пять секунд после запуска сервера. Также проверьте criteria, что warmup прошёл, что прошла перезарядка (defaultCooldown, в тиках) и что число мобов в радиусе меньше defaultMaxMobs. Правильно задайте mobType: иначе в логе будет Cannot find MythicMob ....

Другие игроки всё равно видят приватного моба. Видимость применяется только к мобам, призванным записями TypeWriter, опцией nearby или естественным спавном. Остальные мобы остаются публичными. Действию призыва также нужен игрок: если задан visibilityGroup, но игрок не состоит ни в какой группе, моб ограничивается только вызвавшим игроком.

Цель на убийство не засчитывается. Цель засчитывается, только пока quest активен у игрока и убийство совершает игрок (или его снаряд, или прирученный питомец). Если mobs не пуст, mythicMobName игнорируется. Проверьте, что fact является записью кэшируемого факта.

Событие убийства игрока никогда не срабатывает. MythicMob Kill Player Event сопоставляет mythicMobType как регулярное выражение с учётом регистра с внутренним именем моба, ставшего причиной смерти. Оставьте поле пустым, чтобы подходил любой MythicMob.

Связанные расширения​

  • MythicMobs NPC — использование мобов MythicMobs как интерактивных NPC.