Skip to content

Server commander for "Random Expert" server in IL-2: Battle of Stalingrad game.

License

Notifications You must be signed in to change notification settings

lastick1/rexpert

Repository files navigation

Коммандер Random Expert

Версия 'Divisions'

Планы и прогресс можно посмотреть по issues в текущем GitHub репозитории

Базовая логика игрового процесса

  • Самолёты на аэродромах конечны
  • Посадка разрешена на любом аэродроме на своей территории, включая недоступные для взлёта в миссии

Главная цель миссии - захватить один из аэродромов противника, набрав 13 очков захвата

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

В каждой миссии у сторон есть следующие цели для уничтожения

Тип цели Количество в миссии Очки захвата Очки идут в следующую миссию
Фронтовой аэродром 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 статичных строений

Максимальное количество дополнительных модификаций, которое можно получить за вылет: 1

Сборка, настройка и запуск проекта

  1. Установить статистику il2_stats от =FB=Vaal
  2. Установить зависимости, выполнив install.bat в корне репозитория.
  3. Установить и запустить MongoDB
  4. Скопировать папку data/scg в папку игры, чтобы scg также была в <папка_с_игрой>/data
  5. Скопировать папку missiongen в папку bin игры
  6. Настроить конфигурационный файл main.json. Рекомендуется использовать IDE для его редактирования, чтобы работали подсказки к настройкам. Описание настроек по спецификации json-schema есть в файле ./data/schemas/main.json.
  7. Инициализировать кампанию, выполнив python runme.py initialize
  8. Настроить SDS для DServer, чтобы в нём были миссии result1 и result2, идущие по кругу. Оставить хотя бы 3-минутный отсчёт конца миссии, чтобы коммандер успевал сгенерировать следующую миссию.
  9. Настроить консоль сервера (RCon). Не забывать указать настройки подключения и для коммандера в main.json.
  10. Очистить папку с логами DServer.
  11. Запустить DServer, дождаться загрузки миссии.
  12. Запустить коммандер, выполнив python runme.py run

Известные особенности логов DServer

  • Не важно, как игрок покинул с сервера - у его бота должен быть атайп деинициализации
  • В конце раунда (Max time for round, tdmRoundTime в SDS) в лог выдаётся атайп 19

Python

  • использовать from __future__ import annotations для импорта кроссовых зависимостей

Спецификация

Конфиги (configs)

.py файлы менять настоятельно не рекомендуется

В папке 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)

MongoDB

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). Иначе генератор не может найти зависимости и не работает.

About

Server commander for "Random Expert" server in IL-2: Battle of Stalingrad game.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published