Jump to content
Korean Random
StranikS_Scan

NetStatisticsModules(NSM) - набор модулей по математике и статистике в игре, использующий WG-API и XVM-API

Recommended Posts

300px-Fisher_iris_versicolor_sepalwidth.svg.png

NetStatisticsModules(NSM)

 

Версия: 1.2.6     |     Ссылка: Git-Hub

 

Пакет NSM это библиотека модулей с открытым исходным кодом для мододелов, в которой реализованы основные инструменты для получения статистики игроков с серверов WG и XVM и различные математические функции, такие как расчет того или иного рейтинга, или показателя, расчет шансов на победу и т.д. Библиотека периодически обновляется и дополняется.

 

Состав пакета:

  • xvm_statistics - модуль для получения статистики игроков с сервера XVM
  • wg_statistics - модуль для получения статистики игроков с сервера WG
  • rating_calculation - модуль для расчета рейтингов игроков и различных статистических показателей
  • victory_chances - модуль для расчета шансов на победу в бою

 

При использовании функций и эвентов из модулей статистики, обращающихся к серверам WG-API и XVM-API, необходимо указывать <application_id> вашего приложения. Чтобы его получить достаточно зайти на сайт https://developers.wargaming.net и зарегистрировать свой мод как автономное приложение, после чего ему будет присвоен токен из 33 символов, это и есть <application_id>. Используйте его при работе с библиотекой и все ваши обращения к серверам будут идентифицироваться посредством этого токена. В случае с WG-API вы также сможете в своем личном кабинете наблюдать статистику запросов вашего мода.

 

Для применения пакета достаточно положить его в папку mods\X.X.X\. После чего можно импортировать из этого пакеты все необходимые вашему моду функции и эвенты и использовать их в коде своего мода. Ниже дается подробное описание функций и эвентов и примеры их использования по каждому из модулей NSM.

 

Модуль: xvm_statistics

События: g_XVMStatisticsEvents

  • addStatsAccountBecomePlayer - подписаться на событие AccountBecomePlayer, которое возвращает словарь со статистикой игрока по аккаунту и по танкам при авторизации в ангаре (требуется активация на сайте XVM). Формат словаря {'players': [{...}]}. Ниже пример подписки и отписки от эвента.
from gui.mods.xvm_statistics import g_XVMStatisticsEvents

#Returns the full statistics of the player during authorization in the game client,
#if there is no data on the server or there is no connection or there is no token, it returns None
def event(statistic):
    statistic -> dict or None #{'players': [{'status': 1, 'max_xp': 2868, 'dmg': 29441665, 'spo': 22369, 'wn8': 2093, 'xp': 15118810, 'frg': 24127, 'nm': 'StranikS_Scan', 'ts': 1544905295000L, 'wgr': 8970, 'hip': 71, 'wtr': 6580, 'memberhistory': [], 'is_banned': None, 'max_frg': 11, 'flag': None, 'dt': '2018-12-15T20:21:35.22+00:00', 'lang': None, 'b': 20029, 'e': 1457, 'cid': 69731, 'max_dmg': 8528, 'cap': 38302, 'dmg_r': 20473839, 'srv': 6873, 'w': 11715, 'v': {'8465': {'b': 129, 'frg': 141, 'mom': 3, 'dmg': 167647, 'cap': 471, 'srv': 40, 'w': 88, 'spo': 193, 'xp': 106742, 'id': '8465', 'def': 13}, ...}, 'lvl': 7.54826, '_id': 2365719, 'def': 14626}]}
...
g_XVMStatisticsEvents.addStatsAccountBecomePlayer(<application_id>=str, event=func)
...
g_XVMStatisticsEvents.delStatsAccountBecomePlayer(<application_id>=str, event=func)
...
g_XVMStatisticsEvents.delStatsAccountBecomePlayer(<application_id>=str)
  • addStatsBattleLoaded - подписаться на событие BattleLoaded, которое возвращает словарь со статистикой игроков по аккаунту и по текущему танку при загрузке боя (требуется активация на сайте XVM). Формат словаря {'players': [{...}, {...}, ...]}. В примере ниже статистика двух игроков, зашедших в тренировочный бой на RU 251 и ЛТТБ.
#Returns the statistics of all players when the battle is loaded,
#if there is no connection to the server or there is no token, then it returns None
def event(statistic):
    statistic -> dict or None
...
g_XVMStatisticsEvents.addStatsBattleLoaded(<application_id>=str, event=func)
#{'players': [{'status': 1, 'max_xp': 2868, 'dmg': 29441665, 'spo': 22369, 'xp': 15118810, 'wn8': 2093, 'frg': 24127, 'nm': 'StranikS_Scan', 'ts': 1544905295220L, 'wgr': 8970, 'hip': 71, 'wtr': 6580, 'max_frg': 11, 'flag': None, 'is_banned': None, 'lang': None, 'b': 20029, 'e': 1457, 'cid': 69731, 'max_dmg': 8528, 'cap': 38302, 'dmg_r': 20473839, 'r': 8970, 'srv': 6873, 'w': 11715, 
#              'v': {'wtr': 2095, 'b': 86, 'frg': 33, 'mom': 3, 'dmg': 63105, 'cap': 37, 'srv': 10, 'w': 39, 'spo': 154, 'xp': 55069, 'def': 17}, 
#              'lvl': 7.54826, '_id': 2365719, 'def': 14626},
#             {'status': None, 'max_xp': 2304, 'dmg': 3102429, 'spo': 4802, 'xp': 1957580, 'wn8': 1276, 'frg': 3273, 'nm': 'stiiiiil777', 'ts': 1545087003283L, 'wgr': 4241, 'hip': 54, 'wtr': 3309, 'max_frg': 8, 'flag': None, 'is_banned': None, 'lang': None, 'b': 4003, 'e': 1034, 'cid': None, 'max_dmg': 4017, 'cap': 4717, 'dmg_r': 2573057, 'r': 4241, 'srv': 1057, 'w': 1958, 
#              'v': {'wtr': 2724, 'b': 79, 'frg': 30, 'mom': 3, 'dmg': 41240, 'cap': 67, 'srv': 7, 'w': 35, 'spo': 208, 'xp': 38228, 'def': 12}, 
#              'lvl': 6.43886, '_id': 2446623, 'def': 2871}]}
...
g_XVMStatisticsEvents.delStatsBattleLoaded(<application_id>=str, event=func)
...
g_XVMStatisticsEvents.delStatsBattleLoaded(<application_id>=str)
  • addStatsFullBattleLoaded - аналогично предыдущему событию, только возвращает статистику игроков по всем танкам (требуется активация на сайте XVM).
#Returns the full statistics of all players when the battle is loaded,
#if there is no connection to the server or there is no token, then it returns None
def event(statistic):
    statistic -> dict or None
