def __fillTechnicalMaintenance(self, ammo, equipment): shellsLayout = [] eqsLayout = [] for shell in ammo: buyGoldShellForCredits = shell.goldShellsForCredits and shell.prices[ 1] > 0 and shell.currency == 'credits' shellsLayout.append( shell.compactDescr if not buyGoldShellForCredits else -shell.compactDescr) shellsLayout.append(int(shell.userCount)) for ei in equipment: if ei is not None: item = getItemByCompact(ei.id) buyGoldEqForCredits = ei.goldEqsForCredits and ei.prices[ 1] > 0 and ei.currency == 'credits' eqsLayout.append(item.compactDescr if not buyGoldEqForCredits else -item.compactDescr) eqsLayout.append(1) else: eqsLayout.append(0) eqsLayout.append(0) self.__setVehicleLayouts(g_currentVehicle.item, shellsLayout, eqsLayout) return
def buyItem(self, data): dataCompactId = data.id item = getItemByCompact(dataCompactId) if ITEM_TYPE_INDICES[item.itemTypeName] == vehicles._VEHICLE: self.fireEvent(ShowWindowEvent(ShowWindowEvent.SHOW_VEHICLE_BUY_WINDOW, {'nationID': item.nation, 'itemID': item.compactDescr})) else: self.__buyItem(item.compactDescr)
def showVehicleInfo(self, pickleDump): vehicle = getItemByCompact(pickleDump) if vehicle is None: LOG_ERROR('There is error while attempting to show vehicle info window: ', str(pickleDump)) return else: self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_VEHICLE_INFO_WINDOW, {'vehicleDescr': vehicle.descriptor})) return
def _convert4ToolTip(dump, price): item = getItemByCompact(dump) if isinstance(item, _ResearchItem): itemCD = item.compactDescr itemTypeID, nationID, itemID = vehicles.parseIntCompactDescr(itemCD) if itemTypeID == vehicles._VEHICLE: item = _makeShopVehicle(itemID, nationID, price) else: item = _makeShopItem(itemCD, itemTypeID, nationID, price) return item
def getEquipment(self, eId1, currency1, eId2, currency2, eId3, currency3, slotIndex): eIdsCD = [] for item in [ getItemByCompact(x) for x in (eId1, eId2, eId3) ]: if item is None: eIdsCD.append(None) else: eIdsCD.append(item.compactDescr) self.populateTechnicalMaintenanceEquipment(eIdsCD[0], currency1, eIdsCD[1], currency2, eIdsCD[2], currency3, slotIndex) return
def onShowInfo(self, data): vehicleID = data.id vehicle = getItemByCompact(vehicleID) if vehicle is None: return LOG_ERROR('There is error while attempting to show vehicle info window: ', str(vehicleID)) else: if ITEM_TYPE_INDICES[vehicle.itemTypeName] == vehicles._VEHICLE: self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_VEHICLE_INFO_WINDOW, {'vehicleDescr': vehicle.descriptor})) else: self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_MODULE_INFO_WINDOW, {'moduleId': vehicle.pack()})) return
def buyItem(self, data): dataCompactId = data.id item = getItemByCompact(dataCompactId) if ITEM_TYPE_INDICES[item.itemTypeName] == vehicles._VEHICLE: self.fireEvent( ShowWindowEvent(ShowWindowEvent.SHOW_VEHICLE_BUY_WINDOW, { 'nationID': item.nation, 'itemID': item.compactDescr })) else: self.__buyItem(item.compactDescr)
def dismissTankman(self, dataCompact): tmanOldItem = getItemByCompact(dataCompact) if tmanOldItem is None: LOG_ERROR('Attempt to dismiss tankman by invalid compact') return else: tankman = g_itemsCache.items.getTankman(tmanOldItem.inventoryId) result = yield TankmanDismiss(tankman).request() if len(result.userMsg): SystemMessages.g_instance.pushMessage(result.userMsg, type=result.sysMsgType) return
def setRefillSettings(self, vehicleCompact, repair, shells, equipment): vcls = yield Requester('vehicle').getFromInventory() vehicle = getItemByCompact(vehicleCompact) for v in vcls: if v.inventoryId == vehicle.inventoryId: vehicle = v if vehicle.isAutoRepair != repair: yield vehicle.setAutoRepair(repair) if vehicle.isAutoLoad != shells: yield vehicle.setAutoLoad(shells) if vehicle.isAutoEquip != equipment: yield vehicle.setAutoEquip(equipment)
def showVehicleInfo(self, pickleDump): vehicle = getItemByCompact(pickleDump) if vehicle is None: LOG_ERROR( 'There is error while attempting to show vehicle info window: ', str(pickleDump)) return else: self.fireEvent( events.ShowWindowEvent( events.ShowWindowEvent.SHOW_VEHICLE_INFO_WINDOW, {'vehicleDescr': vehicle.descriptor})) return
def getEquipment(self, eId1, currency1, eId2, currency2, eId3, currency3, slotIndex): eIdsCD = [] for item in [getItemByCompact(x) for x in (eId1, eId2, eId3)]: if item is None: eIdsCD.append(None) else: eIdsCD.append(item.compactDescr) self.populateTechnicalMaintenanceEquipment(eIdsCD[0], currency1, eIdsCD[1], currency2, eIdsCD[2], currency3, slotIndex) return
def unloadTankman(self, dataCompact): tmanOldItem = getItemByCompact(dataCompact) if tmanOldItem is None: LOG_ERROR('Attempt to unload tankman by invalid compact') return else: tankman = g_itemsCache.items.getTankman(tmanOldItem.inventoryId) tmanVehile = g_itemsCache.items.getVehicle(tankman.vehicleInvID) if tmanVehile is None: LOG_ERROR("Target tankman's vehicle is not found in inventory", tankman, tankman.vehicleInvID) return result = yield TankmanUnload(tmanVehile, tankman.vehicleSlotIdx).request() if len(result.userMsg): SystemMessages.g_instance.pushI18nMessage(result.userMsg, type=result.sysMsgType) return
def unloadTankman(self, dataCompact): tmanOldItem = getItemByCompact(dataCompact) if tmanOldItem is None: LOG_ERROR('Attempt to unload tankman by invalid compact') return else: tankman = g_itemsCache.items.getTankman(tmanOldItem.inventoryId) tmanVehile = g_itemsCache.items.getVehicle(tankman.vehicleInvID) if tmanVehile is None: LOG_ERROR("Target tankman's vehicle is not found in inventory", tankman, tankman.vehicleInvID) return result = yield TankmanUnload(tmanVehile, tankman.vehicleSlotIdx).request() if len(result.userMsg): SystemMessages.g_instance.pushI18nMessage( result.userMsg, type=result.sysMsgType) return
def __fillTechnicalMaintenance(self, ammo, equipment): shellsLayout = [] eqsLayout = [] for shell in ammo: buyGoldShellForCredits = shell.goldShellsForCredits and shell.prices[1] > 0 and shell.currency == 'credits' shellsLayout.append(shell.compactDescr if not buyGoldShellForCredits else -shell.compactDescr) shellsLayout.append(int(shell.userCount)) for ei in equipment: if ei is not None: item = getItemByCompact(ei.id) buyGoldEqForCredits = ei.goldEqsForCredits and ei.prices[1] > 0 and ei.currency == 'credits' eqsLayout.append(item.compactDescr if not buyGoldEqForCredits else -item.compactDescr) eqsLayout.append(1) else: eqsLayout.append(0) eqsLayout.append(0) self.__setVehicleLayouts(g_currentVehicle.item, shellsLayout, eqsLayout) return
def setVehicleModule(self, newId, slotIdx, oldId, isRemove): if isRemove: isUseGold = oldId is not None newComponent = gui_items.getItemByCompact(newId) newComponentItem = g_itemsCache.items.getItemByCD(newComponent.compactDescr) return newComponentItem is None and None else: oldComponentItem = None if oldId: oldComponent = gui_items.getItemByCompact(oldId) oldComponentItem = g_itemsCache.items.getItemByCD(oldComponent.compactDescr) if not isRemove and oldComponentItem and oldComponentItem.itemTypeID == GUI_ITEM_TYPE.OPTIONALDEVICE: result = yield getInstallerProcessor(g_currentVehicle.item, oldComponentItem, slotIdx, False, True).request() if result and result.auxData: for m in result.auxData: SystemMessages.g_instance.pushI18nMessage(m.userMsg, type=m.sysMsgType) if result and len(result.userMsg): SystemMessages.g_instance.pushI18nMessage(result.userMsg, type=result.sysMsgType) if not result.success: return iVehicles = yield Requester(ITEM_TYPE_NAMES[1]).getFromInventory() oldStyleVehicle = None for v in iVehicles: if v.inventoryId == g_currentVehicle.invID: oldStyleVehicle = v break conflictedEqs = findConflictedEquipmentForModule(newComponent, oldStyleVehicle) if isinstance(newComponent, gui_items.ShopItem): Waiting.show('buyItem') buyResult = yield ModuleBuyer(newComponentItem, count=1, buyForCredits=True, conflictedEqs=conflictedEqs, install=True).request() if len(buyResult.userMsg): SystemMessages.g_instance.pushI18nMessage(buyResult.userMsg, type=buyResult.sysMsgType) if buyResult.success: newComponentItem = g_itemsCache.items.getItemByCD(newComponent.compactDescr) Waiting.hide('buyItem') if not buyResult.success: return Waiting.show('applyModule') result = yield getInstallerProcessor(g_currentVehicle.item, newComponentItem, slotIdx, not isRemove, isUseGold, conflictedEqs).request() if result and result.auxData: for m in result.auxData: SystemMessages.g_instance.pushI18nMessage(m.userMsg, type=m.sysMsgType) if result and len(result.userMsg): SystemMessages.g_instance.pushI18nMessage(result.userMsg, type=result.sysMsgType) if result and result.success and newComponentItem.itemTypeID in (GUI_ITEM_TYPE.TURRET, GUI_ITEM_TYPE.GUN): iAmmo = yield Requester(ITEM_TYPE_NAMES[10]).getFromInventory() iVehicles = yield Requester(ITEM_TYPE_NAMES[1]).getFromInventory() for iVehicle in iVehicles: if iVehicle.inventoryId == g_currentVehicle.invID: installAmmoVehicle = iVehicle for shell in installAmmoVehicle.shells: iCount = iAmmo[iAmmo.index(shell)].count if shell in iAmmo else 0 if shell.default > iCount: success, message = False, '#system_messages:charge/inventory_error' break else: success, message = yield installAmmoVehicle.loadShells(None) SystemMessages.g_instance.pushI18nMessage(message, type=SystemMessages.SM_TYPE.Information if success else SystemMessages.SM_TYPE.Warning) Waiting.hide('applyModule') return
def requestTableData(self, nation, type, filter): Waiting.show('updateShop') AccountSettings.setFilter('shop_current', (nation, type)) AccountSettings.setFilter('shop_' + type, filter) nation = int(nation) if nation >= 0 else None if nation is not None: nation = getNationIndex(nation) filter = list(filter) requestType = [type] checkFits = None checkFitsArtefacts = None checkExtra = False modulesFits = {} vehicleFits = [] extra = [] modulesAllVehicle = [] if type == self._MODULE: typeSize = int(filter.pop(0)) requestType = filter[0:typeSize] filter = filter[typeSize:] fitsType = filter.pop(0) compact = filter.pop(0) if compact == '0': LOG_ERROR('compact value has invalid value: ', compact) Waiting.hide('updateShop') return fitsVehicle = getItemByCompact(compact) checkExtra = True extra = filter[:] checkFits = True if fitsType != 'otherVehicles' else None myVehicles = yield Requester(self._VEHICLE).getFromInventory() modulesAllVehicle = VehicleItemsRequester(myVehicles).getItems(requestType) if fitsType == 'myVehicle': for rType in requestType: modulesFits.update(_getComponentsByType(fitsVehicle, ITEM_TYPE_INDICES[rType])) elif fitsType != 'otherVehicles': for vehicle in myVehicles: for rType in requestType: modulesFits.update(_getComponentsByType(vehicle, ITEM_TYPE_INDICES[rType])) filter = requestType elif type == self._SHELL: filterSize = int(filter.pop(0)) fitsType = filter.pop(filterSize) compact = filter.pop(filterSize) if compact == '0': LOG_ERROR('compact value has invalid value: ', compact) Waiting.hide('updateShop') return fitsVehicle = getItemByCompact(compact) checkFits = True if fitsType != 'otherGuns' else None if fitsType == 'myVehicleGun': for shoot in fitsVehicle.descriptor.gun['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif fitsType == 'myInventoryGuns': myGuns = yield Requester('vehicleGun').getFromInventory() for gun in myGuns: for shoot in gun.descriptor['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif fitsType != 'otherGuns': myGuns = yield Requester('vehicleGun').getFromInventory() for gun in myGuns: for shoot in gun.descriptor['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True myVehicles = yield Requester(self._VEHICLE).getFromInventory() for vehicle in myVehicles: for shoot in vehicle.descriptor.gun['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif type == self._VEHICLE: filterSize = int(filter.pop(0)) extra = filter[filterSize:] checkExtra = True filter = filter[0:filterSize] else: fitsType = filter.pop(0) compact = filter.pop(0) if compact == '0': LOG_ERROR('compact value has invalid value: ', compact) Waiting.hide('updateShop') return fitsVehicle = getItemByCompact(compact) extra = filter checkExtra = type in (self._OPTIONAL_DEVICE, self._EQUIPMENT) checkFitsArtefacts = True if fitsType != 'otherVehicles' else None myVehicles = yield Requester(self._VEHICLE).getFromInventory() modulesAllVehicle = VehicleItemsRequester(myVehicles).getItems(requestType) if fitsType == 'myVehicle': vehicleFits = [fitsVehicle] elif fitsType != 'otherVehicles': vehicleFits = [ v for v in myVehicles if v.nation == nation ] if nation != None else myVehicles filter = requestType filter = map(lambda w: w.lower(), filter) modulesAll = list() modulesAllInventory = list() for rType in requestType: inv = yield Requester(rType).getFromInventory() modulesAllInventory.extend(inv) shp = yield Requester(rType).getFromShop(nation=nation) modulesAll.extend(shp) unlocks = yield StatsRequester().getUnlocks() shopRqs = yield ShopRequester().request() self.__clearTableData() self.__tableData = [type] modulesAll.sort() for module in modulesAll: extraModuleInfo = None if module.hidden: continue if module.type.lower() not in filter: continue if checkFits is not None: if (module.compactDescr in modulesFits.keys()) != checkFits: continue if checkFitsArtefacts is not None: for veh in vehicleFits: if module.descriptor.checkCompatibilityWithVehicle(veh.descriptor)[0] == checkFitsArtefacts: break else: continue if module.isClipGun(): extraModuleInfo = CLIP_ICON_PATH inventoryCount = 0 vehicleCount = 0 installedIn = '' if module in modulesAllInventory: inventoryCount = 1 if type != self._VEHICLE: inventoryModule = modulesAllInventory[modulesAllInventory.index(module)] inventoryCount = inventoryModule.count if type in (self._MODULE, self._OPTIONAL_DEVICE, self._EQUIPMENT) and module in modulesAllVehicle: vehModule = modulesAllVehicle[modulesAllVehicle.index(module)] vehicleCount = vehModule.count installedIn = ', '.join([ v.shortName for v in vehModule.vehicles ]) if checkExtra: if 'locked' not in extra: if type == self._VEHICLE: compdecs = module.descriptor.type.compactDescr if compdecs not in unlocks: continue elif type not in (self._SHELL, self._OPTIONAL_DEVICE, self._EQUIPMENT) and module.compactDescr not in unlocks: continue if 'inHangar' not in extra and type not in (self._OPTIONAL_DEVICE, self._EQUIPMENT): if inventoryCount > 0: continue if 'onVehicle' not in extra: if vehicleCount > 0: continue disabled = '' if type == self._VEHICLE: if BigWorld.player().isLongDisconnectedFromCenter: disabled = MENU.SHOP_ERRORS_CENTERISDOWN if inventoryCount > 0: disabled = MENU.SHOP_ERRORS_INHANGAR else: compdecs = module.descriptor.type.compactDescr if compdecs not in unlocks: disabled = MENU.SHOP_ERRORS_UNLOCKNEEDED elif type not in (self._SHELL, self._OPTIONAL_DEVICE, self._EQUIPMENT) and module.compactDescr not in unlocks: disabled = MENU.SHOP_ERRORS_UNLOCKNEEDED if not (shopRqs.isEnabledBuyingGoldShellsForCredits and module.itemTypeName == 'shell'): goldAmmoForCredits = shopRqs.isEnabledBuyingGoldEqsForCredits and module.itemTypeName == 'equipment' module.priceOrder = goldAmmoForCredits and (module.priceOrder[0] + module.priceOrder[1] * shopRqs.exchangeRateForShellsAndEqs, module.priceOrder[1]) valueElement = {'id': compactItem(module), 'name': module.name if type in (self._OPTIONAL_DEVICE, self._EQUIPMENT) else module.longName, 'desc': getShortDescr(module.tableName), 'inventoryId': None, 'inventoryCount': inventoryCount, 'vehicleCount': vehicleCount, 'credits': module.priceOrder[0], 'gold': module.priceOrder[1], 'price': module.priceOrder, 'currency': 'credits' if module.priceOrder[1] == 0 else 'gold', 'level': module.level, 'nation': module.nation, 'type': module.itemTypeName if type not in (self._VEHICLE, self._OPTIONAL_DEVICE, self._SHELL, self._EQUIPMENT) else module.icon, 'disabled': disabled, 'statusLevel': InventoryVehicle.STATE_LEVEL.WARNING, 'removable': module.descriptor['removable'] if type == self._OPTIONAL_DEVICE else True, 'tankType': module.type if type == self._VEHICLE else type, 'isPremium': module.isPremium if type == self._VEHICLE else False, 'isElite': self.app.tooltipManager.isVehicleElite(module) if type == self._VEHICLE else False, 'itemTypeName': module.itemTypeName, 'goldShellsForCredits': shopRqs.isEnabledBuyingGoldShellsForCredits, 'goldEqsForCredits': shopRqs.isEnabledBuyingGoldEqsForCredits, EXTRA_MODULE_INFO: extraModuleInfo} self.__tableData.append(valueElement) requester = yield StatsRequesterr().request() self._table.as_setGoldS(requester.gold) self._table.as_setCreditsS(requester.credits) self._table.as_setTableS(self.__tableData) Waiting.hide('updateShop') return
def _populate(self): super(View, self)._populate() module = getItemByCompact(self.moduleId) description = '' if module.itemTypeName in (ITEM_TYPE_NAMES[9], ITEM_TYPE_NAMES[11]): description = stripShortDescrTags(module.description) if module.itemTypeName in (ITEM_TYPE_NAMES[9], ITEM_TYPE_NAMES[10], ITEM_TYPE_NAMES[11]): icon = module.icon else: icon = module.level extraModuleInfo = '' moduleData = {'name': module.longName, 'windowTitle': ' '.join([module.longName, i18n.makeString(MENU.MODULEINFO_TITLE)]), 'type': module.itemTypeName, 'description': description, 'level': icon, 'params': [], 'compatible': [], 'effects': {}} params = ItemsParameters.g_instance.get(module.descriptor, self.__vehicleDescr) moduleParameters = params.get('parameters', tuple()) isGun = module.itemTypeName == ITEM_TYPE_NAMES[4] excludedParametersNames = [] if isGun: gunReloadingType = dict(moduleParameters)[GUN_RELOADING_TYPE] LOG_DEBUG('gunReloadingTypegunReloadingTypegunReloadingTypegunReloadingType', gunReloadingType) if gunReloadingType == GUN_NORMAL: excludedParametersNames.append(SHELLS_COUNT_PROP_NAME) excludedParametersNames.append(RELOAD_MAGAZINE_TIME_PROP_NAME) excludedParametersNames.append(SHELL_RELOADING_TIME_PROP_NAME) elif gunReloadingType == GUN_CLIP: description = i18n.makeString(MENU.MODULEINFO_CLIPGUNLABEL) excludedParametersNames.append(RELOAD_TIME_PROP_NAME) extraModuleInfo = CLIP_ICON_PATH elif gunReloadingType == GUN_CAN_BE_CLIP: excludedParametersNames.append(SHELLS_COUNT_PROP_NAME) excludedParametersNames.append(RELOAD_MAGAZINE_TIME_PROP_NAME) excludedParametersNames.append(SHELL_RELOADING_TIME_PROP_NAME) otherParamsInfoList = [] for paramType, paramValue in moduleParameters: if paramType in excludedParametersNames: otherParamsInfoList.append({'type': i18n.makeString(MENU.moduleinfo_params(paramType)), 'value': paramValue}) imgPathArr = CLIP_ICON_PATH.split('..') imgPath = 'img://gui' + imgPathArr[1] moduleData['otherParameters'] = {'headerText': i18n.makeString(MENU.MODULEINFO_PARAMETERSCLIPGUNLABEL, imgPath), 'params': otherParamsInfoList} moduleData['description'] = description excludedParametersNames.append(GUN_RELOADING_TYPE) paramsList = [] for paramType, paramValue in moduleParameters: if paramType not in excludedParametersNames: paramsList.append({'type': i18n.makeString(MENU.moduleinfo_params(paramType)), 'value': paramValue}) moduleData['parameters'] = {'headerText': i18n.makeString(MENU.MODULEINFO_PARAMETERSLABEL) if len(paramsList) > 0 else '', 'params': paramsList} moduleData[EXTRA_MODULE_INFO] = extraModuleInfo moduleCompatibles = params.get('compatible', tuple()) for paramType, paramValue in moduleCompatibles: compatible = moduleData.get('compatible') compatible.append({'type': i18n.makeString(MENU.moduleinfo_compatible(paramType)), 'value': paramValue}) if module.itemTypeName == ITEM_TYPE_NAMES[11]: effectsNametemplate = '#artefacts:%s/%s' moduleData['effects'] = {'effectOnUse': i18n.makeString(effectsNametemplate % (module.unicName, 'onUse')), 'effectAlways': i18n.makeString(effectsNametemplate % (module.unicName, 'always')), 'effectRestriction': i18n.makeString(effectsNametemplate % (module.unicName, 'restriction'))} self.as_setModuleInfoS(moduleData)
def _populate(self): super(View, self)._populate() module = getItemByCompact(self.moduleId) description = '' if module.itemTypeName in (ITEM_TYPE_NAMES[9], ITEM_TYPE_NAMES[11]): description = stripShortDescrTags(module.description) if module.itemTypeName in (ITEM_TYPE_NAMES[9], ITEM_TYPE_NAMES[10], ITEM_TYPE_NAMES[11]): icon = module.icon else: icon = module.level extraModuleInfo = '' moduleData = { 'name': module.longName, 'windowTitle': ' '.join([module.longName, i18n.makeString(MENU.MODULEINFO_TITLE)]), 'type': module.itemTypeName, 'description': description, 'level': icon, 'params': [], 'compatible': [], 'effects': {} } params = ItemsParameters.g_instance.get(module.descriptor, self.__vehicleDescr) moduleParameters = params.get('parameters', tuple()) isGun = module.itemTypeName == ITEM_TYPE_NAMES[4] excludedParametersNames = [] if isGun: gunReloadingType = dict(moduleParameters)[GUN_RELOADING_TYPE] LOG_DEBUG( 'gunReloadingTypegunReloadingTypegunReloadingTypegunReloadingType', gunReloadingType) if gunReloadingType == GUN_NORMAL: excludedParametersNames.append(SHELLS_COUNT_PROP_NAME) excludedParametersNames.append(RELOAD_MAGAZINE_TIME_PROP_NAME) excludedParametersNames.append(SHELL_RELOADING_TIME_PROP_NAME) elif gunReloadingType == GUN_CLIP: description = i18n.makeString(MENU.MODULEINFO_CLIPGUNLABEL) excludedParametersNames.append(RELOAD_TIME_PROP_NAME) extraModuleInfo = CLIP_ICON_PATH elif gunReloadingType == GUN_CAN_BE_CLIP: excludedParametersNames.append(SHELLS_COUNT_PROP_NAME) excludedParametersNames.append(RELOAD_MAGAZINE_TIME_PROP_NAME) excludedParametersNames.append(SHELL_RELOADING_TIME_PROP_NAME) otherParamsInfoList = [] for paramType, paramValue in moduleParameters: if paramType in excludedParametersNames: otherParamsInfoList.append({ 'type': i18n.makeString(MENU.moduleinfo_params(paramType)), 'value': paramValue }) imgPathArr = CLIP_ICON_PATH.split('..') imgPath = 'img://gui' + imgPathArr[1] moduleData['otherParameters'] = { 'headerText': i18n.makeString(MENU.MODULEINFO_PARAMETERSCLIPGUNLABEL, imgPath), 'params': otherParamsInfoList } moduleData['description'] = description excludedParametersNames.append(GUN_RELOADING_TYPE) paramsList = [] for paramType, paramValue in moduleParameters: if paramType not in excludedParametersNames: paramsList.append({ 'type': i18n.makeString(MENU.moduleinfo_params(paramType)), 'value': paramValue }) moduleData['parameters'] = { 'headerText': i18n.makeString(MENU.MODULEINFO_PARAMETERSLABEL) if len(paramsList) > 0 else '', 'params': paramsList } moduleData[EXTRA_MODULE_INFO] = extraModuleInfo moduleCompatibles = params.get('compatible', tuple()) for paramType, paramValue in moduleCompatibles: compatible = moduleData.get('compatible') compatible.append({ 'type': i18n.makeString(MENU.moduleinfo_compatible(paramType)), 'value': paramValue }) if module.itemTypeName == ITEM_TYPE_NAMES[11]: effectsNametemplate = '#artefacts:%s/%s' moduleData['effects'] = { 'effectOnUse': i18n.makeString(effectsNametemplate % (module.unicName, 'onUse')), 'effectAlways': i18n.makeString(effectsNametemplate % (module.unicName, 'always')), 'effectRestriction': i18n.makeString(effectsNametemplate % (module.unicName, 'restriction')) } self.as_setModuleInfoS(moduleData)
def requestTableData(self, nation, type, filter): Waiting.show('updateShop') AccountSettings.setFilter('shop_current', (nation, type)) AccountSettings.setFilter('shop_' + type, filter) nation = int(nation) if nation >= 0 else None if nation is not None: nation = getNationIndex(nation) filter = list(filter) requestType = [type] checkFits = None checkFitsArtefacts = None checkExtra = False modulesFits = {} vehicleFits = [] extra = [] modulesAllVehicle = [] if type == self._MODULE: typeSize = int(filter.pop(0)) requestType = filter[0:typeSize] filter = filter[typeSize:] fitsType = filter.pop(0) compact = filter.pop(0) if compact == '0': LOG_ERROR('compact value has invalid value: ', compact) Waiting.hide('updateShop') return fitsVehicle = getItemByCompact(compact) checkExtra = True extra = filter[:] checkFits = True if fitsType != 'otherVehicles' else None myVehicles = yield Requester(self._VEHICLE).getFromInventory() modulesAllVehicle = VehicleItemsRequester(myVehicles).getItems( requestType) if fitsType == 'myVehicle': for rType in requestType: modulesFits.update( _getComponentsByType(fitsVehicle, ITEM_TYPE_INDICES[rType])) elif fitsType != 'otherVehicles': for vehicle in myVehicles: for rType in requestType: modulesFits.update( _getComponentsByType(vehicle, ITEM_TYPE_INDICES[rType])) filter = requestType elif type == self._SHELL: filterSize = int(filter.pop(0)) fitsType = filter.pop(filterSize) compact = filter.pop(filterSize) if compact == '0': LOG_ERROR('compact value has invalid value: ', compact) Waiting.hide('updateShop') return fitsVehicle = getItemByCompact(compact) checkFits = True if fitsType != 'otherGuns' else None if fitsType == 'myVehicleGun': for shoot in fitsVehicle.descriptor.gun['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif fitsType == 'myInventoryGuns': myGuns = yield Requester('vehicleGun').getFromInventory() for gun in myGuns: for shoot in gun.descriptor['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif fitsType != 'otherGuns': myGuns = yield Requester('vehicleGun').getFromInventory() for gun in myGuns: for shoot in gun.descriptor['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True myVehicles = yield Requester(self._VEHICLE).getFromInventory() for vehicle in myVehicles: for shoot in vehicle.descriptor.gun['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif type == self._VEHICLE: filterSize = int(filter.pop(0)) extra = filter[filterSize:] checkExtra = True filter = filter[0:filterSize] else: fitsType = filter.pop(0) compact = filter.pop(0) if compact == '0': LOG_ERROR('compact value has invalid value: ', compact) Waiting.hide('updateShop') return fitsVehicle = getItemByCompact(compact) extra = filter checkExtra = type in (self._OPTIONAL_DEVICE, self._EQUIPMENT) checkFitsArtefacts = True if fitsType != 'otherVehicles' else None myVehicles = yield Requester(self._VEHICLE).getFromInventory() modulesAllVehicle = VehicleItemsRequester(myVehicles).getItems( requestType) if fitsType == 'myVehicle': vehicleFits = [fitsVehicle] elif fitsType != 'otherVehicles': vehicleFits = [v for v in myVehicles if v.nation == nation ] if nation != None else myVehicles filter = requestType filter = map(lambda w: w.lower(), filter) modulesAll = list() modulesAllInventory = list() for rType in requestType: inv = yield Requester(rType).getFromInventory() modulesAllInventory.extend(inv) shp = yield Requester(rType).getFromShop(nation=nation) modulesAll.extend(shp) unlocks = yield StatsRequester().getUnlocks() shopRqs = yield ShopRequester().request() self.__clearTableData() self.__tableData = [type] modulesAll.sort() for module in modulesAll: extraModuleInfo = None if module.hidden: continue if module.type.lower() not in filter: continue if checkFits is not None: if (module.compactDescr in modulesFits.keys()) != checkFits: continue if checkFitsArtefacts is not None: for veh in vehicleFits: if module.descriptor.checkCompatibilityWithVehicle( veh.descriptor)[0] == checkFitsArtefacts: break else: continue if module.isClipGun(): extraModuleInfo = CLIP_ICON_PATH inventoryCount = 0 vehicleCount = 0 installedIn = '' if module in modulesAllInventory: inventoryCount = 1 if type != self._VEHICLE: inventoryModule = modulesAllInventory[ modulesAllInventory.index(module)] inventoryCount = inventoryModule.count if type in (self._MODULE, self._OPTIONAL_DEVICE, self._EQUIPMENT) and module in modulesAllVehicle: vehModule = modulesAllVehicle[modulesAllVehicle.index(module)] vehicleCount = vehModule.count installedIn = ', '.join( [v.shortName for v in vehModule.vehicles]) if checkExtra: if 'locked' not in extra: if type == self._VEHICLE: compdecs = module.descriptor.type.compactDescr if compdecs not in unlocks: continue elif type not in (self._SHELL, self._OPTIONAL_DEVICE, self._EQUIPMENT ) and module.compactDescr not in unlocks: continue if 'inHangar' not in extra and type not in ( self._OPTIONAL_DEVICE, self._EQUIPMENT): if inventoryCount > 0: continue if 'onVehicle' not in extra: if vehicleCount > 0: continue disabled = '' if type == self._VEHICLE: if BigWorld.player().isLongDisconnectedFromCenter: disabled = MENU.SHOP_ERRORS_CENTERISDOWN if inventoryCount > 0: disabled = MENU.SHOP_ERRORS_INHANGAR else: compdecs = module.descriptor.type.compactDescr if compdecs not in unlocks: disabled = MENU.SHOP_ERRORS_UNLOCKNEEDED elif type not in ( self._SHELL, self._OPTIONAL_DEVICE, self._EQUIPMENT) and module.compactDescr not in unlocks: disabled = MENU.SHOP_ERRORS_UNLOCKNEEDED if not (shopRqs.isEnabledBuyingGoldShellsForCredits and module.itemTypeName == 'shell'): goldAmmoForCredits = shopRqs.isEnabledBuyingGoldEqsForCredits and module.itemTypeName == 'equipment' module.priceOrder = goldAmmoForCredits and ( module.priceOrder[0] + module.priceOrder[1] * shopRqs.exchangeRateForShellsAndEqs, module.priceOrder[1]) valueElement = { 'id': compactItem(module), 'name': module.name if type in (self._OPTIONAL_DEVICE, self._EQUIPMENT) else module.longName, 'desc': getShortDescr(module.tableName), 'inventoryId': None, 'inventoryCount': inventoryCount, 'vehicleCount': vehicleCount, 'credits': module.priceOrder[0], 'gold': module.priceOrder[1], 'price': module.priceOrder, 'currency': 'credits' if module.priceOrder[1] == 0 else 'gold', 'level': module.level, 'nation': module.nation, 'type': module.itemTypeName if type not in (self._VEHICLE, self._OPTIONAL_DEVICE, self._SHELL, self._EQUIPMENT) else module.icon, 'disabled': disabled, 'statusLevel': InventoryVehicle.STATE_LEVEL.WARNING, 'removable': module.descriptor['removable'] if type == self._OPTIONAL_DEVICE else True, 'tankType': module.type if type == self._VEHICLE else type, 'isPremium': module.isPremium if type == self._VEHICLE else False, 'isElite': self.app.tooltipManager.isVehicleElite(module) if type == self._VEHICLE else False, 'itemTypeName': module.itemTypeName, 'goldShellsForCredits': shopRqs.isEnabledBuyingGoldShellsForCredits, 'goldEqsForCredits': shopRqs.isEnabledBuyingGoldEqsForCredits, EXTRA_MODULE_INFO: extraModuleInfo } self.__tableData.append(valueElement) requester = yield StatsRequesterr().request() self._table.as_setGoldS(requester.gold) self._table.as_setCreditsS(requester.credits) self._table.as_setTableS(self.__tableData) Waiting.hide('updateShop') return
def requestTableData(self, nation, type, filter): Waiting.show('updateInventory') AccountSettings.setFilter('inventory_current', (nation, type)) AccountSettings.setFilter('inventory_' + type, filter) nation = int(nation) if nation >= 0 else None if nation is not None: nation = getNationIndex(nation) filter = list(filter) requestType = [type] checkFits = None checkFitsArtefacts = None checkExtra = False modulesFits = {} vehicleFits = [] extra = [] modulesAllVehicle = [] if type == self._MODULE: typeSize = int(filter.pop(0)) requestType = filter[0:typeSize] filter = filter[typeSize:] fitsType = filter.pop(0) fitsVehicle = getItemByCompact(filter.pop(0)) checkExtra = True extra = filter[:] checkFits = True if fitsType != 'otherVehicles' else False myVehicles = yield Requester(self._VEHICLE).getFromInventory() modulesAllVehicle = VehicleItemsRequester(myVehicles).getItems(requestType) if fitsType == 'myVehicle': if fitsVehicle: for rType in requestType: modulesFits.update(_getComponentsByType(fitsVehicle, ITEM_TYPE_INDICES[rType])) else: for vehicle in myVehicles: for rType in requestType: modulesFits.update(_getComponentsByType(vehicle, ITEM_TYPE_INDICES[rType])) filter = requestType elif type == self._SHELL: filterSize = int(filter.pop(0)) fitsType = filter.pop(filterSize) fitsVehicle = getItemByCompact(filter.pop(filterSize)) checkFits = True if fitsType != 'otherGuns' else False if fitsType == 'myVehicleGun': for shoot in fitsVehicle.descriptor.gun['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif fitsType == 'myInventoryGuns': myGuns = yield Requester('vehicleGun').getFromInventory() for gun in myGuns: for shoot in gun.descriptor['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True else: myGuns = yield Requester('vehicleGun').getFromInventory() for gun in myGuns: for shoot in gun.descriptor['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True myVehicles = yield Requester(self._VEHICLE).getFromInventory() for vehicle in myVehicles: for shoot in vehicle.descriptor.gun['shots']: modulesFits[shoot[self._SHELL]['compactDescr']] = True elif type == self._VEHICLE: filterSize = int(filter.pop(0)) extra = filter[filterSize:] checkExtra = True filter = filter[0:filterSize] else: fitsType = filter.pop(0) compact = filter.pop(0) fitsVehicle = getItemByCompact(compact) extra = filter checkExtra = type in (self._OPTIONAL_DEVICE, self._EQUIPMENT) checkFitsArtefacts = True if fitsType != 'otherVehicles' else False myVehicles = yield Requester(self._VEHICLE).getFromInventory() modulesAllVehicle = VehicleItemsRequester(myVehicles).getItems(requestType) if fitsType == 'myVehicle': vehicleFits = [fitsVehicle] else: vehicleFits = myVehicles filter = requestType filter = map(lambda w: w.lower(), filter) modulesAll = list() modulesShop = list() for rType in requestType: inv = yield Requester(rType).getFromInventory() shp = yield Requester(rType).getFromShop() modulesShop.extend(shp) modulesAll.extend(inv) vehPrices = {} if type == self._VEHICLE: compactDescrs = [ v.compactDescr for v in modulesAll ] vehPrices = yield StatsRequester().getVehiclesPrices(compactDescrs) vehPrices = dict(zip(compactDescrs, vehPrices)) if type in (self._MODULE, self._OPTIONAL_DEVICE, self._EQUIPMENT): for vehModule in modulesAllVehicle: if vehModule not in modulesAll: if modulesShop.count(vehModule) != 0: modulesAll.append(vehModule) self.__clearTableData() self.__tableData = [type] excludeModules = [] for module in modulesAll: if modulesShop.count(module) != 0: module.priceOrder = modulesShop[modulesShop.index(module)].priceOrder elif constants.IS_DEVELOPMENT: excludeModules.append(module) LOG_ERROR("Not found module %s '%s' (%r) in shop." % (module.type, module.unicName, module.compactDescr)) modulesAll.sort() shopRqs = yield ShopRequester().request() for module in modulesAll: extraModuleInfo = None if module in excludeModules: continue if nation is not None: if module.nation != nation and module.nation != nations.NONE_INDEX: continue if module.type.lower() not in filter: continue if checkFits is not None: if (module.compactDescr in modulesFits.keys()) != checkFits: continue if module.isClipGun(): extraModuleInfo = CLIP_ICON_PATH if checkFitsArtefacts is not None: compatible = False for veh in vehicleFits: if nation is not None and veh.nation != nation: continue compatible |= module.descriptor.checkCompatibilityWithVehicle(veh.descriptor)[0] if compatible != checkFitsArtefacts: continue inventoryCount = 0 vehicleCount = 0 if isinstance(module, VehicleItem): vehicleCount = module.count else: inventoryCount = module.count if type in (self._MODULE, self._OPTIONAL_DEVICE, self._EQUIPMENT) and module in modulesAllVehicle: vehModule = modulesAllVehicle[modulesAllVehicle.index(module)] vehicleCount = vehModule.count if checkExtra: if type == self._VEHICLE and 'brocken' not in extra: if module.repairCost > 0: continue if type == self._VEHICLE and 'locked' not in extra: if module.lock != 0: continue if 'onVehicle' not in extra: if vehicleCount > 0 and inventoryCount == 0: continue disable = '' if type == self._VEHICLE and not module.canSell: disable = makeString(MENU.tankcarousel_vehiclestates(module.getState())) elif type in (self._MODULE, self._OPTIONAL_DEVICE, self._EQUIPMENT) and isinstance(module, VehicleItem): if type == self._OPTIONAL_DEVICE: if not module.descriptor['removable']: disable = makeString(MENU.INVENTORY_DEVICE_ERRORS_NOT_REMOVABLE) else: disable = makeString(MENU.INVENTORY_DEVICE_ERRORS_RESERVED) else: disable = makeString(MENU.INVENTORY_ERRORS_RESERVED) sellPrice = isinstance(module, InventoryVehicle) and vehPrices.get(module.compactDescr, (0, 0)) else: sellPrice = (0, 0) item = g_itemsCache.items.getItemByCD(module.compactDescr) if item is not None: sellPrice = item.sellPrice valueElement = {'id': compactItem(module), 'name': module.name if type in (self._OPTIONAL_DEVICE, self._EQUIPMENT) else module.longName, 'desc': getShortDescr(module.tableName), 'inventoryId': module.inventoryId if isinstance(module, InventoryVehicle) else None, 'inventoryCount': inventoryCount, 'vehicleCount': vehicleCount, 'credits': sellPrice[0], 'gold': sellPrice[1], 'price': sellPrice, 'currency': 'credits' if sellPrice[1] == 0 else 'gold', 'level': module.level, 'nation': module.nation, 'type': module.itemTypeName if type not in (self._VEHICLE, self._OPTIONAL_DEVICE, self._SHELL, self._EQUIPMENT) else module.icon, 'disabled': disable, 'statusLevel': module.getStateLevel() if isinstance(module, InventoryVehicle) else InventoryVehicle.STATE_LEVEL.INFO, 'removable': module.descriptor['removable'] if type == self._OPTIONAL_DEVICE else True, 'tankType': module.type if type == self._VEHICLE else type, 'isPremium': module.isPremium if type == self._VEHICLE else False, 'isElite': self.app.tooltipManager.isVehicleElite(module) if type == self._VEHICLE else False, 'itemTypeName': module.itemTypeName, 'goldShellsForCredits': shopRqs.isEnabledBuyingGoldShellsForCredits, 'goldEqsForCredits': shopRqs.isEnabledBuyingGoldEqsForCredits, EXTRA_MODULE_INFO: extraModuleInfo} self.__tableData.append(valueElement) requester = yield StatsRequesterr().request() self._table.as_setGoldS(requester.gold) self._table.as_setCreditsS(requester.credits) self._table.as_setTableS(self.__tableData) Waiting.hide('updateInventory') return
def sellItem(self, data): item = getItemByCompact(data.id) if ITEM_TYPE_INDICES[item.itemTypeName] == vehicles._VEHICLE: self.fireEvent(ShowWindowEvent(ShowWindowEvent.SHOW_VEHICLE_SELL_DIALOG, {'vehInvID': int(item.inventoryId)})) else: self.__sellItem(item.compactDescr)