Files
moonwell-client/CUSTOM_CREATURES.md

5.6 KiB

Автоматический импорт mount и pet

Список современных моделей находится в custom-creatures.json. В нём есть две независимые секции:

{
  "mounts": [
    "assets/creatures/my_mount"
  ],
  "pets": [
    "assets/creatures/my_pet"
  ]
}

Папка должна быть результатом Raw M2 export из wow.export и содержать:

  • один основной .m2;
  • *.manifest.json;
  • все упомянутые в manifest текстуры, skin, skeleton, bone и animation-файлы.

Разрешены абсолютные пути, например C:/Users/sindo/wow.export/creature/catslime, но для воспроизводимой сборки папку лучше скопировать внутрь репозитория и указать относительный путь.

Что делает сборщик

При обычном запуске tool.exe, run.ps1 или deploy.ps1 сборщик:

  1. читает manifest каждой модели и размещает retail M2 со всеми зависимостями в loose-каталоге Data/Patch-WXL.MPQ, создавая рядом .mdx-алиас для загрузчика WoW 3.3.5, чтобы WarcraftXL всегда преобразовывал MD21 до загрузки клиентом;
  2. генерирует WXLFileData.csv для WarcraftXL;
  3. дописывает модели в CreatureModelData.dbc и CreatureDisplayInfo.dbc;
  4. сохраняет стабильные ID в custom-creatures.lock.json;
  5. для pets создаёт companion summon spell и строку skill line 778;
  6. кладёт серверные DBC, SQL и таблицу ID в build/server-dbc.

Полный Spell.dbc в патч не копируется. WarcraftXL читает компактный WXLSpellOverrides.tsv и при открытии DBC добавляет новые spell-записи к штатному файлу клиента.

Перестановка моделей в списке не меняет уже выданные ID. Lock-файл необходимо хранить в Git.

Дополнительные параметры

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

{
  "folder": "assets/creatures/my_mount",
  "key": "my_mount",
  "name": "My Mount",
  "name_ru": "Мой транспорт",
  "race_mask": 1101,
  "icon": "my_icon.jpg",
  "archive": "Creature/MyMount",
  "model_file": "my_mount.m2",
  "template_display_id": 2404,
  "display_scale": 1.0,
  "model_scale": 1.0,
  "collision_width": 0.6111,
  "collision_height": 2.031,
  "mount_height": 1.8657,
  "flags": 0
}

Для mounts по умолчанию клонируется верховая лошадь с display ID 2404, для pets — компаньон-кот с display ID 5448. Шаблон задаёт физические размеры, звук и прочие поля DBC; параметры объекта позволяют их переопределить.

Для pets поле race_mask ограничивает строку коллекции набором рас (1101 — Альянс, 690 — Орда, 0 или отсутствие поля — все расы). Поле icon указывает JPG, PNG или TGA рядом с моделью либо путь от корня проекта. Сборщик конвертирует изображение в BLP2, выдаёт стабильный spellIconID, добавляет запись в SpellIcon.dbc через MoonWell provider и назначает её summon-spell.

Конвертация иконок

Встроенная команда CLI преобразует JPG, PNG или TGA в совместимый с клиентом BLP2:

tool.exe icon "путь/к/icon.jpg" ["путь/к/icon.blp"]

Если выходной путь не указан, .blp создаётся рядом с исходным файлом. Конвертер автоматически приводит изображение к ближайшему квадратному размеру степени двойки (не более 512×512), кодирует его в DXT1 и создаёт mipmap-уровни. Например, иконка 56×56 будет преобразована в 64×64.

Установка на сервер

Для каждого элемента pets сборщик автоматически выдаёт creatureEntry, summonSpellID и skillLineAbilityID. Значения находятся в build/server-dbc/custom-creatures.csv.

  1. Скопировать CreatureModelData.dbc и CreatureDisplayInfo.dbc из build/server-dbc в серверный каталог data/dbc.
  2. Применить build/server-dbc/custom-creatures.sql к acore_world.
  3. Перезапустить worldserver: DBC и таблицы spell_dbc загружаются только при старте.
  4. Для проверки изучить выданный spell командой .learn <summonSpellID>.

SQL создаёт creature_template, creature_model_info, creature_template_model, companion spell и строку skill line. Генерация полноценного mount spell для секции mounts остаётся отдельным этапом: mount требует другой spell-шаблон с аурами скорости и SPELL_AURA_MOUNTED.