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

BTCMobs

В разработке: пользовательские мобы и NPC с умениями, спавнерами, таблицами добычи и квестовыми событиями.

СкороСущности и модели

В разработке. Записи и поля могут измениться до первого релиза.

В разработке

BTCMobs — это расширение категории Soon. Оно не выпущено, у него пока нет загрузки и номера версии, а записи или поля могут измениться до публикации. Эта страница описывает текущую сборку разработки для ознакомления. Это не старый плагин «BTC Mob»: движок мобов теперь находится внутри самого расширения, отдельного плагина для установки нет.

Обзор​

BTCMobs

BTCMobs позволяет создавать пользовательских мобов и интерактивных NPC полностью в веб-панели TypeWriter. Шаблон моба описывает одно существо: его базовую сущность Minecraft, уровень, здоровье, броню, навыки, добычу, фракцию, необязательную 3D-модель и необязательное размножение. Спавнеры и естественное появление определяют, где и когда шаблоны появляются в мире. Навыки и таблицы добычи определяют, что делает моб и что он оставляет после себя.

Всё, что делают мобы, возвращается в TypeWriter. События срабатывают, когда моб появляется, получает урон, использует навык или умирает. Факты и переменные сообщают здоровье, уровень, количество или расстояние. Действия создают мобов, убирают их или заставляют использовать навыки. Это позволяет квестам, диалогам и кинематике реагировать на бой или начинать его.

То же расширение также предоставляет сторону NPC: шаблон моба может отображаться как клиентский NPC с диалоговыми взаимодействиями, целями квестов, кинематографическими камерами (включая камеры, прикреплённые к кости модели), видимостью костей для каждого игрока и управлением анимацией ModelEngine или BetterModel. Расширение предназначено для сборки BTC для TypeWriter (Paper/Folia).

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

  • Шаблоны мобов — одна запись btc_mob_template на существо: тип сущности, уровень, здоровье, урон атаки, броня, навыки, добыча, фракция, таблица угрозы, модель и анимации.
  • Спавнеры — спавнеры на основе регионов с лимитом появления, частотой появления и прогревом, которыми можно управлять через факты, поэтому каждый игрок может видеть свой темп.
  • Замена естественного появления — заменяйте ванильное появление существ мобами BTC, правило за правилом, по миру, биому и вероятности.
  • Навыки — навык — это упорядоченный список действий TypeWriter или строка скрипта. Шаблоны привязывают навыки к триггерам, таким как появление, атака, урон, смерть или повторяющийся таймер.
  • Таблицы добычи и предметы — ванильные материалы, пользовательские предметы, опыт и многоразовые таблицы, с шансом и количеством, растущими с уровнем моба.
  • Крючки для квестов — события, факты, переменные и цель-навык, чтобы истории могли реагировать на мобов и бои.
  • NPC — клиентские NPC на основе шаблонов с диалогом, взаимодействием, поворотом к игроку и поведением камеры.
  • Кинематика — создавайте моба, используйте навык, фокусируйтесь на NPC или катайтесь на кости модели во время кинематики TypeWriter.
  • Сохранение данных — перезарядки навыков, счётчики, ауры, таблицы угрозы и боссбары переживают перезапуск, когда настроен артефакт хранилища.
  • Импорт MythicMobs — команда оператора преобразует пакет MythicMobs в страницы BTCMobs.

Установка​

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

  1. Запустите сборку BTC для TypeWriter (BTC Core, Paper или Folia) с расширениями Quest и RoadNetwork, которые сборка объявляет зависимостями.
  2. Поместите JAR-файл BTCMobs в plugins/Typewriter/extensions/ и перезапустите сервер. Он содержит собственный движок мобов, поэтому отдельный плагин BTCMobs не нужен.
  3. Установите необязательные интеграции, которые вам нужны. Расширение обнаруживает их во время работы: ModelEngine или BetterModel для 3D-моделей, MiniPlaceholders для предоставления плейсхолдеров, PacketEvents, Vault, DecentHolograms и WorldGuard.
  4. Чтобы открыть меню каталога мобов, должно быть установлено расширение BTC GUI.
  5. В веб-панели создайте артефакт btcmobs_storage и сошлитесь на него из записи btcmobs_config (см. ниже), чтобы состояние игрового процесса сохранялось.

