Jump to content
Korean Random

Leaderboard


Popular Content

Showing content with the highest reputation on 01/19/2019 in all areas

  1. 3 points
  2. 2 points
    Не так давно обнаружил что в клиенте игры есть не все изображения медалей, например за ГК. Решил поделится с народом может кому пригодится. На данный момент в архиве 409 медалей. Тут скриншот всех медалей (ВНИМАНИЕ КАРТИНКА ОГРОМНАЯ!) Основной архив --->Скачать<---
  3. 2 points
    Обновил библиотеку 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. Репозитарий обновлен и моды в нем тоже все обновлены.
  4. 1 point
    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.
  5. 1 point
    Можно заменять номер на процент побед или рейтинг по стобалльной шкале. Чтобы было видно, номер можно отскейлить :) За оригинальную идею спасибо @Verich
  6. 1 point
    Updated Hawg's 12 UnderWater Timer's Added 6 new Icons Hawg's UnderWater Timer mod, This mod changes the stock timer that shows when your tank is under water. It will display a different icon that's under water ,which is more noticeable than the stock icon. 12 different icons to pick from . AquaMan Bikini Girl Kashiwazaki Mermaid Mine Akame ga Kill Piranha Shark StingRay Sub Tank Tank 2 Yellow Submarine Download
  7. 1 point
    Изменения: В шапке обновлены файлы py_hitLog.xc и hitLog.py. P.S. необходим ночник XVM build 8741 или выше.
  8. 1 point
  9. 1 point
  10. 1 point
    "Исправление" статистики на неудачной технике само по себе никак не влияет на рейтинг. Если играть для рейтинга, то короткий совет: играть на том, на чем сейчас лучше всего играешь. Это очень большой прирост для 50к боев. Скорее всего, оценка "+2 каждый день стабильно" неверна и на самом деле прирост меньше. И вообще надо по шкале XVM смотреть, может исходный рейтинг растет просто из-за изменений ожидаемых показателей по технике и он бы рос даже если не играть вовсе. А вот приведенный рейтинг по шкале XVM может вообще падает или на месте стоит.
  11. 1 point
  12. 1 point
    Всем привет. Это финальная конфигурация. Теперь только обновление под текущие патчи.
  13. 1 point
  14. 1 point
    Вот когда твой b4it начнёт ддосить этот старикашка стелз который чувства самосохранения не имеет и досит чужие сайты по IP и через домен вот тогда ты точно уже подумаешь перед тем как кинуть стёбную картинку. А вообще это такая атмосфера в танках что каждый стебётся друг над другом и стоит кинуть вполне безобидную картинку на первый взгляд то тебя становиться ни с колечки не жалко навсегда, навсегда..
  15. 1 point
  16. 1 point
    Это короткие уши надо настраивать. Времени пока нет.
  17. 1 point
  18. 1 point
    можно . чьим конфигом пользуешься или каким и в место каких цифр можно . чьим конфигом пользуешься или каким и в место каких цифр
  19. 1 point
  20. 1 point
    ложить нужно по пути в res_mods/0.9.17.0.1 просто закидываешь все файлы и все. я не стал создавать папку с патчем 0.9.17.0.1 так как это микро обновление потом они назовут 0.2 потом может 2.0 ну как обычно wg делает просто до патча 0.9.18 не хрена не поменяется кроме подстановок микро обновлений. да и вообще я не думаю что в последнее время они что то новое на уровне звуков придумают . думаю они еще долго на WWISE сидеть будут и на action 3 пока ченть новое не изобретут более усовершенствованное и крутое. вот тебе узкие уши. если не такие скажи по точнее какие . нарисую. playersPanel.zip куда положить думаю занешь
  21. 1 point
    анонсер можешь у меня скачать на странице он работает под текущий патч а что касается ушей они тоже есть и в виде полоски и в других вариантах раньше и у меня в сборке такое было сейчас переделал за ненадобностью и так все понятно вроде. а анонсер вот тут можешь скачать http://www.koreanrandom.com/forum/topic/29210-6511-xvm-%D0%BE%D1%82-fortune-5-onset-of-feverfirst-blood-0917-new она чуть по озвучки от Андрея отличается на некоторые фраги я свои вставил о смехом первой крови а так практически все осталось от первой крови на руском без отличия
  22. 1 point
  23. 0 points
    Кед, ты что познакомиться хочешь? Так я не той ориентации.. Лупани в тему, в этой тем размещён мод и никто в неё не зазывал писать хрень.
  24. -1 points
    Привет! Да, уже в процессе, как только, так сразу
  25. -1 points
    Можно ли добавить возможность отдельного сохранения иконок прем.техники,акционной и прокачиваемой,по аналогии с просмотром по отдельности?
  26. -1 points
    Ещё не плохо добовлять инфу авторство за каждом отдельным флешь файлом,которые взяты в сборку.
  27. -1 points
    Именно так - нужен именно формат ZIP, а у тебя в WinRAR по умолчанию именно ZIP и установлен, поэтому и нет проблем
  28. -1 points
    Согласен.. У меня есть ещё пожелание чтобы сделали облегчённую версию XVM без pyo и ddlэлок и без вложенных swf в один файл т.к. ни о какой отзывчивости игры с установленным XVM не может быть и речи на данный момент.
  29. -1 points
    Тебя кто-то обманул, я не модолел. Не нервничай, говорят нервные клетки не восстанавливаются.
  30. -1 points
    Нет, меня больше заботит наличие всяких ижектов в игру а также вложенные(запакованные) swf в один файл.. Создать бы тему как повырезать хотя бы всякие pyo и ddl ки которые инжектятся из XVM но она явно не понравиться тут на форуме.. И описания нету никакого для чего XVMу который по сути мод инжектить столько в экзешник игры.. Я понимаю что раньше XVM делала вроде защиту для игр в WGLNA но чёт тенденция эта не нравиться.. Я понимаю фиксануть ещё работу на виндовс XP а остальное для чего вшиваеться так и не объяснено но зато в пользовательском соглашении всё против пользователя..
×
×
  • Create New...