def invalidateCache(self, diff = None): if diff is None: LOG_DEBUG('Gui items cache full invalidation') for itemTypeID, cache in self.__itemsCache.iteritems(): if itemTypeID not in (GUI_ITEM_TYPE.ACCOUNT_DOSSIER, GUI_ITEM_TYPE.VEHICLE_DOSSIER): cache.clear() else: invalidate = defaultdict(set) for statName, data in diff.get('stats', {}).iteritems(): if statName in ('unlocks', 'eliteVehicles'): invalidate[GUI_ITEM_TYPE.VEHICLE].update(data) elif statName in ('vehTypeXP', 'vehTypeLocks'): invalidate[GUI_ITEM_TYPE.VEHICLE].update(data.keys()) elif statName in (('multipliedXPVehs', '_r'),): inventoryVehiclesCDs = map(lambda v: vehicles.getVehicleTypeCompactDescr(v['compDescr']), self.inventory.getItems(GUI_ITEM_TYPE.VEHICLE).itervalues()) invalidate[GUI_ITEM_TYPE.VEHICLE].update(inventoryVehiclesCDs) for cacheType, data in diff.get('cache', {}).iteritems(): if cacheType == 'vehsLock': for vehInvID in data.keys(): vehData = self.inventory.getVehicleData(vehInvID) if vehData is not None: invalidate[GUI_ITEM_TYPE.VEHICLE].add(vehData.descriptor.type.compactDescr) for itemTypeID, itemsDiff in diff.get('inventory', {}).iteritems(): if itemTypeID == GUI_ITEM_TYPE.VEHICLE: if 'compDescr' in itemsDiff: for strCD in itemsDiff['compDescr'].itervalues(): if strCD is not None: invalidate[itemTypeID].add(vehicles.getVehicleTypeCompactDescr(strCD)) for data in itemsDiff.itervalues(): for vehInvID in data.iterkeys(): vehData = self.inventory.getVehicleData(vehInvID) if vehData is not None: invalidate[itemTypeID].add(vehData.descriptor.type.compactDescr) invalidate[GUI_ITEM_TYPE.TANKMAN].update(self.__getTankmenIDsForVehicle(vehData)) elif itemTypeID == GUI_ITEM_TYPE.TANKMAN: for data in itemsDiff.itervalues(): invalidate[itemTypeID].update(data.keys()) for tmanInvID in data.keys(): tmanData = self.inventory.getTankmanData(tmanInvID) if tmanData is not None and tmanData.vehicle != -1: invalidate[GUI_ITEM_TYPE.VEHICLE].update(self.__getVehicleCDForTankman(tmanData)) invalidate[GUI_ITEM_TYPE.TANKMAN].update(self.__getTankmenIDsForTankman(tmanData)) else: invalidate[itemTypeID].update(itemsDiff.keys()) for itemTypeID, uniqueIDs in invalidate.iteritems(): self._invalidateItems(itemTypeID, uniqueIDs) return
def __getVehiclePriceFromCache(self, vehCompDescr, default = (0, 0)): typeCompDescr = vehicles.getVehicleTypeCompactDescr(vehCompDescr) price = self.__getPriceFromCache(typeCompDescr, None) if price is None: return default else: vehDescr = vehicles.VehicleDescr(compactDescr=vehCompDescr) devices = vehDescr.getDevices() for defCompDescr, instCompDescr in izip(devices[0], devices[1]): if defCompDescr == instCompDescr: continue compPrice = self.__getPriceFromCache(defCompDescr, None) if compPrice is None: return default price = _subtractPrices(price, compPrice) compPrice = self.__getPriceFromCache(instCompDescr, None) if compPrice is None: return default price = _summPrices(price, compPrice) for optDevCompDescr in devices[2]: compPrice = self.__getPriceFromCache(optDevCompDescr, None) if compPrice is None: return default price = _summPrices(price, compPrice) return price
def updateRespawnInfo(self, respawnInfo): intCD = vehicles.getVehicleTypeCompactDescr(respawnInfo['compDescr']) self.__respawnInfo = _RespawnInfo(intCD, respawnInfo['expiryRespawnDelay'], respawnInfo['respawnType']) needCooldown = respawnInfo.get('afterDeath', False) self.__showIfReady(needCooldown)
def updateRespawnInfo(self, respawnInfo): intCD = vehicles.getVehicleTypeCompactDescr(respawnInfo['compDescr']) self.__respawnInfo = _RespawnInfo(intCD, respawnInfo['manualRespawnPiT'], respawnInfo['respawnType'], respawnInfo['autoRespawnPiT']) self.__refresh() self.onRespawnInfoUpdated(self.__respawnInfo)
def __onGetVehiclePriceResponse(self, resultID, vehCompDescr, isSellPrice, callback): if resultID < 0: if callback is not None: callback(resultID, None, self.__getCacheRevision()) return price = self.__getVehiclePriceFromCache(vehCompDescr, None) if isSellPrice and price is not None: typeCompDescr = vehicles.getVehicleTypeCompactDescr(vehCompDescr) price = self.getSellPrice(price, self.__getSellPriceModifiersFromCache(typeCompDescr), _VEHICLE) if callback is not None: callback(resultID, price, self.__getCacheRevision())
def __onGetVehiclePriceResponse(self, resultID, vehCompDescr, isSellPrice, callback): if resultID < 0: if callback is not None: callback(resultID, None, self.__getCacheRevision()) return price = self.__getVehiclePriceFromCache(vehCompDescr, None) if isSellPrice and price is not None: typeCompDescr = vehicles.getVehicleTypeCompactDescr(vehCompDescr) price = self.getSellPrice(price, self.__getSellPriceModifiersFromCache(typeCompDescr), _VEHICLE) if callback is not None: callback(resultID, price, self.__getCacheRevision())
def updateRespawnInfo(self, respawnInfo): intCD = vehicles.getVehicleTypeCompactDescr(respawnInfo['compDescr']) self.__respawnInfo = _RespawnInfo(intCD, respawnInfo['expiryRespawnDelay']) if self.__ui is not None: def show(): self.__showUICallback = None self.__show() if respawnInfo.get('afterDeath', False): self.__showUICallback = BigWorld.callback(self.__SHOW_UI_COOLDOWN, show) else: show()
def updateRespawnInfo(self, respawnInfo): intCD = vehicles.getVehicleTypeCompactDescr(respawnInfo["compDescr"]) self.__respawnInfo = _RespawnInfo(intCD, respawnInfo["expiryRespawnDelay"], respawnInfo["respawnType"]) if self.__ui is not None: def show(): self.__showUICallback = None self.__show() return if respawnInfo.get("afterDeath", False): self.__showUICallback = BigWorld.callback(_SHOW_UI_COOLDOWN, show) else: show() return
def getMaxRankForCycle(self, cycleID): season = self.getCurrentSeason() if season is None: return elif cycleID == season.getCycleID(): resultCD = None maxVehRank = (0, 0) for vehCD, rank in self.itemsCache.items.ranked.vehRanks.iteritems(): if resultCD is None or rank > maxVehRank: resultCD = vehCD if resultCD is not None: vehicle = Vehicle(strCompactDescr=vehicles.getVehicleTypeCompactDescr(resultCD)) else: vehicle = None return self.getMaxRank(vehicle) else: cycleDossier = self.__getDossierForCycle(cycleID, seasonID=season.getSeasonID()) rankID, vehicleRank = cycleDossier.rank, cycleDossier.vehRankCount if vehicleRank > 0: return VehicleRank(None, rankID, vehicleRank, RANK_STATE.UNDEFINED, 0) return Rank(rankID, RANK_STATE.UNDEFINED, 0) return
def invalidateCache(self, diff=None): invalidate = defaultdict(set) if diff is None: LOG_DEBUG('Gui items cache full invalidation') for itemTypeID, cache in self.__itemsCache.iteritems(): if itemTypeID not in (GUI_ITEM_TYPE.ACCOUNT_DOSSIER, GUI_ITEM_TYPE.VEHICLE_DOSSIER, GUI_ITEM_TYPE.BATTLE_ABILITY): cache.clear() else: for statName, data in diff.get('stats', {}).iteritems(): if statName in ('unlocks', ('unlocks', '_r')): self._invalidateUnlocks(data, invalidate) if statName == 'eliteVehicles': invalidate[GUI_ITEM_TYPE.VEHICLE].update(data) if statName in ('vehTypeXP', 'vehTypeLocks'): invalidate[GUI_ITEM_TYPE.VEHICLE].update(data.keys()) if statName in (('multipliedXPVehs', '_r'), ): getter = vehicles.getVehicleTypeCompactDescr inventoryVehiclesCDs = [ getter(v['compDescr']) for v in self.__inventory.getItems( GUI_ITEM_TYPE.VEHICLE).itervalues() ] invalidate[GUI_ITEM_TYPE.VEHICLE].update( inventoryVehiclesCDs) if statName in ('oldVehInvIDs', ): invalidate[GUI_ITEM_TYPE.VEHICLE].update(data) for cacheType, data in diff.get('cache', {}).iteritems(): if cacheType == 'vehsLock': for itemID in data.keys(): vehData = self.__inventory.getVehicleData( _getDiffID(itemID)) if vehData is not None: invalidate[GUI_ITEM_TYPE.VEHICLE].add( vehData.descriptor.type.compactDescr) for cacheType, data in diff.get('groupLocks', {}).iteritems(): if cacheType in ('isGroupLocked', 'groupBattles'): getter = vehicles.getVehicleTypeCompactDescr inventoryVehiclesCDs = [ getter(v['compDescr']) for v in self.inventory.getItems( GUI_ITEM_TYPE.VEHICLE).itervalues() ] invalidate[GUI_ITEM_TYPE.VEHICLE].update(inventoryVehiclesCDs) for itemTypeID, itemsDiff in diff.get('inventory', {}).iteritems(): if itemTypeID == GUI_ITEM_TYPE.VEHICLE: if 'compDescr' in itemsDiff: for strCD in itemsDiff['compDescr'].itervalues(): if strCD is not None: invalidate[itemTypeID].add( vehicles.getVehicleTypeCompactDescr(strCD)) for data in itemsDiff.itervalues(): for itemID in data.iterkeys(): vehData = self.__inventory.getVehicleData( _getDiffID(itemID)) if vehData is not None: invalidate[itemTypeID].add( vehData.descriptor.type.compactDescr) invalidate[GUI_ITEM_TYPE.TANKMAN].update( self.__getTankmenIDsForVehicle(vehData)) if itemTypeID == GUI_ITEM_TYPE.TANKMAN: for data in itemsDiff.itervalues(): invalidate[itemTypeID].update(data.keys()) for itemID in data.keys(): tmanInvID = _getDiffID(itemID) tmanData = self.__inventory.getTankmanData(tmanInvID) if tmanData is not None and tmanData.vehicle != -1: invalidate[GUI_ITEM_TYPE.VEHICLE].update( self.__getVehicleCDForTankman(tmanData)) invalidate[GUI_ITEM_TYPE.TANKMAN].update( self.__getTankmenIDsForTankman(tmanData)) if itemTypeID == GUI_ITEM_TYPE.SHELL: invalidate[itemTypeID].update(itemsDiff.keys()) vehicleItems = self.__inventory.getItems(GUI_ITEM_TYPE.VEHICLE) if vehicleItems: for shellIntCD in itemsDiff.iterkeys(): for vehicle in vehicleItems.itervalues(): shells = vehicle['shells'] for intCD, _, _ in LayoutIterator(shells): if shellIntCD == intCD: vehicleIntCD = vehicles.getVehicleTypeCompactDescr( vehicle['compDescr']) invalidate[GUI_ITEM_TYPE.VEHICLE].add( vehicleIntCD) vehicleData = self.__inventory.getItemData( vehicleIntCD) if vehicleData is not None: gunIntCD = vehicleData.descriptor.gun.compactDescr invalidate[GUI_ITEM_TYPE.GUN].add( gunIntCD) if itemTypeID == GUI_ITEM_TYPE.CUSTOMIZATION: for vehicleIntCD, outfitsData in itemsDiff.get( CustomizationInvData.OUTFITS, {}).iteritems(): invalidate[GUI_ITEM_TYPE.VEHICLE].add(vehicleIntCD) seasons = (outfitsData or {}).keys() or SeasonType.RANGE for season in seasons: invalidate[GUI_ITEM_TYPE.OUTFIT].add( (vehicleIntCD, season)) for cType, items in itemsDiff.get(CustomizationInvData.ITEMS, {}).iteritems(): for idx in items.iterkeys(): intCD = vehicles.makeIntCompactDescrByID( 'customizationItem', cType, idx) invalidate[GUI_ITEM_TYPE.CUSTOMIZATION].add(intCD) invalidate[itemTypeID].update(itemsDiff.keys()) for itemType, itemsDiff in diff.get('recycleBin', {}).iteritems(): deletedItems = itemsDiff.get('buffer', {}) for itemID in deletedItems.iterkeys(): if itemType == 'tankmen': invalidate[GUI_ITEM_TYPE.TANKMAN].add(itemID * -1) invalidate[GUI_ITEM_TYPE.VEHICLE].add(itemID) if 'goodies' in diff: vehicleDiscounts = self.__shop.getVehicleDiscountDescriptions() for goodieID in diff['goodies'].iterkeys(): if goodieID in vehicleDiscounts: vehicleDiscount = vehicleDiscounts[goodieID] invalidate[GUI_ITEM_TYPE.VEHICLE].add( vehicleDiscount.target.targetValue) for itemTypeID, uniqueIDs in invalidate.iteritems(): self._invalidateItems(itemTypeID, uniqueIDs) return invalidate
def invalidateCache(self, diff=None): invalidate = defaultdict(set) if diff is None: LOG_DEBUG('Gui items cache full invalidation') for itemTypeID, cache in self.__itemsCache.iteritems(): if itemTypeID not in (GUI_ITEM_TYPE.ACCOUNT_DOSSIER, GUI_ITEM_TYPE.VEHICLE_DOSSIER): cache.clear() else: for statName, data in diff.get('stats', {}).iteritems(): if statName == 'unlocks': self._invalidateUnlocks(data, invalidate) elif statName == 'eliteVehicles': invalidate[GUI_ITEM_TYPE.VEHICLE].update(data) elif statName in ('vehTypeXP', 'vehTypeLocks'): invalidate[GUI_ITEM_TYPE.VEHICLE].update(data.keys()) elif statName in (('multipliedXPVehs', '_r'), ): inventoryVehiclesCDs = map( lambda v: vehicles.getVehicleTypeCompactDescr(v[ 'compDescr']), self.inventory.getItems( GUI_ITEM_TYPE.VEHICLE).itervalues()) invalidate[GUI_ITEM_TYPE.VEHICLE].update( inventoryVehiclesCDs) for cacheType, data in diff.get('cache', {}).iteritems(): if cacheType == 'vehsLock': for id in data.keys(): vehData = self.inventory.getVehicleData(_getDiffID(id)) if vehData is not None: invalidate[GUI_ITEM_TYPE.VEHICLE].add( vehData.descriptor.type.compactDescr) for itemTypeID, itemsDiff in diff.get('inventory', {}).iteritems(): if itemTypeID == GUI_ITEM_TYPE.VEHICLE: if 'compDescr' in itemsDiff: for strCD in itemsDiff['compDescr'].itervalues(): if strCD is not None: invalidate[itemTypeID].add( vehicles.getVehicleTypeCompactDescr(strCD)) for data in itemsDiff.itervalues(): for id in data.iterkeys(): vehData = self.inventory.getVehicleData( _getDiffID(id)) if vehData is not None: invalidate[itemTypeID].add( vehData.descriptor.type.compactDescr) invalidate[GUI_ITEM_TYPE.TANKMAN].update( self.__getTankmenIDsForVehicle(vehData)) elif itemTypeID == GUI_ITEM_TYPE.TANKMAN: for data in itemsDiff.itervalues(): invalidate[itemTypeID].update(data.keys()) for id in data.keys(): tmanInvID = _getDiffID(id) tmanData = self.inventory.getTankmanData(tmanInvID) if tmanData is not None and tmanData.vehicle != -1: invalidate[GUI_ITEM_TYPE.VEHICLE].update( self.__getVehicleCDForTankman(tmanData)) invalidate[GUI_ITEM_TYPE.TANKMAN].update( self.__getTankmenIDsForTankman(tmanData)) elif itemTypeID == GUI_ITEM_TYPE.SHELL: invalidate[itemTypeID].update(itemsDiff.keys()) for shellIntCD in itemsDiff.iterkeys(): for vehicle in self.inventory.getItems( GUI_ITEM_TYPE.VEHICLE).itervalues(): shells = vehicle['shells'] for intCD, _, _ in LayoutIterator(shells): if shellIntCD == intCD: vehicleIntCD = vehicles.getVehicleTypeCompactDescr( vehicle['compDescr']) invalidate[GUI_ITEM_TYPE.VEHICLE].add( vehicleIntCD) vehicelData = self.inventory.getItemData( vehicleIntCD) gunIntCD = vehicelData.descriptor.gun[ 'compactDescr'] invalidate[GUI_ITEM_TYPE.GUN].add(gunIntCD) else: invalidate[itemTypeID].update(itemsDiff.keys()) for itemTypeID, uniqueIDs in invalidate.iteritems(): self._invalidateItems(itemTypeID, uniqueIDs) return invalidate
def updateRespawnInfo(self, respawnInfo): intCD = vehicles.getVehicleTypeCompactDescr(respawnInfo['compDescr']) self.__respawnInfo = _RespawnInfo(intCD, respawnInfo['expiryRespawnDelay'], respawnInfo['respawnType']) needCooldown = respawnInfo.get('afterDeath', False) self.__showIfReady(needCooldown)
def isMainInNationGroup(vehCompDescr): if not vehicles.isVehicleTypeCompactDescr(vehCompDescr): vehCompDescr = vehicles.getVehicleTypeCompactDescr(vehCompDescr) return getMainVehicleInNationGroup( getNationGroupID(vehCompDescr)) == vehCompDescr