Перейти к публикации

Рекомендованные сообщения

Опубликовано:

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

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

 

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

 

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

 

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


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

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

Опубликовано:

 

 

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

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

Опубликовано:

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

  • Поддерживаю! 2
Опубликовано: (изменено)

исправил

Изменено пользователем xedoc
Опубликовано:

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

Опубликовано:

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

Опубликовано:

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

Опубликовано:

 

 

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

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

Опубликовано:

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

Опубликовано:

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

Опубликовано:

 

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

 

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

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

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

rY03LOR.png

 

Опубликовано: (изменено)

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

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

ща потушу.

Изменено пользователем -DED-ASF
Опубликовано:

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

Опубликовано:

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

Опубликовано: (изменено)

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

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

Изменено пользователем -DED-ASF
Опубликовано:

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

Опубликовано:

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

Опубликовано:

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

Опубликовано:

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

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

Опубликовано:

Вот, теперь нормально названия целей пошли. В логах просто тип это имя, а имя это тип. Меня это с толку сбило :)

  • Поддерживаю! 1
Опубликовано:

 

 [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
Опубликовано:

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


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

Опубликовано:

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

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

Опубликовано:

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

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

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

 

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

 

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

Опубликовано:

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

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

Опубликовано:

Правлю.

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

Опубликовано:

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

Опубликовано:

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

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


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

Нужно :)

Опубликовано: (изменено)

А вот как сейчас в 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;

 

 

Изменено пользователем xedoc
Опубликовано:

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

 

[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
Опубликовано:

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

Опубликовано:

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

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

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

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

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

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

Опубликовано:

 

 

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

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

Опубликовано: (изменено)

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

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

Изменено пользователем xedoc
Опубликовано:

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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Создать...