Начало работы​

В этом пошаговом примере создаётся зомби-босс, который появляется на арене, и обрабатывается его смерть.

  1. В веб-панели TypeWriter откройте страницу manifest. Добавьте артефакт BTCMobs Storage, затем запись BTCMobs Global Configuration и задайте storage равным этому артефакту.
  2. Откройте страницу static и добавьте Native BTC mob template. Задайте id, который вы будете использовать повторно (например, crypt_warden). Задайте entityType равным ZOMBIE, display — именем, которое видят игроки, затем level, maxHealth, attackDamage и armor.
  3. Добавьте Native BTC mob drop table и перечислите её drops, по одному объявлению на строку, например DIAMOND 1 0.25 (материал, количество, шанс) или exp 20to40. Сошлитесь на таблицу по её идентификатору в списке drops шаблона.
  4. Добавьте Native BTC mob skill и заполните actions действиями TypeWriter, которые он выполняет, по порядку. В шаблоне добавьте идентификатор навыка в skills, например warden_slam~onTimer:100, чтобы использовать его каждые 100 тиков.
  5. Добавьте BTCMobs Spawner. Задайте mobType равным идентификатору шаблона (а не его отображаемому названию), world, два угла corner1 и corner2 региона, defaultMaxMobs и defaultCooldown (в тиках).
  6. Добавьте событие On BTCMob die с mobName, равным идентификатору шаблона, и свяжите его triggers с диалогом, наградой или модификатором факта.
  7. Опубликуйте страницы, подойдите на расстояние defaultActivationRange (по умолчанию 24 блока) от центра региона, и моб появится. Используйте /tw btcmobs spawners force <id>, чтобы проверить без ожидания.
Быстрая проверка моба

/tw btcmobs spawn <template> <level> <amount> создаёт шаблон рядом с вами с выбранным вами уровнем. Команда подсказывает идентификаторы загруженных шаблонов.

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

Шаблон — это только описание. Живой моб создаётся, когда его запрашивает спавнер, естественное появление, действие Spawn a mob или команда spawn. С этого момента моб выполняет навыки, привязанные к его триггерам, и определяет свою добычу при смерти. Каждый шаг также вызывает событие TypeWriter, и именно так квесты и диалоги следят за боем.

Навыки и триггеры​

Элементы списка skills шаблона записываются как skillId или skillId~trigger. Идентификатор — это идентификатор (или название) записи btc_mob_skill. Триггер указывает, когда моб его выполняет: onSpawn, onAttack, onDamaged, onDeath, onKill, onDespawn, onInteract, onTeleport, onExplode, onRanged, onProjectile или onTimer:<ticks> для повторяющегося навыка (onTimer:5s также принимается, в секундах). Навык без триггера выполняется на каждый триггер, который вызывает моб, поэтому всегда добавляйте его. conditions фильтруют каждую строку навыка, а targeters выбирают общие для них цели.

Объявления добычи​

Каждая строка таблицы добычи или списка drops шаблона — это одно из следующего:

  • ванильный материал с необязательными количеством и шансом, например BONE 2 0.5;
  • идентификатор или название записи btc_mob_item с необязательными количеством и шансом;
  • exp 10 или exp 10to20 для опыта;
  • btc:<item_id> [amount or range] [chance] [+n/m] для предмета из каталога BTC. Без токена +n/m количество растёт с уровнем моба, от x1 на 1 уровне до x6 на 100 уровне;
  • идентификатор другой таблицы добычи, которая раскрывается на месте.

Неизвестные объявления записываются в лог как предупреждения и пропускаются.

NPC​

NPC — это шаблон, показываемый игрокам как клиентская сущность. BtcMob NPC definition называет шаблон в mobType и задаёт отображаемое имя, его смещение и то, выполняет ли он тики. BtcMob NPC instance размещает его с помощью spawnLocation, необязательной activity, group и дополнительных data. Записи данных NPC меняют внешний вид модели: видимость костей для каждого игрока, вложения, заменяющие кость костью из другой модели, стойки ModelEngine для дня и ночи и скорость ходьбы.

Команды​

Все команды находятся под /tw btcmobs. Короткие псевдонимы /tw btc и /tw btcmobsadmin запускают то же дерево. У каждого узла есть право вида btcmobs.command.<node> (см. ниже).

КомандаОписание
/tw btcmobs mobs [list]Перечислить загруженные шаблоны мобов.
/tw btcmobs mobs listactiveПеречислить мобов, находящихся в данный момент живыми.
/tw btcmobs spawn <template> [level] [amount]Создать шаблон рядом с вами (количество от 1 до 64). summon и mobs spawn эквивалентны.
/tw btcmobs mobs kill <template> [radius]Убить мобов шаблона вокруг вас (радиус по умолчанию 48).
/tw btcmobs mobs killall [radius]Убить всех мобов BTC вокруг вас (радиус по умолчанию 48).
/tw btcmobs mobs infoПоказать информацию о мобе, на которого вы смотрите.
/tw btcmobs skills [list]Перечислить загруженные навыки.
/tw btcmobs cast <skill>Применить навык от себя (skills cast, test cast и profile cast эквивалентны).
/tw btcmobs spawners [list]Перечислить записи спавнеров.
/tw btcmobs spawners info <id>Показать один спавнер.
/tw btcmobs spawners force <id> [amount]Принудительно создать, игнорируя условия и лимиты.
/tw btcmobs spawners reloadПерезагрузить нативные записи.
/tw btcmobs reloadПерезагрузить нативные записи.
/tw btcmobs menuОткрыть меню каталога мобов (первые 45 шаблонов, по алфавиту).
/tw btcmobs items list и get <item> [amount]Перечислить предметы каталога или взять предмет.
/tw btcmobs items give <player> <item> [amount]Выдать предмет каталога игроку.
/tw btcmobs signal <uuid> <signal>Отправить сигнал активному мобу.
/tw btcmobs test mechanic, condition, targeter <line>Выполнить одну строку скрипта как тест.
/tw btcmobs test on <uuid or nearest> <line>Выполнить строку скрипта на конкретном активном мобе.
/tw btcmobs import mythic [path]Преобразовать пакет MythicMobs в страницы BTCMobs (папка по умолчанию import/BtcMob в папке данных TypeWriter). migrate mythic эквивалентна.
/tw btcmobs audit, coverage, registrydump, variables, placeholdersДиагностика загруженных шаблонов, навыков, спавнеров и реестров.
/tw btcmobs debug, version, modeldiagДиагностика времени выполнения, версия и состояние BetterModel ближайших мобов.

Права​

ПравоЧто даёт
btcmobs.command.mainКорень /tw btcmobs и его справка. По умолчанию выдано всем.
btcmobs.command.versionversion и v. По умолчанию выдано всем.
btcmobs.command.mobs, .mobs.spawn, .mobs.kill, .mobs.killall, .mobs.info, .mobs.listactive, .mobs.statsКоманды mobs и spawn.
btcmobs.command.skills, .skills.castПросмотр и применение навыков.
btcmobs.command.spawners, .spawners.list, .spawners.info, .spawners.force, .spawners.reloadКоманды spawners.
btcmobs.command.items, .items.list, .items.get, .items.giveКоманды items.
btcmobs.command.menu, .menu.openМеню каталога.
btcmobs.command.import, .migrate, .migrate.mythic, btcmobs.importИмпорт MythicMobs.
btcmobs.command.test, .test.mechanic, .test.condition, .test.targeter, .test.castКоманды test.
btcmobs.command.audit, .variables, .debug, .modeldiag, .signal, .reload, .profileСоответствующие диагностические команды.
btcmobs.command.admin, btcmobs.adminАдминистративный корень (/tw btcmobsadmin).
btcmobs.command.*, btcmobs.*Всё вышеперечисленное.

Все права, кроме btcmobs.command.main и btcmobs.command.version, по умолчанию доступны только операторам. Команда modeldiag проверяет btcmobs.command.modeldiag, которое расширение регистрирует (по умолчанию для операторов).

Плейсхолдеры​

Плейсхолдеры публикуются только в MiniPlaceholders; PlaceholderAPI для их публикации не используется. Синтаксис — <name:argument:argument>.

