Пример #1
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)

        rent = vehicle.isRented
        multiNation = vehicle.hasNationGroup
        outfit = vehicle.getOutfit(SeasonType.SUMMER)
        summer_camo = outfit is not None and bool(outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItemCD()) # vehicle_outfit.MultiSlot
        outfit = vehicle.getOutfit(SeasonType.WINTER)
        winter_camo = outfit is not None and bool(outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItemCD())
        outfit = vehicle.getOutfit(SeasonType.DESERT)
        desert_camo = outfit is not None and bool(outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItemCD())
        crystalEarned = self.itemsCache.items.stats.getWeeklyVehicleCrystals(vehCD)

        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

        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, rent, multiNation, crystalEarned)
        self.__updateCamouflageResult(res, summer_camo, winter_camo, desert_camo)
        self._cache[cache_key] = res
        return res
Пример #2
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
Пример #3
0
 def _calculateXTDB(self, v):
     if 'db' not in v or v['db'] < 0:
         return
     v['xtdb'] = vehinfo.calculateXTDB(v['id'], float(v['db']))
Пример #4
0
 def _calculateXTDB(self, v):
     if 'db' not in v or v['db'] < 0:
         return
     v['xtdb'] = vehinfo.calculateXTDB(v['id'], float(v['db']))