def triggerEffect(self): dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: state = dispatcher.getFunctionalState() if state.isInPreQueue(QUEUE_TYPE.TUTORIAL): self._doEffect(dispatcher) else: LOG_WARNING( 'Enter queue effect could not be played from different mode.' ) self._tutorial.refuse() else: LOG_WARNING('Prebattle dispatcher is not defined') self._tutorial.refuse() return
def findTargetByCriteria(self, targetPath, valuePath, value): result = None if targetPath == WindowLayer.TOP_WINDOW: result = self.__findDialog(valuePath, value) else: LOG_WARNING('Dialogs supported only') return result
def __resolveInitialChapter(self, ctx): self._currentChapter = None if ctx.initialChapter is not None: self._currentChapter = ctx.initialChapter return True completed = self._bonuses.getCompleted() fromCache = self._cache.currentChapter() if fromCache is not None and self._settings.findChapterInCache: chapter = self._descriptor.getChapter(fromCache) if self._descriptor.isChapterInitial(chapter, completed): self._currentChapter = fromCache else: self._cache.clearChapterData() LOG_WARNING( 'Initial chapter not found in cache or bonuses is invalid', fromCache, chapter.getBonusID() if chapter is not None else None, completed) if self._currentChapter is None: self._currentChapter = self._descriptor.getInitialChapterID( completed=completed) if self._currentChapter is None: LOG_ERROR('Initial chapter not found. Tutorial is stopping') self.stop(reason=TUTORIAL_STOP_REASON.CRITICAL_ERROR) return False return True
def __read(self): cacheFile = None if TutorialCache.__internal is not None: LOG_WARNING('Cache retrieved from internal property. Record to file is denied.', TutorialCache.__internal) self.__cache.update(TutorialCache.__internal) return else: try: if not os.path.isfile(self.__cacheFileName): return cacheFile = open(self.__cacheFileName, 'rb') self.__version, cache = cPickle.load(cacheFile) if self.__version != TUTORIAL_VERSION: self.__version = TUTORIAL_VERSION else: self.__cache.setdefault(self.__space, {}) self.__cache.update(cache) except (IOError, cPickle.PickleError): LOG_CURRENT_EXCEPTION() if TutorialCache.__internal is not None: self.__cache.update(TutorialCache.__internal) finally: if cacheFile is not None: cacheFile.close() return
def triggerEffect(self): dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: self._doEffect(dispatcher) else: LOG_WARNING('Prebattle dispatcher is not defined') self._tutorial.getFlags().deactivateFlag(self._effect.getTargetID()) return
def triggerEffect(self): dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: self._doEffect(dispatcher) else: LOG_WARNING('Prebattle dispatcher is not defined') self._tutorial.refuse() return
def play(self, event, sndID = None): if self.isMuted(): return if event in self.__guiSounds.keys(): self._playGUI(event) elif event is context.SOUND_EVENT.SPEAKING: self._speak(sndID) else: LOG_WARNING('Sound event is not supported', event)
def __onPageChanging(self, sceneID): if self._data.isInScene(self._nextScene, sceneID): return scene = self._data.getScene(sceneID) if scene is None: LOG_WARNING('Scene {0:>s} not found in chapter {1:>s}'.format( sceneID, self._currentChapter)) return self._nextScene = scene self.setState(states.STATE_WAIT_SCENE)
def isPlaying(self, event, sndID = None): result = False if event is context.SOUND_EVENT.SPEAKING: if self.__speakSnd is not None: if sndID is not None: result = len(self.__prevSpeaks) and list(self.__prevSpeaks)[-1] == sndID else: result = True else: LOG_WARNING('Sound event is not supported', event) return result
def triggerEffect(self): descriptor = getBattleDescriptor() if descriptor is not None and descriptor.areAllBonusesReceived(self._bonuses.getCompleted()): self._cache.setPlayerXPLevel(PLAYER_XP_LEVEL.NORMAL) dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: dispatcher.doLeaveAction(pre_queue_ctx.LeavePreQueueCtx(flags=FUNCTIONAL_FLAG.BATTLE_TUTORIAL)) else: LOG_WARNING('Prebattle dispatcher is not defined') self._cache.setAfterBattle(False).write() self._tutorial.refuse() return
def triggerEffect(self): dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: state = dispatcher.getFunctionalState() if state.isInPreQueue(QUEUE_TYPE.TUTORIAL): self._doEffect(dispatcher) else: self._doSelect(dispatcher) else: LOG_WARNING('Prebattle dispatcher is not defined') self._tutorial.refuse() return
def __onViewLoadInit(self, pyEntity): if pyEntity.settings.type is ViewTypes.LOBBY_SUB: pageName = pyEntity.settings.alias sceneID = self.config.getSceneID(pageName) LOG_DEBUG('GUI.onPageChanging', sceneID) if sceneID is None: self.clear() LOG_WARNING('Scene alias not found, page:', pageName) else: self.effects.stopAll() self.onPageChanging(sceneID) return
def triggerEffect(self): descriptor = getBattleDescriptor() if descriptor is not None and descriptor.areAllBonusesReceived( self._bonuses.getCompleted()): self._cache.setPlayerXPLevel(PLAYER_XP_LEVEL.NORMAL) dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: self._doLeave(dispatcher) else: LOG_WARNING('Prebattle dispatcher is not defined') self._cache.setAfterBattle(False).write() self._tutorial.refuse() return
def __onViewLoadInit(self, pyEntity): if pyEntity.layer == WindowLayer.SUB_VIEW: pageName = pyEntity.alias sceneID = self.config.getSceneID(pageName) prevSceneID = self.getSceneID() LOG_DEBUG('GUI.onPageChanging', prevSceneID, '->', sceneID) if prevSceneID is not None: self.effects.cancel(GUIEffectScope.SCENE, prevSceneID) if sceneID is None: self.clear() LOG_WARNING('Scene alias not found, page:', pageName) else: self.onPageChanging(sceneID) return
def __onViewLoadInit(self, pyEntity): if pyEntity.settings.type is ViewTypes.LOBBY_SUB: pageName = pyEntity.settings.alias sceneID = self.config.getSceneID(pageName) prevSceneID = self.getSceneID() LOG_DEBUG('GUI.onPageChanging', prevSceneID, '->', sceneID) if prevSceneID is not None: self.effects.cancel(GUIEffectScope.SCENE, prevSceneID) if sceneID is None: self.clear() LOG_WARNING('Scene alias not found, page:', pageName) else: self.onPageChanging(sceneID) return
def __onPageChanging(self, sceneID): if self._data.isInScene(self._nextScene, sceneID): return else: scene = self._data.getScene(sceneID) if scene is None: LOG_WARNING('Scene {0:>s} not found in chapter {1:>s}'.format(sceneID, self._currentChapter)) return self._nextScene = scene if self._currentState.allowedToSwitch(): self._sceneChanging = False self.setState(states.STATE_WAIT_SCENE) else: self._sceneChanging = True self.evaluateState() return
def triggerEffect(self): descriptor = getBattleDescriptor() if descriptor is not None and descriptor.areAllBonusesReceived( self._bonuses.getCompleted()): self._cache.setPlayerXPLevel(PLAYER_XP_LEVEL.NORMAL) dispatcher = g_prbLoader.getDispatcher() if dispatcher is not None: state = dispatcher.getFunctionalState() if state.isInPreQueue(QUEUE_TYPE.TUTORIAL): self._doEffect(dispatcher) else: LOG_DEBUG('Refuse training is called from non-mode.') else: LOG_WARNING('Prebattle dispatcher is not defined') self._cache.setAfterBattle(False).write() self._tutorial.refuse() return
def _speak(self, sndID): if sndID in self.__prevSpeaks: LOG_DEBUG('Speaking played, ignore', sndID) return if sndID is None: LOG_WARNING('Sound ID for speaking is not defined') return if self.__speakSnd is not None: self.__nextSndID = sndID return sound = SoundGroups.g_instance.getSound2D(sndID) if not sound: LOG_ERROR('Sound not found', sndID) return self.__nextSndID = None self.__speakSnd = sound self.__prevSpeaks.add(sndID) sound.setCallback('EVENTFINISHED', self.__onSpeakingStop) sound.play()
def __resolveInitialChapter(self, ctx): """ Resolves initial chapter when tutorial is loading by following steps: 1. Double check: received bonuses in the tutorial scenario. If they are in the scenario than go to step 2, otherwise tutorial is stopping. 2. Gets current chapter from cache. If current chapter is exists in cache and valid then chapter is found, otherwise go to step 3. 3. Resolves chapter by received bonuses. 4. Double check: current chapter found. If it not found than tutorial is stopping. :param ctx: @see run. :return: True - if initial chapter resolved, otherwise - False. """ self._currentChapter = None if ctx.initialChapter is not None: self._currentChapter = ctx.initialChapter return True completed = self._bonuses.getCompleted() fromCache = self._cache.currentChapter() if fromCache is not None and self._settings.findChapterInCache: chapter_ = self._descriptor.getChapter(fromCache) if self._descriptor.isChapterInitial(chapter_, completed): self._currentChapter = fromCache else: self._cache.clearChapterData() LOG_WARNING( 'Initial chapter not found in cache or bonuses is invalid', fromCache, chapter_.getBonusID() if chapter_ is not None else None, completed) if self._currentChapter is None: self._currentChapter = self._descriptor.getInitialChapterID( completed=completed) if self._currentChapter is None: LOG_ERROR('Initial chapter not found. Tutorial is stopping') self.stop() return False else: return True