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

Агрегатор стилей – интеграция кастомных стилей

Внимание!

Этот раздел документации не завершён. Если вы готовы помочь — сообщите об этом главному разработчику мода.

Хотите интегрировать свой камуфляж в игру, не меняя при этом игровые стили? Используйте Агрегатор стилей (далее — Агрегатор)!

Пример интегрированного стиля:

Пример интегрированного стиля (Hellraisers)

Основные этапы работы модификации заключаются в следующем:

  1. При загрузке клиента мод читает элементы кастомизации из JSON-файлов в папке valberton/user_customization/json. В случае ошибки чтения клиент намеренно крашится с записью в файл python.log в корневой директории игры.
  2. В момент подключения игрока к серверу собираются данные о всех стилях, кроме интегрированных, с целью оптимизации работы с экраном Агрегатора.
  3. При нажатии на кнопку Внешний вид: — Если у игрока не был применён стиль на стороне сервера — идёт переход к стандартному экрану внешнего вида с соответствующим уведомлением; — Если у игрока был применён стиль на стороне сервера — показывается оверлей, позволяющий выбрать, к какому окну кастомизации перейти: стандартному или Агрегатору.
  4. При переходе к окну Агрегатора игрок выбирает категорию стиля (по умолчанию: Пользовательский 2D-стиль) и сам камуфляж. Для применения игрок нажимает соответствующую кнопку. Для стилей с отличительными особенностями предусмотрена более детальная настройка.bbbbbb

Интеграция стиля

Для того чтобы встроить свой камуфляж в игру, нам потребуются:

  1. Текстуры — камуфляж, надписи, эмблемы и т. д. в формате .dds.
  2. Конфиг — описание элементов стиля (стилей) в формате .json (далее — JSON-конфиг).

Внимание!

Перед началом разработки стиля крайне рекомендуется ознакомиться с принципом работы формата JSON, так как он является основным форматом передачи данных мода в игру.

Также стоит учесть, что в этой статье указание путей к файлам происходит от папки res в директории игры. То есть, scripts/client/path/to/file.py означает, что искать этот файл нужно по пути <папка_с_игрой>/res/scripts/client/path/to/file.py относительно виртуальной файловой системы.

Для 3D-стилей ещё необходимы:

  1. Модели (изменённые модели танка в форматах .model, .primitives, .visual).
  2. При необходимости! Префабы (эффекты и двигающиеся части танка в формате .prefab).

Текстуры

Внимание!

Данный раздел не завершён. Автор UotsonDesign допишет его, как разберётся с делами IRL.

Здесь будет использоваться следующая терминология:

  1. Паттерн (Pattern) — зацикленный узор.

В камуфляжах существует несколько возможных типов текстур:

  1. AM (AlbedoMap) — паттерн камуфляжа, выполняется в цвете.
  2. GMM (GlossMetallicMap) — текстура металлических отражений, выполняется по определённому алгоритму.
  3. EmissionMap — карта свечения, на ней указываются элементы, которые будут излучать свет.
  4. PatternMap — карта анимации, эта карта показывает игре, какую область «подсвечивать» на EmissionMap. Работает циклично.

Скорость анимации PatternMap и яркость EmissionMap регулируются в секции камуфляжа в JSON-конфиге следующими параметрами:

style.json
json
{
  "camouflages": {
    "camouflage_name": {
      "forwardEmissionBrightness" = 7,
      "deferredEmissionBrightness" = 7,
      "emissionAnimationSpeed" = 0.3
    }
  }
}

Рисование камуфляжа

Подготовка рабочей среды

Для начала работы вам потребуются следующие программы:

Мир Танков

- Текст пока не готов. -

Photoshop
  1. После скачивания Photoshop вам потребуется DDS-расширение для создания текстурных файлов с расширением .dds. Скачать расширение вы можете здесь. Для установки запустите инсталлер, соответствующий разрядности вашей ОС.

  2. После установки расширения в папке установки Photoshop у вас должна появиться папка NVTT:

    Папка установки Photoshop

  3. Теперь запускаем или перезапускаем (если он был запущен) Photoshop и создаём файл с размерами, имеющими соотношение сторон 1:1.

