예제 #1
0
def updatePlayerFormatByVehicleList(vehicles, forced=False):
    try:
        from threading import Thread

        vehicleInfoTasks = set()

        for vID, vData in vehicles.iteritems():
            if "name" in vData:
                playerName = vData["name"]

                if not forced and playerName in _formatted:
                    continue

                playerId = vData.get("accountDBID", PLAYER_ID_NOT_KNOWN)

                task = Thread(target=_updatePlayerName,
                              args=(playerName, playerId))
                vehicleInfoTasks.add(task)
                task.start()

        logInfo("Vehicle info task count: %d" % len(vehicleInfoTasks))

        for task in vehicleInfoTasks:
            task.join()

        logInfo("Tasks are joined")
    except BaseException:
        logError("Can't update player format by vehicle list",
                 traceback.format_exc())
    def __init__(self, configFormat=None, configMain=None, configWgId=None):
        # type: (ConfigFormat, ConfigMain, ConfigWgId) -> None
        logInfo("Mod loading is started.")

        self._configFormat = configFormat or ConfigFormat()
        self._configMain = configMain or ConfigMain()
        self._configWgId = configWgId or ConfigWgId()

        self._playerIdToData = dict()
        self._wgStats = WgStats(self._configMain, self._configWgId)

        self._welcomeMessage = self._loadWelcomeMessage()
        self._infoMessage = self._loadInfoMessage()

        logInfo("Mod loading is finished: main = %s, format = %s." % (self._configMain, self._configFormat))
예제 #3
0
def getStatistics(region, nickname, playerId):
    if playerId == PLAYER_ID_NOT_KNOWN:
        idSiteText = getSiteText("http://www.noobmeter.com/player/%s/%s" % (region, nickname))
        playerId = getPlayerId(idSiteText, nickname)
        logInfo("Player ID of %s = %s" % (nickname, playerId))

    siteText = getSiteText("http://www.noobmeter.com/player/%s/%s/%d" % (region, nickname, playerId))

    try:
        tableBeginIdx = _getStatTableBeginIdx(siteText)
        overallColumnIdx, recentColumnIdx = _getOverallAndRecentColumnIdx(siteText, tableBeginIdx)
        trs = _getTrsWithData(siteText, tableBeginIdx)

        wn8 = ""
        battlesRecent = None
        battlesOverall = ""

        for tds in trs:
            if len(tds) != 0:
                loweredRowTitle = tds[0].lower()

                if "wn8" in loweredRowTitle:
                    if recentColumnIdx != -1:
                        wn8ParsedStr = getNumberFromCell(tds[recentColumnIdx])
                    else:
                        wn8ParsedStr = getNumberFromCell(tds[overallColumnIdx])

                    if wn8ParsedStr is not None:
                        wn8 = wn8ParsedStr
                elif "battles:" in loweredRowTitle or "кол. боёв:" in loweredRowTitle:
                    if recentColumnIdx != -1:
                        battlesRecent = getNumberFromCell(tds[recentColumnIdx])

                    battlesOverall = getNumberFromCell(tds[overallColumnIdx])

        playerStat = wn8 + "["
        if battlesRecent is not None:
            playerStat += battlesRecent + "/"
        playerStat += str(int(round(int(battlesOverall) / 1000.0))) + "k]"

        return playerStat
    except BaseException:
        logError("Error in getStatistics(%s, %s, %s)" % (region, nickname, playerId), traceback.format_exc())
        return "[?-?]"
예제 #4
0
def getStatistics(region, nickname, playerId):
    try:
        mainSiteText = getSiteText("https://kttc.ru/wot/%s/user/%s/" %
                                   (region, nickname))

        if playerId == PLAYER_ID_NOT_KNOWN:
            playerId = _getPlayerId(mainSiteText)
            logInfo("Player ID of %s = %s" % (nickname, playerId))

        _updateStatus = getSiteText(
            "https://kttc.ru/wot/%s/statistics/user/update/%s/" %
            (region, playerId))

        mainSiteText = getSiteText("https://kttc.ru/wot/%s/user/%s/" %
                                   (region, nickname))
        overallStatTable = _getStatTable(mainSiteText)

        wn8 = str(int(round(overallStatTable["WN8"])))
        battlesOverall = overallStatTable["BT"]
        battlesRecent = None

        recentStatJson = json.loads(
            getSiteText("https://kttc.ru/wot/ru/user/%s/get-by-battles/%s/" %
                        (nickname, playerId)).replace("'", '"'))
        if recentStatJson["success"] and "1000" in recentStatJson["data"]:
            battlesRecent = recentStatJson["data"]["1000"]["BT"]
            if battlesRecent == 0:  # Filter not valid recent stats
                battlesRecent = None
            else:
                battlesRecent = str(battlesRecent)
                wn8 = str(int(round(recentStatJson["data"]["1000"]["WN8"])))

        playerStat = wn8 + "["
        if battlesRecent is not None:
            playerStat += battlesRecent + "/"
        playerStat += str(int(round(int(battlesOverall) / 1000.0))) + "k]"

        return playerStat
    except BaseException:
        logError(
            "Error in getStatistics(%s, %s, %s)" %
            (region, nickname, playerId), traceback.format_exc())
        return "[?-?]"
