Jump to content
xedoc

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

Recommended Posts

Надо зарегистрироваться на il2.info, чтобы получить Token для передачи данных(после входа, клик на email, справа вверху),

На сервере надо запустить il2cdr.exe из любой папки. 

 

Сама программа никаких портов не открывает. Передаются только события из лога, обычным HTTP POST-ом.

 

Исходники открыты, лежат на гитхабе. Сама статистика работает через .cs-скрипт, который по-умолчанию в текстовом виде. 

 

Я планирую добавить на сайт управление rcon-ом через веб, но это будет отключаемая опция и никаких портов для этого тоже не надо. Будут веб-запросы от программы и long-polling


Захожу с мобилы, с хрома, таблица пустая

Тоже попробовал с телефона - работает :/

Share this post


Link to post
Share on other sites

 

 

Захожу с мобилы, с хрома, таблица пустая

Ф5 жмем и все заполнится. Почему-то после открытия тоже пустую видел. Ф5 помогло! 

Share this post


Link to post
Share on other sites

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

  • Upvote 2

Share this post


Link to post
Share on other sites

исправил

Edited by xedoc

Share this post


Link to post
Share on other sites

А почему фридрихов два? там над яком еще один, с 94 фрагами.

Share this post


Link to post
Share on other sites

Интересный вопрос. У них id почему-то разный в референсной таблице. Надо будет перепроверить генерацию этого ID.

Share this post


Link to post
Share on other sites

Там еще две пешки и вундервафля Голова бота обычная. Не сочти за первое апреля, но что это? :))

Share this post


Link to post
Share on other sites

 

 

Интересный перекос получается. BF 109 F-4 набили 3925 фрагов (техники, зданий)
 

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

Share this post


Link to post
Share on other sites

Приходит такое с серверов. Есть стандартный набор названий, а есть то, что в миссиях прописывают. Голова бота, кстати вроде стандартное название. Где-то по-моему встречал, тоже улыбнуло :)

Share this post


Link to post
Share on other sites

С верхним фридрихом какая то бяка, он даже самолеты из РоФа убивает :)

Share this post


Link to post
Share on other sites

 

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

 

Хенкелей всего 4 штуки фридрихи настреляли :)

С верхним фридрихом какая то бяка, он даже самолеты из РоФа убивает :)

И попрошу заметить, было это в ноябре 42-го :D

rY03LOR.png

 

Share this post


Link to post
Share on other sites

надо на полигоне и акробатике стату вырубить..

а то там еще и не такого напишет)))

ща потушу.

Edited by -DED-ASF

Share this post


Link to post
Share on other sites

Скоро можно будет отключать это дело птичками ;)

Share this post


Link to post
Share on other sites

Хм, а на DED- серверах можно за обе стороны на F4 летать ?

Share this post


Link to post
Share on other sites

на полигоне можно все)

и на дуэльнике тоже.

Edited by -DED-ASF

Share this post


Link to post
Share on other sites

А на этом - "1CGS Official Server (Normal)  by -DED-" ?

Share this post


Link to post
Share on other sites

на нормале крафты согласно выбранной стороны..

Share this post


Link to post
Share on other sites

Спасибо, похоже баг нашелся с названиями крафтов :/  Буду разбираться

Share this post


Link to post
Share on other sites

Нашел косячек. Как проверю повторно выложу!

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

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

 

 [01.04.2015 23:18:51] Start server monitor for server -AIR open test WAR- il2 kupikolesa ru

[01.04.2015 23:18:51] Initialize action manager for -AIR open test WAR- il2 kupikolesa ru
[01.04.2015 23:18:51] Reading events history from F:\IL-2 Sturmovik Battle of Stalingrad\data\logs\text\missionReport(2015-04-01_22-57-19)[0].txt
[01.04.2015 23:18:51] New mission started F:\IL-2 Sturmovik Battle of Stalingrad\data\logs\text\missionReport(2015-04-01_22-57-19)[0].txt
[01.04.2015 23:18:52] Successfuly connected to il2.info
[01.04.2015 23:29:36] Error: http://il2.info/e Время ожидания операции истекло
[01.04.2015 23:29:36] Send result: FAIL (HTTP error)
[01.04.2015 23:46:31] 611331
[01.04.2015 23:46:37] Error: http://il2.info/e Время ожидания операции истекло
[01.04.2015 23:46:37] Send result: FAIL (HTTP error)
[01.04.2015 23:47:27] Error: http://il2.info/e Время ожидания операции истекло
[01.04.2015 23:47:27] Send result: FAIL (HTTP error)
[01.04.2015 23:49:27] Error: http://il2.info/e Время ожидания операции истекло
[01.04.2015 23:49:27] Send result: FAIL (HTTP error)
[01.04.2015 23:49:57] Error: http://il2.info/e Время ожидания операции истекло
[01.04.2015 23:49:57] Send result: FAIL (HTTP error)
[02.04.2015 0:22:56] 574466
[02.04.2015 0:22:56] 559106
[02.04.2015 0:31:54] 617477
[02.04.2015 0:31:54] 618501