...
g_XVMStatisticsEvents.addStatsFullBattleLoaded(<application_id>=str, event=func)
#{'players': [{'status': None, 'max_xp': 2304, 'dmg': 3102429, 'spo': 4802, 'wn8': 1276, 'xp': 1957580, 'frg': 3273, 'nm': 'stiiiiil777', 'ts': 1545087003000L, 'wgr': 4241, 'hip': 54, 'wtr': 3309, 'memberhistory': [], 'is_banned': None, 'max_frg': 8, 'flag': None, 'dt': '2018-12-17T22:50:03.283+00:00', 'lang': None, 'b': 4003, 'e': 1034, 'cid': None, 'max_dmg': 4017, 'cap': 4717, 'dmg_r': 2573057, 'srv': 1057, 'w': 1958, 
#              'v': {'9249': {'wtr': 1197, 'b': 15, 'frg': 4, 'mom': 1, 'dmg': 7614, 'cap': 15, 'srv': 3, 'w': 7, 'spo': 1, 'xp': 4599, 'id': '9249', 'def': 0}, ...}, 
#              'lvl': 6.43886, '_id': 2446623, 'def': 2871}, 
#             {'status': 1, 'max_xp': 2868, 'dmg': 29441665, 'spo': 22369, 'wn8': 2093, 'xp': 15118810, 'frg': 24127, 'nm': 'StranikS_Scan', 'ts': 1544905295000L, 'wgr': 8970, 'hip': 71, 'wtr': 6580, 'memberhistory': [], 'is_banned': None, 'max_frg': 11, 'flag': None, 'dt': '2018-12-15T20:21:35.22+00:00', 'lang': None, 'b': 20029, 'e': 1457, 'cid': 69731, 'max_dmg': 8528, 'cap': 38302, 'dmg_r': 20473839, 'srv': 6873, 'w': 11715, 
#              'v': {'8465': {'b': 129, 'frg': 141, 'mom': 3, 'dmg': 167647, 'cap': 471, 'srv': 40, 'w': 88, 'spo': 193, 'xp': 106742, 'id': '8465', 'def': 13}, ...}, 
#              'lvl': 7.54826, '_id': 2365719, 'def': 14626}]}
...
g_XVMStatisticsEvents.delStatsFullBattleLoaded(<application_id>=str, event=func)
...
g_XVMStatisticsEvents.delStatsFullBattleLoaded(<application_id>=str)

Запросы: g_XVMConsole

  • addAsyncReports - подписаться на встроенное событие AsyncReports, возвращающее результат запроса при асинхронном вызове (если вызываемая функция явно не указывалась в числе аргументов запроса). Ниже пример подписки и отписки от события.
from gui.mods.xvm_statistics import g_XVMConsole

#Returns reports from the server for the _Async requests, if no onAsyncReports is specified
def event(statistic):
    statistic -> dict or None
...
g_XVMConsole.addAsyncReports(<application_id>=str, event=func)
...
g_XVMStatisticsEvents.delAsyncReports(<application_id>=str, event=func)
...
g_XVMStatisticsEvents.delAsyncReports(<application_id>=str)
  • getStatsByID - возвращает словарь со статистикой игрока или игроков по аккаунту и по танкам, если известны их accountDBID (требуется активация на сайте XVM). Формат словаря {'players': [{...}, {...}, ...]}.
  • getStatsByID_Async - асинхронная версия, при получении результата вызывает пользовательскую функцию onAsyncRepots, если она задана, иначе вызывает встроенное событие onAsyncReports. В onAsyncRepots можно передавать список функций.
#Return statistics for one or more players with all the tanks by a accountDBID
#IDs=[2365719, 34483, accountDBID, ...] or 2365719 only
g_XVMConsole.getStatsByID(<application_id>=str, IDs=int or list, timeout=5.0) -> dict or None
#{'players': [{'status': 1, 'max_xp': 2868, 'dmg': 29441665, 'spo': 22369, 'wn8': 2093, 'xp': 15118810, 'frg': 24127, 'nm': 'StranikS_Scan', 'ts': 1544905295000L, 'wgr': 8970, 'hip': 71, 'wtr': 6580, 'memberhistory': [], 'is_banned': None, 'max_frg': 11, 'flag': None, 'dt': '2018-12-15T20:21:35.22+00:00', 'lang': None, 'b': 20029, 'e': 1457, 'cid': 69731, 'max_dmg': 8528, 'cap': 38302, 'dmg_r': 20473839, 'srv': 6873, 'w': 11715, 'v': {'8465': {'b': 129, 'frg': 141, 'mom': 3, 'dmg': 167647, 'cap': 471, 'srv': 40, 'w': 88, 'spo': 193, 'xp': 106742, 'id': '8465', 'def': 13}, ...}, 'lvl': 7.54826, '_id': 2365719, 'def': 14626}]}
g_XVMConsole.getStatsByID_Async(<application_id>=str, IDs=int or list, onAsyncReports=None or func or list, timeout=5.0)
  • getStatsByNick - возвращает словарь со статистикой игрока или игроков по аккаунту и по танкам, если известны их ники (требуется активация на сайте XVM). Формат словаря {'players': [{...}, {...}, ...]}. Если регион не указан, то он определяется автоматически по региону авторизовавшегося в клиенте игрока или по локализации клиента игры (см. g_XVMConsole.g_HomeRegion).
  • getStatsByNick_Async - асинхронная версия, при получении результата вызывает пользовательскую функцию onAsyncRepots, если она задана, иначе вызывает встроенное событие onAsyncReports. В onAsyncRepots можно передавать список функций..
#The same, but with the help of the player's nickname
#nicknames = ['Straik','MeeGo'] or 'Straik' only; region=('RU','EU','COM','ASIA') 
g_XVMConsole.getStatsByNick(<application_id>=str, nicknames=str or list, region='', timeout=5.0) -> dict or None
#{'players': [{'status': 1, 'max_xp': 2868, 'dmg': 29441665, 'spo': 22369, 'wn8': 2093, 'xp': 15118810, 'frg': 24127, 'nm': 'StranikS_Scan', 'ts': 1544905295000L, 'wgr': 8970, 'hip': 71, 'wtr': 6580, 'memberhistory': [], 'is_banned': None, 'max_frg': 11, 'flag': None, 'dt': '2018-12-15T20:21:35.22+00:00', 'lang': None, 'b': 20029, 'e': 1457, 'cid': 69731, 'max_dmg': 8528, 'cap': 38302, 'dmg_r': 20473839, 'srv': 6873, 'w': 11715, 'v': {'8465': {'b': 129, 'frg': 141, 'mom': 3, 'dmg': 167647, 'cap': 471, 'srv': 40, 'w': 88, 'spo': 193, 'xp': 106742, 'id': '8465', 'def': 13}, ...}, 'lvl': 7.54826, '_id': 2365719, 'def': 14626}]}
g_XVMConsole.getStatsByNick_Async(<application_id>=str, nicknames=str or list, region='', onAsyncReports=None or func or list, timeout=5.0)
  • getStats - возвращает словарь со статистикой игроков по аккаунту и по конкретному танку, если известны accountDBID игрока и задан compactDescr его танка (требуется активация на сайте XVM). Формат словаря {'players': [{...}, {...}, ...]}.
  • getStats_Async - асинхронная версия, при получении результата вызывает пользовательскую функцию onAsyncRepots, если она задана, иначе вызывает встроенное событие onAsyncReports. В onAsyncRepots можно передавать список функций..