Примеры размеров текстуры для «Мира Танков»

  1. 512x512
  2. 1024x1024
  3. 2048x2048
  4. 4096x4096 (по желанию; трудно рисовать, весят много и могут уменьшать быстродействие игры и вашего компьютера)
Paint.NET

- Текст пока не готов. —


AM — текстура

Создание камуфляжа начинается с рисования основного паттерна — AM-текстуры. Для создания текстуры можно использовать Photoshop или Paint.NET. Ниже описаны действия для каждого приложения.

В рисовании узора есть несколько техник:

  1. Прямоугольный узор — его легко зациклить, не надо прибегать к каким-то сложным методам.
  2. Узор не касается краёв — соответственно, не надо зацикливать, но нужно учесть, что если у вас какая-нибудь голова дракона, то её надо рисовать только на одной половине текстуры — нижней или верхней — и зеркалить по месту.
  3. Узор по диагонали — его я и буду рассматривать ниже.
Photoshop
  1. Создаём основу узора. Создаём основу узора

    IMPORTANT

    Размер узора должен совпадать с размером квадрата под ним. Как пользоваться инструментом выделение, можете найти в интернете. alert-text

  2. Заходим в контекстное меню, выбираем Фильтр -> Другое -> Сдвиг. Дальше выставляем параметры сдвига, равные половине от ширины и половине от высоты изображения, и ставим галочку на Сделать прозрачным. Сдвиг

    TIP

    У вас файл 1024x1024 => смещение будет равняться 1024x0,5 × 1024x0,5 = 512 × 512.

  3. У вас должен получиться кусок узора, равный 1/4 от всего холста. Теперь мы его копируем (CTRL+J).

  4. Нажимаем ПКМ по копии, выбираем Отразить по горизонтали (или по вертикали, это не принципиально) и тащим отражённую копию в противоположный угол с зажатым SHIFT. куда жмать

  5. Повторяем пункт 4, но теперь выбираем два кусочка, нажимаем CTRL+J и теперь отражаем копию по вертикали (или по горизонтали, смотря какой вариант вы выбрали в 4 пункте). Результат должен получиться таким: Создаём основу узора

  6. Сохраняем получившийся файл в папку camouflages по алгоритму: Файл -> Сохранить как... -> DDS. HowToSave

Модели

Анимация модели

- Тексты пока не готовы. -

Префабы

- Текст пока не готов. -

JSON-конфиг

Описание элементов стиля содержится в формате .json.

Как было раньше

До этого в моде использовались файлы формата .xml, в которых находилось много лишних записей, которые были важны игре, но путали пользователей и разработчиков стилей. Сейчас же подобные проблемы устранены.

В одном конфиге может быть описано множество элементов (например, стиль, камуфляж, надписи и эмблемы к нему). Также поддерживается описание нескольких стилей в одном файле для простоты раздачи контента.

JSON — это древовидный формат обмена данными, поэтому когда будут расписываться секции, имейте в виду, что запись типа x.y.z в файле будет выглядеть так:

json
{
  "x": {
    "y": {
      "z": "значение"
    }
  }
}

Ниже приведены «пустышки» для всех импортируемых элементов кастомизации. Обязательные к указанию параметры будут подсвечены.


Камуфляж

template.json
json
{
  "camouflages": {
    "template_camo": {
      "texture": "valberton/user_customization/camouflages/template.dds",
      "tilingSettings": {
        "type": "relative",
        "factor": [2.574355, 2.582175],
        "offset": [0, 0]
      },
      "scales": [1.0, 1.3, 0.5],

      "glossMetallicMap": "valberton/user_customization/camouflages/glossMetallicMap.dds",
      "metallic": [0.23, 0.23, 0.23, 0.23],
      "gloss": [0.509, 0.509, 0.509, 0.509],

      "emissionMap": "valberton/user_customization/camouflages/emissionMap.dds",
      "emissionPatternMap": "valberton/user_customization/camouflages/emissionPatternMap.dds",
      "emissionAnimationSpeed": 1.0,
      "forwardEmissionBrightness": 1.0,
      "deferredEmissionBrightness": 1.0,

      "normalMap": "valberton/user_customization/camouflages/normalMap.dds",
      "normalMaxLod": 1,
      "normalMapFactor": 1.0,

      "rotation": {
        "hull": 0.0,
        "turret": 0.0,
        "gun": 0.0
      },

      "palettes": [
        [255, 0, 0, 255],
        [0, 255, 0, 255],
        [0, 0, 255, 255],
        [0, 0, 0, 255]
      ]

    }
  }
}