Share this post


Link to post
Share on other sites

Xedoc! Кажется, если заканчиваешь миссию в воздухе на исправном самолёте, но за линией фронта, то в статистику пишется поражение (Losses). По крайней мере у меня других версий нет. Делал только несколько пробных вылетов, в которых в меня даже не стреляли. А вот конец миссии в воздухе меня как раз настигал пару раз. В стате прописано два поражения.


А, ещё версия! Пару раз нажимал кнопку выхода, сразу после респауна на стоянке. Сама игра потом писала, что вылет прерван. В любом случае, надо проверить.

Share this post


Link to post
Share on other sites

Xedoc! Кажется, если заканчиваешь миссию в воздухе на исправном самолёте, но за линией фронта...

Смотря на каком сервере и на какой карте. Иногда (скорее чаще, чем реже) редакторы не добавляют разграничение территории, так как это дело сжирает ресурсы. Поэтому, может быть не важно где тебя настигнет конец миссии.

Share this post


Link to post
Share on other sites

Xedoc! Кажется, если заканчиваешь миссию в воздухе на исправном самолёте, но за линией фронта, то в статистику пишется поражение (Losses). По крайней мере у меня других версий нет. Делал только несколько пробных вылетов, в которых в меня даже не стреляли. А вот конец миссии в воздухе меня как раз настигал пару раз. В стате прописано два поражения.

А, ещё версия! Пару раз нажимал кнопку выхода, сразу после респауна на стоянке. Сама игра потом писала, что вылет прерван. В любом случае, надо проверить.

Поражение пишется, только когда от сервера приходит событие "Kill", других вариантов нет. Но проверю.

 

[01.04.2015 23:29:36] Error: http://il2.info/e Время ожидания операции истекло

 

Это не страшно, при ошибке идет повторная отправка. 

Share this post


Link to post
Share on other sites

Поражение пишется, только когда от сервера приходит событие "Kill", других вариантов нет. Но проверю.

Хм... А сейчас эти два поражения из статистики пропали. Видимо глюк статы. Или действительно исправил чего?

Share this post


Link to post
Share on other sites

Правлю.

Нашел возможную проблему. Не учитывался тип цели, если игрока сбивал бот. 

Share this post


Link to post
Share on other sites

А по серверам в статистику можно добавить какой стороной была одержена победа на карте?

Share this post


Link to post
Share on other sites

Подправил. Сейчас алгоритм такой:

SELECT  nickname_id, 
        SUM(if(isteamkill is NULL, 0, details.isteamkill)) AS teamkills,
        SUM(if(isplayerkill IS NULL, 0, details.isplayerkill)) as playerkills,
        SUM(if(isgroundkill is NULL, 0, details.isgroundkill)) AS groundkills,
        SUM(IF(isbotairkill IS NULL,0,details.isbotairkill)) as botairkills,
        SUM(if(iscrash is NULL,0, iscrash)) AS crashes,
        SUM(if(iskilledbyplayer is NULL,0, iskilledbyplayer)) AS iskilledbyplayer,
        SUM(if(iskilledbyairbot is NULL,0, iskilledbyairbot)) AS iskilledbyairbot,
        SUM(if(iskilledbygroundunit is NULL,0, iskilledbygroundunit)) AS iskilledbygroundunit
        FROM (
          SELECT IF(attackerplayers.nickname_id IS NULL, targetplayers.nickname_id, attackerplayers.nickname_id) as nickname_id,          
          @isteamkill:=attacker_coalition=target_coalition as isteamkill,
          @isairattacker:= NOT @isteamkill AND attackerinfo.class = 'Plane' AS isairattacker,
          @isairtarget:= NOT @isteamkill AND targetinfo.class = 'Plane' AS isairtarget,
          @isplayerkill:= @isairtarget AND NOT @isteamkill AND NOT ISNULL(attackerplayer_id) AND NOT ISNULL(targetplayer_id) as isplayerkill,
          @isgroundkill:=NOT @isairtarget AND NOT @isteamkill AND NOT ISNULL(attackerplayer_id) AND NOT ISNULL(targetobject_id) as isgroundkill,
          @isairbotkill:=@isairtarget AND NOT @isteamkill AND NOT ISNULL(targetobject_id) AND ISNULL(targetplayer_id) as isbotairkill,
          @iscrash:=ISNULL(attackerplayer_id) AND ISNULL(attackerobject_id) AS iscrash,
          @iskilledbyplayer:=@isairattacker AND @isairtarget AND NOT ISNULL(attackerplayer_id) AS iskilledbyplayer,
          @iskilledbyairbot:=@isairattacker AND @isairtarget AND ISNULL(attackerplayer_id) AS iskilledbyairbot,
          @iskilledbygroundunit:=NOT @isairattacker AND @isairtarget AND ISNULL(attackerplayer_id) AS iskilledbygroundunit
      FROM frags LEFT JOIN players attackerplayers
    ON attackerplayers.nickname_id = frags.attackerplayer_id
  LEFT JOIN players targetplayers
    ON targetplayers.nickname_id = frags.targetplayer_id
  LEFT JOIN objectsinfo targetinfo
    ON frags.targetobject_id = targetinfo.object_id  
  LEFT JOIN objectsinfo attackerinfo
    ON frags.attackerobject_id = attackerinfo.object_id  
  LEFT JOIN players targets ON targets.nickname_id = frags.targetplayer_id
    ) details
    GROUP BY nickname_id


