Пример #1
0
def calculateXTE(vehCD, dmg_per_battle, frg_per_battle):
    data = _getData(vehCD)
    if data is None or data['td'] == data['ad'] or data['tf'] == data['af']:
        vdata = vehinfo.getVehicleInfoData(vehCD)
        if vdata is None:
            debug('NOTE: No vehicle info for vehicle id = {}'.format(vehCD))
        else:
            debug('NOTE: No xte data for vehicle [{}] {}'.format(vehCD, vdata['key']))
        return -1

    # constants
    CD = 3.0
    CF = 1.0

    # input
    avgD = float(data['ad'])
    topD = float(data['td'])
    avgF = float(data['af'])
    topF = float(data['tf'])

    # calculation
    dD = dmg_per_battle - avgD
    dF = frg_per_battle - avgF
    minD = avgD * 0.4
    minF = avgF * 0.4
    d = max(0, 1 + dD / (topD - avgD) if dmg_per_battle >= avgD else 1 + dD / (avgD - minD))
    f = max(0, 1 + dF / (topF - avgF) if frg_per_battle >= avgF else 1 + dF / (avgF - minF))

    t = (d * CD + f * CF) / (CD + CF) * 1000.0

    # calculate XVM Scale
    return next((i for i,v in enumerate(data['x']) if v > t), 100)
Пример #2
0
    def _calculateVehicleValues(self, stat, v):
        vehId = v['id']
        vData = vehinfo.getVehicleInfoData(vehId)
        if vData is None:
            return
        #log(vData['key'])
        #log(vData)

        # tank rating
        if 'b' not in v or 'w' not in v or v['b'] <= 0:
            v['winrate'] = stat['winrate']
        else:
            Tr = float(v['w']) / float(v['b']) * 100.0
            if v['b'] > 100:
                v['winrate'] = Tr
            else:
                Or = float(stat['winrate'])
                Tb = float(v['b']) / 100.0
                Tl = float(min(vData['level'], 4)) / 4.0
                v['winrate'] = Or - (Or - Tr) * Tb * Tl

        if 'b' not in v or v['b'] <= 0:
            return

        vb = float(v['b'])
        if 'dmg' in v and v['dmg'] > 0:
            v['db'] = float(v['dmg']) / vb
            v['dv'] = float(v['dmg']) / vb / vData['hpTop']
        if 'frg' in v and v['frg'] > 0:
            v['fb'] = float(v['frg']) / vb
        if 'spo' in v and v['spo'] > 0:
            v['sb'] = float(v['spo']) / vb
Пример #3
0
 def onXvmCommand(self, proxy, id, cmd, *args):
     try:
         #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args))
         if (cmd not in NO_LOG_COMMANDS):
             debug("cmd=" + str(cmd) + " args=" + json.dumps(args))
         res = None
         if cmd == COMMAND_LOG:
             log(*args)
         elif cmd == COMMAND_PING:
             ping(proxy)
         elif cmd == COMMAND_GETMODS:
             res = self.getMods()
         elif cmd == COMMAND_GETSCREENSIZE:
             res = json.dumps(list(GUI.screenResolution()))
         elif cmd == COMMAND_GETGAMEREGION:
             res = region
         elif cmd == COMMAND_GETLANGUAGE:
             res = language
         elif cmd == COMMAND_GETVEHICLEINFODATA:
             res = getVehicleInfoData()
         elif cmd == COMMAND_LOADBATTLESTAT:
             getBattleStat(proxy, args)
         elif cmd == COMMAND_LOADUSERDATA:
             getUserData(proxy, args)
         elif cmd == COMMAND_LOAD_SETTINGS:
             pass # TODO
         elif cmd == COMMAND_SAVE_SETTINGS:
             pass # TODO
         else:
             err("unknown command: " + str(cmd))
         proxy.movie.invoke(('xvm.respond', [id, res]))
     except Exception, ex:
         err(traceback.format_exc(ex))