#Return statistics for a specific tank for one or multiple users
#ids={2365719:54529, 4100782:51841, accountDBID:compactDescr, ...}
g_XVMConsole.getStats(<application_id>=str, ids=dict) -> dict or None
#{'players': [{'status': 1, 'max_xp': 2868, 'dmg': 29441665, 'spo': 22369, 'xp': 15118810, 'wn8': 2093, 'frg': 24127, 'nm': 'StranikS_Scan', 'ts': 1544905295220L, 'wgr': 8970, 'hip': 71, 'wtr': 6580, 'max_frg': 11, 'flag': None, 'is_banned': None, 'lang': None, 'b': 20029, 'e': 1457, 'cid': 69731, 'max_dmg': 8528, 'cap': 38302, 'dmg_r': 20473839, 'r': 8970, 'srv': 6873, 'w': 11715, 
#              'v': {'wtr': 2095, 'b': 86, 'frg': 33, 'mom': 3, 'dmg': 63105, 'cap': 37, 'srv': 10, 'w': 39, 'spo': 154, 'xp': 55069, 'def': 17}, 
#              'lvl': 7.54826, '_id': 2365719, 'def': 14626},
#             {'status': None, 'max_xp': 2304, 'dmg': 3102429, 'spo': 4802, 'xp': 1957580, 'wn8': 1276, 'frg': 3273, 'nm': 'stiiiiil777', 'ts': 1545087003283L, 'wgr': 4241, 'hip': 54, 'wtr': 3309, 'max_frg': 8, 'flag': None, 'is_banned': None, 'lang': None, 'b': 4003, 'e': 1034, 'cid': None, 'max_dmg': 4017, 'cap': 4717, 'dmg_r': 2573057, 'r': 4241, 'srv': 1057, 'w': 1958, 
#              'v': {'wtr': 2724, 'b': 79, 'frg': 30, 'mom': 3, 'dmg': 41240, 'cap': 67, 'srv': 7, 'w': 35, 'spo': 208, 'xp': 38228, 'def': 12}, 
#              'lvl': 6.43886, '_id': 2446623, 'def': 2871}]}
g_XVMConsole.getStats_Async(<application_id>=str, ids=dict, onAsyncReports=None or func or list)
  • getOnlineUsersCount - возвращает количество игроков на серверах WG (требуется активация на сайте XVM).
#Return online WOT-server statistics
g_XVMConsole.getOnlineUsersCount(<application_id>=str) -> dict or None
#{'e': [{'players_online': 65997, 'server': 'EU2'}, {'players_online': 93610, 'server': 'EU1'}], 'r': [{'players_online': 47301, 'server': 'RU8'}, {'players_online': 54485, 'server': 'RU7'}, {'players_online': 101362, 'server': 'RU2'}, {'players_online': 81508, 'server': 'RU1'}, {'players_online': 43960, 'server': 'RU3'}, {'players_online': 105694, 'server': 'RU6'}, {'players_online': 70492, 'server': 'RU5'}, {'players_online': 48227, 'server': 'RU4'}, {'players_online': 7066, 'server': 'RU9'}, {'players_online': 16221, 'server': 'RU10'}], 'asia': [{'players_online': 133, 'server': '503'}, {'players_online': 3999, 'server': '502'}], 'na': [{'players_online': 8899, 'server': '303'}, {'players_online': 356, 'server': '304'}, {'players_online': 4793, 'server': 'NA EAST'}]}

Токен: g_UserToken

  • Токен игрока, получаемый им при активации на сайте XVM. Если токена нет или он просрочен, то доступа к статистике не будет. Все вызовы будут возвращать None. Игроку достаточно активироваться на сайте XVM и перезайти в клиент игры и функционал опять заработает.
from gui.mods.xvm_statistics import g_UserToken

g_UserToken.accountDBID -> int or None
g_UserToken.userToken   -> str or None

#Default value is '', can also take values:
#'You need to be logged in once for authorization!'
#'Requires activation on the XVM-website (https://modxvm.com/)!'
#'No connection to the XVM-server!'
g_UserToken.errorStatus -> str

Домашний регион: g_HomeRegion

  • Регион авторизовавшегося в ангаре игрока или регион соответствующий локализации клиента игры.
from gui.mods.xvm_statistics import g_HomeRegion

g_HomeRegion.accountDBID -> int or None
g_HomeRegion.homeRegion  -> str or None

 

Модуль: wg_statistics

События: g_WGStatisticsEvents

  • addStatsAccountBecomePlayer - подписаться на событие AccountBecomePlayer, которое возвращает словарь со статистикой игрока по аккаунту и по танкам при авторизации в ангаре. Запрашиваются данные только по рандомным боям. Формат словаря {'players': [{...}]}. Ниже пример подписки и отписки от эвента.
from gui.mods.wg_statistics import g_WGStatisticsEvents

#Returns the full statistics of the player in random battles during authorization in the game client,
#if there is no data on the server or server is unavailable, it returns None
def event(statistic):
    statistic -> dict or None
...
g_WGStatisticsEvents.addStatsAccountBecomePlayer(<application_id>=str, event=func)
#{'players': [{'spotted': 22369, 'battles_on_stunning_vehicles': 2, 
#             'vehicles': {11265: {'spotted': 174, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 14, 'explosion_hits_received': 0, 'avg_damage_blocked': 280.0, 'capture_points': 595, 'no_damage_direct_hits_received': 4, 'stun_assisted_damage': 0, 'explosion_hits': 0, 'battle_avg_xp': 664, 'piercings': 3, 'xp': 142066, 'in_garage': None, 'tank_id': 11265, 'damage_dealt': 164908, 'hits_percents': 64, 'stun_number': 0, 'draws': 5, 'hits': 975, 'losses': 84, 'battles': 214, 'piercings_received': 10, 'damage_received': 141906, 'survived_battles': 81, 'shots': 1514, 'wins': 125, 'frags': 230, 'dropped_capture_points': 89, 'mark_of_mastery': 4, 'tanking_factor': 0.25}, ...}, 
#             'avg_level': 7.54803, 'max_xp': 2868, 'avg_damage_blocked': 561.73, 'max_xp_tank_id': 529, 'explosion_hits': 242, 'global_rating': 8970, 'piercings': 48815, 'xp': 15118810, 'survived_battles': 6873, 'dropped_capture_points': 14626, 'client_language': 'r', 'hits_percents': 71, 'draws': 276, 'max_damage': 8528, 'battles': 20029, 'clan_id': 69731, 'damage_received': 20473839, 'avg_damage_assisted': 560.04, 'max_frags_tank_id': 12305, 'frags': 24127, 'stun_number': 10, 'tanking_factor': 0.44, 'avg_damage_assisted_radio': 431.61, 'direct_hits_received': 44950, 'account_id': 2365719, 'damage_dealt': 29441665, 'stun_assisted_damage': 1047, 'battle_avg_xp': 755, 'max_damage_tank_id': 16897, 'nickname': 'StranikS_Scan', 'capture_points': 38302, 'hits': 138087, 'last_battle_time': 1544904305, 'wins': 11715, 'losses': 8038, 'piercings_received': 32339, 'no_damage_direct_hits_received': 12606, 'max_frags': 11, 'shots': 193372, 'explosion_hits_received': 2208, 'avg_damage_assisted_track': 128.44}]}
...
g_WGStatisticsEvents.delStatsAccountBecomePlayer(<application_id>=str, event=func)
...
g_WGStatisticsEvents.delStatsAccountBecomePlayer(<application_id>=str)
  • addStatsBattleLoaded - подписаться на событие BattleLoaded, которое возвращает словарь со статистикой игроков по аккаунту и по текущему танку при загрузке боя. Запрашиваются данные только по рандомным боям. Формат словаря {'players': [{...}, {...}, ...]}. В примере статистика двух игроков, зашедших в тренировочный бой на RU 251 и ЛТТБ.
#Returns the statistics of all players and current tanks for random battles, when the battle is loaded
#if there is no data on the server or server is unavailable, it returns None
def event(statistic):
    statistic -> dict or None
...
g_WGStatisticsEvents.addStatsBattleLoaded(<application_id>=str, event=func)
#{'players': [{'spotted': 22369, 'battles_on_stunning_vehicles': 2, 
#              'vehicles': {'spotted': 154, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 315, 'explosion_hits_received': 21, 'avg_damage_blocked': 0.0, 'capture_points': 37, 'no_damage_direct_hits_received': 21, 'stun_assisted_damage': 0, 'explosion_hits': 19, 'battle_avg_xp': 640, 'piercings': 339, 'xp': 55069, 'in_garage': None, 'tank_id': 18449, 'damage_dealt': 63105, 'hits_percents': 66, 'stun_number': 0, 'draws': 0, 'hits': 471, 'losses': 47, 'battles': 86, 'piercings_received': 294, 'damage_received': 97933, 'survived_battles': 10, 'shots': 713, 'wins': 39, 'frags': 33, 'dropped_capture_points': 17, 'mark_of_mastery': 3, 'tanking_factor': 0.0}, 
#              'max_xp': 2868, 'avg_damage_blocked': 561.73, 'max_xp_tank_id': 529, 'explosion_hits': 242, 'global_rating': 8970, 'piercings': 48815, 'xp': 15118810, 'survived_battles': 6873, 'dropped_capture_points': 14626, 'client_language': 'r', 'hits_percents': 71, 'draws': 276, 'max_damage': 8528, 'battles': 20029, 'clan_id': 69731, 'damage_received': 20473839, 'avg_damage_assisted': 560.04, 'max_frags_tank_id': 12305, 'frags': 24127, 'stun_number': 10, 'tanking_factor': 0.44, 'avg_damage_assisted_radio': 431.61, 'direct_hits_received': 44950, 'account_id': 2365719, 'damage_dealt': 29441665, 'stun_assisted_damage': 1047, 'battle_avg_xp': 755, 'max_damage_tank_id': 16897, 'nickname': 'StranikS_Scan', 'capture_points': 38302, 'hits': 138087, 'last_battle_time': 1544904305, 'wins': 11715, 'losses': 8038, 'piercings_received': 32339, 'no_damage_direct_hits_received': 12606, 'max_frags': 11, 'shots': 193372, 'explosion_hits_received': 2208, 'avg_damage_assisted_track': 128.44}, 
#             {'spotted': 4802, 'battles_on_stunning_vehicles': 33, 
#              'vehicles': {'spotted': 208, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 376, 'explosion_hits_received': 13, 'avg_damage_blocked': 156.01, 'capture_points': 67, 'no_damage_direct_hits_received': 64, 'stun_assisted_damage': 0, 'explosion_hits': 0, 'battle_avg_xp': 484, 'piercings': 250, 'xp': 38228, 'in_garage': None, 'tank_id': 18433, 'damage_dealt': 41240, 'hits_percents': 59, 'stun_number': 0, 'draws': 2, 'hits': 344, 'losses': 42, 'battles': 79, 'piercings_received': 312, 'damage_received': 74223, 'survived_battles': 7, 'shots': 588, 'wins': 35, 'frags': 30, 'dropped_capture_points': 12, 'mark_of_mastery': 3, 'tanking_factor': 0.17}, 
#              'max_xp': 2304, 'avg_damage_blocked': 170.05, 'max_xp_tank_id': 16641, 'explosion_hits': 447, 'global_rating': 4241, 'piercings': 3302, 'xp': 1957580, 'survived_battles': 1057, 'dropped_capture_points': 2871, 'client_language': 'r', 'hits_percents': 54, 'draws': 66, 'max_damage': 4017, 'battles': 4003, 'clan_id': None, 'damage_received': 2573057, 'avg_damage_assisted': 199.54, 'max_frags_tank_id': 54289, 'frags': 3273, 'stun_number': 120, 'tanking_factor': 0.32, 'avg_damage_assisted_radio': 167.44, 'direct_hits_received': 6055, 'account_id': 2446623, 'damage_dealt': 3102429, 'stun_assisted_damage': 10171, 'battle_avg_xp': 489, 'max_damage_tank_id': 8977, 'nickname': 'stiiiiil777', 'capture_points': 4717, 'hits': 19191, 'last_battle_time': 1545078809, 'wins': 1958, 'losses': 1979, 'piercings_received': 4133, 'no_damage_direct_hits_received': 1917, 'max_frags': 8, 'shots': 35342, 'explosion_hits_received': 149, 'avg_damage_assisted_track': 32.1}]}
...
g_WGStatisticsEvents.delStatsBattleLoaded(<application_id>=str, event=func)
...
g_WGStatisticsEvents.delStatsBattleLoaded(<application_id>=str)
  • addStatsFullBattleLoaded - аналогично предыдущему событие, только возвращает статистику игроков по всем танкам. Запрашиваются данные только по рандомным боям. 
#Returns the full  statistics of all players for random battles, when the battle is loaded
#if there is no data on the server or server is unavailable, it returns None
def event(statistic):
    statistic -> dict or None
...
g_WGStatisticsEvents.addStatsFullBattleLoaded(<application_id>=str, event=func)
#{'players': [{'spotted': 4802, 'battles_on_stunning_vehicles': 33, 
#              'vehicles': {3329: {'spotted': 6, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 0, 'explosion_hits_received': 0, 'avg_damage_blocked': 0.0, 'capture_points': 0, 'no_damage_direct_hits_received': 0, 'stun_assisted_damage': 0, 'explosion_hits': 0, 'battle_avg_xp': 138, 'piercings': 0, 'xp': 1799, 'in_garage': None, 'tank_id': 3329, 'damage_dealt': 953, 'hits_percents': 10, 'stun_number': 0, 'draws': 0, 'hits': 62, 'losses': 4, 'battles': 13, 'piercings_received': 0, 'damage_received': 1170, 'survived_battles': 1, 'shots': 592, 'wins': 9, 'frags': 6, 'dropped_capture_points': 0, 'mark_of_mastery': 0, 'tanking_factor': 0.0}, ...},
#              'avg_level': 6.43542, 'max_xp': 2304, 'avg_damage_blocked': 170.05, 'max_xp_tank_id': 16641, 'explosion_hits': 447, 'global_rating': 4241, 'piercings': 3302, 'xp': 1957580, 'survived_battles': 1057, 'dropped_capture_points': 2871, 'client_language': 'r', 'hits_percents': 54, 'draws': 66, 'max_damage': 4017, 'battles': 4003, 'clan_id': None, 'damage_received': 2573057, 'avg_damage_assisted': 199.54, 'max_frags_tank_id': 54289, 'frags': 3273, 'stun_number': 120, 'tanking_factor': 0.32, 'avg_damage_assisted_radio': 167.44, 'direct_hits_received': 6055, 'account_id': 2446623, 'damage_dealt': 3102429, 'stun_assisted_damage': 10171, 'battle_avg_xp': 489, 'max_damage_tank_id': 8977, 'nickname': 'stiiiiil777', 'capture_points': 4717, 'hits': 19191, 'last_battle_time': 1545078809, 'wins': 1958, 'losses': 1979, 'piercings_received': 4133, 'no_damage_direct_hits_received': 1917, 'max_frags': 8, 'shots': 35342, 'explosion_hits_received': 149, 'avg_damage_assisted_track': 32.1}, 
#             {'spotted': 22369, 'battles_on_stunning_vehicles': 2, 
#              'vehicles': {11265: {'spotted': 174, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 14, 'explosion_hits_received': 0, 'avg_damage_blocked': 280.0, 'capture_points': 595, 'no_damage_direct_hits_received': 4, 'stun_assisted_damage': 0, 'explosion_hits': 0, 'battle_avg_xp': 664, 'piercings': 3, 'xp': 142066, 'in_garage': None, 'tank_id': 11265, 'damage_dealt': 164908, 'hits_percents': 64, 'stun_number': 0, 'draws': 5, 'hits': 975, 'losses': 84, 'battles': 214, 'piercings_received': 10, 'damage_received': 141906, 'survived_battles': 81, 'shots': 1514, 'wins': 125, 'frags': 230, 'dropped_capture_points': 89, 'mark_of_mastery': 4, 'tanking_factor': 0.25}, ...}, 
#              'avg_level': 7.54803, 'max_xp': 2868, 'avg_damage_blocked': 561.73, 'max_xp_tank_id': 529, 'explosion_hits': 242, 'global_rating': 8970, 'piercings': 48815, 'xp': 15118810, 'survived_battles': 6873, 'dropped_capture_points': 14626, 'client_language': 'r', 'hits_percents': 71, 'draws': 276, 'max_damage': 8528, 'battles': 20029, 'clan_id': 69731, 'damage_received': 20473839, 'avg_damage_assisted': 560.04, 'max_frags_tank_id': 12305, 'frags': 24127, 'stun_number': 10, 'tanking_factor': 0.44, 'avg_damage_assisted_radio': 431.61, 'direct_hits_received': 44950, 'account_id': 2365719, 'damage_dealt': 29441665, 'stun_assisted_damage': 1047, 'battle_avg_xp': 755, 'max_damage_tank_id': 16897, 'nickname': 'StranikS_Scan', 'capture_points': 38302, 'hits': 138087, 'last_battle_time': 1544904305, 'wins': 11715, 'losses': 8038, 'piercings_received': 32339, 'no_damage_direct_hits_received': 12606, 'max_frags': 11, 'shots': 193372, 'explosion_hits_received': 2208, 'avg_damage_assisted_track': 128.44}]}
...
g_WGStatisticsEvents.delStatsFullBattleLoaded(<application_id>=str, event=func)
...
g_WGStatisticsEvents.delStatsFullBattleLoaded(<application_id>=str)

Запросы: g_WGConsole

  • OnAsyncReports - подписаться на встроенное событие AsyncReports, возвращающее результат запроса при асинхронном вызове (если вызываемая функция явно не указывалась в числе аргументов запроса). Ниже пример подписки и отписки от события.
from gui.mods.wg_statistics import g_WGConsole

#Returns reports from the server for the _Async requests, if no onAsyncReport is specified
g_WGConsole.addAsyncReports(<application_id>=str, event=func)
...
g_WGConsole.delAsyncReports(<application_id>=str, event=func)
...
g_WGConsole.delAsyncReports(<application_id>=str)
  • getStatsFull - возвращает словарь со статистикой игрока или игроков по аккаунту и по танкам, если известны их accountDBID (аналог функции getStatsByID в модуле xvm_statistics). Формат словаря {'players': [{...}, {...}, ...]}. Запрашиваются данные только по рандомным боям.
  • getStatsFull_Async - асинхронная версия, при получении результата вызывает пользовательскую функцию onAsyncRepots, если она задана, иначе вызывает встроенное событие onAsyncReports. В onAsyncRepots можно передавать список функций.
#Return statistics for one or more players for random battles with all the tanks by a accountDBID
#IDs=[2365719, 34483, accountDBID, ...] or 2365719 only
g_WGConsole.getStatsFull(<application_id>=str, IDs=int or list, timeout=5.0) -> dict or None
#{'players': [{'spotted': 22369, 'battles_on_stunning_vehicles': 2, 
#             'vehicles': {11265: {'spotted': 174, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 14, 'explosion_hits_received': 0, 'avg_damage_blocked': 280.0, 'capture_points': 595, 'no_damage_direct_hits_received': 4, 'stun_assisted_damage': 0, 'explosion_hits': 0, 'battle_avg_xp': 664, 'piercings': 3, 'xp': 142066, 'in_garage': None, 'tank_id': 11265, 'damage_dealt': 164908, 'hits_percents': 64, 'stun_number': 0, 'draws': 5, 'hits': 975, 'losses': 84, 'battles': 214, 'piercings_received': 10, 'damage_received': 141906, 'survived_battles': 81, 'shots': 1514, 'wins': 125, 'frags': 230, 'dropped_capture_points': 89, 'mark_of_mastery': 4, 'tanking_factor': 0.25}, ...}, 
#             'avg_level': 7.54803, 'max_xp': 2868, 'avg_damage_blocked': 561.73, 'max_xp_tank_id': 529, 'explosion_hits': 242, 'global_rating': 8970, 'piercings': 48815, 'xp': 15118810, 'survived_battles': 6873, 'dropped_capture_points': 14626, 'client_language': 'r', 'hits_percents': 71, 'draws': 276, 'max_damage': 8528, 'battles': 20029, 'clan_id': 69731, 'damage_received': 20473839, 'avg_damage_assisted': 560.04, 'max_frags_tank_id': 12305, 'frags': 24127, 'stun_number': 10, 'tanking_factor': 0.44, 'avg_damage_assisted_radio': 431.61, 'direct_hits_received': 44950, 'account_id': 2365719, 'damage_dealt': 29441665, 'stun_assisted_damage': 1047, 'battle_avg_xp': 755, 'max_damage_tank_id': 16897, 'nickname': 'StranikS_Scan', 'capture_points': 38302, 'hits': 138087, 'last_battle_time': 1544904305, 'wins': 11715, 'losses': 8038, 'piercings_received': 32339, 'no_damage_direct_hits_received': 12606, 'max_frags': 11, 'shots': 193372, 'explosion_hits_received': 2208, 'avg_damage_assisted_track': 128.44}]}
g_WGConsole.getStatsFull_Async(<application_id>=str, IDs=int or list, onAsyncReports=None or func or list, timeout=5.0)
  • getStats - возвращает словарь со статистикой игроков по аккаунту и по конкретному танку, если известны accountDBID игрока и задан compactDescr его танка (аналог функции getStats в модуле xvm_statistics). Формат словаря {'players': [{...}, {...}, ...]}. Запрашиваются данные только по рандомным боям.
  • getStats_Async - асинхронная версия, при получении результата вызывает пользовательскую функцию onAsyncRepots, если она задана, иначе вызывает встроенное событие onAsyncReports. В onAsyncRepots можно передавать список функций.
#Return statistics for a specific tank for one or multiple users
#ids={2365719:54529, 4100782:51841, accountDBID:compactDescr, ...}
g_WGConsole.getStats(<application_id>=str, ids=dict, timeout=5.0) -> dict or None
#{'players': [{'spotted': 22369, 'battles_on_stunning_vehicles': 2, 
#              'vehicles': {'spotted': 154, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 315, 'explosion_hits_received': 21, 'avg_damage_blocked': 0.0, 'capture_points': 37, 'no_damage_direct_hits_received': 21, 'stun_assisted_damage': 0, 'explosion_hits': 19, 'battle_avg_xp': 640, 'piercings': 339, 'xp': 55069, 'in_garage': None, 'tank_id': 18449, 'damage_dealt': 63105, 'hits_percents': 66, 'stun_number': 0, 'draws': 0, 'hits': 471, 'losses': 47, 'battles': 86, 'piercings_received': 294, 'damage_received': 97933, 'survived_battles': 10, 'shots': 713, 'wins': 39, 'frags': 33, 'dropped_capture_points': 17, 'mark_of_mastery': 3, 'tanking_factor': 0.0}, 
#              'max_xp': 2868, 'avg_damage_blocked': 561.73, 'max_xp_tank_id': 529, 'explosion_hits': 242, 'global_rating': 8970, 'piercings': 48815, 'xp': 15118810, 'survived_battles': 6873, 'dropped_capture_points': 14626, 'client_language': 'r', 'hits_percents': 71, 'draws': 276, 'max_damage': 8528, 'battles': 20029, 'clan_id': 69731, 'damage_received': 20473839, 'avg_damage_assisted': 560.04, 'max_frags_tank_id': 12305, 'frags': 24127, 'stun_number': 10, 'tanking_factor': 0.44, 'avg_damage_assisted_radio': 431.61, 'direct_hits_received': 44950, 'account_id': 2365719, 'damage_dealt': 29441665, 'stun_assisted_damage': 1047, 'battle_avg_xp': 755, 'max_damage_tank_id': 16897, 'nickname': 'StranikS_Scan', 'capture_points': 38302, 'hits': 138087, 'last_battle_time': 1544904305, 'wins': 11715, 'losses': 8038, 'piercings_received': 32339, 'no_damage_direct_hits_received': 12606, 'max_frags': 11, 'shots': 193372, 'explosion_hits_received': 2208, 'avg_damage_assisted_track': 128.44}, 
#             {'spotted': 4802, 'battles_on_stunning_vehicles': 33, 
#              'vehicles': {'spotted': 208, 'battles_on_stunning_vehicles': 0, 'direct_hits_received': 376, 'explosion_hits_received': 13, 'avg_damage_blocked': 156.01, 'capture_points': 67, 'no_damage_direct_hits_received': 64, 'stun_assisted_damage': 0, 'explosion_hits': 0, 'battle_avg_xp': 484, 'piercings': 250, 'xp': 38228, 'in_garage': None, 'tank_id': 18433, 'damage_dealt': 41240, 'hits_percents': 59, 'stun_number': 0, 'draws': 2, 'hits': 344, 'losses': 42, 'battles': 79, 'piercings_received': 312, 'damage_received': 74223, 'survived_battles': 7, 'shots': 588, 'wins': 35, 'frags': 30, 'dropped_capture_points': 12, 'mark_of_mastery': 3, 'tanking_factor': 0.17}, 
#              'max_xp': 2304, 'avg_damage_blocked': 170.05, 'max_xp_tank_id': 16641, 'explosion_hits': 447, 'global_rating': 4241, 'piercings': 3302, 'xp': 1957580, 'survived_battles': 1057, 'dropped_capture_points': 2871, 'client_language': 'r', 'hits_percents': 54, 'draws': 66, 'max_damage': 4017, 'battles': 4003, 'clan_id': None, 'damage_received': 2573057, 'avg_damage_assisted': 199.54, 'max_frags_tank_id': 54289, 'frags': 3273, 'stun_number': 120, 'tanking_factor': 0.32, 'avg_damage_assisted_radio': 167.44, 'direct_hits_received': 6055, 'account_id': 2446623, 'damage_dealt': 3102429, 'stun_assisted_damage': 10171, 'battle_avg_xp': 489, 'max_damage_tank_id': 8977, 'nickname': 'stiiiiil777', 'capture_points': 4717, 'hits': 19191, 'last_battle_time': 1545078809, 'wins': 1958, 'losses': 1979, 'piercings_received': 4133, 'no_damage_direct_hits_received': 1917, 'max_frags': 8, 'shots': 35342, 'explosion_hits_received': 149, 'avg_damage_assisted_track': 32.1}]}
g_WGConsole.getStats_Async(<application_id>=str, ids=dict, onAsyncReports=None or func or list, timeout=5.0)
  • getOnlineUsersCount - возвращает количество игроков на серверах WG. Необходимо указывать регион, если регион не задан, то берется домашний регион (см. g_WGConsole.g_HomeRegion).
#Return online WOT-server statistics for region
#region=('ru','eu','com','asia')
g_WGConsole.getOnlineUsersCount(<application_id>=str, region='ru') -> dict or None
#{'wot': [{'players_online': 51366, 'server': 'RU8'}, {'players_online': 57839, 'server': 'RU7'}, {'players_online': 106893, 'server': 'RU2'}, {'players_online': 85843, 'server': 'RU1'}, {'players_online': 46178, 'server': 'RU3'}, {'players_online': 111753, 'server': 'RU6'}, {'players_online': 73782, 'server': 'RU5'}, {'players_online': 50640, 'server': 'RU4'}, {'players_online': 7401, 'server': 'RU9'}, {'players_online': 18437, 'server': 'RU10'}]}

Домашний регион: g_HomeRegion

  • Регион авторизовавшегося в ангаре игрока или регион соответствующий локализации клиента игры.
from gui.mods.wg_statistics import g_HomeRegion

g_HomeRegion.accountDBID -> int or None
g_HomeRegion.homeRegion  -> str or None

 

Модуль: rating_calculation

Функции: g_Calculator

  • globalRating - конвертирует абсолютное значение какого-либо рейтинга в относительное значение шкалы XVM. Если задана опция exct, то возвращает вещественное значение.
from gui.mods.rating_calculation import g_Calculator

#Converting an absolute value to an index or float value of a universal XVM-Scale
#rating = ['wgr', 'eff', 'wn8', 'win', 'wtr', 'xte', 'xtdb', 'sup']
g_Calculator.globalRating(value=float, rating=str, exact=False) -> int or float or None
#example: globalRating(2209.651,'wn8') -> 72 or 72.423 if exact=True
  • specificRating - конвертирует относительное значение шкалы XVM в абсолютное значение заданного рейтинга.
#Get the value of the specific rating by the XVM-Scale
#rating = ['wgr', 'eff', 'wn8', 'win', 'wtr', 'xte', 'xtdb', 'sup']
g_Calculator.specificRating(value=int or float, rating=str) -> float or None
#example: specificRating(72.423,'wn8') -> 2209.651
  • avgTIER - рассчитывает средний уровень техники. Принимает на вход словарь с техникой в XVM- или WG-формате.
from gui.mods.rating_calculation import g_Calculator

#Return the average level of player's tanks
#params = {'id': {'b':int}, ...} and also WG-tags are supported
g_Calculator.avgTIER(params=dict) -> float or None
#example: avgTIER(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]['vehicles']) -> 7.54803
  • needWin - возвращает число побед, необходимых для увеличения % побед на заданную величину. Принимает на вход словарь с числом боев и числом побед, а также на сколько % нужно увеличить показатель.
#Return the number of wins to increase the percentage of wins by a given amount and final winning percentage
#params = {'b': int, 'w': int} and also WG-tags are supported; incPercentage = float
g_Calculator.needWin(params=dict, incPercentage=int or float) -> dict(wins=int, result=float) or None
#example: needWin({'b':10,'w':3}, 30) -> (8, 61.111111111111114)
  • needWinHalf - возвращает число побед, необходимых для увеличения процента побед на 0,5%. Принимает на вход словарь с числом боев и числом побед.
#Return the number of wins to increase the percentage of wins to the next half percent value and final winning percentage
#params = {'b': int, 'w': int} and also WG-tags are supported
g_Calculator.needWinHalf(params=dict) -> dict(wins=int, result=float) or None
#example: needWinHalf({'b':1000,'w':500}) -> (11, 50.54401582591493)
  • needWinWhole - возвращает число побед, необходимых для увеличения процента побед на 1%. Принимает на вход словарь с числом боев и числом побед.
#Return the number of wins to increase the percentage of wins to the next whole percent value and final winning percentage
#params = {'b': int, 'w': int} and also WG-tags are supported
g_Calculator.needWinWhole(params=dict) -> dict(wins=int, result=float) or None
#example: needWinWhole({'b':1000,'w':500}) -> (21, 51.02840352595494)
  • eff - рассчитывает рейтинг РЭ для конкретного танка. Принимает на вход словарь со статистикой танка в XVM- или WG-формате.