Внимание!

В данном случае template_camo — это строковый идентификатор камуфляжа, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в стиле.

Обязательные параметры:

  • camouflages.template_camo.texture — путь до текстуры.

  • camouflages.template_camo.tilingSettings — настройки тайлинга.

    Про тайлинг

    Это неисследованная тема, рекомендуется пока не указывать этот параметр.

  • camouflages.template_camo.scales — масштаб для разных размеров паттернов.

    Про масштаб

    В игре есть три степени масштабирования камуфляжа/стиля: 1x, 2x и 3x.

    Пример с масштабированием стиля в 1x, 2x и 3x

    Этот параметр позволяет выбрать, какой будет размер камуфляжа при определённом множителе масштабирования.

Необязательные параметры:

Для эффекта металла и бликов:

  • camouflages.template_camo.glossMetallicMap — путь к текстуре glossMetallicMap (см. Текстуры).

    • Его необязательно указывать, если нужно просто увеличить эффект.
  • camouflages.template_camo.gloss — величина блеска в формате RGBA.

  • camouflages.template_camo.metallic — величина эффекта металла в формате RGBA.

Для эффекта анимированного стиля:

  • camouflages.template_camo.emissionMap — путь к текстуре маски свечения (см. Текстуры).
  • camouflages.template_camo.emissionPatternMap — путь к текстуре паттерна свечения (см. Текстуры).
  • camouflages.template_camo.forwardEmissionBrightness — интенсивность свечения в стандартном рендере.
  • camouflages.template_camo.deferredEmissionBrightness — интенсивность свечения в улучшенном рендере.
  • camouflages.template_camo.emissionAnimationSpeed — скорость анимации свечения.

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

  • camouflages.template_camo.palettes — палитры камуфляжа.
  • camouflages.template_camo.rotation — угол поворота текстуры.

Декали: эмблемы и надписи

Эмблемы и надписи являются одним типом элемента — декалями. Не путайте их с проекционными декалями!

template.json
json
{
  "decals": {
    "template_emblem": {
      "type": "EMBLEM",
      "texture": "valberton/user_customization/decals/template_emblem.dds",

      "mirror": false
    },
    "template_inscription": {
      "type": "INSCRIPTION",
      "texture": "valberton/user_customization/decals/template_inscription.dds",

      "mirror": false
    }
  }
}

Внимание!

В данном случае template_emblem и template_inscription — это строковый идентификатор эмблемы и надписи соответственно, называться они могут как угодно. Для простоты объяснения приведём их к единому названию — template_decal.

Используйте их для обозначения используемых элементов кастомизации в стиле.

Обязательные параметры:

  • decals.template_decal.type — тип декали. EMBLEM — эмблема, INSCRIPTION — надпись.
  • decals.template_decal.texture — путь до текстуры.

Необязательные параметры:

  • decals.template_decal.mirror — булево значение (истина, ложь), означающее возможность отразить по горизонтали декаль.

Присоединяемые элементы

Внимание!

Полная поддержка этого типа элемента не подтверждена, при попытке его использования могут возникнуть проблемы. Просим сообщить о состоянии поддержки разработчику.

template.json
json
{
  "attachments": {
    "template_attachment": {
      "modelName": "valberton/user_customization/prefabs/template.prefab",

      "hangarModelName": "valberton/user_customization/models/template_hangar.prefab",
      "sequenceId": "template_sequence",
      "attachmentLogic": "prefab"
    }
  }
}

Внимание!

В данном случае template_attachment — это строковый идентификатор присоединяемого объекта, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в стиле.

Обязательные параметры:

  • attachments.template_attachment.modelName — путь до модели/префаба (см. Модели).

Необязательные параметры

  • attachments.template_attachment.hangarModelName — путь до отдельной модели/префаба для отображения в ангаре.
  • attachments.template_attachment.sequenceId — путь до файла анимации модели (см. Анимация модели).
  • attachments.template_attachment.attachmentLogic — схема логики элемента.

