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

Введение

Разработка модификаций подразумевает изменение каких-либо аспектов игры — будь то графика, интерфейс или игровой процесс.

Игра состоит из клиентской и серверной частей. Расчёт всей игровой логики происходит на сервере и недоступен для какого-либо изменения со стороны клиента. Любые пользовательские модификации могут влиять исключительно на клиентскую часть игры.

Запрещённые модификации

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

Основная философия запрета заключается в том, что модификации не должны давать игроку преимущества в бою, которое не может быть получено без них.

Компоненты игры

Игра «Мир Танков» состоит из следующих основных компонентов:

  • Движок игры Core (BigWorld) — написан на C++. Отвечает за сетевое взаимодействие и графический конвейер.
  • Игровые скрипты — написаны на Python 2.7. Отвечают за логику игры и взаимодействие с пользователем.
  • Пользовательский интерфейс
    • Старые окна интерфейса — написаны на Scaleform (ActionScript 3.0, Flash). Весь боевой интерфейс и часть ангара.
    • Новый интерфейс — написан на Coherent Gameface (JavaScript, CSS, HTML).
    • Полноэкранные браузерные окна — в игре присутствуют окна, которые реализованы с помощью встроенного браузера и представляют собой обычные веб-сайты (например, сборочный цех).
  • Ресурсы игры — модели, текстуры, звуки и прочее — хранятся в виде файлов в pkg-архивах на диске и могут быть легко заменены.
РесурсЯзыкВозможность модифицировать
Движок игрыC++Почти невозможно
Игровые скриптыPython 2.7Легко
Старый интерфейсActionScript 3.0С ограничениями
Новый интерфейсJavaScriptЛегко, с ограничениями
Браузерные окна-Невозможно
Ресурсы игры-Легко

Виртуальная файловая система

Игра использует виртуальную файловую систему (VFS), которая позволяет загружать ресурсы из нескольких источников и объединять их в единое целое.

Официальные ресурсы игры хранятся в pkg-архивах в папке /res/packages внутри папки с игрой. Архивы .pkg являются обычными zip-архивами без сжатия и могут быть открыты с помощью любого архиватора, например, 7-Zip.

По мере необходимости игра загружает ресурсы из этих архивов в общую виртуальную файловую систему.

Например, при запуске режима «Натиск» игра загружает comp7.pkg, который содержит все ресурсы, скрипты и интерфейсные элементы, необходимые для этого режима.

Загрузка пользовательских модификаций

Игра предусматривает автоматическую загрузку пользовательских модификаций в VFS из следующих папок:

  • /mods/<версия_игры>/*.mtmod — используется для распространения готовых модов.
  • /res_mods/<версия_игры>/* — устаревший вариант, иногда используется во время разработки модов.

Формат .mtmod

Формат .mtmod используется для распространения готовых модификаций. Файл .mtmod является обычным zip-архивом с нулевым сжатием и содержит структуру папок, которая будет воспроизведена в виртуальной файловой системе игры на этапе её загрузки.

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

<автор>.<название_мода>_<версия_мода>.mtmod

Например: wotstat.analytics_1.0.0.mtmod, me.poliroid.gunmark_2.1.3.mtmod

Файл meta.xml

Внутри архива .mtmod рекомендуется размещать файл meta.xml, который содержит описание мода в следующем формате:

meta.xml
xml
<root>
  <id>Уникальное название мода</id>
  <version>Версия мода</version>
  <name>Отображаемое имя мода</name>
  <description>Описание мода</description>
</root>
Пример meta.xml
meta.xml
xml
<root>
  <id>panikaxa.quick_demount</id>
  <version>2.1.0</version>
  <name>Quick demount</name>
  <description>Мод предоставляет возможность при нажатии правой кнопки мыши на слоте оборудования выбрать из контекстного меню танк, на котором установлено данное оборудование и автоматически демонтировать его с выбранного танка.</description>
</root>

Точка входа модов

Точка входа – это место, откуда начинается выполнение кода модификации. Игра автоматически импортирует .pyc-скрипты, которые начинаются с префикса mod_ из папки res/scripts/client/gui/mods виртуальной файловой системы.

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

Пример файловой системы мода и mod_ файла
.mtmod
├── meta.xml
└── res/
    └── scripts/
        └── client/
            └── gui/
                └── mods/
                    ├── mod_demo.pyc
                    └── mod_demo/
                        ├── __init__.pyc
                        ├── feature1.pyc
                        └── feature2.pyc
python
import BigWorld

def init():
  print("Demo mod initialized")

def fini():
  print("Demo mod finalized")

Внимание!

Если включён режим разработки (constants.IS_DEVELOPMENT = True) клиент будет импортировать .py-скрипты.

Для включения этого режима необходимо перезаписать файл res/scripts/common/constants.py, указав IS_DEVELOPMENT = True.

Файл с логами

В корневой папке с игрой находится текстовый файл python.log, в который игра пишет свои логи, в том числе вывод оператора print. Этот файл можно открыть любым текстовым редактором. Просмотр этого файла позволяет отлаживать модификации и находить в них ошибки.

Обратите внимание

У вас в системе могут быть отключены расширения файлов, поэтому файл может отображаться просто как python без .log. Вы можете включить отображение расширений в настройках проводника.

Авторы

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