Пример #4
0
 def onXvmCommand(self, proxy, id, cmd, *args):
     try:
         #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args))
         if (cmd not in NO_LOG_COMMANDS):
             debug("cmd=" + str(cmd) + " args=" + json.dumps(args))
         res = None
         if cmd == COMMAND_LOG:
             log(*args)
         elif cmd == COMMAND_PING:
             #return
             ping(proxy)
         elif cmd == COMMAND_GETMODS:
             #return
             res = self.getMods()
         elif cmd == COMMAND_GETSCREENSIZE:
             #return
             res = json.dumps(list(GUI.screenResolution()))
         elif cmd == COMMAND_GETGAMEREGION:
             #return
             res = region
         elif cmd == COMMAND_GETLANGUAGE:
             #return
             res = language
         elif cmd == COMMAND_GETVEHICLEINFODATA:
             #return
             res = getVehicleInfoData()
         elif cmd == COMMAND_GETWN8EXPECTEDDATA:
             res = getWN8ExpectedData()
         elif cmd == COMMAND_GETXVMSTATTOKENDATA:
             res = json.dumps(getXvmStatTokenData())
         elif cmd == COMMAND_LOADBATTLESTAT:
             #return
             getBattleStat(proxy, args)
         elif cmd == COMMAND_LOADBATTLERESULTSSTAT:
             getBattleResultsStat(proxy, args)
         elif cmd == COMMAND_LOADUSERDATA:
             getUserData(proxy, args)
         elif cmd == COMMAND_GETDOSSIER:
             getDossier(proxy, args)
         elif cmd == COMMAND_OPEN_URL:
             if len(args[0]) and args[0].lower().startswith(
                     'http://www.modxvm.com'):
                 BigWorld.wg_openWebBrowser(args[0])
         elif cmd == COMMAND_LOAD_SETTINGS:
             pass  # TODO
         elif cmd == COMMAND_SAVE_SETTINGS:
             pass  # TODO
         elif cmd == COMMAND_TEST:
             runTest(args)
         else:
             err("unknown command: " + str(cmd))
         proxy.movie.invoke(('xvm.respond', [id, res]))
     except Exception, ex:
         err(traceback.format_exc())
Пример #5
0
 def onXvmCommand(self, proxy, id, cmd, *args):
     try:
         #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args))
         if (cmd not in NO_LOG_COMMANDS):
             debug("cmd=" + str(cmd) + " args=" + json.dumps(args))
         res = None
         if cmd == COMMAND_LOG:
             log(*args)
         elif cmd == COMMAND_PING:
             #return
             ping(proxy)
         elif cmd == COMMAND_GETMODS:
             #return
             res = self.getMods()
         elif cmd == COMMAND_GETSCREENSIZE:
             #return
             res = json.dumps(list(GUI.screenResolution()))
         elif cmd == COMMAND_GETGAMEREGION:
             #return
             res = region
         elif cmd == COMMAND_GETLANGUAGE:
             #return
             res = language
         elif cmd == COMMAND_GETVEHICLEINFODATA:
             #return
             res = getVehicleInfoData()
         elif cmd == COMMAND_LOADBATTLESTAT:
             #return
             getBattleStat(proxy, args)
         elif cmd == COMMAND_LOADBATTLERESULTSSTAT:
             getBattleResultsStat(proxy, args)
         elif cmd == COMMAND_LOADUSERDATA:
             getUserData(proxy, args)
         elif cmd == COMMAND_GETDOSSIER:
             getDossier(proxy, args)
         elif cmd == COMMAND_LOAD_SETTINGS:
             pass  # TODO
         elif cmd == COMMAND_SAVE_SETTINGS:
             pass  # TODO
         elif cmd == COMMAND_TEST:
             runTest(args)
         else:
             err("unknown command: " + str(cmd))
         proxy.movie.invoke(('xvm.respond', [id, res]))
     except Exception, ex:
         err(traceback.format_exc(ex))