На данный момент известно 3 схемы:

  • flagPart — флаг.
  • flagAnimation — анимация флага.
  • prefab — префаб (см. Префабы).

Отметки на стволе

template.json
json
{
  "insignias": {
    "template_insignia": {
      "atlas": "valberton/user_customization/insignias/template_insignia_atlas.dds",
      "alphabet": "valberton/user_customization/insignias/template_insignia_alphabet.xml",
      "texture": "valberton/user_customization/insignias/template_insignia_single.dds",

      "emissionMap": "valberton/user_customization/camouflages/emissionMap.dds",
      "emissionPatternMap": "valberton/user_customization/camouflages/emissionPatternMap.dds",
      "emissionAnimationSpeed": 1.0,
      "forwardEmissionBrightness": 1.0,
      "deferredEmissionBrightness": 1.0,

      "mirror": false
    }
  }
}

Внимание!

В данном случае template_insignia — это строковый идентификатор отметок на стволе, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в стиле.

Обязательные параметры:

  • insignias.template_insignia.atlas — путь к атласу (см. <ссылка_на_объяснение_отметок>).

  • insignias.template_insignia.alphabet — путь к «алфавиту».

    Пример «алфавита»

    «Алфавит» описывает используемые координаты отображения отметок. На первое время используйте этот пример:

    xml
    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <glyph>
        <name> * </name>
        <begin> 0.0 0.0 </begin>
        <end> 1.0 1.0 </end>
      </glyph>
    </root>

    где

    • <name> * </name> означает, что эти координаты будут использоваться для всех символов/отметок.
    • begin и end — начальные и конечные координаты используемой области относительно левого верхнего угла изображения в процентах (1.0 = 100%).
  • insignias.template_insignia.texture — путь к текстуре одной отметки.

Необязательные параметры

Для эффекта анимированных отметок:

  • insignias.template_insignia.emissionMap — путь к текстуре маски свечения (см. Текстуры).
  • insignias.template_insignia.emissionPatternMap — путь к текстуре паттерна свечения (см. Текстуры).
  • insignias.template_insignia.forwardEmissionBrightness — интенсивность свечения в стандартном рендере.
  • insignias.template_insignia.deferredEmissionBrightness — интенсивность свечения в улучшенном рендере.
  • insignias.template_insignia.emissionAnimationSpeed — скорость анимации свечения.

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

  • insignias.template_insignia.mirror — булево значение (истина, ложь), означающее возможность отразить по горизонтали декаль.

Потёртости

Внимание!

От кастомизации этого типа элемента решено было отказаться в виду низкой заинтересованности. Используйте заранее определённый разработчиками перечень пресетов.

Строки по типу <id>1</id> - это идентификатор, который можно использовать в стиле.


Краски

template.json
json
{
  "paints": {
    "template_paint": {
      "texture": "valberton/user_customization/paints/template_paint_icon.png",
      "color": [255, 255, 255, 255],

      "gloss": 0.509,
      "metallic": 0.23
    }
  }
}

Внимание!

В данном случае template_paint — это строковый идентификатор краски, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в стиле.

Обязательные параметры:

  • paints.template_paint.texture — путь к иконке в интерфейсе.
  • paints.template_paint.color — цвет в формате RGBA.

Необязательные параметры:

Для эффекта металла и бликов:

  • paints.template_paint.gloss — величина блеска.
  • paints.template_paint.metallic — величина эффекта металла.

Персональный номер

Внимание!

Полная поддержка этого типа элемента не подтверждена, при попытке его использования могут возникнуть проблемы. Просим сообщить о состоянии поддержки разработчику.

Внимание!

В случае если вы хотите встроить свой шрифт для персонального номера, вам потребуется сделать это через отдельный элемент — Шрифт.

template.json
json
{
  "personal_numbers": {
    "template_personal_number": {
      "texture": "valberton/user_customization/personal_numbers/template_font.png",
      "fontID": "template_font",

      "digitsCount": 3
    }
  }
}

Внимание!

В данном случае template_personal_number — это строковый идентификатор персонального номера, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в стиле.

Обязательные параметры:

  • personal_numbers.template_personal_number.texture — путь к иконке в интерфейсе.
  • personal_numbers.template_personal_number.fontId — уникальный числовой/строковый идентификатор шрифта.

