---
title: "Введение"
description: "Разработка модификаций подразумевает изменение каких-либо аспектов игры — будь то графика, интерфейс или игровой процесс."
lang: ru
canonical_url: "https://docs.wotstat.info/guide/first-steps/introduction/"
markdown_url: "https://docs.wotstat.info/guide/first-steps/introduction/index.md"
source_url: "https://github.com/wotstat/mods-development-docs/blob/main/docs/ru/guide/first-steps/introduction/index.md"
---

# Введение

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

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

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

Перед разработкой модификаций убедитесь, что вы ознакомились со [списком запрещённых модификаций](https://tanki.su/ru/content/guide/ban/nonusefulmods).

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

## Компоненты игры
Игра «Мир Танков» состоит из следующих основных компонентов:
- **Движок игры** 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`](https://www.7-zip.org/).

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

> Например, при запуске режима «Натиск» игра загружает `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>
```

**Details — Пример `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()` перед выходом из игры.

**Details — Пример файловой системы мода и `mod_` файла**

```
.mtmod
├── meta.xml
└── res/
    └── scripts/
        └── client/
            └── gui/
                └── mods/
                    ├── mod_demo.pyc
                    └── mod_demo/
                        ├── __init__.pyc
                        ├── feature1.pyc
                        └── feature2.pyc
```

**mod_demo.py**

```python
import BigWorld

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

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

> **WARNING — Внимание!**

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

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

## Файл с логами

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

> **TIP — Обратите внимание**

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