Пример #6
0
def calculateXTE(vehCD, dmg_per_battle, frg_per_battle):
    data = _getData(vehCD)
    if data is None or data['td'] == data['ad'] or data['tf'] == data['af']:
        vdata = vehinfo.getVehicleInfoData(vehCD)
        if vdata is None:
            debug('NOTE: No vehicle info for vehicle id = {}'.format(vehCD))
        else:
            debug('NOTE: No xte data for vehicle [{}] {}'.format(
                vehCD, vdata['key']))
        return -1

    # constants
    CD = 3.0
    CF = 1.0

    # input
    avgD = float(data['ad'])
    topD = float(data['td'])
    avgF = float(data['af'])
    topF = float(data['tf'])

    # calculation
    dD = dmg_per_battle - avgD
    dF = frg_per_battle - avgF
    minD = avgD * 0.4
    minF = avgF * 0.4
    d = max(
        0, 1 + dD / (topD - avgD) if dmg_per_battle >= avgD else 1 + dD /
        (avgD - minD))
    f = max(
        0, 1 + dF / (topF - avgF) if frg_per_battle >= avgF else 1 + dF /
        (avgF - minF))

    t = (d * CD + f * CF) / (CD + CF) * 1000.0

    # calculate XVM Scale
    return next((i for i, v in enumerate(data['x']) if v > t), 100)
Пример #7
0
    def getDossier(self, battlesType, accountDBID=None, vehCD=0):
        self._battlesType = battlesType

        if accountDBID == 0:
            accountDBID = None
        if accountDBID is not None:
            accountDBID = int(accountDBID)

        if vehCD is None:
            vehCD = 0
        else:
            vehCD = int(vehCD)

        cache_key = "{}:{}:{}".format(
            battlesType, 0 if accountDBID is None else accountDBID, vehCD)

        if vehCD == 0:
            # account dossier
            dossier = self.itemsCache.items.getAccountDossier(accountDBID)
            cache_item = self._cache.get(cache_key, None)
            if cache_item is not None and cache_item[
                    'totalBattles'] == dossier.getTotalStats().getBattlesCount(
                    ):
                return cache_item
            res = self.__prepareAccountResult(accountDBID, dossier)
            self._cache[cache_key] = res
            return res

        # vehicle dossier
        vehicle = self.itemsCache.items.getItemByCD(vehCD)

        outfit = vehicle.getOutfit(SeasonType.SUMMER)
        summer_camo = outfit is not None and bool(
            outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItem())
        outfit = vehicle.getOutfit(SeasonType.WINTER)
        winter_camo = outfit is not None and bool(
            outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItem())
        outfit = vehicle.getOutfit(SeasonType.DESERT)
        desert_camo = outfit is not None and bool(
            outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItem())

        if self.__isVehicleDossierLoaded(accountDBID, vehCD):
            dossier = self.itemsCache.items.getVehicleDossier(
                vehCD, accountDBID)
            totalBattles = dossier.getTotalStats().getBattlesCount()
            randomBattles = dossier.getRandomStats().getBattlesCount()
        else:
            dossier = _DummyDossier()
            totalBattles = 0
            randomBattles = 0

        cache_item = self._cache.get(cache_key, None)
        if cache_item is not None and cache_item[
                'totalBattles'] == totalBattles:
            self.__updateCamouflageResult(cache_item, summer_camo, winter_camo,
                                          desert_camo)
            return cache_item

        rankCount = None
        rankSteps = None
        rankStepsTotal = None
        if self.rankedController.isAvailable():
            vdata = vehinfo.getVehicleInfoData(vehCD)
            if vdata['level'] == 10:
                #log(vdata['key'])

                ranks = self.rankedController.getAllRanksChain(vehicle)

                currentRank = self.rankedController.getCurrentRank(vehicle)
                if isinstance(currentRank, VehicleRank):
                    rankCount = currentRank.getSerialID()

                currentRankID = currentRank.getID()
                nextRank = ranks[
                    currentRankID +
                    1] if currentRankID < len(ranks) - 1 else currentRank
                if isinstance(nextRank, VehicleRank):
                    progress = nextRank.getProgress()
                    if progress is not None:
                        rankSteps = len(
                            nextRank.getProgress().getAcquiredSteps())
                        rankStepsTotal = len(nextRank.getProgress().getSteps())

        xpVehs = self.itemsCache.items.stats.vehiclesXPs
        earnedXP = xpVehs.get(vehCD, 0)
        freeXP = self.itemsCache.items.stats.actualFreeXP
        #log('vehCD: {0} pVehXp: {1}'.format(vehCD, earnedXP))

        xpToElite = 0
        unlocks = self.itemsCache.items.stats.unlocks
        _, nID, invID = vehicles.parseIntCompactDescr(vehCD)
        vType = vehicles.g_cache.vehicle(nID, invID)
        for data in vType.unlocksDescrs:
            if data[1] not in unlocks:
                xpToElite += data[0]

        # xTDB, xTE, WTR, xWTR
        xtdb = -1
        xte = -1
        wtr = -1
        xwtr = -1
        if randomBattles > 0:
            stats = self.__getStatsBlock(dossier)
            dmg = stats.getDamageDealt()
            frg = stats.getFragsCount()
            if dmg >= 0 and frg >= 0:
                curdmg = float(dmg) / randomBattles
                curfrg = float(frg) / randomBattles
                xtdb = vehinfo.calculateXTDB(vehCD, curdmg)
                xte = vehinfo.calculateXTE(vehCD, curdmg, curfrg)
                #TODO: how to get WTR value from dossier?
                #wtr = stats.getWTR()
                #if wtr is None:
                #    wtr = -1
                #else:
                #    xwtr = vehinfo.calculateXvmScale('wtr', wtr)
        res = self.__prepareVehicleResult(accountDBID, vehCD, dossier, xtdb,
                                          xte, wtr, xwtr, earnedXP, freeXP,
                                          xpToElite, rankCount, rankSteps,
                                          rankStepsTotal)
        self.__updateCamouflageResult(res, summer_camo, winter_camo,
                                      desert_camo)
        self._cache[cache_key] = res
        return res