Необязательные параметры:

  • personal_numbers.template_personal_number.digitsCount — количество символов в номере (по умолчанию — 3).

Шрифт

Этот элемент нужен в случае, если для персонального номера нужен вид символов, отличный от того, что есть в игре.

Внимание!

Полная поддержка этого типа элемента не подтверждена, при попытке его использования могут возникнуть проблемы. Просим сообщить о состоянии поддержки разработчику.

template.json
json
{
  "fonts": {
    "template_font": {
      "texture": "valberton/user_customization/fonts/template_font.dds",
      "alphabet": "valberton/user_customization/fonts/template_font.xml",

      "mask": ""
    }
  }
}

Внимание!

В данном случае template_font — это строковый идентификатор шрифта, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в персональном номере.

Обязательные параметры:

  • fonts.template_font.texture — путь к текстуре.

  • fonts.template_font.alphabet — путь к «алфавиту».

    Пример «алфавита»

    В каждом «алфавите» шрифта прописывается:

    • root.glyph.name — к какой цифре (или букве?) относится символ.
    • root.glyph.begin — начальные координаты символа.
    • root.glyph.end — конечные координаты символа.

    Начальные и конечные координаты указываются в процентах (1.0 = 100%).

    xml
    <root>
      <glyph>
        <name>	0	</name>
        <begin>	0.000000 0.000000	</begin>
        <end>	0.121 0.5	</end>
      </glyph>
      <glyph>
        <name>	1	</name>
        <begin>	0.121 0.000000	</begin>
        <end>	0.2089 0.5 </end>
      </glyph>
      <glyph>
        <name>	2	</name>
        <begin>	0.2089 0.000000	</begin>
        <end>	0.33 0.5 </end>
      </glyph>
      <glyph>
        <name>	3	</name>
        <begin>	0.33 0.000000	</begin>
        <end>	0.4492 0.5 </end>
      </glyph>
      <glyph>
        <name>	4	</name>
        <begin>	0.4492 0.000000	</begin>
        <end>	0.5742 0.5 </end>
      </glyph>
      <glyph>
        <name>	5	</name>
        <begin>	0.5742 0.000000	</begin>
        <end>	0.6933 0.5 </end>
      </glyph>
      <glyph>
        <name>	6	</name>
        <begin>	0.6933 0.000000	</begin>
        <end>	0.8144 0.5 </end>
      </glyph>
      <glyph>
        <name>	7	</name>
        <begin>	0.8144 0.000000	</begin>
        <end>	0.9257 0.5 </end>
      </glyph>
      <glyph>
        <name>	8	</name>
        <begin>	0.000000 0.5 </begin>
        <end>	0.1152 1 </end>
      </glyph>
      <glyph>
        <name>	9	</name>
        <begin>	0.1152 0.5 </begin>
        <end>	0.2363 1 </end>
      </glyph>
    </root>

Необязательные параметры:

  • fonts.template_font.mask — пока неизвестный параметр, так как разработчиками нигде не используется.

Проекционные декали

Внимание!

На момент публичного тестирования мода крайне не рекомендуется использовать этот элемент ввиду его существенной нестабильности.

template.json
json
{
  "projection_decals": {
    "template_projection_decal": {
      "texture": "valberton/user_customization/projection_decals/template_projection_decal.dds",

      "glossTexture": "valberton/user_customization/projection_decals/template_projection_decal_gloss.dds",
      "scaleFactorId": 3,
      "mirror": false,

      "emissionMap": "valberton/user_customization/camouflages/emissionMap.dds",
      "emissionPatternMap": "valberton/user_customization/camouflages/emissionPatternMap.dds",
      "emissionAnimationSpeed": 1.0,
      "forwardEmissionBrightness": 1.0,
      "deferredEmissionBrightness": 1.0
    }
  }
}

Внимание!

В данном случае template_projection_decal — это строковый идентификатор проекционной декали, называться он может как угодно.

Используйте его для обозначения используемого элемента кастомизации в стиле.

Обязательные параметры:

  • projection_decals.template_projection_decal.texture — путь к текстуре.

Необязательные параметры:

Для эффекта бликов:

  • projection_decals.template_projection_decal.glossTexture — путь к текстуре карты блеска. Если не указано, то используется стандартная логика бликов.

Для эффекта анимированного стиля:

  • projection_decals.template_projection_decal.emissionMap — путь к текстуре маски свечения (см. Текстуры).
  • projection_decals.template_projection_decal.emissionPatternMap — путь к текстуре паттерна свечения (см. Текстуры).
  • projection_decals.template_projection_decal.forwardEmissionBrightness — интенсивность свечения в стандартном рендере.
  • projection_decals.template_projection_decal.deferredEmissionBrightness — интенсивность свечения в улучшенном рендере.
  • projection_decals.template_projection_decal.emissionAnimationSpeed — скорость анимации свечения.

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

  • projection_decals.template_projection_decal.mirror — булево значение (истина, ложь), означающее возможность отразить по горизонтали декаль.

Стиль

Все предыдущие элементы необходимо описывать только для финального действия — соединить их в стиль.

template.json
json
{
  "styles": {
    "template": {
      "styleIcon": "gui/maps/vehicles/styles/template.png",
      "styleName": "Пример для подражания",
      "outfits": [{
          "season": "ALL",
          "camouflages": [{
            "id": "template_camo1",
            "appliedTo": 4368
          }],
          "decals": [{
              "id": "template_emblem1",
              "appliedTo": 13104
            },
            {
              "id": "template_inscription1",
              "appliedTo": 52416
          }]
      }],
      "is3D": false,
      "modelsSet": "template_3Dst",

      "styleDescription": "Стиль-шаблон для мода \"Агрегатор стилей\"",
      "isWithSerialNumber": false,
      "vehicleFilter": {
        "exclude": {
          "vehicles": ["china:Ch01_Type59_Gold"]
        }
      },
      "alternateItems": {
        "camouflage": [
          "template_camo1",
          "template_camo2"
        ],
        "decal": [
          "template_emblem1",
          "template_emblem2",
          "template_inscription1",
          "template_inscription2"
        ]
      }
    }
  }
}

Обязательные параметры:

  • styles.template.styleIcon — путь к иконке в интерфейсе.
  • styles.template.styleName — название стиля в интерфейсе.
  • styles.template.outfit — описание стиля в интерфейсе.

Для 3D-стилей (если стиль двухмерный - не указывайте их):

  • styles.template.is3D — булево значение (истина, ложь), обозначающее, является ли стиль трёхмерным. Для этого типа целей всегда ставьте true.

  • styles.template.modelsSet — строковый идентификатор пресета моделей для стиля из папки valberton/user_customization/3Dst_json.

  • styles.template.outfits — варианты внешнего вида стиля, которых может находиться несколько. При необходимости отображения разного внешнего вида для определённых типов карт - лучше описывать все стандартные: Летний, Зимний и Песчаный типы.

Теперь перечислим основные элементы стиля, доступные для использования в вышеуказанном параметре.

Основные элементы стиля

Общие положения

Каждый такой элемент в конфиге стиля представляет из себя список с перечисленными параметрами используемых элементов кастомизации. Для простоты объяснения назовём один элемент этого списка как item. Почти у всех есть следующие значения:

  • id — строковый или числовой идентификатор элемента стиля. В JSON-конфиге можно использовать одновременно элементы с обоими типами идентификаторов.
  • appliedTo — область применения элемента. Каждая такая область имеет своё числовое значение. Чтобы нанести элемент на несколько областей - просто сложите необходимые числа.

Камуфляж

json
{
  "camouflages": [{
    "id": "template",
    "appliedTo": 4638,
    "patternSize": 1,
    "palette": 0
  }]
}
  • Области применения камуфляжа:
    • Орудие — 4096
    • Башня — 256
    • Корпус — 16
  • camouflages.item.patternSize — порядковый номер размера паттерна от 0 до 5.
  • camouflages.item.palette — порядковый номер палитры, который указан в конфиге камуфляжа. Если он всего один в списке - используйте 0.

Декали

json
{
  "decals": [{
    "id": "template_emblem",
    "appliedTo": 13104
    }, {
      "id": "template_inscription",
      "appliedTo": 52416
  }]
}

