Планы и прогресс можно посмотреть по issues в текущем GitHub репозитории
- Самолёты на аэродромах конечны
- Посадка разрешена на любом аэродроме на своей территории, включая недоступные для взлёта в миссии
Захватывается доступный для взлёта фронтовой аэродром, на котором меньше всего самолётов к концу миссии. При равном количестве - случайный.
Тип цели | Количество в миссии | Очки захвата | Очки идут в следующую миссию |
---|---|---|---|
Фронтовой аэродром | 3 | 1 | Нет |
Укрепрайон | 3 | 3 | Да |
Артиллерийская позиция | 3 | 2 | Нет |
Тыловой склад выведен из строя | 2 | 4 | Да |
Тыловой склад уничтожен | 2 | 6 | Нет |
Танковое наступление | 2 | -1 у противника | Нет |
- У сторон есть по 4 дополнительных тыловых аэродрома для получения пополнения самолётов.
- В конце миссии самолёты с тыловых аэродромов автоматически пополняют парк фронтовых аэродромов
- Один раз в игровой месяц приходит поставка самолётов, распределяемая по всем тыловым аэродромам на карте
Выбираются следующим образом:
Все аэродромы фильтруются по нахождению в прифронтовой зоне (расстояние между аэродромами не учитывается, разделение фронтовых и тыловых программно-логическое)
При генерации миссии у каждой стороны среди всех её фронтовых аэродромов для взлёта выбираются 3:
- Аэродром с наибольшим количеством самолётов
- Аэродром с наименьшим количеством самолётов
- Случайный аэродром
Артиллерийские позиции появляются случайным образом в прифронтовой зоне. Рассчитаны на уничтожение парой самолётов. Считается уничтоженной при уничтожении 8 орудий.
Склады состоят из 5 секций. Рассчитаны на уничтожение бомбардировочной авиацией. В дополнение к размеру складов технически ограничено полное уничтожение склада за одну миссию:
- Прочность каждого склада измеряется в процентах от 0 до 100%.
- Все секции склада имеют различный но сбалансированный состав по количеству объектов.
- У склада есть 5 степеней повреждения: 0%, 20%, 40%, 60%, 80%. При генерации миссии все секции повреждаются в зависимости от общего состояния склада.
- Нанести ущерб прочности склада можно только уничтожив его секцию. Мелкое повреждение всех секций склада не даст эффекта.
- В начале каждой миссии общий ущерб складу распределяется по всем секциям и все они доступны для атаки.
- Уничтожение каждой секции считается при уничтожении 60% объектов в составе секции. Для повреждённых секций - 60% от целых объектов.
- Уничтожение секции отнимает часть прочности склада в зависимости от состояния склада:
- Уничтожение склада засчитывается при остатке менее 20% его прочности. В этом случае появляется новый склад, а набранные очки захвата действуют только одну миссию.
- Склад считается выведенным из строя при прочности от 20% до 40%.
- Склад восстанавливается на 3% за миссию при отсутствии уничтожения секции в миссии.
Прочность склада | Урон складу при уничтожении секции |
---|---|
100% | 15% |
80-99% | 12% |
60-79% | 9% |
40-59% | 6% |
20-39% | 3% |
Номер уничтоженной секции | Остаток прочности склада | Отнято |
---|---|---|
1 | 85% | 15% |
2 | 73% | 12% |
3 | 64% | 9% |
4 | 55% | 9% |
5 | 49% | 6% |
6 | 43% | 6% |
7 | 37% | 6% |
8 | 34% | 3% |
9 | 31% | 3% |
10 | 28% | 3% |
11 | 25% | 3% |
12 | 22% | 3% |
13 | 19% | 3% |
Таким образом, уничтожение склада возможно за 3 миссии при полном уничтожении всех секций.
- Укрепрайоны состоят из 12 секций. Рассчитаны на уничтожение штурмовой авиацией и истребительно-бомбардировочной (ИБА/JaBo).
- Укрепрайон считается уничтоженным при уничтожении 10 секций.
- Каждый укрепрайон восстанавливает 2 секции за миссию.
- Каждый выведенный из строя склад уменьшает восстановление укрепрайонов на 1.
С началом каждой миссии на один из укрепрайонов каждой из сторон выдвигается танковая атака. Отбив атаку, сторона уменьшает на 1 количество очков захвата у противника.
Место начала движения и цель танков на карте не обозначаются, ведь атака должна быть внезапной ;)
. Взаимодействие танкового наступления с укрепрайоном только эстетическое.
- Все самолёты сторон распределяются по аэродромам во время начальной поставки перед генерацией первой миссии на карте.
- На фронтовые аэродромы поставляются только истребители.
- Игроки могут свободно перегонять самолёты между любыми аэродромами своей стороны, включая недоступные для взлёта.
- Даже аварийная посадка на аэродроме будет считаться перегоном.
- Любой игрок может брать любой самолёт, доступный на аэродроме.
Одна модификация - это один выбранный вариант изменения конструкции самолёта или доступного вооружения. При начале кампании на сервере, каждый игрок может выбрать одну любую модификацию перед вылетом. В зависимости от результата вылета, игрок может получить дополнительную модификацию, либо потерять то количество модификаций, которое он взял при вылете.
Минимальные результаты вылета, при которых игрок получает модификации:
- 45 минут налёта без бомбового вооружения на истребителе
- повреждение/уничтожение самолёта игрока противоположной стороны
- уничтожение 1 танка
- уничтожение 2 статичных строений
- Установить статистику il2_stats от =FB=Vaal
- Установить зависимости, выполнив install.bat в корне репозитория.
- Установить и запустить MongoDB
- Скопировать папку data/scg в папку игры, чтобы scg также была в <папка_с_игрой>/data
- Скопировать папку missiongen в папку bin игры
- Настроить конфигурационный файл main.json. Рекомендуется использовать IDE для его редактирования, чтобы работали подсказки к настройкам. Описание настроек по спецификации json-schema есть в файле ./data/schemas/main.json.
- Инициализировать кампанию, выполнив
python runme.py initialize
- Настроить SDS для DServer, чтобы в нём были миссии result1 и result2, идущие по кругу. Оставить хотя бы 3-минутный отсчёт конца миссии, чтобы коммандер успевал сгенерировать следующую миссию.
- Настроить консоль сервера (RCon). Не забывать указать настройки подключения и для коммандера в main.json.
- Очистить папку с логами DServer.
- Запустить DServer, дождаться загрузки миссии.
- Запустить коммандер, выполнив
python runme.py run
- Не важно, как игрок покинул с сервера - у его бота должен быть атайп деинициализации
- В конце раунда (Max time for round, tdmRoundTime в SDS) в лог выдаётся атайп 19
- использовать
from __future__ import annotations
для импорта кроссовых зависимостей
В папке configs хранится конфигурация коммандера в json, xgml, txt и csv файлах
- main.json - основной файл настроек коммандера
- ban_list_permanent.txt - список навсегда забаненных пользователей
- mgen.json - настройки генерации ТВД и генерации миссий
- gameplay.json - настройки игровых параметров на сервере
- planes.json - настройки распределения и генерации самолётов на аэродромах (лочки, скины)
- stats_custom.json - настройки интеграции со статистикой
- draw_settings.json - настройки отрисовки карт на сайте
- dfpr.json - данные настроек генерации миссий, подставляемые в шаблон в соответствии с ТВД
- objects.csv - все игровые объекты (для обновления брать из статы =FB=vaal)
- В версии divisions используется MongoDB
- Ей для запуска надо указать папку для хранения базы данных
- Стандартный порт: 27017
- Настройка на запуск как Windows Service
D:\mongodb\bin>mongod --dbpath=D:\mongodb --logpath=D:\mongodb\log.txt --install
- Для удобства (GUI) можно использовать Robo 3T
- В этой БД данные хранятся в коллекциях json-объектов (коллекции документов)
- Чтобы найти конкретный документ в коллекции, надо в find указать объект-запрос вида: {"Имя_свойства": "Значение_свойства"}
- В Robomongo (Robo 3T) документы редактируются как текстовые объекты: ПКМ по документу коллекции -> Edit Document
Для контроля версий шаблонов миссий и баз локаций эти данные сохранены в папке data в проекте. При обновлении следует скопировать файлы в соответствующие папки и закоммитить изменения. Сохранять бэкапы не нужно, всё хранит контроль версий.
Сервер генерирует координатные группы для каждого аэродрома, описанного в moscow_fields.csv, stalin_fields.csv и kuban_fields.csv файлах. Координатная группа представляет из себя MCU аэродрома с объектным и целевым input триггером на него, которые должны соединяться с логикой, задаваемой в отдельной группе.
Субтитры аэродромов будут генерироваться по шаблонной группе: необходимо создать группу с субтитрами, где вместо имени аэродрома прописать !AFNAME!. Это будет служить меткой, куда при генерации будет подставлено наименование аэродрома.
Генератор (MissionGen.exe) должен запускаться в каталоге с игрой, т.к. он использует её структуру при выдаче миссии. По-умолчанию он складывает генерируемые миссии в data/Missions с именем result.Mission. Ресурсы для генерации тоже должны быть в каталоге с игрой (data/scg). Иначе генератор не может найти зависимости и не работает.