#Calculation of EFF for one tank with id=compactDescr, see https://koreanrandom.com/forum/topic/13386-
#params = {'id':int, 'b':int, 'dmg':int, 'frg':int, 'spo':int, 'cap':int, 'def':int} and also WG-tags are supported
g_Calculator.eff(params=dict) -> float or None
#example: eff(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]['vehicles'][257]) -> 1108.86042228
  • wn8 - рассчитывает рейтинг WN8 для конкретного танка. Принимает на вход словарь со статистикой танка в XVM- или WG-формате.
#Calculation of WN8 for one tank with id=compactDescr, see https://koreanrandom.com/forum/topic/13434-
#params = {'id':int, 'b':int, 'w':int, 'dmg':int, 'frg':int, 'spo':int, 'def':int} and also WG-tags are supported
g_Calculator.wn8(params=dict) -> float or None
#example: wn8(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]['vehicles'][257]) -> 1867.55994042
  • xte - рассчитывает рейтинг xTE для конкретного танка. Принимает на вход словарь со статистикой танка в XVM- или WG-формате.
#Calculation of xTE for one tank with id=compactDesc, see https://koreanrandom.com/forum/topic/23829-
#params = {'id':int, 'b':int, 'dmg':int, 'frg':int} and also WG-tags are supported
g_Calculator.xte(params=dict) -> float or None
#example: xte(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]['vehicles'][257]) -> 70.3853988826
  • xtdb - рассчитывает показатель xTDB для конкретного танка. Принимает на вход словарь со статистикой танка в XVM- или WG-формате.
#Calculation of xTDB for one tank with id=compactDesc, see https://koreanrandom.com/forum/topic/23829-
#params = {'id':int, 'b':int, 'dmg':int} and also WG-tags are supported
g_Calculator.xtdb(params=dict) -> float or None
#example: xtdb(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]['vehicles'][257]) -> 68.8375478927
  • EFF - рассчитывает рейтинг РЭ для аккаунта игрока. Принимает на вход словарь со статистикой игрока в XVM- или WG-формате.
#Calculation of EFF for player account with lvl=avgTIER, see https://koreanrandom.com/forum/topic/13386-
#params = {'b':int, 'lvl':float, 'dmg':int, 'frg':int, 'spo':int, 'cap':int, 'def':int} and also WG-tags are supported
g_Calculator.EFF(params=dict) -> float or None
#example: EFF(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]) -> 1456.62977209
  • WN8 - рассчитывает рейтинг WN8 для аккаунта игрока. Принимает на вход словарь со статистикой игрока в XVM- или WG-формате.
#Calculation of WN8 for player account with id=compactDescr, see https://koreanrandom.com/forum/topic/13434-
#params = {'b':int, 'w':int, 'dmg':int, 'frg':int, 'spo':int, 'def':int,
#          'v': {'id':{'b':int, 'w':int, 'dmg':int, 'frg':int, 'spo':int, 'def':int}, 'id':{...}, ...}}
g_Calculator.WN8(params=dict) -> float or None
#example: WN8(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]) -> 2093.12196623
  • XTE - рассчитывает рейтинг xTE для аккаунта игрока. Принимает на вход словарь со статистикой всех танков игрока в XVM- или WG-формате.
#Calculation of xTE for player account with id=compactDesc, see https://koreanrandom.com/forum/topic/23829-/?do=findComment&comment=445507
#params = {'id': {'b':int, 'dmg': int, 'frg': int}, 'id':{...}, ...}}
g_Calculator.XTE(params=dict) -> float or None
#example: XTE(g_WGConsole.getStatsFull(<application_id>, 2365719)['players'][0]['vehicles']) -> 66.3322963036

Константы: g_Tables

  • xvmscaleTable - таблица перевода рейтингов в шкалу XVM. Актуальная версия загружается автоматически с сайта XVM при запуске клиента игры.
#Tables, autoupdated from the XVM-site and loaded from disk
from gui.mods.rating_calculation import g_Tables

g_Tables.xvmscaleTable -> dict or None
#{'xwgr': [1361, ...], 'xeff': [378, ...], 'xwn8': [56,...], 'xwin': [43.44, ...], 'xwtr': [1409, ...]}
  • wn8Table - таблица ожидаемых значений для расчета рейтинга WN8. Актуальная версия загружается автоматически с сайта XVM при запуске клиента игры.
g_Tables.wn8Table -> dict or None
#{'header': {'url': 'https://...', 'source': 'XVM', 'version': '2018-02-12'},
# 'data': [{'expDamage': 1079.886, 'expSpot': 0.769, 'IDNum': 55297, 'expWinRate': 52.995, 'expDef': 0.881, 'expFrag': 1.146}, ...]}
  • wn8idsTable - эта же таблица, но в виде словаря с id-танков в качестве ключей.
g_Tables.wn8idsTable -> dict or None
#{55297: {'expDamage': 1079.886, 'expSpot': 0.769, 'expWinRate': 52.995, 'expDef': 0.881, 'expFrag': 1.146}, ...}
  • xteTable - таблица ожидаемых значений для расчета рейтинга xTE. Актуальная версия загружается автоматически с сайта XVM при запуске клиента игры.
g_Tables.xteTable -> dict or None
#{'62737': {'tf': 1.64, 'x': [342, ...], 'td': 2168, 'ad': 1171, 'af': 0.78}, ...}
  • xtdbTable - таблица ожидаемых значений для расчета показателя xTDB. Актуальная версия загружается автоматически с сайта XVM при запуске клиента игры.
g_Tables.xtdbTable -> dict or None
#{'62737': {'tf': 1.64, 'x': [726, ...], 'td': 2168, 'ad': 1171, 'af': 0.78}, ...}
  • supTable - таблица значений шкалы процентного превосходства SUP%. Актуальная версия загружается автоматически с сайта XVM при запуске клиента игры.
g_Tables.supTable -> tuple
#('1.2', ..., '99.99')

 

Модуль: victory_chances

События: g_StatisticEvents

  • onBattleLoaded - возвращает указатель на экземпляр класса g_TanksStatistic при загрузке боя, содержащий информацию по шансам команд.
from gui.mods.victory_chances import g_StatisticEvents

#It works when the caching of users and tanks information is completed when the battle is loaded
#Returns a pointer to class instance g_TanksStatistic
def func(statistic):
    statistic -> pointer or None #example: <gui.mods.victory_chances._TanksStatistic object at 0x2B5B8F70>
...
g_StatisticEvents.onBattleLoaded += func
  • onVehiclesChanged - возвращает указатель на экзепляр класса g_TanksStatistic, причину срабатывания (см. UPDATE_REASONE) и vehicleID танка, когда меняется какой-либо из параметров техники.
#It works when the players and the parameters of the tanks change
#Returns a pointer to g_TanksStatistic, reasone type as UPDATE_REASONE and vehicleID
def func(statistic, reasone, vID):
    statistic -> pointer or None #example: <gui.mods.victory_chances._TanksStatistic object at 0x2B494EB0>
    reasone   -> int             #example: 0
    vID       -> int             #example: 6632275
...
g_StatisticEvents.onVehiclesChanged += func
  • onCountChanged - возвращает новое число союзных и вражеских танков, когда кто-то присоединятся к бою или погибает в бою.
