Jump to content
Korean Random
Sign in to follow this  
Lazy

Результаты боя

Recommended Posts

Привет.

Я хочу сохранять результат боя в google sheets. 
Саму технологию сохранения знаю, и в данный момент это сделано на java. Но результаты боя беру из json который делает pmod.
Не охото сильно углублятся в phyton, хочется сделать даже не мод а скрипт, который будет сохранять результат в гугл таблицу.
Сама идея такая, запускаю скрипт который проверяет папку с результатами раз в 1 минуту нет ли новых файлов. Если появился то отправляю на google table.

Теперь вопросы. 
Как распарсить результат боя?(вроде находил что результат боя это обычная сериализация через cPickel(или как он там называется)  и достаточно просто получить результаты, но хотелось бы уточнить у того кто это делал)
Можно ли сделать скрипт Phyton который будет работать отдельно от Wot и если да то как получить BattleResult из библиотеки wot.

Edited by Lazy

Share this post


Link to post

Short link
Share on other sites
2 часа назад, Lazy сказал:

Сама идея такая, запускаю скрипт который проверяет папку с результатами раз в 1 минуту нет ли новых файлов. Если появился то отправляю на google table.

Тут есть несколько нюансов:

- туда сохраняются далеко не все результаты (только если ты дождался окончания боя)

- туда сохраняются результаты со всех акк-ов

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
1 час назад, ShuraBB сказал:

Тут есть несколько нюансов:

- туда сохраняются далеко не все результаты (только если ты дождался окончания боя)

- туда сохраняются результаты со всех акк-ов

- А где сохраняются все результаты? 

- Там же должен быть ник игрока? Если да то это не проблема. 

Насчет сериализации я правильно понял?

http://wiki.vbaddict.net/pages/BattleResults

Что результат боя это объект :

batteresultversion, battleResults = cPickle.load(cachefile)

Только я не совсем понимаю как работают два объекта(в java такого нет)

 

arenaUniqueID = battleResults[0]

data = battleResults[1] and battleResults[2]

Дальше извлекаем нужную инфу и отправляем в таблицу. 

 

Или я не правильно понимаю?

 

Edited by Lazy

Share this post


Link to post

Short link
Share on other sites
4 часа назад, Lazy сказал:

А где сохраняются все результаты? 

Нигде

 

4 часа назад, Lazy сказал:

Там же должен быть ник игрока? Если да то это не проблема

Не ник, а цифровой ID

 

4 часа назад, Lazy сказал:

Насчет сериализации я правильно понял

Да, только там далеко не все ;-) Вот полные результаты: Результаты боя 0.9.20.0.log

 

4 часа назад, Lazy сказал:

batteresultversion, battleResults = cPickle.load(cachefile)

Только я не совсем понимаю как работают два объекта(в java такого нет)

Результат cPickle.load имеет два значения, первое присваивается batteresultversion, второе: battleResults

Edited by ShuraBB
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
13 минут назад, ShuraBB сказал:

Да, только там далеко не все ;-) Вот полные результаты: Результаты боя 0.9.20.0.log

Это из результата боя? т.е. из C:\~\AppData\Roaming\Wargaming.net\WorldOfTanks\battle_results\  или как-то по другому получено?

Я в phyton не очень, но вроде как я понял там все как массив сохранено. Т.е. чтобы получить данные x мне нужно взять battleResults[x]?

Мне не нужно сохранять прям подробно, а скорее общую инфу о бое. Кредиты, опыт дамаг время.

Edited by Lazy

Share this post


Link to post

Short link
Share on other sites
17 минут назад, Lazy сказал:

Это из результата боя? т.е. из C:\~\AppData\Roaming\Wargaming.net\WorldOfTanks\battle_results\  или как-то по другому получено?

Если результат сохранен, то да он будет такой. Результаты я получаю по другому.

 

17 минут назад, Lazy сказал:

Я в phyton не очень, но вроде как я понял там все как массив сохранено.

Это называется "словарь" - неупорядоченные коллекции произвольных объектов с доступом по ключу.

 

17 минут назад, Lazy сказал:

Т.е. чтобы получить данные x мне нужно взять battleResults[x]

Не совсем. Результаты боя это словарь словарей:

{
arenaUniqueID: 3044776834671755,
personal: {10529: {}},
vehicles: {},
avatars: {},
players: {},
common: {}
}

