Jump to content
xedoc

IL2 CDR (AKA Командер)

Recommended Posts

Буду вести журнал процесса разработки, возможно будет кому-то интересно.

 

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

Пригодится для реализации статистики серверов и всевозможных сценариев аля Air Domination War, где необходим ввод команд от игроков и управление сервером, которое нельзя реализовать на уровне миссии.

 

Исходники обновляются тут:  https://github.com/xedoc/IL2CDR

Экзешник будет по этой ссылке: https://app.box.com/s/g6tmcu9tjv3eyeexf9buvhi1dqc4ofj1

Программа и скрипты пишутся на C#. Архитектура: MVVM (MVVMLight).

  • Скрипты могут содержать любую логику в зависимости от фантазии. Программа не ограничивает и не стандартизирует возможные сценарии миссии; 
  • В ядро программы будет добавлено максимум удобных интерфейсов для общения скрипта с вебом, БД и DServer-ом;
  • Описание и настройки будут визуализироваться автоматически, на основе кода из скрипта;

Сегодня планирую сделать парсер лога и простой скрипт для примера.

Если у кого-нибудь есть желание потестить или есть полезные советы - пишите. Если есть желающие чего-нибудь закоммитить - форкайте ;)

 

Пока быстро набросал скетч UI в VS.

  • Scripts - динамический список скриптов. Генерируется на основании списка файлов из папки с данными программы. Скрипты можно влючать, выключать и перезагружать. Для каждого скрипта отображается отдельный список настроек;
  • RCON - отправка консольных команд серверу. Разделена на команды управления игроками и глобальные команды;
  • Settings - глобальные настройки программы. Путь к логам миссии, опция чистки старых файлов(кстати, зачем они генерируются каждые 30 сек ???).
  • Log - журнал программы. Информация, ошибки загрузки сриптов со стектрейсом и т.д.

Картинки под спойлером:

 

 

Q55HLQo.png

 

Edited by xedoc
  • Upvote 43

Share this post


Link to post
Share on other sites

Ближе к результату ДОНАТЕ нарисуйте .И желательно с мнжеством способов внеснеия денег ибо лень для многих большее препятстие нежели бабло.

  • Upvote 15

Share this post


Link to post
Share on other sites

Да, если получится, надо будет парню собрать бакшиш . Пусть себе новый свитер купит - а то у компьютерщиков всегда один серый свитер ! )))

  • Upvote 6

Share this post


Link to post
Share on other sites

Да, если получится, надо будет парню собрать бакшиш . Пусть себе новый свитер купит - а то у компьютерщиков всегда один серый свитер ! )))

Поддерживаю!

Молодцы,что взялись.

Edited by AstronHaizer

Share this post


Link to post
Share on other sites

Кто в этой фигне разбирается, вы помогайте советами, поделитесь опытом и наработками для ОБЩЕГО дела. Одна голова хорошо, а несколько - лучше.

Share this post


Link to post
Share on other sites

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

Пригодится для реализации статистики серверов и всевозможных сценариев аля Air Domination War, где необходим ввод команд от игроков и управление сервером, которое нельзя реализовать на уровне миссии.

 

Большое дело будет)

 

Если чем помочь можем - обращайся.

  • Upvote 1

Share this post


Link to post
Share on other sites

Ничерта не понимаю, но денег обязательно подброшу (другим помочь не могу). Удачи в разработке.

Edited by Mihalich1981
  • Upvote 6

Share this post


Link to post
Share on other sites

Ближе к результату ДОНАТЕ нарисуйте

Поддерживаю. Спасибо автору за начинание! АДВ в БЗС - предел моих мечтаний!)

  • Upvote 1

Share this post


Link to post
Share on other sites

готов тестить и помочь в разработке вебовской части, составить архитектуру бд и прочее.

скайп kupikolesa

  • Upvote 2

Share this post


Link to post
Share on other sites

В программировании ни в зуб ногой :russian_ru: ,а вот пятаков могу подкинуть за такое дело! :good:

  • Upvote 1

Share this post


Link to post
Share on other sites

готов тестить и помочь в разработке вебовской части, составить архитектуру бд и прочее.

скайп kupikolesa

Отлично, я думал тестовую страничку статистики под Bootstrap сделать.

Хостинг для теста у меня есть. Можно еще на ASP.NET тестовый фронтенд сделать и залить на бесплатный Azure. Там 5Гб трафика на шару дают ;)

 

Чтобы не привязываться к структуре БД, я планирую использовать хранимые процедуры.

Со стороны клиента будет, например: CALL RecordKill(dateTime, attackerName, attackerCountry, attackerPlane, isAttackerInAir, targetName, targetCountry, targetPlane, isTargetInAir);

А уже в процедуре будет идти INSERT в соответствующие таблицы (килы, вулч, тимкил).

Там-же можно выдавать всякие медальки и звания.

 

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

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

Edited by xedoc
  • Upvote 2

Share this post


Link to post
Share on other sites

Чтобы не привязываться к структуре БД, я планирую использовать хранимые процедуры.

Не понял немного. Данные ты не хочешь хранить в БД чтоли? Структуру можно сделать, а потом уже распространить ее на Мускул и МССКЛ, думаю иное что-то врятли понадобиться.

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

Share this post


Link to post
Share on other sites

Буду вести журнал процесса разработки, возможно будет кому-то интересно.

 

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

Пригодится для реализации статистики серверов и всевозможных сценариев аля Air Domination War, где необходим ввод команд от игроков и управление сервером, которое нельзя реализовать на уровне миссии.

 

Исходники обновляются тут:  https://github.com/xedoc/IL2CDR

Экзешник будет по этой ссылке: https://app.box.com/s/g6tmcu9tjv3eyeexf9buvhi1dqc4ofj1

Программа и скрипты пишутся на C#. Архитектура: MVVM (MVVMLight).

  • Скрипты могут содержать любую логику в зависимости от фантазии. Программа не ограничивает и не стандартизирует возможные сценарии миссии; 
  • В ядро программы будет добавлено максимум удобных интерфейсов для общения скрипта с вебом, БД и DServer-ом;
  • Описание и настройки будут визуализироваться автоматически, на основе кода из скрипта;

Сегодня планирую сделать парсер лога и простой скрипт для примера.

Если у кого-нибудь есть желание потестить или есть полезные советы - пишите. Если есть желающие чего-нибудь закоммитить - форкайте ;)

 

Пока быстро набросал скетч UI в VS.

  • Scripts - динамический список скриптов. Генерируется на основании списка файлов из папки с данными программы. Скрипты можно влючать, выключать и перезагружать. Для каждого скрипта отображается отдельный список настроек;
  • RCON - отправка консольных команд серверу. Разделена на команды управления игроками и глобальные команды;
  • Settings - глобальные настройки программы. Путь к логам миссии, опция чистки старых файлов(кстати, зачем они генерируются каждые 30 сек ???).
  • Log - журнал программы. Информация, ошибки загрузки сриптов со стектрейсом и т.д.

Картинки под спойлером:

 

 

Q55HLQo.png

 

 

 

Можно ли будет вообще уйти от миссионного подхода? Ну, там, запилить ДК в реальном времени?

Share this post


Link to post
Share on other sites

Не понял немного. Данные ты не хочешь хранить в БД чтоли? Структуру можно сделать, а потом уже распространить ее на Мускул и МССКЛ, думаю иное что-то врятли понадобиться.

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

Это я к тому, что к структуре БД у меня нет никаких требований. Хочешь нормализуй, хочешь храни все в одной таблице. 

Главное, чтобы в БД был создан набор хранимых хранимых процедур с определенными параметрами. 

 

Образно говоря, в программе вместо вызова INSERT INTO stats SET player='blah', kills=kills+1,... будет CALL AddKill('blah') или для MSSQL: EXEC uspAddKill 'blah';

А уже в самой процедуре AddKill(), на сервере, будет выполняться один или несколько INSERT-ов, UPDATE-ы и все что душе угодно ;)

 

То-есть программе не обязательно знать название таблиц, их связи, имена полей и т.д. Если завтра захочется добавить новые вычисляемые параметры в статистике, то в коде программы менять ничего не придется.

  • Upvote 2

Share this post


Link to post
Share on other sites

 

 

Можно ли будет вообще уйти от миссионного подхода? Ну, там, запилить ДК в реальном времени?
 

Знать бы еще такое ДК :biggrin: ? 

Share this post


Link to post
Share on other sites

Динамическая Кампания, поди?

Share this post


Link to post
Share on other sites