#It works when change the count of tanks in teams
#Returns the number of allies and enemy tanks
def func(allies, enemies):
    allies  -> int #example: 15
    enemies -> int #example: 14
...
g_StatisticEvents.onCountChanged += func
  • onHealthChanged - возвращает новые суммарные значения хп команд, когда кому-то наносится урон или кто-то погибает.
#It works when the health of users changed
#Returns the total healths of allies and enemy teams
def func(allies, enemies):
    allies  -> int #example: 4510
    enemies -> int #example: 3240
...
g_StatisticEvents.onHealthChanged += func
  • onChanceChanged - возвращает новые значения шансов на победу и условные силы команд союзников и противников, когда кому-то наносится урон или кто-то погибает.
#It works when the chances of victory changed
#Returns the chances 0..100 and total forces of allies and enemy teams
def func(a_chances, e_chances, a_forces, e_forces):
    a_chances -> int #example: 45
    e_chances -> int #example: 55
    a_forces  -> int #example: 4500
    e_forces  -> int #example: 5500
...
g_StatisticEvents.onChanceChanged += func

Переменные: g_TanksStatistic

  • Экземпляр класса с текущими параметрами техники и статистикой команд. Экземпляр един для всех в клиенте игры. В примере статистика двух игроков, зашедших в тренировочный бой на RU 251 и ЛТТБ.
#Parameters of tanks and players statistics
from gui.mods.victory_chances import g_TanksStatistic

g_TanksStatistic.base -> dict
#{6632274: {'userName': 'StranikS_Scan', 'isAlive': True, 'name': 'Ru251', 'level': 9, 'hp': 1400, 'isEnemy': False, 'gun': {'shell': {'AP': {'dpm': 0, 'damage': 0}, 'HE': {'dpm': 2742.8571428571427, 'damage': 160.0}, 'APRC': {'dpm': 2057.1428571428573, 'damage': 240.0}, 'HC': {'dpm': 2057.1428571428573, 'damage': 240.0}}, 'reload': 7.0, 'caliber': 90.0, 'currentShell': 'APRC', 'currentDamage': 240.0, 'currentDpm': 2057.1428571428573}, 'accountDBID': 2365719, 'Th': 0.7000000123624448, 'force': 1.3714285956488717, 'contribution': 65.287617689119, 'Te': 0.5104166666666666, 'type': {'tag': 'lightTank'}, 'tank_id': 18449}, 6632275: {'userName': 'stiiiiil777', 'isAlive': True, 'name': '\xd0\x9b\xd0\xa2\xd0\xa2\xd0\x91', 'level': 8, 'hp': 1050, 'isEnemy': True, 'gun': {'shell': {'AP': {'dpm': 1999.9999646787296, 'damage': 180.0}, 'HE': {'dpm': 3333.3332744645495, 'damage': 150.0}, 'APRC': {'dpm': 1999.9999646787296, 'damage': 180.0}, 'HC': {'dpm': 0, 'damage': 0}}, 'reload': 5.400000095367432, 'caliber': 85.0, 'currentShell': 'AP', 'currentDamage': 180.0, 'currentDpm': 1999.9999646787296}, 'accountDBID': 2446623, 'Th': 0.5104166666666666, 'force': 0.7291666537891202, 'contribution': 34.712382310881004, 'Te': 0.7000000123624448, 'type': {'tag': 'lightTank'}, 'tank_id': 18433}}
g_TanksStatistic.allyChance         -> int or None #example: 65.2876176891
g_TanksStatistic.enemyChance        -> int or None #example: 34.7123823109
g_TanksStatistic.allyTanksCount     -> int or None #example: 1
g_TanksStatistic.enemyTanksCount    -> int or None #example: 1
g_TanksStatistic.allyTeamHP         -> int or None #example: 1400
g_TanksStatistic.enemyTeamHP        -> int or None #example: 1050
g_TanksStatistic.allyTeamOneDamage  -> int or None #example: 240.0
g_TanksStatistic.enemyTeamOneDamage -> int or None #example: 180.0
g_TanksStatistic.allyTeamDPM        -> int or None #example: 2057.14285714
g_TanksStatistic.enemyTeamDPM       -> int or None #example: 1999.99996468
g_TanksStatistic.allyTeamForces     -> int or None #example: 1.37142859565
g_TanksStatistic.enemyTeamForces    -> int or None #example: 0.729166653789

Константы: UPDATE_REASONE

  • Причины обновления статистики.
#Types of reasons in OnVehiclesChanged event
from gui.mods.victory_chances import UPDATE_REASONE

UPDATE_REASONE.VEHICLE_ADDED  -> int
UPDATE_REASONE.VEHICLE_DEATH  -> int
UPDATE_REASONE.HEALTH_CHANGED -> int

 

Примеры модов, использующих модули из библиотеки можно найти в моем репозитарии на Git-Hub.

Edited by StranikS_Scan
  • Upvote 13

Share this post


Link to post

Short link
Share on other sites

Обновил библиотеку

 

1. В wg_statistics и xvm_statistics модулях теперь при вызове функции или подписывании на эвенты нужно первым аргументом указывать <application_id> своего мода. Выдают их тут https://developers.wargaming.net/ После того как вы там зарегистрируете свой мод как автономное приложение, ему выдадут токен это и есть <application_id>. С его помощью библиотека и будет запрашивать статистику с сервера WG-API. Для XVM-API этого не требуется, но для унификации, а также для внутренней работы библиотеки в модуле xvm_statistics также все функции и эвенты будут требовать от вас ваш <application_id>.

2. Внесены изменения в синтаксис, теперь для подписки и отписки от эвентов нужно использовать функции вида addXXX() и delXXX()

3. Исправлены ошибки в работе с токеном игрока в xvm_statistics

4. Тема выше переработана, внесена новая информация, переделаны примеры на более понятные.

5. Репозитарий обновлен и моды в нем тоже все обновлены.

Edited by StranikS_Scan
  • Upvote 4

Share this post


Link to post

Short link
Share on other sites

В релизе 1.13 не отображается информация (никакая), в логе дает вот такую строку:

2021-06-23 19:51:10.772: INFO: [StranikS_Scan, edited by Kapany3uk] Loading mod: Not found "victory_chances" module, loading stoped!
какой-то из этих импортов не срабатывает:

    try:
        from gui.mods.methods.hook import g_overrideLib
        from gui.mods.victory_chances import g_StatisticEvents, g_TanksStatistic, UPDATE_REASONE
    except:
        print '[%s] Loading mod: Not found "victory_chances" module, loading stoped!' % __author__

@StranikS_Scan поможешь?

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@StranikS_ScanМногоуважаемый, не поможете поддержкой мода если вас не затруднит?
А если дальнейшая поддержка не имеет места быть(жаль конечно, полезный мод), напишите про это что-бы знать всем желающим.
Не работает VictoryChancesGUI :sad:

Edited by EngineExt

Share this post


Link to post

Short link
Share on other sites

Исправил модуль 

victory_chances в NetStatisticsModules.

 

Перезалил

zip-архивы на GitHub.

 

Можно качать мод - VictoryChancesGUI

Edited by StranikS_Scan
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites
28.07.2021 в 19:07, StranikS_Scan сказал:

Исправил модуль 

victory_chances в NetStatisticsModules.

Не учитывается доп. ХП от модуля "Улучшенная закалка".
RlirdGd.png

Share this post


Link to post

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

Не учитывается доп. ХП от модуля "Улучшенная закалка".
RlirdGd.png

 

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

  • Upvote 3

Share this post


Link to post

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

 

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

Отличная мысль! Ждем-с.

 

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.

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.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...