Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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())
Esempio n. 6
0
 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())
Esempio n. 7
0
    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
Esempio n. 10
0
    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
Esempio n. 11
0
    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
Esempio n. 12
0
 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