def __prepareTankmanData(self): items = yield ItemsRequester().request() dropSkillsCost = [] for k in sorted(items.shop.dropSkillsCost.keys()): dropSkillsCost.append(items.shop.dropSkillsCost[k]) skills_count = list(tankmen.ACTIVE_SKILLS) availableSkillsCount = len(skills_count) - len(self.__tankman.skills) hasNewSkills = self.__tankman.roleLevel == tankmen.MAX_SKILL_LEVEL and availableSkillsCount and (self.__tankman.descriptor.lastSkillLevel == tankmen.MAX_SKILL_LEVEL or not len(self.__tankman.skills)) self.as_tankManS({'money': (items.stats.credits, items.stats.gold), 'tankman': packTankman(self.__tankman), 'dropSkillsCost': dropSkillsCost, 'hasNewSkills': hasNewSkills, 'newSkills': self.__tankman.newSkillCount, 'defaultSavingMode': 0}) if len(self.__tankman.skills) < 1: if self.__tankman.roleLevel < 100: self.question = i18n.makeString(DIALOGS.DISMISSTANKMAN_MESSAGE) else: self.__controlNumber = str(self.__tankman.roleLevel) self.question = makeHtmlString('html_templates:lobby/dialogs', 'dismissTankmanMain', {'roleLevel': str(self.__tankman.roleLevel)}) else: if self.__tankman.skills[-1].isPerk: skillType = DIALOGS.PROTECTEDDISMISSTANKMAN_ADDITIONALMESSAGE_ISPERK else: skillType = DIALOGS.PROTECTEDDISMISSTANKMAN_ADDITIONALMESSAGE_ISABILLITY self.question = makeHtmlString('html_templates:lobby/dialogs', 'dismissTankmanAdditional', {'skillType': i18n.makeString(skillType), 'skillName': self.__tankman.skills[-1].userName, 'roleLevel': str(self.__tankman.skills[-1].level)}) self.__controlNumber = str(self.__tankman.skills[-1].level) self.__updateInputChecker()
def __init__(self): self.__items = ItemsRequester() self.__waitForSync = False self.onSyncStarted = Event() self.onSyncCompleted = Event()
class _ItemsCache(object): def __init__(self): self.__items = ItemsRequester() self.__waitForSync = False self.onSyncStarted = Event() self.onSyncCompleted = Event() def init(self): g_playerEvents.onInventoryResync += self.__pe_onInventoryResync g_playerEvents.onDossiersResync += self.__pe_onDossiersResync g_playerEvents.onStatsResync += self.__pe_onStatsResync g_playerEvents.onCenterIsLongDisconnected += self._onCenterIsLongDisconnected def fini(self): self.onSyncStarted.clear() self.onSyncCompleted.clear() g_playerEvents.onCenterIsLongDisconnected -= self._onCenterIsLongDisconnected g_playerEvents.onStatsResync -= self.__pe_onStatsResync g_playerEvents.onDossiersResync -= self.__pe_onDossiersResync g_playerEvents.onInventoryResync -= self.__pe_onInventoryResync @property def waitForSync(self): return self.__waitForSync @property def items(self): return self.__items @async def update(self, updateReason, diff=None, callback=None): if diff is None: self.__invalidateFullData(updateReason, callback) else: self.__invalidateData(updateReason, diff, callback) return def clear(self): LOG_DEBUG('Clearing items cache.') return self.items.clear() def _onResync(self, reason): if not self.__waitForSync: self.__invalidateFullData(reason) def _onCenterIsLongDisconnected(self, isLongDisconnected): self.items.dossiers.onCenterIsLongDisconnected(isLongDisconnected) def __invalidateData(self, updateReason, diff, callback=lambda *args: None): self.__waitForSync = True self.onSyncStarted() if updateReason != CACHE_SYNC_REASON.DOSSIER_RESYNC: invalidItems = self.__items.invalidateCache(diff) else: invalidItems = {} def cbWrapper(*args): self.__waitForSync = False self.onSyncCompleted(updateReason, invalidItems) callback(*args) self.__items.request()(cbWrapper) def __invalidateFullData(self, updateReason, callback=lambda *args: None): self.__waitForSync = True self.onSyncStarted() def cbWrapper(*args): self.__waitForSync = False if updateReason != CACHE_SYNC_REASON.DOSSIER_RESYNC: invalidItems = self.__items.invalidateCache() else: invalidItems = {} self.onSyncCompleted(updateReason, invalidItems) callback(*args) self.__items.request()(cbWrapper) def isSynced(self): return self.items.isSynced() def __pe_onStatsResync(self, *args): self._onResync(CACHE_SYNC_REASON.STATS_RESYNC) def __pe_onInventoryResync(self, *args): self._onResync(CACHE_SYNC_REASON.INVENTORY_RESYNC) def __pe_onDossiersResync(self, *args): self._onResync(CACHE_SYNC_REASON.DOSSIER_RESYNC)
class _ItemsCache(object): def __init__(self): self.__items = ItemsRequester() self.__waitForSync = False self.onSyncStarted = Event() self.onSyncCompleted = Event() def init(self): g_playerEvents.onInventoryResync += self.__pe_onInventoryResync g_playerEvents.onDossiersResync += self.__pe_onDossiersResync g_playerEvents.onStatsResync += self.__pe_onStatsResync g_playerEvents.onCenterIsLongDisconnected += self._onCenterIsLongDisconnected def fini(self): self.onSyncStarted.clear() self.onSyncCompleted.clear() g_playerEvents.onCenterIsLongDisconnected -= self._onCenterIsLongDisconnected g_playerEvents.onStatsResync -= self.__pe_onStatsResync g_playerEvents.onDossiersResync -= self.__pe_onDossiersResync g_playerEvents.onInventoryResync -= self.__pe_onInventoryResync @property def waitForSync(self): return self.__waitForSync @property def items(self): return self.__items @async def update(self, updateReason, diff = None, callback = None): if diff is None: self.__invalidateFullData(updateReason, callback) else: self.__invalidateData(updateReason, diff, callback) return def clear(self): LOG_DEBUG('Clearing items cache.') return self.items.clear() def _onResync(self, reason): if not self.__waitForSync: self.__invalidateFullData(reason) def _onCenterIsLongDisconnected(self, isLongDisconnected): self.items.dossiers.onCenterIsLongDisconnected(isLongDisconnected) def __invalidateData(self, updateReason, diff, callback = lambda *args: None): self.__waitForSync = True self.onSyncStarted() if updateReason != CACHE_SYNC_REASON.DOSSIER_RESYNC: invalidItems = self.__items.invalidateCache(diff) else: invalidItems = {} def cbWrapper(*args): self.__waitForSync = False self.onSyncCompleted(updateReason, invalidItems) callback(*args) self.__items.request()(cbWrapper) def __invalidateFullData(self, updateReason, callback = lambda *args: None): self.__waitForSync = True self.onSyncStarted() def cbWrapper(*args): self.__waitForSync = False if updateReason != CACHE_SYNC_REASON.DOSSIER_RESYNC: invalidItems = self.__items.invalidateCache() else: invalidItems = {} self.onSyncCompleted(updateReason, invalidItems) callback(*args) self.__items.request()(cbWrapper) def isSynced(self): return self.items.isSynced() def __pe_onStatsResync(self, *args): self._onResync(CACHE_SYNC_REASON.STATS_RESYNC) def __pe_onInventoryResync(self, *args): self._onResync(CACHE_SYNC_REASON.INVENTORY_RESYNC) def __pe_onDossiersResync(self, *args): self._onResync(CACHE_SYNC_REASON.DOSSIER_RESYNC)