def onAccountShowGUI(ctx): global onCenterIsLongDisconnected ServicesLocator.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.SHOW_GUI) ServicesLocator.lobbyContext.onAccountShowGUI(ctx) yield ServicesLocator.itemsCache.update(CACHE_SYNC_REASON.SHOW_GUI, notify=False) Waiting.show('enter') ServicesLocator.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.QUESTS_SYNC) ServicesLocator.eventsCache.start() yield ServicesLocator.eventsCache.update() ServicesLocator.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.USER_SERVER_SETTINGS_SYNC) yield ServicesLocator.settingsCache.update() if not ServicesLocator.itemsCache.isSynced(): ServicesLocator.gameplay.goToLoginByError('#menu:disconnect/codes/0') return eula = EULADispatcher() yield eula.processLicense() eula.fini() g_playerEvents.onGuiCacheSyncCompleted(ctx) code = AccountValidator().validate() if code != ValidationCodes.OK: ServicesLocator.gameplay.goToLoginByError( '#menu:disconnect/codes/{}'.format(code)) return ServicesLocator.itemsCache.onSyncCompleted(CACHE_SYNC_REASON.SHOW_GUI, {}) ServicesLocator.settingsCore.serverSettings.applySettings() ServicesLocator.gameState.onAccountShowGUI( ServicesLocator.lobbyContext.getGuiCtx()) accDossier = ServicesLocator.itemsCache.items.getAccountDossier() ServicesLocator.rareAchievesCache.request( accDossier.getBlock('rareAchievements')) premium = ServicesLocator.itemsCache.items.stats.isPremium if ServicesLocator.hangarSpace.inited: ServicesLocator.hangarSpace.refreshSpace(premium) else: ServicesLocator.hangarSpace.init(premium) g_currentVehicle.init() g_currentPreviewVehicle.init() ServicesLocator.webCtrl.start() ServicesLocator.soundCtrl.start() ServicesLocator.gameplay.postStateEvent(PlayerEventID.ACCOUNT_SHOW_GUI) serverSettings = ServicesLocator.lobbyContext.getServerSettings() g_prbLoader.onAccountShowGUI(ServicesLocator.lobbyContext.getGuiCtx()) g_clanCache.onAccountShowGUI() g_blueprintGenerator.init() SoundGroups.g_instance.enableLobbySounds(True) onCenterIsLongDisconnected(True) ServicesLocator.offersProvider.start() guiModsSendEvent('onAccountShowGUI', ctx) if serverSettings.wgcg.getLoginOnStart(): yield ServicesLocator.webCtrl.login() if serverSettings.isElenEnabled(): yield ServicesLocator.eventsController.getEvents( onlySettings=True, onLogin=True, prefetchKeyArtBig=False) yield ServicesLocator.eventsController.getHangarFlag(onLogin=True)
def __init__(self, event): super(LoginView, self).__init__() self.__onLoadCallback = event.get('callback', None) self.__loginDispatcher = LoginDispatcher() self.__onLoginQueue = False self.__capsLockState = None self.__EULADispatcher = EULADispatcher() self.__showLoginWallpaperNode = 'showLoginWallpaper' return
def onAccountShowGUI(ctx): global onCenterIsLongDisconnected ServicesLocator.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.SHOW_GUI) ServicesLocator.lobbyContext.onAccountShowGUI(ctx) yield ServicesLocator.itemsCache.update(CACHE_SYNC_REASON.SHOW_GUI) ServicesLocator.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.QUESTS_SYNC) ServicesLocator.eventsCache.start() yield ServicesLocator.eventsCache.update() ServicesLocator.statsCollector.noteHangarLoadingState( HANGAR_LOADING_STATE.USER_SERVER_SETTINGS_SYNC) yield ServicesLocator.settingsCache.update() if not ServicesLocator.itemsCache.isSynced(): g_appLoader.goToLoginByError('#menu:disconnect/codes/0') return eula = EULADispatcher() yield eula.processLicense() eula.fini() g_playerEvents.onGuiCacheSyncCompleted(ctx) code = yield AccountValidator().validate() if code > 0: g_appLoader.goToLoginByError('#menu:disconnect/codes/%d' % code) return ServicesLocator.settingsCore.serverSettings.applySettings() ServicesLocator.gameState.onAccountShowGUI( ServicesLocator.lobbyContext.getGuiCtx()) accDossier = ServicesLocator.itemsCache.items.getAccountDossier() g_rareAchievesCache.request(accDossier.getBlock('rareAchievements')) premium = isPremiumAccount( ServicesLocator.itemsCache.items.stats.attributes) if g_hangarSpace.inited: g_hangarSpace.refreshSpace(premium) else: g_hangarSpace.init(premium) g_currentVehicle.init() g_currentPreviewVehicle.init() ServicesLocator.clanCtrl.start() ServicesLocator.soundCtrl.start() g_appLoader.showLobby() g_prbLoader.onAccountShowGUI(ServicesLocator.lobbyContext.getGuiCtx()) if ServicesLocator.lobbyContext.getServerSettings().isElenEnabled(): yield ServicesLocator.eventsController.getEvents(onlySettings=True, onLogin=True) yield ServicesLocator.eventsController.getHangarFlag(onLogin=True) g_prbLoader.onAccountShowGUI(ServicesLocator.lobbyContext.getGuiCtx()) g_clanCache.onAccountShowGUI() SoundGroups.g_instance.enableLobbySounds(True) onCenterIsLongDisconnected(True) guiModsSendEvent('onAccountShowGUI', ctx) Waiting.hide('enter')
def onAccountShowGUI(ctx): global onCenterIsLongDisconnected g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.SHOW_GUI) g_lobbyContext.onAccountShowGUI(ctx) yield g_itemsCache.update(CACHE_SYNC_REASON.SHOW_GUI) g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.QUESTS_SYNC) g_eventsCache.start() yield g_eventsCache.update() g_statistics.noteHangarLoadingState(HANGAR_LOADING_STATE.USER_SERVER_SETTINGS_SYNC) yield g_settingsCache.update() if not g_itemsCache.isSynced(): g_appLoader.goToLoginByError("#menu:disconnect/codes/0") return eula = EULADispatcher() yield eula.processLicense() eula.fini() g_playerEvents.onGuiCacheSyncCompleted(ctx) code = yield AccountValidator().validate() if code > 0: g_appLoader.goToLoginByError("#menu:disconnect/codes/%d" % code) return g_settingsCore.serverSettings.applySettings() game_control.g_instance.onAccountShowGUI(g_lobbyContext.getGuiCtx()) accDossier = g_itemsCache.items.getAccountDossier() g_rareAchievesCache.request(accDossier.getBlock("rareAchievements")) premium = isPremiumAccount(g_itemsCache.items.stats.attributes) if g_hangarSpace.inited: g_hangarSpace.refreshSpace(premium) else: g_hangarSpace.init(premium) g_currentVehicle.init() g_currentPreviewVehicle.init() g_appLoader.showLobby() g_prbLoader.onAccountShowGUI(g_lobbyContext.getGuiCtx()) g_clanCache.onAccountShowGUI() g_clubsCtrl.start() g_clanCtrl.start() g_soundsCtrl.start() SoundGroups.g_instance.enableLobbySounds(True) onCenterIsLongDisconnected(True) guiModsSendEvent("onAccountShowGUI", ctx) Waiting.hide("enter")
def onAccountShowGUI(ctx): global onCenterIsLongDisconnected g_lobbyContext.onAccountShowGUI(ctx) yield g_itemsCache.update(CACHE_SYNC_REASON.SHOW_GUI) g_eventsCache.start() yield g_eventsCache.update() yield g_settingsCache.update() if not g_itemsCache.isSynced(): return eula = EULADispatcher() yield eula.processLicense() eula.fini() g_playerEvents.onGuiCacheSyncCompleted(ctx) code = yield AccountValidator().validate() if code > 0: from gui import DialogsInterface DialogsInterface.showDisconnect("#menu:disconnect/codes/%d" % code) return g_settingsCore.serverSettings.applySettings() game_control.g_instance.onAccountShowGUI(g_lobbyContext.getGuiCtx()) accDossier = g_itemsCache.items.getAccountDossier() g_rareAchievesCache.request(accDossier.getBlock("rareAchievements")) MusicController.g_musicController.setAccountAttrs(g_itemsCache.items.stats.attributes) MusicController.g_musicController.play(MusicController.MUSIC_EVENT_LOBBY) MusicController.g_musicController.play(MusicController.AMBIENT_EVENT_LOBBY) premium = isPremiumAccount(g_itemsCache.items.stats.attributes) if g_hangarSpace.inited: g_hangarSpace.refreshSpace(premium) else: g_hangarSpace.init(premium) g_currentVehicle.init() g_appLoader.showLobby() g_prbLoader.onAccountShowGUI(g_lobbyContext.getGuiCtx()) g_clanCache.onAccountShowGUI() g_clubsCtrl.start() SoundGroups.g_instance.enableLobbySounds(True) onCenterIsLongDisconnected(True) guiModsSendEvent("onAccountShowGUI", ctx) Waiting.hide("enter")
def start(self, lessonNum, isBattleLesson): LOG_DEBUG_DEV_BOOTCAMP('Starting bootcamp', lessonNum, isBattleLesson) from gui.shared.personality import ServicesLocator if BattleReplay.g_replayCtrl.isPlaying: self.__replayController = BootcampReplayController() self.__replayController.init() g_bootcampEvents.onBattleLessonFinished += self.onBattleLessonFinished g_bootcampEvents.onGarageLessonFinished += self.onGarageLessonFinished g_bootcampEvents.onBattleLoaded += self.onBattleLoaded g_bootcampEvents.onResultScreenFinished += self.onResultScreenFinished g_bootcampEvents.onRequestBootcampFinish += self.onRequestBootcampFinish g_bootcampEvents.onOutroVideoStop += self.onOutroVideoStop g_bootcampEvents.onBootcampBecomeNonPlayer += self.onBootcampBecomeNonPlayer g_playerEvents.onAvatarBecomeNonPlayer += self.__onAvatarBecomeNonPlayer g_playerEvents.onArenaCreated += self.__onArenaCreated self.connectionMgr.onDisconnected += self.__cm_onDisconnected self.__requestBootcampFinishFromBattle = False ctx = self.getContext() isRelogin = ctx['relogin'] LOG_DEBUG_DEV_BOOTCAMP('IsRelogin', isRelogin) if not BattleReplay.isPlaying(): if not isRelogin: self.showActionWaitWindow() yield self.settingsCore.serverSettings.settingsCache.update() self.settingsCore.serverSettings.applySettings() if ctx['isNewbie'] and not ctx['completed'] and ctx[ 'runCount'] == 1: self.__preferences = BootcampPreferences() self.__preferences.setup() self.hideActionWaitWindow() eula = EULADispatcher() yield eula.processLicense() eula.fini() self.__running = True self.__lessonId = lessonNum self.__lessonType = BOOTCAMP_LESSON.BATTLE if isBattleLesson else BOOTCAMP_LESSON.GARAGE if (lessonNum == 0 or not isBattleLesson) and not isRelogin: self.showActionWaitWindow() yield ServicesLocator.itemsCache.update(CACHE_SYNC_REASON.SHOW_GUI) self.hideActionWaitWindow() if self.__currentState is not None: self.__currentState.deactivate() self.__hangarSpace = ctx['hangarSpace'] self.__hangarSpacePremium = ctx['hangarSpacePremium'] self.__bonuses = ctx['bonuses'] showRewards = ctx['needAwarding'] previousLesson = self.getContextIntParameter('lastLessonNum') - 1 if previousLesson >= 0 and previousLesson < len( self.__bonuses['battle']): self.__bonuses['battle'][previousLesson][ 'showRewards'] = showRewards self.__nation = ctx['nation'] self.__nationsData = ctx['nationsData'] self.__p['completed'] = ctx['completed'] self.__p['needAwarding'] = ctx['needAwarding'] from states.StateBattlePreparing import StateBattlePreparing if not BattleReplay.isPlaying(): if isBattleLesson: self.enqueueBattleLesson() else: self.showActionWaitWindow() yield self.nextFrame() self.__currentState = StateInGarage(self.__lessonId, self.__account, self.__checkpoint) ReloadLobbyHelper().reload() self.hideActionWaitWindow() self.__currentState.activate() else: self.__currentState = StateBattlePreparing(self.__lessonId, BigWorld.player()) self.__currentState.activate() BigWorld.overloadBorders(True) if self.__chapter is None: self.__chapter = Chapter() if self.__gui is None: self.__gui = BootcampGUI() for bankName in self.BOOTCAMP_SOUND_BANKS: SoundGroups.g_instance.loadSoundBank(bankName) g_bootcampEvents.onBootcampStarted() from BootcampGarage import g_bootcampGarage g_bootcampGarage.initSubscriptions() return
class LoginView(View, LoginPageMeta, AppRef): def __init__(self, event): super(LoginView, self).__init__() self.__onLoadCallback = event.get('callback', None) self.__loginDispatcher = LoginDispatcher() self.__onLoginQueue = False self.__capsLockState = None self.__EULADispatcher = EULADispatcher() self.__showLoginWallpaperNode = 'showLoginWallpaper' return def _populate(self): super(LoginView, self)._populate() if self.__onLoadCallback is not None: self.__onLoadCallback() self.app.cursorMgr.show() self.__setupDispatcherHandlers(True) self.__loginDispatcher.create() self.__EULADispatcher.create() if self.__EULADispatcher.isShowLicense(): self.__EULADispatcher.onEULAClosed += self.__onEULAClosed else: self.as_enableS(True) self.__loadVersion() Waiting.close() self.addListener(LoginCreateEvent.CREATE_AN_ACCOUNT_REQUEST, self.onTryCreateAccount, EVENT_BUS_SCOPE.LOBBY) MusicController.g_musicController.stopAmbient() MusicController.g_musicController.play( MusicController.MUSIC_EVENT_LOGIN) self.__loadRandomBgImage() if constants.IS_DEVELOPMENT: try: tmp_fil = open('GUIUnitTest.ut', 'r') if tmp_fil.readline().strip() != '': tmp_fil.close() sys.path.append('../../gui_unit_test/scripts') import GUIUnitTest else: tmp_fil.close() except IOError: pass self.__capsLockCallback = BigWorld.callback(0.1, self.__checkCapsLockState) g_battleContext.lastArenaUniqueID = None if constants.IS_DEVELOPMENT: qaTestPath = '../../qat/scripts' import os if os.path.exists(qaTestPath): sys.path.append(qaTestPath) import test return def __onEULAClosed(self): self.__EULADispatcher.onEULAClosed -= self.__onEULAClosed self.as_enableS(True) def _dispose(self): self.__setupDispatcherHandlers(False) self.__onLoadCallback = None self.__loginDispatcher.destroy() self.__loginDispatcher = None self.removeListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) self.removeListener(LoginCreateEvent.CREATE_AN_ACCOUNT_REQUEST, self.onTryCreateAccount, EVENT_BUS_SCOPE.LOBBY) self.__EULADispatcher.onEULAClosed -= self.__onEULAClosed self.__EULADispatcher.destroy() self.__EULADispatcher = None if self.__capsLockCallback is not None: BigWorld.cancelCallback(self.__capsLockCallback) self.__capsLockCallback = None super(LoginView, self)._dispose() return def onSetStatus(self, newStatus, statusCode): self.__setStatus(newStatus, statusCode) def onLoginAppFailed(self, status, message): self.__createAnAccountResponse(True, '') def onSetOptions(self, optionsList, host): options = [] selectedId = 0 for i, (key, name) in enumerate(optionsList): if key == host: selectedId = i options.append({'label': name, 'data': key}) self.as_setServersListS(options, selectedId) def onAfterAutoLoginTimerClearing(self, host, clearInFlash): urls = g_preDefinedHosts.urlIterator(host) if urls is not None: urls.resume() self.__minOrderInQueue = 18446744073709551615L if clearInFlash: self.fireEvent(LoginEvent(LoginEvent.CANCEL_LGN_QUEUE, View.alias)) self.as_cancelLoginQueueS() return def onCancelQueue(self, showWaiting, logged): self.cancelQueue(showWaiting, logged) def onHandleUpdateClientSoftwareNeeded(self): pass def onHandleLoginRejectedRateLimited(self, message): self.__setAutoLogin(WAITING.TITLES_QUEUE, message, WAITING.BUTTONS_EXITQUEUE) def onHandleActivating(self, message): self.__setAutoLogin(WAITING.TITLES_REGISTERING, message, WAITING.BUTTONS_EXIT) def __setAutoLogin(self, waitingOpen, message, waitingClose): Waiting.hide('login') if not self.__onLoginQueue: self.__setLoginQueue(True) self.fireEvent( LoginEventEx(LoginEventEx.SET_AUTO_LOGIN, View.alias, waitingOpen, message, waitingClose), EVENT_BUS_SCOPE.LOBBY) self.addListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) def __onLoginQueueClosed(self, evnet): self.__loginDispatcher.onExitFromAutoLogin() self.removeListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) self.__setLoginQueue(False) self.__setStatus('', 0) def onHandleAutoRegisterInvalidPass(self): self.__createAnAccountResponse( False, MENU.LOGIN_STATUS_LOGIN_REJECTED_NICKNAME_ALREADY_EXIST) def onHandleAutoRegisterActivating(self): self.__createAnAccountResponse(True, '') Waiting.hide('login') def onHandleAutoLoginQueryFailed(self, message): self.__setAutoLogin(WAITING.TITLES_AUTO_LOGIN_QUERY_FAILED, message, WAITING.BUTTONS_CEASE) def onDoAutoLogin(self): LOG_DEBUG('onDoAutoLogin') self.as_doAutoLoginS() def onAccountNameIsInvalid(self): self.__createAnAccountResponse(False, MENU.LOGIN_STATUS_INVALID_NICKNAME) def onNicknameTooSmall(self): self.__createAnAccountResponse( False, i18n.makeString(MENU.LOGIN_STATUS_INVALID_LOGIN_LENGTH) % {'count': _ACCOUNT_NAME_MIN_LENGTH_REG}) def onShowCreateAnAccountDialog(self): LOG_DEBUG('onShowCreateAnAccountDialog') if constants.IS_VIETNAM: self.fireEvent( LoginCreateEvent(LoginCreateEvent.CREATE_ACC, View.alias, DIALOGS.CREATEANACCOUNT_TITLE, DIALOGS.CREATEANACCOUNT_MESSAGE, DIALOGS.CREATEANACCOUNT_SUBMIT), EVENT_BUS_SCOPE.LOBBY) def onHandleAutoRegisterJSONParsingFailed(self): self.__createAnAccountResponse( False, MENU.LOGIN_STATUS_LOGIN_REJECTED_UNABLE_TO_PARSE_JSON) def onHandleKickWhileLogin(self, messageType, message): self.__setAutoLogin(WAITING.titles(messageType), message, WAITING.BUTTONS_CEASE) def onHandleQueue(self, message): if not self.__onLoginQueue: Waiting.close() self.__setLoginQueue(True) self.fireEvent( LoginEventEx(LoginEventEx.SET_LOGIN_QUEUE, View.alias, WAITING.TITLES_QUEUE, message, WAITING.BUTTONS_EXITQUEUE), EVENT_BUS_SCOPE.LOBBY) self.addListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) else: ctx = { 'title': WAITING.TITLES_QUEUE, 'message': message, 'cancelLabel': WAITING.BUTTONS_EXITQUEUE } self.fireEvent( ArgsEvent(ArgsEvent.UPDATE_ARGS, VIEW_ALIAS.LOGIN_QUEUE, ctx), EVENT_BUS_SCOPE.LOBBY) def onConfigLoaded(self, user, password, rememberPwd, isRememberPwd): self.as_setDefaultValuesS(user, password, rememberPwd, isRememberPwd, GUI_SETTINGS.igrCredentialsReset, isRecoveryLinkExists()) def onHandleInvalidPasswordWithToken(self, user, rememberPwd): self.as_setDefaultValuesS(user, '', rememberPwd, GUI_SETTINGS.rememberPassVisible, GUI_SETTINGS.igrCredentialsReset, isRecoveryLinkExists()) def isPwdInvalid(self, password): isInvalid = False if not IS_DEVELOPMENT and not self.__loginDispatcher.isToken(): from external_strings_utils import isPasswordValid isInvalid = not isPasswordValid(password) return isInvalid def isLoginInvalid(self, login): isInvalid = False if not IS_DEVELOPMENT and not self.__loginDispatcher.isToken(): from external_strings_utils import isAccountLoginValid isInvalid = not isAccountLoginValid(login) return isInvalid def onLogin(self, user, password, host): self.__loginDispatcher.onLogin(user, password, host, self.__onEndLoginTrying) self.as_enableS(False) def onRegister(self): openRegistrationWebsite() def onRecovery(self): openRecoveryPasswordWebsite() def onSetRememberPassword(self, remember): self.__loginDispatcher.setRememberPwd(remember) def onExitFromAutoLogin(self): self.__loginDispatcher.onExitFromAutoLogin() def __onEndLoginTrying(self): self.as_enableS(True) def onTryCreateAccount(self, event): self.__loginDispatcher.onTryCreateAnAccount(event.message) def steamLogin(self): self.__loginDispatcher.steamLogin() def doUpdate(self): if not BigWorld.wg_quitAndStartLauncher(): self.__setStatus( i18n.convert( i18n.makeString(MENU.LOGIN_STATUS_LAUNCHERNOTFOUND)), 0) def isToken(self): return self.__loginDispatcher.isToken() def resetToken(self): LOG_DEBUG('Token has been invalidated') self.__loginDispatcher.resetToken() def onEscape(self): DialogsInterface.showI18nConfirmDialog( 'quit', self.__onConfirmClosed, focusedID=DialogsInterface.DIALOG_BUTTON_ID.CLOSE) def __onConfirmClosed(self, isOk): if isOk: self.destroy() BigWorld.quit() def __checkCapsLockState(self): if self.__capsLockState != BigWorld.wg_isCapsLockOn(): self.__capsLockState = BigWorld.wg_isCapsLockOn() self.__setCapsLockState(self.__capsLockState) self.__capsLockCallback = BigWorld.callback(0.1, self.__checkCapsLockState) def __setCapsLockState(self, isActive): self.as_setCapsLockStateS(isActive) def __loadVersion(self): sec = ResMgr.openSection(VERSION_FILE_PATH) version = i18n.makeString( sec.readString('appname')) + ' ' + sec.readString('version') self.as_setVersionS(version) def __setStatus(self, status, statusCode): self.as_setErrorMessageS(status, statusCode) Waiting.close() def __createAnAccountResponse(self, success, errorMsg): self.fireEvent( LoginEvent(LoginEvent.CLOSE_CREATE_AN_ACCOUNT, View.alias, success, errorMsg)) def __loadRandomBgImage(self): wallpapperSettings = self.__readUserPreferenceLogin() wallpaperFiles = self.__getWallpapersList() BG_IMAGES_PATH = '../maps/login/%s.png' if wallpapperSettings['show'] and len(wallpaperFiles) > 0: if len(wallpaperFiles) == 1: newFile = wallpaperFiles[0] else: newFile = '' while True: newFile = random.choice(wallpaperFiles) if newFile != wallpapperSettings['filename']: break self.__saveUserPreferencesLogin(newFile) bgImage = BG_IMAGES_PATH % newFile else: bgImage = BG_IMAGES_PATH % '__login_bg' wallpapperSettings['show'] = False self.as_showWallpaperS(wallpapperSettings['show'], bgImage) def __getWallpapersList(self): result = [] ds = ResMgr.openSection(SCALEFORM_WALLPAPER_PATH) for filename in ds.keys(): if filename[-4:] == '.png' and filename[0:2] != '__': result.append(filename[0:-4]) return result def __readUserPreferenceLogin(self): result = {'show': True, 'filename': ''} userPrefs = Settings.g_instance.userPrefs ds = None if not userPrefs.has_key(Settings.KEY_LOGINPAGE_PREFERENCES): userPrefs.write(Settings.KEY_LOGINPAGE_PREFERENCES, '') self.__saveUserPreferencesLogin(result['filename']) else: ds = userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] result['filename'] = ds.readString('lastLoginBgImage', '') if ds is None: ds = userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] if not ds.has_key(self.__showLoginWallpaperNode): self.__createNodeShowWallpaper() result['show'] = ds.readBool(self.__showLoginWallpaperNode, True) return result def __saveUserPreferencesLogin(self, filename): ds = Settings.g_instance.userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] ds.writeString('lastLoginBgImage', filename) def __createNodeShowWallpaper(self): ds = Settings.g_instance.userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] ds.writeBool(self.__showLoginWallpaperNode, True) def cancelQueue(self, showWaiting=True, logged=False): if self.__onLoginQueue: if showWaiting: Waiting.show('enter') self.__setLoginQueue(False) self.fireEvent(LoginEvent(LoginEvent.CANCEL_LGN_QUEUE, View.alias)) self.as_cancelLoginQueueS() def __setupDispatcherHandlers(self, setup): for methodName in LoginDispatcher.EVENTS: handler = getattr(self, methodName) event = getattr(self.__loginDispatcher, methodName) if setup: event += handler else: event -= handler def __setLoginQueue(self, value): self.__onLoginQueue = value
def __processEULA(_, callback=None): eula = EULADispatcher() yield eula.processLicense() eula.fini() callback(True)
def start(self, lessonNum, isBattleLesson): LOG_DEBUG_DEV_BOOTCAMP('Starting bootcamp', lessonNum, isBattleLesson) if BattleReplay.g_replayCtrl.isPlaying: self.__replayController = BootcampReplayController() self.__replayController.init() g_bootcampEvents.onInterludeVideoStarted += self.onInterludeVideoStarted g_bootcampEvents.onBattleLessonFinished += self.onBattleLessonFinished g_bootcampEvents.onGarageLessonFinished += self.onGarageLessonFinished g_bootcampEvents.onBattleLoaded += self.onBattleLoaded g_bootcampEvents.onResultScreenPopulated += self.onResultScreenPopulated g_bootcampEvents.onResultScreenFinished += self.onResultScreenFinished g_bootcampEvents.onRequestBootcampFinish += self.onRequestBootcampFinish g_bootcampEvents.onBootcampBecomeNonPlayer += self.onBootcampBecomeNonPlayer g_playerEvents.onAvatarBecomeNonPlayer += self.__onAvatarBecomeNonPlayer g_playerEvents.onArenaCreated += self.__onArenaCreated self.connectionMgr.onDisconnected += self.__cm_onDisconnected self.__requestBootcampFinishFromBattle = False ctx = self.getContext() isRelogin = ctx['relogin'] LOG_DEBUG_DEV_BOOTCAMP('IsRelogin', isRelogin) autoStartBattle = isRelogin or BattleReplay.isPlaying() if not autoStartBattle: self.showActionWaitWindow() yield self.settingsCore.serverSettings.settingsCache.update() self.settingsCore.serverSettings.applySettings() isNewbie = False if ctx['isNewbieSettings'] and not ctx['completed']: isNewbie = True self.__setupPreferences(isNewbie) self.hideActionWaitWindow() eula = EULADispatcher() yield eula.processLicense() eula.fini() self.__running = True self.__lessonId = lessonNum self.__lessonType = BOOTCAMP_LESSON.BATTLE if isBattleLesson else BOOTCAMP_LESSON.GARAGE if (lessonNum == 0 or not isBattleLesson) and not autoStartBattle: self.showActionWaitWindow() yield self.itemsCache.update(CACHE_SYNC_REASON.SHOW_GUI) self.__isRecruit = isCurrentUserRecruit() self.hideActionWaitWindow() if self.__currentState is not None: self.__currentState.deactivate() self.__hangarSpace = ctx['hangarSpace'] self.__hangarSpacePremium = ctx['hangarSpacePremium'] self.__bonuses = ctx['bonuses'] showRewards = ctx['needAwarding'] previousLesson = self.getContextIntParameter('lastLessonNum') - 1 if previousLesson >= 0 and previousLesson < len( self.__bonuses['battle']): self.__bonuses['battle'][previousLesson][ 'showRewards'] = showRewards self.__nation = ctx['nation'] self.__nationsData = ctx['nationsData'] self.__p['completed'] = ctx['completed'] self.__p['needAwarding'] = ctx['needAwarding'] weave(self.__weaver) if AccountSettings.isCleanPC(): dropNewSettingsCounters() g_bootcampEvents.onBootcampStarted() if not autoStartBattle: if isBattleLesson: g_prbLoader.createBattleDispatcher() g_prbLoader.setEnabled(True) self.enqueueBattleLesson() else: self.showActionWaitWindow() yield self.nextFrame() self.__currentState = StateInGarage() self.__lobbyReloader.reload() self.hideActionWaitWindow() self.__currentState.activate() else: from states.StateBattlePreparing import StateBattlePreparing self.__currentState = StateBattlePreparing(self.__lessonId, BigWorld.player()) self.__currentState.activate() BigWorld.overloadBorders(True) if self.__chapter is None: self.__chapter = Chapter() if self.__gui is None: self.__gui = BootcampGUI() WWISE.loadSoundPool(self.BOOTCAMP_SOUND_BANKS, 'Bootcamp') self.__combatSoundAssistant = BootcampCombatSoundAssistant() self.sessionProvider.getCtx().setPlayerFullNameFormatter( _BCNameFormatter()) return
class LoginView(View, LoginPageMeta, AppRef): def __init__(self, event): super(LoginView, self).__init__() self.__onLoadCallback = event.get('callback', None) self.__loginDispatcher = LoginDispatcher() self.__onLoginQueue = False self.__capsLockState = None self.__EULADispatcher = EULADispatcher() self.__showLoginWallpaperNode = 'showLoginWallpaper' return def _populate(self): super(LoginView, self)._populate() if self.__onLoadCallback is not None: self.__onLoadCallback() self.app.cursorMgr.show() self.__setupDispatcherHandlers(True) self.__loginDispatcher.create() self.__EULADispatcher.create() if self.__EULADispatcher.isShowLicense(): self.__EULADispatcher.onEULAClosed += self.__onEULAClosed else: self.as_enableS(True) self.__loadVersion() Waiting.close() self.addListener(LoginCreateEvent.CREATE_AN_ACCOUNT_REQUEST, self.onTryCreateAccount, EVENT_BUS_SCOPE.LOBBY) MusicController.g_musicController.stopAmbient() MusicController.g_musicController.play(MusicController.MUSIC_EVENT_LOGIN) self.__loadRandomBgImage() if constants.IS_DEVELOPMENT: try: tmp_fil = open('GUIUnitTest.ut', 'r') if tmp_fil.readline().strip() != '': tmp_fil.close() sys.path.append('../../gui_unit_test/scripts') import GUIUnitTest else: tmp_fil.close() except IOError: pass self.__capsLockCallback = BigWorld.callback(0.1, self.__checkCapsLockState) g_battleContext.lastArenaUniqueID = None if constants.IS_DEVELOPMENT: qaTestPath = '../../qat/scripts' import os if os.path.exists(qaTestPath): sys.path.append(qaTestPath) import test return def __onEULAClosed(self): self.__EULADispatcher.onEULAClosed -= self.__onEULAClosed self.as_enableS(True) def _dispose(self): self.__setupDispatcherHandlers(False) self.__onLoadCallback = None self.__loginDispatcher.destroy() self.__loginDispatcher = None self.removeListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) self.removeListener(LoginCreateEvent.CREATE_AN_ACCOUNT_REQUEST, self.onTryCreateAccount, EVENT_BUS_SCOPE.LOBBY) self.__EULADispatcher.onEULAClosed -= self.__onEULAClosed self.__EULADispatcher.destroy() self.__EULADispatcher = None if self.__capsLockCallback is not None: BigWorld.cancelCallback(self.__capsLockCallback) self.__capsLockCallback = None super(LoginView, self)._dispose() return def onSetStatus(self, newStatus, statusCode): self.__setStatus(newStatus, statusCode) def onLoginAppFailed(self, status, message): self.__createAnAccountResponse(True, '') def onSetOptions(self, optionsList, host): options = [] selectedId = 0 for i, (key, name) in enumerate(optionsList): if key == host: selectedId = i options.append({'label': name, 'data': key}) self.as_setServersListS(options, selectedId) def onAfterAutoLoginTimerClearing(self, host, clearInFlash): urls = g_preDefinedHosts.urlIterator(host) if urls is not None: urls.resume() self.__minOrderInQueue = 18446744073709551615L if clearInFlash: self.fireEvent(LoginEvent(LoginEvent.CANCEL_LGN_QUEUE, View.alias)) self.as_cancelLoginQueueS() return def onCancelQueue(self, showWaiting, logged): self.cancelQueue(showWaiting, logged) def onHandleUpdateClientSoftwareNeeded(self): pass def onHandleLoginRejectedRateLimited(self, message): self.__setAutoLogin(WAITING.TITLES_QUEUE, message, WAITING.BUTTONS_EXITQUEUE) def onHandleActivating(self, message): self.__setAutoLogin(WAITING.TITLES_REGISTERING, message, WAITING.BUTTONS_EXIT) def __setAutoLogin(self, waitingOpen, message, waitingClose): Waiting.hide('login') if not self.__onLoginQueue: self.__setLoginQueue(True) self.fireEvent(LoginEventEx(LoginEventEx.SET_AUTO_LOGIN, View.alias, waitingOpen, message, waitingClose), EVENT_BUS_SCOPE.LOBBY) self.addListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) def __onLoginQueueClosed(self, evnet): self.__loginDispatcher.onExitFromAutoLogin() self.removeListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) self.__setLoginQueue(False) self.__setStatus('', 0) def onHandleAutoRegisterInvalidPass(self): self.__createAnAccountResponse(False, MENU.LOGIN_STATUS_LOGIN_REJECTED_NICKNAME_ALREADY_EXIST) def onHandleAutoRegisterActivating(self): self.__createAnAccountResponse(True, '') Waiting.hide('login') def onHandleAutoLoginQueryFailed(self, message): self.__setAutoLogin(WAITING.TITLES_AUTO_LOGIN_QUERY_FAILED, message, WAITING.BUTTONS_CEASE) def onDoAutoLogin(self): LOG_DEBUG('onDoAutoLogin') self.as_doAutoLoginS() def onAccountNameIsInvalid(self): self.__createAnAccountResponse(False, MENU.LOGIN_STATUS_INVALID_NICKNAME) def onNicknameTooSmall(self): self.__createAnAccountResponse(False, i18n.makeString(MENU.LOGIN_STATUS_INVALID_LOGIN_LENGTH) % {'count': _ACCOUNT_NAME_MIN_LENGTH_REG}) def onShowCreateAnAccountDialog(self): LOG_DEBUG('onShowCreateAnAccountDialog') if constants.IS_VIETNAM: self.fireEvent(LoginCreateEvent(LoginCreateEvent.CREATE_ACC, View.alias, DIALOGS.CREATEANACCOUNT_TITLE, DIALOGS.CREATEANACCOUNT_MESSAGE, DIALOGS.CREATEANACCOUNT_SUBMIT), EVENT_BUS_SCOPE.LOBBY) def onHandleAutoRegisterJSONParsingFailed(self): self.__createAnAccountResponse(False, MENU.LOGIN_STATUS_LOGIN_REJECTED_UNABLE_TO_PARSE_JSON) def onHandleKickWhileLogin(self, messageType, message): self.__setAutoLogin(WAITING.titles(messageType), message, WAITING.BUTTONS_CEASE) def onHandleQueue(self, message): if not self.__onLoginQueue: Waiting.close() self.__setLoginQueue(True) self.fireEvent(LoginEventEx(LoginEventEx.SET_LOGIN_QUEUE, View.alias, WAITING.TITLES_QUEUE, message, WAITING.BUTTONS_EXITQUEUE), EVENT_BUS_SCOPE.LOBBY) self.addListener(LoginEventEx.ON_LOGIN_QUEUE_CLOSED, self.__onLoginQueueClosed, EVENT_BUS_SCOPE.LOBBY) else: ctx = {'title': WAITING.TITLES_QUEUE, 'message': message, 'cancelLabel': WAITING.BUTTONS_EXITQUEUE} self.fireEvent(ArgsEvent(ArgsEvent.UPDATE_ARGS, VIEW_ALIAS.LOGIN_QUEUE, ctx), EVENT_BUS_SCOPE.LOBBY) def onConfigLoaded(self, user, password, rememberPwd, isRememberPwd): self.as_setDefaultValuesS(user, password, rememberPwd, isRememberPwd, GUI_SETTINGS.igrCredentialsReset, isRecoveryLinkExists()) def onHandleInvalidPasswordWithToken(self, user, rememberPwd): self.as_setDefaultValuesS(user, '', rememberPwd, GUI_SETTINGS.rememberPassVisible, GUI_SETTINGS.igrCredentialsReset, isRecoveryLinkExists()) def isPwdInvalid(self, password): isInvalid = False if not IS_DEVELOPMENT and not self.__loginDispatcher.isToken(): from external_strings_utils import isPasswordValid isInvalid = not isPasswordValid(password) return isInvalid def isLoginInvalid(self, login): isInvalid = False if not IS_DEVELOPMENT and not self.__loginDispatcher.isToken(): from external_strings_utils import isAccountLoginValid isInvalid = not isAccountLoginValid(login) return isInvalid def onLogin(self, user, password, host): self.__loginDispatcher.onLogin(user, password, host, self.__onEndLoginTrying) self.as_enableS(False) def onRegister(self): openRegistrationWebsite() def onRecovery(self): openRecoveryPasswordWebsite() def onSetRememberPassword(self, remember): self.__loginDispatcher.setRememberPwd(remember) def onExitFromAutoLogin(self): self.__loginDispatcher.onExitFromAutoLogin() def __onEndLoginTrying(self): self.as_enableS(True) def onTryCreateAccount(self, event): self.__loginDispatcher.onTryCreateAnAccount(event.message) def steamLogin(self): self.__loginDispatcher.steamLogin() def doUpdate(self): if not BigWorld.wg_quitAndStartLauncher(): self.__setStatus(i18n.convert(i18n.makeString(MENU.LOGIN_STATUS_LAUNCHERNOTFOUND)), 0) def isToken(self): return self.__loginDispatcher.isToken() def resetToken(self): LOG_DEBUG('Token has been invalidated') self.__loginDispatcher.resetToken() def onEscape(self): DialogsInterface.showI18nConfirmDialog('quit', self.__onConfirmClosed, focusedID=DialogsInterface.DIALOG_BUTTON_ID.CLOSE) def __onConfirmClosed(self, isOk): if isOk: self.destroy() BigWorld.quit() def __checkCapsLockState(self): if self.__capsLockState != BigWorld.wg_isCapsLockOn(): self.__capsLockState = BigWorld.wg_isCapsLockOn() self.__setCapsLockState(self.__capsLockState) self.__capsLockCallback = BigWorld.callback(0.1, self.__checkCapsLockState) def __setCapsLockState(self, isActive): self.as_setCapsLockStateS(isActive) def __loadVersion(self): sec = ResMgr.openSection(VERSION_FILE_PATH) version = i18n.makeString(sec.readString('appname')) + ' ' + sec.readString('version') self.as_setVersionS(version) def __setStatus(self, status, statusCode): self.as_setErrorMessageS(status, statusCode) Waiting.close() def __createAnAccountResponse(self, success, errorMsg): self.fireEvent(LoginEvent(LoginEvent.CLOSE_CREATE_AN_ACCOUNT, View.alias, success, errorMsg)) def __loadRandomBgImage(self): wallpapperSettings = self.__readUserPreferenceLogin() wallpaperFiles = self.__getWallpapersList() BG_IMAGES_PATH = '../maps/login/%s.png' if wallpapperSettings['show'] and len(wallpaperFiles) > 0: if len(wallpaperFiles) == 1: newFile = wallpaperFiles[0] else: newFile = '' while True: newFile = random.choice(wallpaperFiles) if newFile != wallpapperSettings['filename']: break self.__saveUserPreferencesLogin(newFile) bgImage = BG_IMAGES_PATH % newFile else: bgImage = BG_IMAGES_PATH % '__login_bg' wallpapperSettings['show'] = False self.as_showWallpaperS(wallpapperSettings['show'], bgImage) def __getWallpapersList(self): result = [] ds = ResMgr.openSection(SCALEFORM_WALLPAPER_PATH) for filename in ds.keys(): if filename[-4:] == '.png' and filename[0:2] != '__': result.append(filename[0:-4]) return result def __readUserPreferenceLogin(self): result = {'show': True, 'filename': ''} userPrefs = Settings.g_instance.userPrefs ds = None if not userPrefs.has_key(Settings.KEY_LOGINPAGE_PREFERENCES): userPrefs.write(Settings.KEY_LOGINPAGE_PREFERENCES, '') self.__saveUserPreferencesLogin(result['filename']) else: ds = userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] result['filename'] = ds.readString('lastLoginBgImage', '') if ds is None: ds = userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] if not ds.has_key(self.__showLoginWallpaperNode): self.__createNodeShowWallpaper() result['show'] = ds.readBool(self.__showLoginWallpaperNode, True) return result def __saveUserPreferencesLogin(self, filename): ds = Settings.g_instance.userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] ds.writeString('lastLoginBgImage', filename) def __createNodeShowWallpaper(self): ds = Settings.g_instance.userPrefs[Settings.KEY_LOGINPAGE_PREFERENCES] ds.writeBool(self.__showLoginWallpaperNode, True) def cancelQueue(self, showWaiting = True, logged = False): if self.__onLoginQueue: if showWaiting: Waiting.show('enter') self.__setLoginQueue(False) self.fireEvent(LoginEvent(LoginEvent.CANCEL_LGN_QUEUE, View.alias)) self.as_cancelLoginQueueS() def __setupDispatcherHandlers(self, setup): for methodName in LoginDispatcher.EVENTS: handler = getattr(self, methodName) event = getattr(self.__loginDispatcher, methodName) if setup: event += handler else: event -= handler def __setLoginQueue(self, value): self.__onLoginQueue = value