К примеру: battleResults['common']['arenaCreateTime']

Edited by ShuraBB
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
4 минуты назад, ShuraBB сказал:

Это называется "словарь" - неупорядоченные коллекции произвольных объектов с доступом по ключу.

Не совсем. Результаты боя это словарь словарей:

 

Спасибо! Кажется понял. Я думал что battleResults что это объект/класс wot библиотеки, а получается это просто название переменной которая является словарем словарей. 

Обязателен доступ по ключу или можно получить по 1,2,3? (battleResults[2])

В общем стало понятнее! Спасибо!

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, Lazy сказал:

Обязателен доступ по ключу или можно получить по 1,2,3? (battleResults[2])

Только по ключу

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
import cPickle
import codecs
cachefile = "F:\\12421317515158843.dat"
with open(cachefile, 'rb') as pickle_file:
    content = cPickle.load(pickle_file)
print (content)

Получаю результат:
(1, (12421317515158843L, 'x\x9ck`\x8a-d\xd4\xf0\xf2\xdb4\xff\xa8\x9f\x9f_r||RifNIf^|<Wqj\tW!P\x9aY\xc3K\xf6\xaa\x1e\x83\xaf\xa1H[!\x8b\x97\x18\x88\xd9x\xb2\xad\x90\xd5K\x10\xcc\xe4o+dKm\r*d\xf7\xf3f\x06\x1a\xe1\xb5....

Как мне получить не двоичные данные, а норм текст?

Share this post


Link to post

Short link
Share on other sites

Я рекомендую вообще с этими файлами не парится:

from PlayerEvents import g_playerEvents

g_playerEvents.onBattleResultsReceived += onReceiveBattleResult

def onReceiveBattleResult(isActiveVehicle, results):
	print results

 

Edited by ShuraBB

Share this post


Link to post

Short link
Share on other sites
2 минуты назад, ShuraBB сказал:

Я рекомендую вообще с этими файлами не парится:


from PlayerEvents import g_playerEvents

g_playerEvents.onBattleResultsReceived += onReceiveBattleResult

def onReceiveBattleResult(isActiveVehicle, results):
	print results

 

Это же нужно как мод устанавливать? Или он отдельно будет работать?

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, Lazy сказал:

Это же нужно как мод устанавливать? Или он отдельно будет работать?

А, ну да, я все забываю что ты хочешь без клиента это сделать... Но может это все таки не правильный вариант?

 

Можешь посмотреть как клиент работает с файлами кеша тут: scripts/client_common/shared_utils/account_helpers/BattleResultsCache.py

Edited by ShuraBB
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
8 минут назад, ShuraBB сказал:

А, ну да, я все забываю что ты хочешь без клиента это сделать...

 

Можешь посмотреть как клиент работает с файлами кеша тут: scripts/client_common/shared_utils/account_helpers/BattleResultsCache.py

Спасибо. 

Еще нашли такую штуку тоже завтра посмотрю https://github.com/raszpl/wotdecoder/blob/master/wotdecoder.py#L516-L524, надеюсь разберусь, хотя думал будет попроще )

8 минут назад, ShuraBB сказал:

Можешь посмотреть как клиент работает с файлами кеша тут: scripts/client_common/shared_utils/account_helpers/BattleResultsCache.py

Что-то не могу найти такую папку, она где находится?

Edited by Lazy

Share this post


Link to post

Short link
Share on other sites
2 часа назад, Lazy сказал:

Как мне получить не двоичные данные, а норм текст?

Там в BattleResultsCache.py есть функция convertToFullForm которая как раз и "приводит" к читаемому виду.

Share this post


Link to post

Short link
Share on other sites
12 часов назад, Lazy сказал:

Что-то не могу найти такую папку, она где находится?

:smile: Все скрипты лежат в res\packages\scripts.pkg - это обычный zip-архив. После распаковки и получишь всю структуру. Только скрипты еще нужно декомпилировать (можно Орионом)

BattleResultsCache.py

Share this post


Link to post

Short link
Share on other sites
5 часов назад, ShuraBB сказал:

:smile: Все скрипты лежат в res\packages\scripts.pkg - это обычный zip-архив. После распаковки и получишь всю структуру. Только скрипты еще нужно декомпилировать (можно Орионом)

BattleResultsCache.py

Спасибо!

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...