А по серверам в статистику можно добавить какой стороной была одержена победа на карте?

Нужно :)

Share this post


Link to post
Share on other sites

А вот как сейчас в MySQL обрабатывается каждое событие:

 

 

  DECLARE class_ varchar(50);
  DECLARE isnotteamkill_ bool;
  
  SET isnotteamkill_ = attacker_coalition_ != target_coalition_;

  --- Killed by player
  IF NOT ISNULL(attackerplayer_id_) THEN
    --- PvP
    IF NOT ISNULL(targetplayer_id_) THEN            
      SELECT
        class INTO class_
      FROM objectsinfo
      WHERE object_id = targetobject_id_ LIMIT 1;

      --- If target is plane - change attacker's and target's wins/losses 
      IF class_ = 'Plane' THEN
        UPDATE players
        SET playerairkills = if(isnotteamkill_, playerairkills + 1, playerairkills),
            team_kills = if(isnotteamkill_, team_kills, team_kills+1),
            air_damage = air_damage + damage_,
            air_hits = air_hits + hits_
        WHERE nickname_id = attackerplayer_id_;
        UPDATE players
        SET killedbyplayers = killedbyplayers + 1
        WHERE nickname_id = targetplayer_id_;
      END IF;
    --- PvE
    ELSEIF NOT ISNULL(targetobject_id_) THEN
      SELECT
        class INTO class_
      FROM objectsinfo
      WHERE object_id = targetobject_id_ LIMIT 1;
      
      IF NOT ISNULL(class_) THEN
        --- AI planes
        IF class_ = 'Plane' THEN
          UPDATE players
          SET botairkills = if(isnotteamkill_, botairkills + 1,botairkills),
            team_kills = if(isnotteamkill_, team_kills, team_kills+1),
            air_hits = air_hits + hits_,
            air_damage = air_damage + damage_
          WHERE nickname_id = attackerplayer_id_;
        --- Ground units and others
        ELSE
          UPDATE players
          SET botgroundkills = if(isnotteamkill_, botgroundkills + 1, botgroundkills),
            team_kills = if(isnotteamkill_,team_kills,team_kills + 1),
            ground_hits = ground_hits + hits_,
            ground_damage = ground_damage + damage_
          WHERE nickname_id = attackerplayer_id_;
        END IF;
      END IF;
    END IF;
  --- Killed not by player
  ELSE
    IF NOT ISNULL(targetplayer_id_) AND NOT ISNULL(attackerobject_id_) THEN
      SELECT
        class INTO class_
      FROM objectsinfo
      WHERE object_id = targetobject_id_ LIMIT 1;
      --- Dont count a kill if target object not a plane. 
      IF class_ <> 'Plane' THEN LEAVE PROC; END IF;
      SELECT
        class INTO class_
      FROM objectsinfo
      WHERE object_id = attackerobject_id_ LIMIT 1;
      IF NOT ISNULL(class_) THEN
        --- Killed by air AI
        IF class_ = 'Plane' THEN
          UPDATE players
          SET killedbyairbots = killedbyairbots + 1
          WHERE nickname_id = targetplayer_id_;
        --- Killed by ground unit or other unknown object
        ELSE
          UPDATE players
          SET killedbygroundbots = killedbygroundbots + 1
          WHERE nickname_id = targetplayer_id_;
        END IF;
      END IF;
    --- Crashed
    ELSEIF NOT ISNULL( targetplayer_id_ ) THEN
      UPDATE players
          SET crashes = crashes + 1
          WHERE nickname_id = targetplayer_id_;
    END IF;
  END IF;

 

 

Edited by xedoc

Share this post


Link to post
Share on other sites

Как и писал вчера. После присланного вчера лога ничего в нем не изменилось. Закрыл коммандер и запустил заново, результат эдентичный:

 

[02.04.2015 15:02:32] Application is starting...

