taleks Опубликовано: 9 августа 2015 Опубликовано: 9 августа 2015 Парсер умеет делать две вещи: 1) конвертировать текстовый лог миссий в файл в формате JSON. Эта часть близка к полному завершению, возможно какие-то записи некорректно парсит, но в целом все записи конвертирует. 2) обработка лога, очеловечивание записей (вместо идентификатора объекта его имя, и т.п.) и простенький подсчет статистики с созданием файла с результатами миссии, опять же в формате JSON. Эта часть сделана лишь частично, некоторые события не обрабатываются, поэтому удивляться странностям не стоит. Теоретически все это позволяет забыть про родной формат лога миссий и работать с человекодружелюбным форматом. Писал в эти выходные, с пылу с жару, так сказать, поэтому за стабильность поручиться не могу. Данные для типов объектов (GameObjects.json) взяты по сути из кода командера xedoc'a. Используются для отнесения уничтоженного объекта к какой-нибудь группе. Как пользоваться: 1. Распаковать в куда-нибудь, перед этим убедиться, что стоит .NET 3.5. 2. В командной строке пишем: plog имя_файла, например: plog C:\logs\missionReport(2015-03-08_03-33-51)[0].txt 3. оно парсит этот файл, если есть missionReport(2015-03-08_03-33-51)[1].txt, то и его, и так до тех пор пока файлы по порядку индекса находятся. 4. в результате получаются два файла: 2015-03-08_03-33-51-log.json - это сконвертированный лог и 2015-03-08_03-33-51.json - а это некоторый суррогат статистики без претензий на достоверность. Во время работы оно может выдавать много-много текста, с руганью, предупреждениями и ошибками. Так и задумано. plog_test.zip 14
AstronHaizer Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Можно объяснить неразбираещемуся человеку,я как понял парсер берёт логи ила,и конвертирует их в удобный формат для работы со сторонним софтом,это упрощает работу со статистикой или как?
72AG_Krom Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Уважаемый, taleks, расскажите пожалуйста, за что отвечают события: AType:17, AType:18, AType:19. А так же, раскроете вы исходный код? Интересует момент определения сбит ли игрок.
taleks Опубликовано: 10 августа 2015 Автор Опубликовано: 10 августа 2015 Можно объяснить неразбираещемуся человеку,я как понял парсер берёт логи ила,и конвертирует их в удобный формат для работы со сторонним софтом,это упрощает работу со статистикой или как? Сама конвертация упрощает. Но на самом деле сильнее упростит, если довольное громоздкие последовательности событий будут преобразованы в понятные события типа "объект уничтожен", "игрок покинул самолет", сейчас это не сделано до конца, а в родном текстовом логе не все события очевидны. Имея это - дальше уже вопрос интепретации, как это понимать и в куда считать. А так же, раскроете вы исходный код? Интересует момент определения сбит ли игрок. Оно написано не на рабочем месте, лежа на диване, не глядя в код проекта. Поэтому нет каких-то особых причин, не выкладывать. Причешу и будет на битбакете, вероятнее всего. На счет сбития игрока, это как раз одно из сложных событий, которое хочется упростить. Игрок - это самолет + тело в нем (бот). Самолет быть жив, но бот мертв, некоторое время после уничтожения самолета может жить и бот. То есть строго говоря, в общем случае нужно смотреть не на самолет, а на тело, если исходить из простой статистики, кто кого убил. А затем после прекращения жизни бота, если в его данных нет ссылки на того, кто его уничтожил, откатываться назад в событиях и смотреть, кто помог его самолету помереть. Уважаемый, taleks, расскажите пожалуйста, за что отвечают события: AType:17, AType:18, AType:19. 17 - по-моему, не используется. 18 - это покидание ботом самолета. 19 - окончание раунда. 4
72AG_Krom Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Спасибо за ответы. 18 - это покидание ботом самолета. Тогда что такое AType:16?
NB79 Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 То есть строго говоря, в общем случае нужно смотреть не на самолет, а на тело, если исходить из простой статистики, кто кого убил. А затем после прекращения жизни бота, если в его данных нет ссылки на того, кто его уничтожил, откатываться назад в событиях и смотреть, кто помог его самолету помереть. В своё время уже предлагал. Если носителем всех событий выбрать игрока, то "кто и как" будет формироваться автоматически, вне зависимости от того, когда происходит фиксация событий в базе. Весь вылет можно в одну транзакцию оформить, с автоматическим зачислением всем причастным заслуженного. Причём, в этом случае становится не важно, вышла ли жертва, или атаковавший, например с сервера, или валяется на земле. Как только игрок прерывает вылет, неважно по каким условиям, всё происходившее с ним в вылете автоматически попадает в базу. Так у меня сделано для старичка и уже несколько лет успешно работает. Реализация не сложная, нагрузка на сервер ещё и уменьшается за счёт того, что базу обновляем через транзакции, которые живут в отдельном потоке и выполняются в результате не часто. Чуть растет расход памяти на списки событий связанных с игроком. Но рост копеечный при очевидных плюсах на упрощении всего механизма фиксации событий.
Warhamm Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Спасибо, нужная вещь. Тоже столкнулся с такой фигней. Всаживаю в ила пол бк, после чего тот аварийно садится. Игра пишет, игрок сбил ил-2. А в логах нет инфы, что я его сбил. Т.е. это надо вверх по событиям бежать и смотреть, кто этому илу больше всех повреждений нанес ну или кто последний в него попал. К чему эти сложности? Не проще было бы в лог сразу писать, что я его сбил, если игра так решила. Да это дает маневр для разработчика, я могу считать сбитых по другому алгоритму, нежели игра. Но ведь игрок не поймет такой статистики. Если игра пишет одно, а я на сервере статистики другое. Или другая ситуация. Лечу на штуке, стрелок сбивает ЛаГГа. Причем явно сбивает, тот в землю воткнулся. Игра пишет, что я сбил ЛаГГ. В логах же нет инфы, что я его сбил, нет инфы, что турель его сбила и нет инфы, что бот за турелью его сбил.
taleks Опубликовано: 10 августа 2015 Автор Опубликовано: 10 августа 2015 Спасибо за ответы. Тогда что такое AType:16? Учтите, что я не знаю внутренней кухни лога. Большую часть данных получил из тех логов, что у меня были + подглядывание в другие парсеры + раньше читал описание формата лога рофа. Обычно, такая последовательность: самолет посажен (6), конец игровой сессии для игрока (4), событие 16. Или убит бот (3), конец игровой сессии для игрока (4), событие 16 После этого событий с этим ботом в логе нет. Полагаю, что это просто деактивация бота, вызванная любой причиной, так её и учитываю. Ничего особого не означает, кроме того что больше этого бота в логе не будет (если он вдруг не будет создан снова с таким же ид позже). Если носителем всех событий выбрать игрока, то "кто и как" будет формироваться автоматически, вне зависимости от того, когда происходит фиксация событий в базе. Ну... в имеющихся логах чтобы получить события одного этого игрока приходится сначала помудрить. Отсюда и проистекает сложность.
taleks Опубликовано: 10 августа 2015 Автор Опубликовано: 10 августа 2015 Тоже столкнулся с такой фигней. Всаживаю в ила пол бк, после чего тот аварийно садится. Игра пишет, игрок сбил ил-2. А в логах нет инфы, что я его сбил. Т.е. это надо вверх по событиям бежать и смотреть, кто этому илу больше всех повреждений нанес ну или кто последний в него попал. К чему эти сложности? Не проще было бы в лог сразу писать, что я его сбил, если игра так решила. Да это дает маневр для разработчика, я могу считать сбитых по другому алгоритму, нежели игра. Но ведь игрок не поймет такой статистики. Если игра пишет одно, а я на сервере статистики другое. Все равно разница в статистике будет. Так как разные люди предпочитают по разному засчитывать победы и прочая. Например, кто последний попал или кто нанес больший ущерб. Это как раз и есть вопрос интерпретации и тут нет правильного или неправильного, просто вопрос предпочтений. Ну а если игрок запускает внешнюю утилиту, чтобы играть с её помощью (создавать миссии, карьера, что-то ещё), то ему придется и доверять тому, что говорит эта утилита, пока она считает одинаково для всех.
72AG_Krom Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Учтите, что я не знаю внутренней кухни лога. Большую часть данных получил из тех логов, что у меня были + подглядывание в другие парсеры + раньше читал описание формата лога рофа. Формат лога РОФа встречал только в вики, но к сожалению ее выпилили до того, как он понадобился ( Спасибо за ответ, вроде белых пятен больше не осталось.
andrey112 Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Формат лога РОФа встречал только в вики, но к сожалению ее выпилили до того, как он понадобился ( Спасибо за ответ, вроде белых пятен больше не осталось. Формат лога РоФ из вики
72AG_Krom Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 Формат лога РоФ из вики Спасибо. Про вебархив позабыл. Но как оказалось там не густо.
Graphite Опубликовано: 10 августа 2015 Опубликовано: 10 августа 2015 дело нужное конечно, жаль не официально...
taleks Опубликовано: 11 августа 2015 Автор Опубликовано: 11 августа 2015 Обновление парсера, правился учет сбитых и мелкие косяки там и сям. Результат одиночных миссий теперь показывает не так, как для мультиплеера. Парсер гарантированно некорректно учитывает туррели (уничтожение турели или уничтожение из турели), остальное несколько ближе к правде. GUI версия умеет только указывать файл для обработки. Исходный код: https://bitbucket.org/taleks/plog Что в выходном bla-bla-brief.json может быть интересно: MissionStats - тут лежит сводная статистика по сбитым-убитым за коалицию и страны по отдельности. В этом разделе есть подраздел Frags, т.е. список того, кто сбил кого (только игроки) исходя из того, как считает парсер. DeadStats - все уничтоженные объекты. Включая те, которые были уничтожены ботами или померли каким-то иным способом (на поле DeathReason особо не смотреть, оно верно лишь в 80 процентах случаев). PlayerStats - информация о конкретном игроке, его статистика сбитых и смертей, кроме того краткая статистика по вылетам (чем вылет закончился - сел, сбит, вышел, и т.п.). в bla-bla.json информации больше MissionFlow - ключевые события миссии (игрок взлетел, сбит и т.п.) AllPlayers - все игроки со всеми, относящимися к ним событиями. plog_test.zip 8
[HTS]MadFather Опубликовано: 2 июля 2019 Опубликовано: 2 июля 2019 У меня при попытке использовать парсер выскочило такое сообщение. При попытке запустить через командную строку написало в CMD следующее >plog F:\IL-2 Sturmovik Battle of Moscow\data\logs\txtmissionReport(2019-07-03_00-31-21)[0].txt "plog" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
=V=Heromant Опубликовано: 28 октября 2019 Опубликовано: 28 октября 2019 03.07.2019 в 03:01, [HTS]MadFather сказал: У меня при попытке использовать парсер выскочило такое сообщение. При попытке запустить через командную строку написало в CMD следующее >plog F:\IL-2 Sturmovik Battle of Moscow\data\logs\txtmissionReport(2019-07-03_00-31-21)[0].txt "plog" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Все верно. Имя программы пишется полностью с расширением. Так же надо указать ей путь, если запуск идет не из папки программы и этот путь не прописан в системных файлах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас