Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
    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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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)
Пример #8
0
 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)
Пример #9
0
 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
Пример #10
0
 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
Пример #11
0
 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
Пример #12
0
 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
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
 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
Пример #16
0
 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
Пример #17
0
 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
Пример #18
0
 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()
Пример #19
0
 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