def sendPresence(self, initial = False): client = self.client() if not client or not client.isConnected(): return False if self.__scope == MESSENGER_SCOPE.BATTLE: if initial: seq = (PRESENCE.AVAILABLE, PRESENCE.DND) else: seq = (PRESENCE.DND,) elif self.__scope == MESSENGER_SCOPE.LOBBY: seq = (PRESENCE.AVAILABLE,) else: return False for presence in seq: if not initial and client.getClientPresence() == presence: continue query = self.__createQuery(presence) if IS_IGR_ENABLED: from gui.game_control import getIGRCtrl ctrl = getIGRCtrl() if ctrl: query.setIgrID(ctrl.getRoomType()) client.sendPresence(query) return True
def __setInstalledRawItems(self, curVehDescr): installedRawItems = {'camouflages': list(curVehDescr.camouflages), 'emblems': list(curVehDescr.playerEmblems), 'inscriptions': list(curVehDescr.playerInscriptions)} for key in installedRawItems.keys(): for installedRawItem in installedRawItems[key]: installedItemID = installedRawItem[0] if installedRawItem[2] == 0 and installedItemID is not None and (_TYPE_NAME[key] != CUSTOMIZATION_TYPE.EMBLEM or _TYPE_NAME[key] == CUSTOMIZATION_TYPE.EMBLEM) and installedItemID not in self.__itemGroups[CUSTOMIZATION_TYPE.EMBLEM]['auto'][0]: self.__notMigratedItems[_TYPE_NAME[key]].add(installedItemID) if self.__displayIgrItems: igrLayout = g_itemsCache.items.inventory.getIgrCustomizationsLayout() vehicleId = g_currentVehicle.item.invID igrRoomType = getIGRCtrl().getRoomType() igrVehDescr = [] if vehicleId in igrLayout: if igrRoomType in igrLayout[vehicleId]: igrVehDescr = igrLayout[vehicleId][igrRoomType] for key in igrVehDescr: for index in igrVehDescr[key]: replacedItemID = installedRawItems[key][index][0] replacedItemDaysLeft = installedRawItems[key][index][2] if replacedItemID is not None: self.__igrReplacedItems[_TYPE_NAME[key]][replacedItemID] = replacedItemDaysLeft installedRawItems[key][index] = igrVehDescr[key][index] self.__initialViewModel = (installedRawItems['emblems'], installedRawItems['inscriptions']) self.viewModel = [copy.deepcopy(installedRawItems['camouflages']), copy.deepcopy(installedRawItems['emblems']), copy.deepcopy(installedRawItems['inscriptions'])] return installedRawItems
def __packStaffData(self, club, syncUserInfo=False): members = [] membersDict = club.getMembers() membersCount = len(membersDict) for dbID, member in membersDict.iteritems(): memberType = _getFlashMemberType(member) isSelf = dbID == self.__viewerDbID limits = self.clubsState.getLimits() profile = self.clubsCtrl.getProfile() memberStats = member.getSeasonDossier().getRated7x7Stats() battlesCount = memberStats.getBattlesCount() rating = self.getUserRating(dbID) damageCoef = memberStats.getDamageEfficiency() or 0 avgDamage = memberStats.getAvgDamage() or 0 avgAssistDamage = memberStats.getDamageAssistedEfficiency() or 0 avgExperience = memberStats.getAvgXP() or 0 armorUsingEfficiency = memberStats.getArmorUsingEfficiency() or 0 joinDate = member.getJoiningTime() if isSelf: removeBtnTooltip = TOOLTIPS.STATICFORMATIONSTAFFVIEW_REMOVEHIMSELFBTN else: removeBtnTooltip = TOOLTIPS.STATICFORMATIONSTAFFVIEW_REMOVEMEMBERBTN userData = self.getGuiUserData(dbID) userData.update({"igrType": getIGRCtrl().getRoomType()}) members.append( { "memberId": dbID, "canRemoved": self.__canBeRemoved(profile, club, member, membersCount, limits), "canPassOwnership": limits.canTransferOwnership(profile, club).success, "canShowContextMenu": not isSelf, "removeMemberBtnIcon": RES_ICONS.MAPS_ICONS_LIBRARY_CROSS, "removeMemberBtnTooltip": removeBtnTooltip, "appointmentSortValue": memberType, "appointment": _packAppointment(profile, club, member, memberType, limits), "ratingSortValue": rating, "rating": self.getGuiUserRating(dbID, text_styles.neutral), "battlesCountSortValue": battlesCount, "battlesCount": text_styles.main(BigWorld.wg_getIntegralFormat(battlesCount)), "damageCoefSortValue": damageCoef, "damageCoef": text_styles.main(BigWorld.wg_getNiceNumberFormat(damageCoef)), "avrDamageSortValue": avgDamage, "avrDamage": text_styles.main(BigWorld.wg_getIntegralFormat(avgDamage)), "avrAssistDamageSortValue": avgAssistDamage, "avrAssistDamage": text_styles.main(BigWorld.wg_getNiceNumberFormat(avgAssistDamage)), "avrExperienceSortValue": avgExperience, "avrExperience": text_styles.main(BigWorld.wg_getIntegralFormat(avgExperience)), "tauntSortValue": armorUsingEfficiency, "taunt": text_styles.main(BigWorld.wg_getNiceNumberFormat(armorUsingEfficiency)), "joinDateSortValue": joinDate, "joinDate": text_styles.standard(BigWorld.wg_getShortDateFormat(joinDate)), "userDataSortValue": self.getUserFullName(dbID).lower(), "userData": userData, "clubDbID": self._clubDbID, } ) if syncUserInfo: self.syncUsersInfo() return {"members": sorted(members, key=lambda k: k["userDataSortValue"].lower())}
def __getItemData(self): selectedSlotItemID = g_customizationController.carousel.slots.getInstalledItem(self.__currentSlotIdx, self.__cItemType).getID() isInSlot = selectedSlotItemID == self.__cItem.getID() wasBought = False if self.__cItem.getIgrType() != IGR_TYPE.NONE: if self.__cItem.getIgrType() == getIGRCtrl().getRoomType(): buyItems = [{'value': 0, 'type': BUY_ITEM_TYPE.ALREADY_HAVE_IGR, 'isSale': False, 'desc': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_ALREADYHAVE_IGR)}] wasBought = True status = STATUS.ON_BOARD if isInSlot else STATUS.ALREADY_HAVE else: buyItems = [{'value': 0, 'type': BUY_ITEM_TYPE.WAYS_TO_BUY_IGR, 'isSale': False, 'desc': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_IGR)}] status = STATUS.DO_IGR elif self.__cItem.isInDossier: buyItems = [{'value': 0, 'type': BUY_ITEM_TYPE.ALREADY_HAVE_FOREVER, 'isSale': False, 'desc': VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_FOREVER}] wasBought = True status = STATUS.ON_BOARD if isInSlot else STATUS.ALREADY_HAVE elif isInSlot: days = g_customizationController.carousel.slots.getInstalledItem(self.__currentSlotIdx, self.__cItemType).duration leftDays = g_customizationController.carousel.slots.getInstalledItem(self.__currentSlotIdx, self.__cItemType).getNumberOfDaysLeft() buyItems = [{'value': 0, 'type': BUY_ITEM_TYPE.ALREADY_HAVE_TEMP, 'isSale': False, 'desc': _ms(CUSTOMIZATION.TOOLTIP_ELEMENT_PURCHASE_ACQUIRED_DAYS, total=days, left=leftDays)}] status = STATUS.ON_BOARD wasBought = True else: buyItems = [{'value': self.__cItem.getPrice(0), 'type': BUY_ITEM_TYPE.WAYS_TO_BUY_FOREVER, 'isSale': self.__isSale(BUY_ITEM_TYPE.WAYS_TO_BUY_FOREVER), 'desc': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_FOREVER)}, {'value': self.__cItem.getPrice(30), 'type': BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP, 'isSale': self.__isSale(BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP), 'desc': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_TEMP, days='30')}, {'value': self.__cItem.getPrice(7), 'type': BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP, 'isSale': self.__isSale(BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP), 'desc': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_TEMP, days='7')}] status = STATUS.AVAILABLE_FOR_BUY item = {'type': self.__cItemType, 'title': self.__cItem.getName(), 'icon': self.__cItem.getTexturePath(), 'bonus_icon': self.__cItem.qualifier.getIcon42x42(), 'bonus_title_local': self.__cItem.qualifier.getFormattedValue(), 'bonus_title_global': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_BONUS_GLOBAL, count=g_customizationController.carousel.slots.bonusPanel.bonusData[self.__cItem.qualifier.getType()]['bonusTotalCount']), 'bonus_desc': self.__cItem.qualifier.getExtendedName(), 'wasBought': wasBought, 'buyItems': buyItems, 'status': status, 'description': self.__cItem.getDescription(), 'conditional': self.__cItem.qualifier.getDescription()} return item
def __packStaffData(self, club, syncUserInfo = False): members = [] membersDict = club.getMembers() membersCount = len(membersDict) for dbID, member in membersDict.iteritems(): memberType = _getFlashMemberType(member) isSelf = dbID == self.__viewerDbID limits = self.clubsState.getLimits() profile = self.clubsCtrl.getProfile() memberStats = member.getSeasonDossier().getRated7x7Stats() battlesCount = memberStats.getBattlesCount() rating = self.getUserRating(dbID) damageCoef = memberStats.getDamageEfficiency() or 0 avgDamage = memberStats.getAvgDamage() or 0 avgAssistDamage = memberStats.getDamageAssistedEfficiency() or 0 avgExperience = memberStats.getAvgXP() or 0 armorUsingEfficiency = memberStats.getArmorUsingEfficiency() or 0 joinDate = member.getJoiningTime() contact = self.getContact(dbID) if isSelf: removeBtnTooltip = TOOLTIPS.STATICFORMATIONSTAFFVIEW_REMOVEHIMSELFBTN else: removeBtnTooltip = TOOLTIPS.STATICFORMATIONSTAFFVIEW_REMOVEMEMBERBTN isValid, userData = self.getGuiUserDataWithStatus(dbID) userData.update({'igrType': getIGRCtrl().getRoomType()}) members.append({'memberId': dbID, 'canRemoved': self.__canBeRemoved(profile, club, member, membersCount, limits), 'canPassOwnership': limits.canTransferOwnership(profile, club).success, 'canShowContextMenu': not isSelf and isValid, 'removeMemberBtnIcon': RES_ICONS.MAPS_ICONS_LIBRARY_CROSS, 'removeMemberBtnTooltip': removeBtnTooltip, 'appointmentSortValue': memberType, 'appointment': _packAppointment(profile, club, member, memberType, limits), 'ratingSortValue': rating, 'rating': self.getGuiUserRating(dbID, text_styles.neutral), 'battlesCountSortValue': battlesCount, 'battlesCount': text_styles.main(BigWorld.wg_getIntegralFormat(battlesCount)), 'damageCoefSortValue': damageCoef, 'damageCoef': text_styles.main(BigWorld.wg_getNiceNumberFormat(damageCoef)), 'avrDamageSortValue': avgDamage, 'avrDamage': text_styles.main(BigWorld.wg_getIntegralFormat(avgDamage)), 'avrAssistDamageSortValue': avgAssistDamage, 'avrAssistDamage': text_styles.main(BigWorld.wg_getNiceNumberFormat(avgAssistDamage)), 'avrExperienceSortValue': avgExperience, 'avrExperience': text_styles.main(BigWorld.wg_getIntegralFormat(avgExperience)), 'tauntSortValue': armorUsingEfficiency, 'taunt': text_styles.main(BigWorld.wg_getNiceNumberFormat(armorUsingEfficiency)), 'joinDateSortValue': joinDate, 'joinDate': text_styles.standard(BigWorld.wg_getShortDateFormat(joinDate)), 'userDataSortValue': self.getUserFullName(dbID).lower(), 'userData': userData, 'clubDbID': self._clubDbID, 'statusIcon': _getStatusIcon(contact)}) if syncUserInfo: self.syncUsersInfo() return {'members': sorted(members, key=lambda k: k['userDataSortValue'].lower())}
def __getPurchaseTypeVO(self): result = [] for purchaseType in self.__purchaseTypeList: purchaseVO = {'label': self.__purchaseTypeMap[purchaseType], 'enabled': True} if purchaseType == PURCHASE_TYPE.IGR: purchaseVO['enabled'] = getIGRCtrl().getRoomType() == IGR_TYPE.PREMIUM purchaseVO['tooltipDisabled'] = makeTooltip(_ms(CUSTOMIZATION.FILTER_TOOLTIP_IGR_DISABLED_HEADER), _ms(CUSTOMIZATION.FILTER_TOOLTIP_IGR_DISABLED_BODY, icon=_ms(icons.premiumIgrSmall()))) result.append(purchaseVO) return result
def __init__(self): self.updated = Event() self.viewModel = [] self.__installed = () self.__availableItems = [{}, {}, {}] self.__displayedItems = [{}, {}, {}] self.__initialViewModel = () self.__displayIgrItems = getIGRCtrl().getRoomType() == 2 and GUI_SETTINGS.igrEnabled self.__availableGroupNames = [] self.__gatherDataForVehicle(CACHE_SYNC_REASON.DOSSIER_RESYNC, None) _g_itemsCache.onSyncCompleted += self.__gatherDataForVehicle return
def _getPurchaseTypeVO(): result = [] for purchaseType, label in zip(PURCHASE_TYPE.ALL, _PURCHASE_TYPE_LABELS): purchaseVO = {'label': label, 'enabled': True} if purchaseType == PURCHASE_TYPE.IGR: if not GUI_SETTINGS.igrEnabled: continue purchaseVO['enabled'] = getIGRCtrl().getRoomType() == IGR_TYPE.PREMIUM purchaseVO['tooltipDisabled'] = makeTooltip(_ms(VEHICLE_CUSTOMIZATION.FILTER_TOOLTIP_IGR_DISABLED_HEADER), _ms(VEHICLE_CUSTOMIZATION.FILTER_TOOLTIP_IGR_DISABLED_BODY, icon=_ms(icons.premiumIgrSmall()))) result.append(purchaseVO) return result
def __setCarouselData(self, blData): itemVOs = [] for item in blData['items']: enable = True if item['installedInSlot']: label = text_styles.main(CUSTOMIZATION.CAROUSEL_ITEMLABEL_APPLIED) elif item['isInDossier']: label = text_styles.main(CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) elif item['object'].getIgrType() != IGR_TYPE.NONE: if item['object'].getIgrType() == getIGRCtrl().getRoomType(): label = text_styles.main(CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) else: label = icons.premiumIgrSmall() enable = False else: if item['priceIsGold']: priceFormatter = text_styles.gold priceIcon = icons.gold() else: priceFormatter = text_styles.credits priceIcon = icons.credits() label = priceFormatter('{0}{1}'.format(item['price'], priceIcon)) data = {'id': item['id'], 'icon': item['object'].getTexturePath(), 'bonusType': item['object'].qualifier.getIcon16x16(), 'bonusPower': text_styles.stats('+{0}%{1}'.format(item['object'].qualifier.getValue(), '*' if item['object'].qualifier.getDescription() is not None else '')), 'label': label, 'installed': item['appliedToCurrentSlot'], 'btnSelect': self.__getLabelOfSelectBtn(item), 'btnShoot': VEHICLE_CUSTOMIZATION.CUSTOMIZATIONITEMCAROUSEL_RENDERER_SHOOT, 'btnTooltip': item['buttonTooltip'], 'btnSelectEnable': enable, 'doubleclickEnable': enable, 'btnShootEnable': True} cType = g_customizationController.carousel.currentType if isSale(cType, item['duration']) and not item['isInDossier'] and not item['installedInSlot']: isGold = item['priceIsGold'] data['salePrice'] = getSalePriceString(isGold, item['price']) itemVOs.append(data) carouselLength = len(itemVOs) self.as_setCarouselDataS({'rendererList': itemVOs, 'rendererWidth': blData['rendererWidth'], 'filterCounter': '{0}{1}'.format(text_styles.stats(carouselLength) if carouselLength > 0 else text_styles.error(carouselLength), text_styles.main(_ms(VEHICLE_CUSTOMIZATION.CAROUSEL_FILTER_COUNTER, all=blData['unfilteredLength']))), 'messageVisible': carouselLength == 0, 'counterVisible': True, 'goToIndex': blData['goToIndex'], 'selectedIndex': blData['selectedIndex']}) return
def __setCarouselData(self, blData): itemVOs = [] selectedIndex = -1 for item in blData['items']: element = item['element'] isInQuest = checkInQuest(element, self.__controller.filter.purchaseType) if item['installedInCurrentSlot']: label = text_styles.main(VEHICLE_CUSTOMIZATION.CAROUSEL_ITEMLABEL_APPLIED) elif element.isInDossier: label = text_styles.main(VEHICLE_CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) elif element.getIgrType() != IGR_TYPE.NONE: if element.getIgrType() == getIGRCtrl().getRoomType(): label = text_styles.main(VEHICLE_CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) else: label = icons.premiumIgrSmall() elif isInQuest: label = icons.quest() else: if item['duration'] == DURATION.PERMANENT: priceFormatter = text_styles.gold priceIcon = icons.gold() else: priceFormatter = text_styles.credits priceIcon = icons.credits() label = priceFormatter('{0}{1}'.format(element.getPrice(item['duration']), priceIcon)) data = {'id': element.getID(), 'icon': element.getTexturePath(), 'bonusType': element.qualifier.getIcon16x16(), 'bonusPower': text_styles.stats('+{0}%{1}'.format(element.qualifier.getValue(), '*' if element.qualifier.getDescription() is not None else '')), 'label': label, 'selected': item['appliedToCurrentSlot'] or item['installedInCurrentSlot'] and not blData['hasAppliedItem'], 'goToTaskBtnVisible': isInQuest, 'goToTaskBtnText': _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_ITEMCAROUSEL_RENDERER_GOTOTASK), 'newElementIndicatorVisible': item['isNewElement']} if data['selected']: selectedIndex = blData['items'].index(item) if element.isOnSale(item['duration']) and not element.isInDossier and not item['installedInCurrentSlot'] and not isInQuest: data['salePrice'] = getSalePriceString(self.__controller.slots.currentType, element, item['duration']) itemVOs.append(data) carouselLength = len(itemVOs) self.as_setCarouselDataS({'rendererList': itemVOs, 'rendererWidth': blData['rendererWidth'], 'filterCounter': '{0}{1}'.format(text_styles.stats(carouselLength) if carouselLength > 0 else text_styles.error(carouselLength), text_styles.main(_ms(VEHICLE_CUSTOMIZATION.CAROUSEL_FILTER_COUNTER, all=blData['unfilteredLength']))), 'messageVisible': carouselLength == 0, 'counterVisible': True, 'goToIndex': blData['goToIndex'], 'selectedIndex': selectedIndex}) return
def __setInstalledRawItems(self, curVehDescr): installedRawItems = {'camouflages': list(curVehDescr.camouflages), 'emblems': list(curVehDescr.playerEmblems), 'inscriptions': list(curVehDescr.playerInscriptions)} if self.__displayIgrItems: igrLayout = g_itemsCache.items.inventory.getIgrCustomizationsLayout() vehicleId = g_currentVehicle.item.invID igrRoomType = getIGRCtrl().getRoomType() igrVehDescr = [] if vehicleId in igrLayout: if igrRoomType in igrLayout[vehicleId]: igrVehDescr = igrLayout[vehicleId][igrRoomType] for key in igrVehDescr: for index in igrVehDescr[key]: installedRawItems[key][index] = igrVehDescr[key][index] self.__initialViewModel = (installedRawItems['emblems'], installedRawItems['inscriptions']) self.viewModel = [copy.deepcopy(installedRawItems['camouflages']), copy.deepcopy(installedRawItems['emblems']), copy.deepcopy(installedRawItems['inscriptions'])] return installedRawItems
def __init__(self): self.updated = Event() self.viewModel = [] self.__installed = () self.__availableItems = None self.__displayedItems = None self.__igrReplacedItems = None self.__notMigratedItems = None self.__itemGroups = None self.__initialViewModel = () self.__cNationID = None self.__rawItems = None self.__vehicleInventoryID = None self.__displayIgrItems = getIGRCtrl().getRoomType() == 2 and GUI_SETTINGS.igrEnabled self.__availableGroupNames = None self.__gatherDataForVehicle(CACHE_SYNC_REASON.DOSSIER_RESYNC, None) _g_currentVehicle.onChanged += self.__onCurrentVehicleChanged _g_itemsCache.onSyncCompleted += self.__gatherDataForVehicle return
def _getInstalledRawItems(self, curVehDescr): installedRawItems = DataAggregator._getInstalledRawItems(self, curVehDescr) if self._displayIgrItems: igrLayout = self._itemsCache.items.inventory.getIgrCustomizationsLayout() vehicleId = self._currentVehicle.item.invID igrRoomType = getIGRCtrl().getRoomType() igrVehDescr = [] if vehicleId in igrLayout: if igrRoomType in igrLayout[vehicleId]: igrVehDescr = igrLayout[vehicleId][igrRoomType] for key in igrVehDescr: for index in igrVehDescr[key]: replacedItemID = installedRawItems[key][index][0] replacedItemDaysLeft = installedRawItems[key][index][2] replacedItemDaysLeft = replacedItemDaysLeft or None if replacedItemID is not None: self.__igrReplacedItems[TYPE_NAME[key]][replacedItemID] = replacedItemDaysLeft installedRawItems[key][index] = igrVehDescr[key][index] return installedRawItems
def sendPresence(self, initial = False): client = self.client() if not client or not client.isConnected(): return False if self.__scope == MESSENGER_SCOPE.BATTLE: presence = PRESENCE.DND elif self.__scope == MESSENGER_SCOPE.LOBBY: presence = PRESENCE.AVAILABLE else: return False if initial or client.getClientPresence() != presence: if IS_IGR_ENABLED: from gui.game_control import getIGRCtrl ctrl = getIGRCtrl() if ctrl: client.setClientPresenceWithIGR(presence, igrID=ctrl.getRoomType()) else: client.setClientPresence(presence) else: client.setClientPresence(presence) return True
def __gatherDataForVehicle(self, updateReason, invalidItems): if updateReason in (CACHE_SYNC_REASON.DOSSIER_RESYNC, CACHE_SYNC_REASON.SHOP_RESYNC, _IGR_TYPE_CHANGED, VEHICLE_CHANGED_EVENT, EVENTS_UPDATED_EVENT): self.__displayIgrItems = getIGRCtrl().getRoomType() == 2 and GUI_SETTINGS.igrEnabled self.__vehicleInventoryID = g_currentVehicle.item.invID curVehItem = _g_currentVehicle.item curVehDescr = curVehItem.descriptor self.__cNationID = curVehDescr.type.customizationNationID inDossier = (_g_itemsCache.items.getVehicleDossier(curVehItem.intCD).getBlock('camouflages'), _g_itemsCache.items.getVehicleDossier(curVehItem.intCD).getBlock('emblems'), _g_itemsCache.items.getVehicleDossier(curVehItem.intCD).getBlock('inscriptions')) self.__rawItems = [_g_vehiclesCache.customization(self.__cNationID)['camouflages'], _g_vehiclesCache.playerEmblems()[1], _g_vehiclesCache.customization(self.__cNationID)['inscriptions']] self.__itemGroups = (_g_vehiclesCache.customization(self.__cNationID)['camouflageGroups'], _g_vehiclesCache.playerEmblems()[0], _g_vehiclesCache.customization(self.__cNationID)['inscriptionGroups']) inQuests = self.__getQuestItems() self.__availableGroupNames = [set([]), set([]), set([])] self.__displayedItems = [{}, {}, {}] self.__availableItems = [{}, {}, {}] self.__igrReplacedItems = [{}, {}, {}] self.__notMigratedItems = [set([]), set([]), set([])] self.__associatedQuests = [{}, {}, {}] inventoryItems = self.getInventoryItems(self.__cNationID, self.__rawItems) installedRawItems = self.__setInstalledRawItems(curVehDescr) self.__installed = self.__setInstalledCustomization(curVehDescr.hull['emblemSlots'], curVehDescr.turret['emblemSlots'], installedRawItems) for cType in CUSTOMIZATION_TYPE.ALL: self.__fillAvailableItems(cType, inDossier, inQuests, inventoryItems) self.__fillDisplayedItems(cType) self.__fillDisplayedGroups(cType) if updateReason == VEHICLE_CHANGED_EVENT: needReset = True elif updateReason == EVENTS_UPDATED_EVENT: needReset = self.__isQuestsChanged(inQuests) else: needReset = False self.__associatedQuests = inQuests self.updated(needReset)
def __obtainedFromIgr(self): """Check if item can be obtained by IRG. Returns: A tuple (buyItems, wasBough, status) where: buyItems - a list of different ways this item can be bought; wasBought - specifies if item is already bought; status - one of the STATUS constants """ if self._item.getIgrType() == getIGRCtrl().getRoomType(): buyItems = [{'value': 0, 'type': BUY_ITEM_TYPE.ALREADY_HAVE_IGR, 'isSale': False, 'desc': _ms('#vehicle_customization:customization/tooltip/alreadyHave/igr')}] wasBought = True status = STATUS.ON_BOARD if self.__isInstalled() else STATUS.ALREADY_HAVE else: buyItems = [{'value': 0, 'type': BUY_ITEM_TYPE.WAYS_TO_BUY_IGR, 'isSale': False, 'desc': _ms('#vehicle_customization:customization/tooltip/wayToBuy/igr')}] wasBought = False status = STATUS.DO_IGR return (buyItems, wasBought, status)
def getGroup(self): groupName = self._rawData['groupName'] if getIGRCtrl().getRoomType() == IGR_TYPE.PREMIUM: groupName = groupName[3:] if groupName.startswith('IGR') else groupName return groupName
def _update(self): self._displayIgrItems = getIGRCtrl().getRoomType() == IGR_TYPE.PREMIUM self.__igrReplacedItems = [{}, {}, {}] DataAggregator._update(self)
def __setCarouselData(self, blData): itemVOs = [] selectedIndex = -1 for item in blData['items']: element = item['element'] isInQuest = checkInQuest(element, self.__controller.filter.purchaseType) if item['installedInCurrentSlot']: label = text_styles.main( VEHICLE_CUSTOMIZATION.CAROUSEL_ITEMLABEL_APPLIED) elif element.isInDossier: label = text_styles.main( VEHICLE_CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) elif element.getIgrType() != IGR_TYPE.NONE: if element.getIgrType() == getIGRCtrl().getRoomType(): label = text_styles.main( VEHICLE_CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) else: label = icons.premiumIgrSmall() elif isInQuest: label = icons.quest() else: if item['duration'] == DURATION.PERMANENT: priceFormatter = text_styles.gold priceIcon = icons.gold() else: priceFormatter = text_styles.credits priceIcon = icons.credits() label = priceFormatter('{0}{1}'.format( element.getPrice(item['duration']), priceIcon)) data = { 'id': element.getID(), 'icon': element.getTexturePath(), 'bonusType': element.qualifier.getIcon16x16(), 'bonusPower': text_styles.stats('+{0}%{1}'.format( element.qualifier.getValue(), '*' if element.qualifier.getDescription() is not None else '')), 'label': label, 'selected': item['appliedToCurrentSlot'] or item['installedInCurrentSlot'] and not blData['hasAppliedItem'], 'goToTaskBtnVisible': isInQuest, 'goToTaskBtnText': _ms(VEHICLE_CUSTOMIZATION. CUSTOMIZATION_ITEMCAROUSEL_RENDERER_GOTOTASK), 'newElementIndicatorVisible': item['isNewElement'] } if data['selected']: selectedIndex = blData['items'].index(item) if element.isOnSale( item['duration']) and not element.isInDossier and not item[ 'installedInCurrentSlot'] and not isInQuest: data['salePrice'] = getSalePriceString( self.__controller.slots.currentType, element, item['duration']) itemVOs.append(data) carouselLength = len(itemVOs) self.as_setCarouselDataS({ 'rendererList': itemVOs, 'rendererWidth': blData['rendererWidth'], 'filterCounter': '{0}{1}'.format( text_styles.stats(carouselLength) if carouselLength > 0 else text_styles.error(carouselLength), text_styles.main( _ms(VEHICLE_CUSTOMIZATION.CAROUSEL_FILTER_COUNTER, all=blData['unfilteredLength']))), 'messageVisible': carouselLength == 0, 'counterVisible': True, 'goToIndex': blData['goToIndex'], 'selectedIndex': selectedIndex }) return
def __setCarouselData(self, blData): itemVOs = [] for item in blData['items']: if item['installedInSlot']: label = text_styles.main( CUSTOMIZATION.CAROUSEL_ITEMLABEL_APPLIED) elif item['isInDossier']: label = text_styles.main( CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) elif item['object'].getIgrType() != IGR_TYPE.NONE: if item['object'].getIgrType() == getIGRCtrl().getRoomType(): label = text_styles.main( CUSTOMIZATION.CAROUSEL_ITEMLABEL_PURCHASED) else: label = icons.premiumIgrSmall() elif item['isInQuests']: label = icons.quest() else: if item['priceIsGold']: priceFormatter = text_styles.gold priceIcon = icons.gold() else: priceFormatter = text_styles.credits priceIcon = icons.credits() label = priceFormatter('{0}{1}'.format(item['price'], priceIcon)) data = { 'id': item['id'], 'icon': item['object'].getTexturePath(), 'bonusType': item['object'].qualifier.getIcon16x16(), 'bonusPower': text_styles.stats('+{0}%{1}'.format( item['object'].qualifier.getValue(), '*' if item['object'].qualifier.getDescription() is not None else '')), 'label': label, 'selected': item['appliedToCurrentSlot'], 'goToTaskBtnVisible': item['isInQuests'], 'goToTaskBtnText': _ms(VEHICLE_CUSTOMIZATION. CUSTOMIZATION_ITEMCAROUSEL_RENDERER_GOTOTASK), 'newElementIndicatorVisible': False } cType = g_customizationController.carousel.currentType if item['object'].isSale( item['duration']) and not item['isInDossier'] and not item[ 'installedInSlot'] and not item['isInQuests']: data['salePrice'] = getSalePriceString(cType, item['object'], item['duration']) itemVOs.append(data) carouselLength = len(itemVOs) self.as_setCarouselDataS({ 'rendererList': itemVOs, 'rendererWidth': blData['rendererWidth'], 'filterCounter': '{0}{1}'.format( text_styles.stats(carouselLength) if carouselLength > 0 else text_styles.error(carouselLength), text_styles.main( _ms(VEHICLE_CUSTOMIZATION.CAROUSEL_FILTER_COUNTER, all=blData['unfilteredLength']))), 'messageVisible': carouselLength == 0, 'counterVisible': True, 'goToIndex': blData['goToIndex'], 'selectedIndex': blData['selectedIndex'] }) return
def isInDossier(self): return self.__isInDossier or self.getIgrType() == getIGRCtrl().getRoomType() and getIGRCtrl().getRoomType() != IGR_TYPE.NONE
def __getItemData(self): selectedSlotItemID = g_customizationController.carousel.slots.getInstalledItem( self.__currentSlotIdx, self.__cItemType ).getID() isInSlot = selectedSlotItemID == self.__cItem.getID() wasBought = False if self.__cItem.getIgrType() != IGR_TYPE.NONE: if self.__cItem.getIgrType() == getIGRCtrl().getRoomType(): buyItems = [ { "value": 0, "type": BUY_ITEM_TYPE.ALREADY_HAVE_IGR, "isSale": False, "desc": _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_ALREADYHAVE_IGR), } ] wasBought = True status = STATUS.ON_BOARD if isInSlot else STATUS.ALREADY_HAVE else: buyItems = [ { "value": 0, "type": BUY_ITEM_TYPE.WAYS_TO_BUY_IGR, "isSale": False, "desc": _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_IGR), } ] status = STATUS.DO_IGR elif self.__cItem.isInDossier: data = {"value": 0, "isSale": False} if self.__cItem.numberOfDays is not None: data["type"] = BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP data["desc"] = _ms( VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_TEMP, days=self.__cItem.numberOfDays ) else: data["type"] = BUY_ITEM_TYPE.ALREADY_HAVE_FOREVER data["desc"] = VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_FOREVER buyItems = [data] wasBought = True status = STATUS.ON_BOARD if isInSlot else STATUS.ALREADY_HAVE elif isInSlot: days = g_customizationController.carousel.slots.getInstalledItem( self.__currentSlotIdx, self.__cItemType ).duration leftDays = g_customizationController.carousel.slots.getInstalledItem( self.__currentSlotIdx, self.__cItemType ).getNumberOfDaysLeft() buyItems = [ { "value": 0, "type": BUY_ITEM_TYPE.ALREADY_HAVE_TEMP, "isSale": False, "desc": _ms(CUSTOMIZATION.TOOLTIP_ELEMENT_PURCHASE_ACQUIRED_DAYS, total=days, left=leftDays), } ] status = STATUS.ON_BOARD wasBought = True else: buyItems = [ { "value": self.__cItem.getPrice(0), "type": BUY_ITEM_TYPE.WAYS_TO_BUY_FOREVER, "isSale": self.__isSale(BUY_ITEM_TYPE.WAYS_TO_BUY_FOREVER), "desc": _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_FOREVER), }, { "value": self.__cItem.getPrice(30), "type": BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP, "isSale": self.__isSale(BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP), "desc": _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_TEMP, days="30"), }, { "value": self.__cItem.getPrice(7), "type": BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP, "isSale": self.__isSale(BUY_ITEM_TYPE.WAYS_TO_BUY_TEMP), "desc": _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_WAYTOBUY_TEMP, days="7"), }, ] status = STATUS.AVAILABLE_FOR_BUY item = { "type": self.__cItemType, "title": self.__cItem.getName(), "icon": self.__cItem.getTexturePath(), "bonus_icon": self.__cItem.qualifier.getIcon42x42(), "bonus_title_local": self.__cItem.qualifier.getFormattedValue(), "bonus_title_global": _ms( VEHICLE_CUSTOMIZATION.CUSTOMIZATION_TOOLTIP_BONUS_GLOBAL, count=g_customizationController.carousel.slots.bonusPanel.bonusData[self.__cItem.qualifier.getType()][ "bonusTotalCount" ], ), "bonus_desc": self.__cItem.qualifier.getExtendedName(), "wasBought": wasBought, "buyItems": buyItems, "status": status, "description": self.__cItem.getDescription(), "conditional": self.__cItem.qualifier.getDescription(), } return item
def __packStaffData(self, club, syncUserInfo=False): members = [] membersDict = club.getMembers() membersCount = len(membersDict) for dbID, member in membersDict.iteritems(): memberType = _getFlashMemberType(member) isSelf = dbID == self.__viewerDbID limits = self.clubsState.getLimits() profile = self.clubsCtrl.getProfile() memberStats = member.getSeasonDossier().getRated7x7Stats() battlesCount = memberStats.getBattlesCount() rating = self.getUserRating(dbID) damageCoef = memberStats.getDamageEfficiency() or 0 avgDamage = memberStats.getAvgDamage() or 0 avgAssistDamage = memberStats.getDamageAssistedEfficiency() or 0 avgExperience = memberStats.getAvgXP() or 0 armorUsingEfficiency = memberStats.getArmorUsingEfficiency() or 0 joinDate = member.getJoiningTime() contact = self.getContact(dbID) if isSelf: removeBtnTooltip = TOOLTIPS.STATICFORMATIONSTAFFVIEW_REMOVEHIMSELFBTN else: removeBtnTooltip = TOOLTIPS.STATICFORMATIONSTAFFVIEW_REMOVEMEMBERBTN isValid, userData = self.getGuiUserDataWithStatus(dbID) userData.update({'igrType': getIGRCtrl().getRoomType()}) members.append({ 'memberId': dbID, 'canRemoved': self.__canBeRemoved(profile, club, member, membersCount, limits), 'canPassOwnership': limits.canTransferOwnership(profile, club).success, 'canShowContextMenu': not isSelf and isValid, 'removeMemberBtnIcon': RES_ICONS.MAPS_ICONS_LIBRARY_CROSS, 'removeMemberBtnTooltip': removeBtnTooltip, 'appointmentSortValue': memberType, 'appointment': _packAppointment(profile, club, member, memberType, limits), 'ratingSortValue': rating, 'rating': self.getGuiUserRating(dbID, text_styles.neutral), 'battlesCountSortValue': battlesCount, 'battlesCount': text_styles.main(BigWorld.wg_getIntegralFormat(battlesCount)), 'damageCoefSortValue': damageCoef, 'damageCoef': text_styles.main(BigWorld.wg_getNiceNumberFormat(damageCoef)), 'avrDamageSortValue': avgDamage, 'avrDamage': text_styles.main(BigWorld.wg_getIntegralFormat(avgDamage)), 'avrAssistDamageSortValue': avgAssistDamage, 'avrAssistDamage': text_styles.main( BigWorld.wg_getNiceNumberFormat(avgAssistDamage)), 'avrExperienceSortValue': avgExperience, 'avrExperience': text_styles.main(BigWorld.wg_getIntegralFormat(avgExperience)), 'tauntSortValue': armorUsingEfficiency, 'taunt': text_styles.main( BigWorld.wg_getNiceNumberFormat(armorUsingEfficiency)), 'joinDateSortValue': joinDate, 'joinDate': text_styles.standard(BigWorld.wg_getShortDateFormat(joinDate)), 'userDataSortValue': self.getUserFullName(dbID).lower(), 'userData': userData, 'clubDbID': self._clubDbID, 'statusIcon': _getStatusIcon(contact) }) if syncUserInfo: self.syncUsersInfo() return { 'members': sorted(members, key=lambda k: k['userDataSortValue'].lower()) }