Пример #8
0
 def onXvmCommand(self, proxy, id, cmd, *args):
     try:
         #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args))
         if (cmd not in NO_LOG_COMMANDS):
             debug("cmd=" + str(cmd) + " args=" + json.dumps(args))
         res = None
         if cmd == COMMAND_LOG:
             log(*args)
         elif cmd == COMMAND_LOAD_FILE:
             fn = os.path.join(XVM_DIR, args[0])
             res = load_file(fn) if os.path.exists(fn) else None
         elif cmd == COMMAND_SET_CONFIG:
             log('setConfig')
             self.config_str = args[0]
             self.config = json.loads(self.config_str)
         elif cmd == COMMAND_GET_CONFIG:
             res = self.config_str
         elif cmd == COMMAND_PING:
             #return
             ping(proxy)
         elif cmd == COMMAND_GETMODS:
             #return
             res = self.getMods()
         elif cmd == COMMAND_GETSCREENSIZE:
             #return
             res = json.dumps(list(GUI.screenResolution()))
         elif cmd == COMMAND_GETGAMEREGION:
             #return
             res = region
         elif cmd == COMMAND_GETLANGUAGE:
             #return
             res = language
         elif cmd == COMMAND_GETVEHICLEINFODATA:
             #return
             res = getVehicleInfoData()
         elif cmd == COMMAND_GETWN8EXPECTEDDATA:
             res = getWN8ExpectedData()
         elif cmd == COMMAND_GETXVMSTATTOKENDATA:
             res = json.dumps(getXvmStatTokenData())
         elif cmd == COMMAND_LOADBATTLESTAT:
             getBattleStat(proxy, args)
         elif cmd == COMMAND_LOADBATTLERESULTSSTAT:
             getBattleResultsStat(proxy, args)
         elif cmd == COMMAND_LOADUSERDATA:
             getUserData(proxy, args)
         elif cmd == COMMAND_GETDOSSIER:
             getDossier(proxy, args)
         elif cmd == COMMAND_OPEN_URL:
             if len(args[0]) and args[0].lower().startswith('http://www.modxvm.com'):
                 utils.openWebBrowser(args[0], False)
         elif cmd == COMMAND_LOAD_SETTINGS:
             pass # TODO
         elif cmd == COMMAND_SAVE_SETTINGS:
             pass # TODO
         elif cmd == COMMAND_TEST:
             runTest(args)
         else:
             err("unknown command: " + str(cmd))
         proxy.movie.invoke(('xvm.respond', [id, res]))
     except Exception, ex:
         err(traceback.format_exc())