class ResearchView(LobbySubView, ResearchViewMeta): def __init__(self, data): super(ResearchView, self).__init__(backAlpha=0) self._data = data self._canBeClosed = True self._listener = TTListenerDecorator() def redraw(self): raise NotImplementedError, 'Must be overridden in subclass' def showSystemMessage(self, typeString, message): msgType = SystemMessages.SM_TYPE.lookup(typeString) if msgType is None: msgType = SystemMessages.SM_TYPE.Error SystemMessages.pushMessage(message, msgType) return def invalidateCredits(self): result = self._data.invalidateCredits() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_MONEY, result) def invalidateGold(self): result = self._data.invalidateGold() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_MONEY, result) self.invalidateFreeXP() self.invalidateCredits() def invalidateFreeXP(self): result = self._data.invalidateFreeXP() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_XP, result) def invalidateElites(self, elites): result = self._data.invalidateElites(elites) if len(result): self.as_setNodesStatesS(NODE_STATE.ELITE, result) def invalidateVTypeXP(self, xps): self.as_setVehicleTypeXPS(xps.items()) result = self._data.invalidateVTypeXP() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_XP, result) def invalidateUnlocks(self, unlocks): next2Unlock, unlocked = self._data.invalidateUnlocks(unlocks) if len(unlocked): LOG_DEBUG('unlocked', unlocked) self.as_setNodesStatesS(NODE_STATE.UNLOCKED, unlocked) if len(next2Unlock): LOG_DEBUG('next2Unlock', next2Unlock) self.as_setNext2UnlockS(next2Unlock) def invalidateInventory(self, data): result = self._data.invalidateInventory(data) if len(result): self.as_setInventoryItemsS(result) def invalidatePrbState(self): result = self._data.invalidatePrbState() if len(result): self.as_setNodesStatesS(NODE_STATE.VEHICLE_CAN_BE_CHANGED, result) def invalidateVehLocks(self, locks): raise NotImplementedError, 'Must be overridden in subclass' def invalidateWalletStatus(self, status): raise NotImplementedError, 'Must be overridden in subclass' def invalidateRent(self, vehicles): raise NotImplementedError, 'Must be overridden in subclass' def request4SelectInHangar(self, itemCD): shared_events.selectVehicleInHangar(itemCD) def request4Info(self, itemCD, rootCD): vehicle = g_itemsCache.items.getItemByCD(int(rootCD)) if vehicle: shared_events.showModuleInfo(int(itemCD), vehicle.descriptor) def _populate(self): super(ResearchView, self)._populate() self._listener.startListen(self) def _dispose(self): self._listener.stopListen() super(ResearchView, self)._dispose() if self._data is not None: self._data.clear(full=True) self._data = None return
def __init__(self, data): super(ResearchView, self).__init__() self._data = data self._canBeClosed = True self._listener = TTListenerDecorator()
def __init__(self, data): super(ResearchView, self).__init__(backAlpha=0) self._data = data self._canBeClosed = True self._listener = TTListenerDecorator()
class ResearchView(LobbySubView, ResearchViewMeta): __sound_env__ = LobbySubViewEnv _COMMON_SOUND_SPACE = TECHTREE_SOUND_SPACE _itemsCache = dependency.descriptor(IItemsCache) _wallet = dependency.descriptor(IWalletController) _cmpBasket = dependency.descriptor(IVehicleComparisonBasket) _lobbyContext = dependency.descriptor(ILobbyContext) def __init__(self, data): super(ResearchView, self).__init__() self._data = data self._canBeClosed = True self._listener = TTListenerDecorator() def goToBlueprintView(self, vehicleCD): shared_events.showBlueprintView(vehicleCD, self._createExitEvent()) def goToNationChangeView(self, vehicleCD): shared_events.showChangeVehicleNationDialog(vehicleCD) def goToVehicleCollection(self, nationName): nationID = nations.INDICES.get(nationName, nations.NONE_INDEX) shared_events.showCollectibleVehicles(nationID) def redraw(self): raise NotImplementedError('Must be overridden in subclass') def showSystemMessage(self, typeString, message): msgType = SystemMessages.SM_TYPE.lookup(typeString) if msgType is None: msgType = SystemMessages.SM_TYPE.Error SystemMessages.pushMessage(message, msgType) return def invalidateCredits(self): result = self._data.invalidateCredits() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_MONEY, result) def invalidateGold(self): result = self._data.invalidateGold() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_MONEY, result) self.invalidateFreeXP() self.invalidateCredits() def invalidateFreeXP(self): result = self._data.invalidateFreeXP() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_XP, result) def invalidateElites(self, elites): result = self._data.invalidateElites(elites) if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ELITE, result) def invalidateVTypeXP(self, xps): self.as_setVehicleTypeXPS(xps.items()) result = self._data.invalidateVTypeXP() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_XP, result) def invalidateUnlocks(self, unlocks): next2Unlock, unlocked, prevUnlocked = self._data.invalidateUnlocks(unlocks) if unlocked: _logger.debug('unlocked: %s', ' '.join((str(intCD) for intCD in unlocked))) self._updateUnlockedItems(unlocked) if next2Unlock: _logger.debug('next2Unlock: %s', ' '.join((str(intCD) for intCD in next2Unlock))) self.as_setNext2UnlockS(next2Unlock) if prevUnlocked: _logger.info('previouslyUnlocked %s', prevUnlocked) self.as_setNodesStatesS(NODE_STATE_FLAGS.LAST_2_BUY, prevUnlocked) def invalidateInventory(self, data): result = self._data.invalidateInventory(data) if result: self.as_setInventoryItemsS(result) def invalidateBlueprints(self, blueprints): raise NotImplementedError('Must be overridden in subclass') def invalidatePrbState(self): result = self._data.invalidatePrbState() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.VEHICLE_CAN_BE_CHANGED, result) def invalidateDiscounts(self, data): if self._data.invalidateDiscounts(data): self._data.invalidateCredits() self._data.invalidateGold() self.redraw() def invalidateVehLocks(self, locks): raise NotImplementedError('Must be overridden in subclass') def invalidateWalletStatus(self, status): raise NotImplementedError('Must be overridden in subclass') def invalidateRent(self, vehicles): raise NotImplementedError('Must be overridden in subclass') def invalidateRestore(self, vehicles): raise NotImplementedError('Must be overridden in subclass') def request4Info(self, itemCD, rootCD): vehicle = self._itemsCache.items.getItemByCD(int(rootCD)) if vehicle: shared_events.showModuleInfo(int(itemCD), vehicle.descriptor) def invalidateVehCompare(self): getVehicle = self._itemsCache.items.getItemByCD def getNodeData(vehCD): return getTreeNodeCompareData(getVehicle(vehCD)) self.as_setNodeVehCompareDataS([ (v, getNodeData(v)) for v in self._data.getVehicleCDs() ]) def invalidateVehicleCollectorState(self): result = self._data.invalidateVehicleCollectorState() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.PURCHASE_DISABLED, result) def invalidateVehPostProgression(self): pass def _updateUnlockedItems(self, unlocked): self.as_setNodesStatesS(NODE_STATE_FLAGS.UNLOCKED, unlocked) def _createExitEvent(self): return None def _populate(self): super(ResearchView, self)._populate() self._listener.startListen(self) def _dispose(self): self._listener.stopListen() super(ResearchView, self)._dispose() if self._data is not None: self._data.clear(full=True) self._data = None return
class ResearchView(LobbySubView, ResearchViewMeta): """ Common interface to items (vehicle, module) in window of research modules, nation tree: - unlocks item; - buy vehicles; - shows messages in service channel. - refreshes data by server diff. """ __background_alpha__ = 0.0 itemsCache = dependency.descriptor(IItemsCache) wallet = dependency.descriptor(IWalletController) cmpBasket = dependency.descriptor(IVehicleComparisonBasket) def __init__(self, data): super(ResearchView, self).__init__() self._data = data self._canBeClosed = True self._listener = TTListenerDecorator() def redraw(self): """ Redraws all nodes in view. """ raise NotImplementedError('Must be overridden in subclass') def showSystemMessage(self, typeString, message): """ Shows system message. :param typeString: string containing 'Error', 'Warning' or 'Information'. :param message: text of message. """ msgType = SystemMessages.SM_TYPE.lookup(typeString) if msgType is None: msgType = SystemMessages.SM_TYPE.Error SystemMessages.pushMessage(message, msgType) return def invalidateCredits(self): """ Value of credits updated. """ result = self._data.invalidateCredits() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_MONEY, result) def invalidateGold(self): """ Value of gold updated. """ result = self._data.invalidateGold() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_MONEY, result) self.invalidateFreeXP() self.invalidateCredits() def invalidateFreeXP(self): """ Value of free experience updated. """ result = self._data.invalidateFreeXP() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_XP, result) def invalidateElites(self, elites): """ Set of elite vehicles updated. :param elites: set([<compactDescr>, ...]) """ result = self._data.invalidateElites(elites) if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ELITE, result) def invalidateVTypeXP(self, xps): """ Dict of vehicles experience updated. :param xps: dict(<int:vehicle compact descriptor> : <XP>, ...) """ self.as_setVehicleTypeXPS(xps.items()) result = self._data.invalidateVTypeXP() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_XP, result) def invalidateUnlocks(self, unlocks): """ Set of unlocks items updated. :param unlocks: set([<int:compactDescr>, ...]) """ next2Unlock, unlocked = self._data.invalidateUnlocks(unlocks) if unlocked: LOG_DEBUG('unlocked', unlocked) self.as_setNodesStatesS(NODE_STATE_FLAGS.UNLOCKED, unlocked) if next2Unlock: LOG_DEBUG('next2Unlock', next2Unlock) self.as_setNext2UnlockS(next2Unlock) def invalidateInventory(self, data): """ Inventory items are updated, invalidate information about inventory on current page. :param data: set of int-type compact descriptors for modified items (vehicles/modules). """ result = self._data.invalidateInventory(data) if result: self.as_setInventoryItemsS(result) def invalidatePrbState(self): """ Player's state has been changed in prebattle, unit, prequeue. """ result = self._data.invalidatePrbState() if result: self.as_setNodesStatesS(NODE_STATE_FLAGS.VEHICLE_CAN_BE_CHANGED, result) def invalidateDiscounts(self, data): """ Updates discount prices of nodes """ if self._data.invalidateDiscounts(data): self._data.invalidateCredits() self._data.invalidateGold() self.redraw() def invalidateVehLocks(self, locks): """ Updates lock status of vehicles (in inventory) that received new value. :param locks: dict(<inventory ID> : <value of lock>, ...), see AccountCommands.LOCK_REASON. """ raise NotImplementedError('Must be overridden in subclass') def invalidateWalletStatus(self, status): raise NotImplementedError('Must be overridden in subclass') def invalidateRent(self, vehicles): raise NotImplementedError('Must be overridden in subclass') def invalidateRestore(self, vehicles): raise NotImplementedError('Must be overridden in subclass') def request4Info(self, itemCD, rootCD): """ Overridden method of the class ResearchViewMeta.request4Info """ vehicle = self.itemsCache.items.getItemByCD(int(rootCD)) if vehicle: shared_events.showModuleInfo(int(itemCD), vehicle.descriptor) def invalidateVehCompare(self): """ Updates compare add icon status of nodes if change status of comparison basket fullness. """ getVehicle = self.itemsCache.items.getItemByCD def getNodeData(vehCD): return getTreeNodeCompareData(getVehicle(vehCD)) self.as_setNodeVehCompareDataS([(v, getNodeData(v)) for v in self._data.getVehicleCDs()]) def _populate(self): super(ResearchView, self)._populate() self._listener.startListen(self) def _dispose(self): self._listener.stopListen() super(ResearchView, self)._dispose() if self._data is not None: self._data.clear(full=True) self._data = None return
class ResearchView(LobbySubView, ResearchViewMeta): __background_alpha__ = 0.0 def __init__(self, data): super(ResearchView, self).__init__() self._data = data self._canBeClosed = True self._listener = TTListenerDecorator() def redraw(self): raise NotImplementedError('Must be overridden in subclass') def showSystemMessage(self, typeString, message): msgType = SystemMessages.SM_TYPE.lookup(typeString) if msgType is None: msgType = SystemMessages.SM_TYPE.Error SystemMessages.pushMessage(message, msgType) return def invalidateCredits(self): result = self._data.invalidateCredits() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_MONEY, result) def invalidateGold(self): result = self._data.invalidateGold() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_MONEY, result) self.invalidateFreeXP() self.invalidateCredits() def invalidateFreeXP(self): result = self._data.invalidateFreeXP() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_XP, result) def invalidateElites(self, elites): result = self._data.invalidateElites(elites) if len(result): self.as_setNodesStatesS(NODE_STATE.ELITE, result) def invalidateVTypeXP(self, xps): self.as_setVehicleTypeXPS(xps.items()) result = self._data.invalidateVTypeXP() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_XP, result) def invalidateUnlocks(self, unlocks): next2Unlock, unlocked = self._data.invalidateUnlocks(unlocks) if len(unlocked): LOG_DEBUG('unlocked', unlocked) self.as_setNodesStatesS(NODE_STATE.UNLOCKED, unlocked) if len(next2Unlock): LOG_DEBUG('next2Unlock', next2Unlock) self.as_setNext2UnlockS(next2Unlock) def invalidateInventory(self, data): result = self._data.invalidateInventory(data) if len(result): self.as_setInventoryItemsS(result) def invalidatePrbState(self): result = self._data.invalidatePrbState() if len(result): self.as_setNodesStatesS(NODE_STATE.VEHICLE_CAN_BE_CHANGED, result) def invalidateVehLocks(self, locks): raise NotImplementedError('Must be overridden in subclass') def invalidateWalletStatus(self, status): raise NotImplementedError('Must be overridden in subclass') def invalidateRent(self, vehicles): raise NotImplementedError('Must be overridden in subclass') def request4Info(self, itemCD, rootCD): vehicle = g_itemsCache.items.getItemByCD(int(rootCD)) if vehicle: shared_events.showModuleInfo(int(itemCD), vehicle.descriptor) def _populate(self): super(ResearchView, self)._populate() self._listener.startListen(self) def _dispose(self): self._listener.stopListen() super(ResearchView, self)._dispose() if self._data is not None: self._data.clear(full=True) self._data = None return
class ResearchView(LobbySubView, ResearchViewMeta): """ Common interface to items (vehicle, module) in window of research modules, nation tree: - unlocks item; - buy vehicles; - shows messages in service channel. - refreshes data by server diff. """ __background_alpha__ = 0.0 def __init__(self, data): super(ResearchView, self).__init__() self._data = data self._canBeClosed = True self._listener = TTListenerDecorator() def redraw(self): """ Redraws all nodes in view. """ raise NotImplementedError('Must be overridden in subclass') def showSystemMessage(self, typeString, message): """ Shows system message. :param typeString: string containing 'Error', 'Warning' or 'Information'. :param message: text of message. """ msgType = SystemMessages.SM_TYPE.lookup(typeString) if msgType is None: msgType = SystemMessages.SM_TYPE.Error SystemMessages.pushMessage(message, msgType) return def invalidateCredits(self): """ Value of credits updated. """ result = self._data.invalidateCredits() if len(result): self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_MONEY, result) def invalidateGold(self): """ Value of gold updated. """ result = self._data.invalidateGold() if len(result): self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_MONEY, result) self.invalidateFreeXP() self.invalidateCredits() def invalidateFreeXP(self): """ Value of free experience updated. """ result = self._data.invalidateFreeXP() if len(result): self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_XP, result) def invalidateElites(self, elites): """ Set of elite vehicles updated. :param elites: set([<compactDescr>, ...]) """ result = self._data.invalidateElites(elites) if len(result): self.as_setNodesStatesS(NODE_STATE_FLAGS.ELITE, result) def invalidateVTypeXP(self, xps): """ Dict of vehicles experience updated. :param xps: dict(<int:vehicle compact descriptor> : <XP>, ...) """ self.as_setVehicleTypeXPS(xps.items()) result = self._data.invalidateVTypeXP() if len(result): self.as_setNodesStatesS(NODE_STATE_FLAGS.ENOUGH_XP, result) def invalidateUnlocks(self, unlocks): """ Set of unlocks items updated. :param unlocks: set([<int:compactDescr>, ...]) """ next2Unlock, unlocked = self._data.invalidateUnlocks(unlocks) if len(unlocked): LOG_DEBUG('unlocked', unlocked) self.as_setNodesStatesS(NODE_STATE_FLAGS.UNLOCKED, unlocked) if len(next2Unlock): LOG_DEBUG('next2Unlock', next2Unlock) self.as_setNext2UnlockS(next2Unlock) def invalidateInventory(self, data): """ Inventory items are updated, invalidate information about inventory on current page. :param data: set of int-type compact descriptors for modified items (vehicles/modules). """ result = self._data.invalidateInventory(data) if len(result): self.as_setInventoryItemsS(result) def invalidatePrbState(self): """ Player's state has been changed in prebattle, unit, prequeue. """ result = self._data.invalidatePrbState() if len(result): self.as_setNodesStatesS(NODE_STATE_FLAGS.VEHICLE_CAN_BE_CHANGED, result) def invalidateVehLocks(self, locks): """ Updates lock status of vehicles (in inventory) that received new value. :param locks: dict(<inventory ID> : <value of lock>, ...), see AccountCommands.LOCK_REASON. """ raise NotImplementedError('Must be overridden in subclass') def invalidateWalletStatus(self, status): raise NotImplementedError('Must be overridden in subclass') def invalidateRent(self, vehicles): raise NotImplementedError('Must be overridden in subclass') def request4Info(self, itemCD, rootCD): """ Overridden method of the class ResearchViewMeta.request4Info """ vehicle = g_itemsCache.items.getItemByCD(int(rootCD)) if vehicle: shared_events.showModuleInfo(int(itemCD), vehicle.descriptor) def invalidateVehCompare(self): """ Updates compare add icon status of nodes if change status of comparison basket fullness. """ getVehicle = g_itemsCache.items.getItemByCD getNodeData = lambda vehCD: getTreeNodeCompareData(getVehicle(vehCD)) self.as_setNodeVehCompareDataS([ (v, getNodeData(v)) for v in self._data.getVehicleCDs() ]) def _populate(self): super(ResearchView, self)._populate() self._listener.startListen(self) def _dispose(self): self._listener.stopListen() super(ResearchView, self)._dispose() if self._data is not None: self._data.clear(full=True) self._data = None return
class ResearchView(LobbySubView, ResearchViewMeta): MSG_SCOPE = enumerations.Enumeration('Message scope', [('Unlocks', lambda entity, msg: '#system_messages:unlocks/{0:>s}/{1:>s}'.format(entity, msg)), ('Shop', lambda entity, msg: '#system_messages:shop/{0:>s}/{1:>s}'.format(entity, msg)), ('Inventory', lambda entity, msg: '#system_messages:inventory/{0:>s}/{1:>s}'.format(entity, msg)), ('Dialog', lambda entity, msg: '#dialogs:techtree/{0:>s}/{1:>s}'.format(entity, msg))], instance=enumerations.CallabbleEnumItem) def __init__(self, data): super(ResearchView, self).__init__(backAlpha=0) self._data = data self._canBeClosed = True self._listener = TTListenerDecorator() def showModuleInfo(self, itemCD): itemCD = int(itemCD) vehicleDescr = self._data.getRootItem().descriptor self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_MODULE_INFO_WINDOW, {'moduleCompactDescr': itemCD, 'vehicleDescr': vehicleDescr})) def showVehicleInfo(self, itemCD): self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_VEHICLE_INFO_WINDOW, {'vehicleCompactDescr': int(itemCD)})) def selectVehicleInHangar(self, itemCD): veh = self._data.getItem(int(itemCD)) assert veh.isInInventory, 'Vehicle must be in inventory.' g_currentVehicle.selectVehicle(veh.invID) def showVehicleStatistics(self, itemCD): self.fireEvent(events.LoadEvent(events.LoadEvent.LOAD_PROFILE, {'itemCD': itemCD}), scope=EVENT_BUS_SCOPE.LOBBY) def redraw(self): raise NotImplementedError, 'Must be overridden in subclass' def unlockItem(self, unlockCD, vehCD, unlockIdx, xpCost): costCtx = self.getCostCtx(vehCD, xpCost) unlockCtx = unlock.UnlockItemCtx(unlockCD, vehCD, unlockIdx, xpCost) plugins = [unlock.UnlockItemConfirmator(unlockCtx, costCtx), unlock.UnlockItemValidator(unlockCtx)] self._doUnlockItem(unlockCtx, costCtx, plugins) def getCostCtx(self, vehCD, xpCost): return unlock.makeCostCtx(self._data.getUnlockStats().getVehXP(vehCD), xpCost) def buyVehicle(self, vehCD): item = self._data.getItem(vehCD) if item.itemTypeID is not GUI_ITEM_TYPE.VEHICLE: LOG_ERROR('Value of int-type descriptor is not refer to vehicle', vehCD) return if item.isInInventory and not item.isRented: self._showMessage(self.MSG_SCOPE.Inventory, 'already_exists', item, msgType=SystemMessages.SM_TYPE.Warning) else: price = item.minRentPrice or item.buyPrice money = g_itemsCache.items.stats.money if price is None: self._showMessage(self.MSG_SCOPE.Shop, 'not_found', item) return canRentOrBuy, reason = item.mayRentOrBuy(money) if canRentOrBuy: self._showVehicleBuyWindow(item) else: self._showMessage(self.MSG_SCOPE.Shop, 'common_rent_or_buy_error', item) LOG_WARNING('Vehicle ' + item.userName + ' cannot be buy or rent, reason: ' + reason) def _showVehicleBuyWindow(self, item): self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_VEHICLE_BUY_WINDOW, {'nationID': item.nationID, 'itemID': item.innationID})) def _sendMoneyValidationMsg(self, price, item, errorID): stats = g_itemsCache.items.stats money = [price[0] - stats.credits if price[0] > 0 else 0, price[1] - stats.gold if price[1] > 0 else 0] self._showMessage(self.MSG_SCOPE.Shop, errorID, item, price=gui_items.formatPrice(money)) def sellVehicle(self, vehCD): item = self._data.getItem(vehCD) if item.itemTypeID is not GUI_ITEM_TYPE.VEHICLE: LOG_ERROR('Value of int-type descriptor is not refer to vehicle', vehCD) return if item.isInInventory: self.fireEvent(events.ShowWindowEvent(events.ShowWindowEvent.SHOW_VEHICLE_SELL_DIALOG, {'vehInvID': item.inventoryID})) else: self._showMessage(self.MSG_SCOPE.Inventory, 'not_found', item) def showSystemMessage(self, typeString, message): msgType = SystemMessages.SM_TYPE.lookup(typeString) if msgType is None: msgType = SystemMessages.SM_TYPE.Error SystemMessages.pushMessage(message, msgType) def invalidateCredits(self): result = self._data.invalidateCredits() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_MONEY, result) def invalidateGold(self): result = self._data.invalidateGold() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_MONEY, result) def invalidateFreeXP(self): result = self._data.invalidateFreeXP() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_XP, result) def invalidateElites(self, elites): result = self._data.invalidateElites(elites) if len(result): self.as_setNodesStatesS(NODE_STATE.ELITE, result) def invalidateVTypeXP(self, xps): self.as_setVehicleTypeXPS(xps.items()) result = self._data.invalidateVTypeXP() if len(result): self.as_setNodesStatesS(NODE_STATE.ENOUGH_XP, result) def invalidateUnlocks(self, unlocks): next2Unlock, unlocked = self._data.invalidateUnlocks(unlocks) if len(unlocked): LOG_DEBUG('unlocked', unlocked) self.as_setNodesStatesS(NODE_STATE.UNLOCKED, unlocked) if len(next2Unlock): LOG_DEBUG('next2Unlock', next2Unlock) self.as_setNext2UnlockS(next2Unlock) def invalidateInventory(self, data): result = self._data.invalidateInventory(data) if len(result): self.as_setInventoryItemsS(result) def invalidatePrbState(self): result = self._data.invalidatePrbState() if len(result): self.as_setNodesStatesS(NODE_STATE.VEHICLE_CAN_BE_CHANGED, result) def invalidateVehLocks(self, locks): raise NotImplementedError, 'Must be overridden in subclass' def invalidateWalletStatus(self, status): raise NotImplementedError, 'Must be overridden in subclass' def invalidateRent(self, vehicles): raise NotImplementedError, 'Must be overridden in subclass' def _populate(self): super(ResearchView, self)._populate() self._listener.startListen(self) def _dispose(self): self._listener.stopListen() super(ResearchView, self)._dispose() if self._data is not None: self._data.clear(full=True) self._data = None def _showMessage(self, scope, msg, item, msgType = SystemMessages.SM_TYPE.Error, **kwargs): kwargs['userString'] = item.userName if item.itemTypeID == GUI_ITEM_TYPE.VEHICLE: key = scope('vehicle', msg) else: key = scope('item', msg) kwargs['typeString'] = item.userType SystemMessages.pushMessage(i18n.makeString(key, **kwargs), type=msgType) @process('research') def _doUnlockItem(self, unlockCtx, costCtx, plugins): self._canBeClosed = False result = yield unlock.UnlockItemProcessor(unlockCtx.vehCD, unlockCtx.unlockIdx, plugins=plugins).request() self._canBeClosed = True if result.success: costCtx['xpCost'] = BigWorld.wg_getIntegralFormat(costCtx['xpCost']) costCtx['freeXP'] = BigWorld.wg_getIntegralFormat(costCtx['freeXP']) self._showMessage(self.MSG_SCOPE.Unlocks, 'unlock_success', self._data.getItem(unlockCtx.unlockCD), msgType=SystemMessages.SM_TYPE.PowerLevel, **costCtx) elif len(result.userMsg): self._showMessage(self.MSG_SCOPE.Unlocks, result.userMsg, self._data.getItem(unlockCtx.unlockCD))