예제 #5
0
    def loadPlayerDataByVehicleList(self, vehicles):
        # type: (dict) -> None
        self._checkIfHostIsAnonymous(vehicles)

        startTime = time.time()
        self._wgStats.loadPlayerDataByVehicleList(vehicles,
                                                  self._playerIdToData)

        try:
            vehicleInfoTasks = set()

            for _vehicleID, vehicleData in vehicles.items():
                if "name" in vehicleData and "accountDBID" in vehicleData:
                    playerName = vehicleData["name"]
                    playerId = vehicleData["accountDBID"]

                    if playerId in self._playerIdToData and self._playerIdToData[
                            playerId].hasRecentStat:
                        continue

                    for provider in self._configMain.recentStatProviders:
                        task = Thread(target=provider.getStatistics,
                                      args=(self._configMain.region,
                                            playerName, playerId,
                                            self._playerIdToData))
                        vehicleInfoTasks.add(task)
                        task.start()

            logInfo("Vehicle info task count: %d." % len(vehicleInfoTasks))

            for task in vehicleInfoTasks:
                task.join()

            logInfo("Tasks are joined.")
        except BaseException:
            logError("Can't load recent stats by vehicle list.",
                     traceback.format_exc())

        withStat = 0
        withRecentStat = 0
        withoutStat = 0

        for _vehicleID, vehicleData in vehicles.items():
            if "accountDBID" in vehicleData:
                playerId = vehicleData["accountDBID"]

                if playerId in self._playerIdToData:
                    withStat += 1  # TODO if all nulls then withoutStat

                    if self._playerIdToData[playerId].hasRecentStat:
                        withRecentStat += 1
                else:
                    withoutStat += 1

        logInfo(
            "Stats loaded in %s ms. With stats: %s, with recent stats: %s, without stats: %s."
            % (int(round((time.time() - startTime) * 1000)), withStat,
               withRecentStat, withoutStat))
import re

import BigWorld

from gui.Scaleform.daapi.view.battle.shared.stats_exchage.vehicle import VehicleInfoComponent
from gui.battle_control.arena_info.arena_dp import ArenaDataProvider
from gui.battle_control.arena_info.player_format import PlayerFullNameFormatter, PlayerFormatResult
from gui.SystemMessages import SM_TYPE, pushMessage
from gui.Scaleform.daapi.view.lobby.LobbyView import LobbyView
from notification.settings import NOTIFICATION_TYPE
from notification.actions_handlers import NotificationsActionsHandlers

from mod_recent_stat_loader import ModRecentStat
from mod_recent_stat_logging import logInfo, logError

logInfo("Mod initialization is started.")

modRecentStat = ModRecentStat()


def buildVehiclesDataNew(self, vehicles):
    try:
        modRecentStat.loadPlayerDataByVehicleList(vehicles)
    except BaseException:
        logError("Error in buildVehiclesDataNew", traceback.format_exc())

    buildVehiclesDataOld(self, vehicles)


ArenaDataProvider.buildVehiclesData, buildVehiclesDataOld = buildVehiclesDataNew, ArenaDataProvider.buildVehiclesData
 def warnInvalidAttribute(self, attributeName, value, expectedValues):
     # type: (str, str, str) -> None
     logInfo(
         'In config "%s": attribute "%s" has an invalid value "%s". Possible values: %s.'
         % (self._defaultConfigPath, attributeName, value, expectedValues))
 def warnNoAttribute(self, attributeName):
     # type: (str) -> None
     logInfo('No attribute "%s" in config "%s"' %
             (attributeName, self._defaultConfigPath))
예제 #9
0
 def warnCantFindFiles(self):
     # type: () -> None
     logInfo("Can't open configs %s" % self._defaultConfigPaths)