Перейти к содержимому
Korean Random
StranikS_Scan

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

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

(изменено)

300px-Fisher_iris_versicolor_sepalwidth.svg.png

NetStatisticsModules(NSM)

<<<<<<<<<<ТЕМА В ПРОЦЕССЕ ОБНОВЛЕНИЯ>>>>>>>>>>

Версия: 2.0     |     Ссылка: 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
...
g_XVMStatisticsEvents.addStatsAccountBecomePlayer(<application_id>=str, event=func)
#{'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.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(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(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(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(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(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(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(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(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.

Изменено пользователем StranikS_Scan
  • Нравится 9

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах

<Reserved>

  • Нравится 3

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах

мощь

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах

адовая работа! респект!

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах

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

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

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

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

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

Войти

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

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×