Области применения эмблем:

  • Орудие — 4096, 8192
  • Башня — 256, 512
  • Корпус — 16, 32

Области применения надписей:

  • Орудие — 16384, 32768
  • Башня — 1024, 2048
  • Корпус — 64, 128

Присоединяемые объекты

json
{
  "attachments": [{
    "id": "template_attachment",
    "slotId": 18000,
    "position": [0.0, 0.0, 0.0],
    "rotation": [0.0, 0.0, 0.0]
  }]
}
  • attachments.item.slotId — идентификатор слота объекта танка, которые прописываются внутри скрипта танка (item_defs/vehicles/<нация>/<имя_танка>.xml). Может быть такое, что данного слота нет на танке. Предположительно, это в будущем можно будет обойти.
  • (Необязательно) attachments.item.position — позиция объекта по осям XYZ относительно позиции слота.
  • (Необязательно) attachments.item.rotation — поворот объекта по параметрам YPR относительно поворота слота.

Отметки на стволе

json
{
  "insignias": [{
    "id": "template_insignia",
    "appliedTo": 4096
  }]
}

Область применения отметок всегда находится на орудии и ровна 4096.


Потёртости

json
{
  "modification": 5
}

Значение для этого элемента следуется брать из заранее сделаного разработчиками перечня, где строка типа <id>5</id> означает, что у определённого пресета потёртостей именно этот идентификатор. Его и пишем.


Краски

json
{
  "paints": [{
    "id": "template_paint",
    "appliedTo": 30576
  }]
}

Области применения красок:

  • Орудие — 4096, 8192, 16384
  • Башня — 256, 512, 1024
  • Корпус — 16, 32, 64
  • Гусеницы — 1, 2, 4

Персональный номер

json
{
  "personal_numbers": [{
    "id": "template_personal_number",
    "number": "483",
    "appliedTo": 4096
  }]
}
  • personal_numbers.item.number — строка с самим персональным номером, то есть то, какое число будет отображаться в игре. Можно оставить пустым.

Области применения персонального номера такие же, как и у надписей.


Проекционная декаль

json
{
  "projection_decals": [{
    "id": "template_projection_decal",
    "scaleFactor": 2,
    "tags": ["formfactor_square", "safe", "left"]
  }]
}
  • projection_decals.item.scaleFactorId — идентификатор фактора масштабирования от 0 до 3.
  • В projection_decals.item.tags самым важным тегом является положение декали на танке (right, front, left).

Необязательные параметры:

  • styles.template.styleDescription — описание стиля во всплывающей подсказке.

  • styles.template.isWithSerialNumber — булево значение (истина, ложь), обозначающее, имеет ли стиль серийный номер с табло.

  • styles.template.vehicleFilter — фильтр по технике:

    Фильтр по технике

    С помощью этой секции вы можете обозначить, на какой танк/нацию можно нанести стиль.

    Нанести только на определённый танк:

    json
    {
      "vehicleFilter": {
          "include": {
            "vehicles": ["germany:G98_Waffentrager_E100"]
        }
      }
    }

    или не наносить на него:

    json
    {
      "vehicleFilter": {
          "exclude": {
            "vehicles": ["china:Ch01_Type59_Gold"]
        }
      }
    }

    Если нужно обозначить всю нацию, замените vehicleFilter.include.vehicles или vehicleFilter.exclude.vehicles на vehicleFilter.include.nations или vehicleFilter.exclude.nations соответственно.

    Таким же образом можно сделать и по уровням техники - levels.

  • styles.template.alternateItems — дополнительные элементы стиля.

    Дополнительные элементы стиля

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

    json
    {
      "alternateItems": {
        "camouflage": [
          "template_camo1",
          "template_camo2"
        ],
        "decal": [
          "template_emblem1",
          "template_emblem2",
          "template_inscription1",
          "template_inscription2"
        ]
      }
    }
    • alternateItems.<тип_элемента> — перечень альтернативных элементов, где тип_элемента — тип элемента так, как вы его называли в JSON-конфиге, но в единственном числе. Например, не paints, а paint. Не personal_numbers, а personal_number. Значениями в этих перечнях выступают строковые и числовые идентификаторы элементов. Можно одновременно использовать оба типа идентификаторов.

Авторы

История изменений