[02.04.2015 15:02:32] Loading script C:\Users\Администратор\Documents\IL2CDR\Scripts\GlobalStatistics.cs...
[02.04.2015 15:02:32] Loading script C:\Users\Администратор\Documents\IL2CDR\Scripts\LogParser.cs...
[02.04.2015 15:02:32] Loading script C:\Users\Администратор\Documents\IL2CDR\Scripts\LogParserTest.cs...
[02.04.2015 15:02:33] Error: Exception: c:\Users\Администратор\AppData\Local\Temp\CSSCRIPT\787dd32f-000c-4b1a-8d9f-8c0bd885c543.tmp(38,13): error CS0012: Тип "System.Windows.Forms.DialogResult" определен в сборке, ссылка на которую отсутствует. Следует добавить ссылку на сборку "System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
 
   в csscript.CSExecutor.ProcessCompilingResult(CompilerResults results, CompilerParameters compilerParams, ScriptParser parser, String scriptFileName, String assemblyFileName, String[] additionalDependencies)
   в csscript.CSExecutor.Compile(String scriptFileName)
   в csscript.CSExecutor.Compile(String scriptFile, String assemblyFile, Boolean debugBuild)
   в CSScriptLibrary.CSScript.LoadWithConfig(String scriptFile, String assemblyFile, Boolean debugBuild, Settings scriptSettings, String compilerOptions, String[] refAssemblies)
   в CSScriptLibrary.CSScript.LoadCode(String scriptText, String tempFileExtension, String assemblyFile, Boolean debugBuild, String[] refAssemblies)
   в CSScriptLibrary.CSScript.LoadCode(String scriptText, String assemblyFile, Boolean debugBuild, String[] refAssemblies)
   в IL2CDR.Model.ScriptManager.LoadScript(String scriptPath) в c:\Users\meshkov\Source\Repos\IL2CDR\IL2CDR\IL2CDR\Model\ScriptManager.cs:строка 173
   в IL2CDR.Model.ScriptManager.<>c__DisplayClass3a.<LoadScripts>b__32() в c:\Users\meshkov\Source\Repos\IL2CDR\IL2CDR\IL2CDR\Model\ScriptManager.cs:строка 248
   в IL2CDR.Model.Util.Try(Action action, Boolean logException) в c:\Users\meshkov\Source\Repos\IL2CDR\IL2CDR\IL2CDR\Model\Util.cs:строка 35
[02.04.2015 15:02:33] Rcon authentication: OK
[02.04.2015 15:02:33] Start server monitor for server -AIR open test WAR- il2 kupikolesa ru
[02.04.2015 15:02:33] Initialize action manager for -AIR open test WAR- il2 kupikolesa ru
[02.04.2015 15:02:33] Reading events history from F:\IL-2 Sturmovik Battle of Stalingrad\data\logs\text\missionReport(2015-04-01_22-57-19)[0].txt
[02.04.2015 15:02:33] New mission started F:\IL-2 Sturmovik Battle of Stalingrad\data\logs\text\missionReport(2015-04-01_22-57-19)[0].txt
[02.04.2015 15:02:34] Successfuly connected to il2.info
[02.04.2015 15:03:10] 611331
[02.04.2015 15:03:36] 574466
[02.04.2015 15:03:36] 559106
[02.04.2015 15:03:44] 617477
[02.04.2015 15:03:45] 618501

Share this post


Link to post
Share on other sites

В командерах для старичка был такой раздел как BanList. Как думаете, нужен ли такой функционал в IL2CDR?

Share this post


Link to post
Share on other sites

Как и писал вчера. После присланного вчера лога ничего в нем не изменилось. Закрыл коммандер и запустил заново, результат эдентичный:

LogParser*.cs можно прибить в папке Scripts рядом с экзешником и в Documents\IL2CDR\Scripts

Он не нужен для статистики.

В остальном, в логе все вроде ок.

В командерах для старичка был такой раздел как BanList. Как думаете, нужен ли такой функционал в IL2CDR?

Что за раздел ? Для обмена списками ?

Share this post


Link to post
Share on other sites

 

 

Что за раздел ? Для обмена списками ?

Нет, это черный список  игроков, которых не пускает на сервер за те или иные злодеяния :) 

Share this post


Link to post
Share on other sites

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

В RCON есть возможность забанить игрока, но нет возможности разбанить конкретного игрока. Очевидно где-то пишется какой-то файлик с банами.

Edited by xedoc

Share this post


Link to post
Share on other sites

Насколько я знаю, в РоФ и БзС команда ban отсылает данные об игроке на мастер сервер и доступ на сервер для игрока закрывается именно там. И, действительно, разбанить можно только всех сразу. Но есть решение проще, сделать интерфейс со списком игроков в командере и согласно списка делать kick(). Я локально пытался рисовать такой интерфейс  в IL2CDR.

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...