Динамическая Кампания, поди?

Так сейчас пили нехочу. Или нужны объяснения что человек именно хочет!

 

Образно говоря, в программе вместо вызова INSERT INTO stats SET player='blah', kills=kills+1,... будет CALL AddKill('blah') или для MSSQL: EXEC uspAddKill 'blah'; А уже в самой процедуре AddKill(), на сервере, будет выполняться один или несколько INSERT-ов, UPDATE-ы и все что душе угодно

Понял тебя - хранимыми процедурами хочешь таскать данные. Как будет список данных, которые коммандер будет тащить, скидывай.

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

Share this post


Link to post
Share on other sites

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

  • Upvote 1

Share this post


Link to post
Share on other sites

Это я к тому, что к структуре БД у меня нет никаких требований. Хочешь нормализуй, хочешь храни все в одной таблице. 

Главное, чтобы в БД был создан набор хранимых хранимых процедур с определенными параметрами. 

 

Образно говоря, в программе вместо вызова INSERT INTO stats SET player='blah', kills=kills+1,... будет CALL AddKill('blah') или для MSSQL: EXEC uspAddKill 'blah';

А уже в самой процедуре AddKill(), на сервере, будет выполняться один или несколько INSERT-ов, UPDATE-ы и все что душе угодно ;)

 

То-есть программе не обязательно знать название таблиц, их связи, имена полей и т.д. Если завтра захочется добавить новые вычисляемые параметры в статистике, то в коде программы менять ничего не придется.

 

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

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

 

Сменить ник? Это как?

Share this post


Link to post
Share on other sites

 

 

Или же сменить ник и зайти под другим

 

С текущей политикой продажи аккаунтов, на это можно не отвлекаться. ;)

Share this post


Link to post
Share on other sites

 

 

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

Кстати, наступил на довольно серьезное ограничение. Чат пишется в файл только после остановки сервера. Как в таком случае читать команды пользователей - загадка. Возможно какой-то параметр есть.

Буду искать.

 

 

 

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

Кстати, наступил на довольно серьезное ограничение. Чат пишется в файл только после остановки сервера. Как в таком случае читать команды пользователей - загадка. Возможно какой-то параметр есть.

Буду искать.

Спроси у Ваала, там вроде api какой-то есть. У него же сайт про количество народа на серверах крутится и ники написаны.

Share this post


Link to post
Share on other sites

Спроси у Ваала, там вроде api какой-то есть. У него же сайт про количество народа на серверах крутится и ники написаны.

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

Логи и rcon я в конфиге включил и потестил.

 

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

Share this post


Link to post
Share on other sites

UPD: с чатом разобрался  :salute: Можно будет читать почти в онлайне. Только не знаю как отправить сообщение, чтобы не видел никто, кроме сервера. 

Видно как минимум команде.

Edited by xedoc

Share this post


Link to post
Share on other sites

Теоретически, логин с паролем непосредственно в командах можно не вводить. Во первых, два одинаковых ника в настоящее время невозможно, соответственно, авторизация клиента через чат особо и не требуется. Можно обойтись внешней при регистрации на проекте. Во вторых, помнится ДЕДы упоминали цифровой ID игрока, который используется сервером. Можно как-то привязаться к нему и он не будет зависеть от текущего ника в случае его изменения.

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

 

Может стоит просить разработчиков сделать серверный канал чата, но не уверен, что сделают, и тем более, что сделают быстро...

Share this post


Link to post
Share on other sites

может этот канал уже есть,только не ентер и снтрл\ентер ,а  какой ни будь  *??:;*%:?*?)(*    набор в чат ))) ...надо все спаришивать и вообще....не сделали сами ,тему могли бы пару раза в неделю читатить...за большое спасибо.

Share this post


Link to post
Share on other sites

Пробовал разные префиксы в чате, но пока не подобрал ничего.

 

ID-шников в логах хватает. Там их аж три для игрока. Один Guid для логина, один Guid для ника и еще один цифровой идентификатор игрока как объекта в миссии.  То-есть даже если игрок поменяет ник - привязка к нему по идее останется.

 

В данный момент авторизацию можно сделать через веб.

 

Например, игрок заходит на веб страницу и заполняет форму с текущим ником.

Сервер получает ник и складывает его в специальную табличку прошедших регистрацию. В этот момент сервер еще не знает Guid. 