ПлейсхолдерВозвращает
<btcmobs_caster> и <btcmobs_caster:field>Идентификатор шаблона или поле моба, привязанного к игроку: name, type, level, hp, maxhp, percent, uuid.
<btcmobs_looking> и <btcmobs_looking:field>Те же поля для моба BTC, на которого смотрит игрок (в пределах дальности взгляда), пусто, если его нет.
<btcmobs_var:name>Значение глобальной переменной BTCMobs.
<btcmobsdamage_top:BOSS:POSITION:field>Игрок на определённом месте рейтинга урона по боссу. Поля: name, damage, raw_damage, percent, uuid.
<btcmobsdamage_self:BOSS:field>Собственное место просматривающего игрока в рейтинге. Поля: damage, raw_damage, percent, position.
<btcmobsdamage_participants:BOSS>, _total, _max_health, _last_updateИтоги рейтинга урона по боссу.

Записи​

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

Действия7
События9
Цели2
Факты9
Кинематики5
Сущности2
Данные сущностей4
Границы взаимодействия3
Переменные8
Артефакты1
Манифесты1
Определения6

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

Спавнер ничего не делает, а в логе написано «references unknown mob template». mobType должен быть идентификатором btc_mob_template, а не названием, показываемым в редакторе. Скопируйте идентификатор из записи шаблона. То же правило действует для btc_natural_spawn, действий появления и исчезновения и определений NPC.

Спавнер никогда не достигает своего лимита или останавливается на 1. Регион, два угла которого совпадают, ограничивает defaultMaxMobs значением 1. Лимит считает мобов, принадлежащих этому спавнеру, где бы они ни находились. Спавнер работает, только пока игрок находится в пределах defaultActivationRange от центра региона.

Спавнер ничего не делает для некоторых игроков. Для каждого игрока рядом с регионом спавнер проверяет мир, затем conditionLines, затем criteria, и всё это должно пройти, прежде чем учитываются регион, кулдаун и спавн. Игрок, не прошедший criteria, пропускается (диагностическая строка «criteria did not match» записывается один раз для каждого игрока). criteria никогда не удаляет уже появившегося моба. Поля ...Fact (maxMobsFact, mobsPerSpawnFact и другие) по-прежнему переопределяют числовые значения по умолчанию.

Замена естественного появления никогда не срабатывает. Запись заменяет только те появления, которые сервер уже производит (естественные, при генерации чанка или по умолчанию). Если spawn-limits мира в paper-world-defaults.yml равны 0, ванильные существа никогда не появляются, и заменять нечего. Побеждает первое подходящее правило, а maxNearby, равный 0, означает отсутствие ограничения, а не ноль мобов.

Моб зацикленно проигрывает анимации атаки или смерти или не ходит. modelAnimations при прикреплении модели зацикленно проигрывает только анимации типа «простой»; названия атаки и смерти, указанные там, игнорируются. Разовые анимации задаются в modelLifecycle шаблона (появление, атака, получение удара, смерть) и проигрываются в соответствующий момент; анимация смерти проигрывается до конца, прежде чем модель исчезнет. Название, которого нет в модели, записывается в журнал один раз для шаблона, и этот момент остаётся без анимации. Анимации ходьбы мобами пока не управляются, только на стороне NPC.

Навык или добыча молча отсутствуют. Проверьте лог сервера: неизвестные объявления добычи, неизвестные предметы и недопустимые шансы записываются как предупреждения и пропускаются. Запись skills, идентификатор которой не соответствует записи btc_mob_skill, записывается в лог, когда моб применяет навык.

On BTCMob despawn не срабатывает. Событие срабатывает, когда отслеживаемый моб покидает мир, не умирая (естественный despawn, удаление плагином, падение за пределы мира), и игрок находится в пределах radius блоков. Оно не срабатывает, когда моб умирает (используйте On BTCMob die), когда выгружается только его чанк (моб снова принимается при загрузке) и когда вы удаляете его действием Despawn или /tw btcmobs mobs kill. Пустой mobName подходит любому мобу; то же верно для событий spawn, die, damage и interact.

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

  • BetterModel — BetterModel — один из двух бэкендов моделей (modelProvider), которыми BTCMobs может управлять для моделей мобов и NPC.