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
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
def _calculateXTDB(self, v): if 'db' not in v or v['db'] < 0: return v['xtdb'] = vehinfo.calculateXTDB(v['id'], float(v['db']))