Затем, при первом входе игрока: запрашиваем его Guid, видим, что его в базе нет, проверяем табличку регистрации на наличие ника, находим - закрепляем Guid за игроком и в дальнейшем авторизуем по нему. 

Если игрок поменяет ник, то по Guid-у можно будет его обновить.

 

Проблема мне видится не в авторизации, а в том, что команда противника может узнать - что происходит на той стороне по командам в чате, случайно отправленным через ENTER, вместо Ctrl+ENTER.

Share this post


Link to post
Share on other sites

 

Проблема мне видится не в авторизации, а в том, что команда противника может узнать - что происходит на той стороне по командам в чате, случайно отправленным через ENTER, вместо Ctrl+ENTER.

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

 

Больше интересует вопрос: а может ли сервер отвечать в чат конкретному игроку, а не в общий/командный канал?

Share this post


Link to post
Share on other sites

Больше интересует вопрос: а может ли сервер отвечать в чат конкретному игроку, а не в общий/командный канал?

Еще не тестил, но есть rcon-команда для отправки всем, коалиции, стране или определенному ID-клиента

Share this post


Link to post
Share on other sites

Сменить ник? Это как?

А ну тут ты прав. Уникальность зашита в БЗС. Но все равно нужно тогда сделать список авторизированных пилотов для сервера.

 

Кстати, наступил на довольно серьезное ограничение. Чат пишется в файл только после остановки сервера. Как в таком случае читать команды пользователей - загадка. Возможно какой-то параметр есть.

Буду искать.

Чат это на столько второстепенно что не стоит даже останавливаться на этом.

Share this post


Link to post
Share on other sites

Проблема мне видится не в авторизации, а в том, что команда противника может узнать - что происходит на той стороне по командам в чате, случайно отправленным через ENTER, вместо Ctrl+ENTER.

Это случайность. Не думаю что стоит так сирьезно останавливаться на этом. Вообще чат это приблуда второстепенная ИМХО.

Потом не забывай что полное управление миссиями доступно внутри редактора, нужно в принципе сделать только парсер логов в БД. Все остальное мне видится не критичным и второстепенным.

 

А вот первая табличка с игроками мне уже видна))).

Расскажите с какой целью налаживаете общение игрока с сервером? Для распознования целей? Или еще какие хотелки есть?

Share this post


Link to post
Share on other sites

Сейчас у меня цель написать ядро с удобным программным интерфейсом, через которое скрипт Air Domination War или любой другой скрипт сможет пользоваться функционалом чата в том числе.

В ADW проектах я видел, что команды в чате используются например для получения задания на аэродроме или перезарядки.

 

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

 

Парсер это первоочередное. Им сейчас и занимаюсь. Дело несколько усложняет тот момент, что файл лога не один и каждые 30 секунд генерится новый. Соответственно надо отслеживать файловую систему. Кроме того при первом запуске надо собирать историю текущей миссии по кусочкам, чтобы не потерять ID и т.д.

Edited by xedoc
  • Upvote 3

Share this post


Link to post
Share on other sites

Я б поддержал рублем. Сам не программист ни разу :( Но возможность командой с сервера какой-нибудь триггер активировать в реальном времени - это что то невероятно пользительное.

Edited by Valdamar

Share this post


Link to post
Share on other sites

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

 

Парсер это первоочередное. Им сейчас и занимаюсь. Дело несколько усложняет тот момент, что файл лога не один и каждые 30 секунд генерится новый. Соответственно надо отслеживать файловую систему. Кроме того при первом запуске надо собирать историю текущей миссии по кусочкам, чтобы не потерять ID и т.д.

На данный момент управление наземкой проработано спауном самолета на филде. Т.е. спаунишся и колонна выходит по заданному тобой маршруту. Маршруты естественно все заранее прописаны. Человек выбирает маршрут и тип колонны.

Да логи видел, геморойные. Но зато нет файла в 4-6 гигов как в старичке.

Share this post


Link to post
Share on other sites

Так сейчас пили нехочу. Или нужны объяснения что человек именно хочет!

 

 

Динамическую кампанию в реальном времени сейчас пилить можно? Это как? С помощью редактора можно создать независимо существующий игровой мир, в который игроки будут входить вместо создания коротких сеансов отдельных заданий?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...