예제 #1
0
 def __init__(self):
     dict.__init__(self)
     self.__oldFormat = False
     preferences = Settings.g_instance.userPrefs
     if not preferences.has_key(Settings.KEY_LOGIN_INFO):
         preferences.write(Settings.KEY_LOGIN_INFO, '')
     elif preferences[Settings.KEY_LOGIN_INFO].readString('login', ''):
         self.__oldFormat = True
         self.__readOldPreferencesFormat(
             preferences[Settings.KEY_LOGIN_INFO])
         _LOG_PERSONAL_DATA('Read old format preferences: {0}'.format(self))
     else:
         try:
             loginInfo = json.loads(_decrypt(
                 preferences[Settings.KEY_LOGIN_INFO].readString(
                     'data', '')),
                                    encoding='utf-8')
             self.update(loginInfo)
             _LOG_PERSONAL_DATA(
                 'Read login info from preferences.xml: {0}'.format(self))
         except ValueError:
             LOG_WARNING('Ignoring login info from preferences.xml')
예제 #2
0
def makeStringJSON(key, argsStr):
    try:
        args = json.loads(argsStr)
        if isinstance(args, dict):
            utf8args = {}
            for k, v in args.iteritems():
                utf8args[k.encode('utf-8')] = v.encode('utf-8')

            return makeString(key, **utf8args)
        utf8args = []
        for v in args:
            if isinstance(v, str):
                utf8args.append(v.encode('utf-8'))
            else:
                utf8args.append(v)

        return makeString(key, *tuple(utf8args))
    except Exception:
        LOG_CURRENT_EXCEPTION()
        LOG_WARNING('Failed to translate JSON-encoded string to dict or list',
                    key, argsStr)
        return key
 def __onDualGunStateUpdated(self, value):
     if self.__chargeState == DUALGUN_CHARGER_STATUS.PREPARING:
         self.__deferredGunState = value
         return
     activeGun, cooldownTimes, states = value
     self.__debuffBaseTime = cooldownTimes[
         DUAL_GUN.COOLDOWNS.DEBUFF].baseTime
     if len(states) < 2:
         LOG_WARNING('Got incorrect dualgun states length, aborting')
         return
     leftGunState = self._convertServerStateToUI(
         states[DUAL_GUN.ACTIVE_GUN.LEFT])
     rightGunState = self._convertServerStateToUI(
         states[DUAL_GUN.ACTIVE_GUN.RIGHT])
     self.__updateGunState(DUAL_GUN.COOLDOWNS.LEFT, leftGunState,
                           cooldownTimes)
     self.__updateGunState(DUAL_GUN.COOLDOWNS.RIGHT, rightGunState,
                           cooldownTimes)
     leftTime = cooldownTimes[DUAL_GUN.COOLDOWNS.SWITCH].leftTime
     baseTime = cooldownTimes[DUAL_GUN.COOLDOWNS.SWITCH].baseTime
     activeGunReloadingTimeLeft = max(leftTime,
                                      cooldownTimes[activeGun].leftTime)
     switchLeftTime = int(activeGunReloadingTimeLeft *
                          DualGunConstants.TIME_MULTIPLIER)
     switchBaseTime = int(baseTime * DualGunConstants.TIME_MULTIPLIER)
     if self.__reloadEventReceived:
         if cooldownTimes[activeGun].leftTime != activeGunReloadingTimeLeft:
             self.__soundManager.onWeaponChanged(switchLeftTime /
                                                 MS_IN_SECOND)
         self.__reloadEventReceived = False
     self.as_updateActiveGunS(activeGun, switchLeftTime, switchBaseTime)
     self.__updateDualGunState(states, cooldownTimes)
     self.__updateChargeTimerState()
     if not self.__debuffInProgress:
         timeUntilDoubleShot = self.__getTimeUntilNextDoubleShot(
             cooldownTimes)
         self.__currentTotalTimeTimer = timeUntilDoubleShot * DualGunConstants.TIME_MULTIPLIER
         self.__updateTimeUntilNextDoubleShot(increaseByDebuff=False)
예제 #4
0
    def updateActiveAreas(self, areas):
        areaGetter = self.config.getArea
        itemGetter = self.config.getItem
        args = []
        for area in areas:
            areaID = area.getID()
            props = areaGetter(area.getID())
            path = props['path']
            targetID = props['targetID']
            if path is None or targetID is None:
                targetID = area.getTargetID()
                item = itemGetter(targetID)
                if item is not None:
                    path = item['path']
                else:
                    LOG_ERROR(
                        'TUTORIAL. Target path for active area not found',
                        areaID)
                    continue
            if targetID is None or path is None:
                LOG_WARNING(
                    'TUTORIAL. Target path or ID for active area not found',
                    areaID, targetID, path)
                continue
            action = area.getAction(targetID)
            if action is not None:
                actionType = action.getType()
            else:
                actionType = 0
            args.extend([
                areaID, targetID, path, props['position'][0],
                props['position'][1], props['size'][0], props['size'][1],
                area.isUseMask(),
                area.getHideMaskMode(), props['changeSize'], actionType
            ])

        self.call('Tutorial.ActiveAreas.Update', args)
        return
 def __doLoadView(self, loadParams, *args, **kwargs):
     key = loadParams.viewKey
     viewTutorialID = self.__app.tutorialManager.getViewTutorialID(key.name)
     pyEntity = None
     if key in self.__loadingItems:
         item = self.__loadingItems[key]
         item.isCancelled = False
         if not item.pyEntity.isDisposed():
             pyEntity = item.pyEntity
     if pyEntity is not None:
         pyEntity.onDispose += self.__handleViewDispose
         viewDict = {
             'config': pyEntity.settings.getDAAPIObject(),
             'alias': key.alias,
             'name': key.name,
             'viewTutorialId': viewTutorialID
         }
         self.as_loadViewS(viewDict)
     else:
         pyEntity, factoryIdx = g_entitiesFactories.factory(
             key.alias, *args, **kwargs)
         if pyEntity is not None:
             pyEntity.setUniqueName(key.name)
             pyEntity.setEnvironment(self.__app)
             pyEntity.onDispose += self.__handleViewDispose
             self.__loadingItems[key] = _LoadingItem(
                 loadParams, pyEntity, factoryIdx, args, kwargs)
             self.onViewLoadInit(pyEntity)
             viewDict = {
                 'config': pyEntity.settings.getDAAPIObject(),
                 'alias': key.alias,
                 'name': key.name,
                 'viewTutorialId': viewTutorialID
             }
             self.as_loadViewS(viewDict)
         else:
             LOG_WARNING('PyEntity for alias %s is None' % key.alias)
     return pyEntity
 def _action(self, basePointIndex, action, nextActionTime):
     if action in (SECTOR_BASE_ACTION.ENTER,
                   SECTOR_BASE_ACTION.ENTER_WHILE_CD):
         self._controller.onVehicleEntered(self._type, basePointIndex, None)
         self._inCircleIdx = basePointIndex
     elif action in (SECTOR_BASE_ACTION.LEAVE,
                     SECTOR_BASE_ACTION.LEAVE_WHILE_CD):
         self._controller.onVehicleLeft(self._type, basePointIndex)
         self._inCircleIdx = -1
     elif action == SECTOR_BASE_ACTION.COOLDOWN:
         duration = self._getTime(nextActionTime)
         self._sessionProvider.invalidateVehicleState(
             VEHICLE_VIEW_STATE.CAPTURE_BLOCKED, duration)
         if self.__blockedCB is not None:
             BigWorld.cancelCallback(self.__blockedCB)
             self.__blockedCB = None
         self.__blockedCB = BigWorld.callback(duration,
                                              self.__stopBlockState)
     else:
         if action == SECTOR_BASE_ACTION.CAPTURED:
             return
         LOG_WARNING('SectorBasePlugin: NO SUCH ACTION ', action)
     return
def pickPacker(itemTypeID):
    if itemTypeID == GUI_ITEM_TYPE.CAMOUFLAGE:
        return CamouflagePacker
    if itemTypeID == GUI_ITEM_TYPE.PAINT:
        return PaintPacker
    if itemTypeID == GUI_ITEM_TYPE.EMBLEM:
        return DecalPacker
    if itemTypeID == GUI_ITEM_TYPE.INSCRIPTION:
        return DecalPacker
    if itemTypeID == GUI_ITEM_TYPE.MODIFICATION:
        return ModificationPacker
    if itemTypeID == GUI_ITEM_TYPE.PROJECTION_DECAL:
        return ProjectionDecalPacker
    if itemTypeID == GUI_ITEM_TYPE.INSIGNIA:
        return InsigniaPacker
    if itemTypeID == GUI_ITEM_TYPE.PERSONAL_NUMBER:
        return PersonalNumberPacker
    if itemTypeID == GUI_ITEM_TYPE.SEQUENCE:
        return SequencePacker
    if itemTypeID == GUI_ITEM_TYPE.ATTACHMENT:
        return AttachmentPacker
    LOG_WARNING('Unsupported packer for the given type', itemTypeID)
    return CustomizationPacker
 def __init__(self, position, equipment, direction=_DEFAULT_STRIKE_DIRECTION):
     super(_ArenaBoundsAreaStrikeSelector, self).__init__(position, equipment, direction)
     self.__arena = BigWorld.player().arena
     self.__wasInsideArenaBounds = True
     self.__outFromBoundsAimArea = None
     self.__insetRadius = 0
     size = Vector2(equipment.areaWidth, equipment.areaLength)
     visualPath = equipment.areaVisual
     color = None
     if isinstance(equipment, ArcadeEquipmentConfigReader):
         aimLimits = equipment.arenaAimLimits
         if aimLimits:
             self.__insetRadius = aimLimits.insetRadius
             color = aimLimits.areaColor
             if aimLimits.areaSwitch:
                 visualPath = aimLimits.areaSwitch
     else:
         LOG_WARNING("Equipment:'{}' is using '{}' strike selector, but doesn't have '{}' params".format(equipment, _ArenaBoundsAreaStrikeSelector.__name__, ArcadeEquipmentConfigReader.__name__))
     self.__outFromBoundsAimArea = CombatSelectedArea()
     self.__outFromBoundsAimArea.setup(position, direction, size, visualPath, color, marker=None)
     self.__outFromBoundsAimArea.setGUIVisible(False)
     self.__updatePositionsAndVisibility(position)
     return
예제 #9
0
    def _applyTankmanSkill(cls, vehicle, affectedTankmens, skillsByRoles,
                           selectedSkills):
        nationID, vehicleTypeID = vehicle.descriptor.type.id
        success = False
        for roleIdx, role in affectedTankmens:
            skills = skillsByRoles[role]
            veh_crew = vehicle.crew
            for idx, (vehCrewRoleIdx, vehCrewRole) in enumerate(veh_crew):
                if vehCrewRoleIdx == roleIdx:
                    prevRoleLevel = vehCrewRole.roleLevel if vehCrewRole is not None else tankmen.MAX_SKILL_LEVEL
                    veh_crew[idx] = (roleIdx,
                                     cmp_helpers.createTankman(
                                         nationID, vehicleTypeID, role,
                                         prevRoleLevel,
                                         skills.intersection(selectedSkills)))
                    success = True
                    break
            else:
                LOG_WARNING(
                    'Tankmen with role index {} has not been found'.format(
                        roleIdx))

        return success
예제 #10
0
 def __calcPitchAngle(self, distanceFromFocus, dir):
     fov = BigWorld.projection().fov
     near = BigWorld.projection().nearPlane
     yLength = near * math.tan(fov * 0.5)
     alpha = -self.__aimMatrix.pitch
     a = distanceFromFocus
     b = dir.length
     A = 2.0 * a * math.cos(alpha)
     B = a * a - b * b
     D = A * A - 4.0 * B
     if D > 0.0:
         c1 = (A + math.sqrt(D)) * 0.5
         c2 = (A - math.sqrt(D)) * 0.5
         c = c1 if c1 > c2 else c2
         cosValue = (a * a + b * b - c * c) / (2.0 * a * b) if a * b != 0.0 else 2.0
         if cosValue < -1.0 or cosValue > 1.0:
             LOG_WARNING('Invalid arg for acos: %f; distanceFromFocus: %f, dir: %s' % (cosValue, distanceFromFocus, dir))
             return -dir.pitch
         beta = math.acos(cosValue)
         eta = math.pi - beta
         return -dir.pitch - eta
     else:
         return -dir.pitch
예제 #11
0
 def refreshRoomListForChangePlane(self, planeID, planeLevel):
     """
     Refresh training list room, button enable for change plane on client before server send new list options
     This is client fix for pause from change plane and button enable for training room
     :type planeLevel: int
     :param planeLevel: plane level
     :return: :rtype:
     """
     self.planeLevel = planeLevel
     self.planeID = planeID
     if not self.__roomList:
         return
     if self.__roomsListActive and not self.__roomCreateActive and self.positionInUI == TrainingRoomHelper.TrainingRoomUI.IN_LIST_ROOM:
         updateRooms = [
             self.__convertRoomToFlashVO(room) for room in self.__roomList
         ]
         try:
             self.__account.call_1('trainingRoomsList.UpdateRooms',
                                   updateRooms)
         except:
             LOG_WARNING(
                 'TrainingRoomHelper:refreshRoomListForChangePlane trainingRoomsList.UpdateRooms not found!'
             )
예제 #12
0
    def cleanUpDirtyViewsByScope(self, scope, viewAlias):
        scopeTarget = '%s/%s' % (scope, viewAlias)
        if scopeTarget in self.__loadedTokens:
            for token in self.__loadedTokens[scopeTarget]:
                incorrectViewName = self.as_getNameByTokenS(token)
                if incorrectViewName:
                    incorrectViewType = self.as_getViewTypeByTokenS(token)
                    if incorrectViewType not in (VIEW_TYPE.VIEW,
                                                 VIEW_TYPE.LOBBY_SUB):
                        criteria = {
                            POP_UP_CRITERIA.UNIQUE_NAME: incorrectViewName
                        }
                        pyView = self.getView(incorrectViewType, criteria)
                        if pyView:
                            LOG_DEBUG(
                                '%s was automatically closed, because its scope has been destroyed.'
                                % pyView.settings.alias)
                            pyView.destroy()
                        else:
                            LOG_WARNING('pyView is not found', scopeTarget)

            self.__loadedTokens.pop(scopeTarget, None)
        return
예제 #13
0
 def __cacheApperance(self, vId, info):
     assembler = vehicle_assembler.createAssembler()
     prereqs = info.typeDescr.prerequisites(True)
     compoundAssembler, assemblerPrereqs = assembler.prerequisites(
         info.typeDescr, vId, info.health, info.isCrewActive,
         info.isTurretDetached, info.outfitCD)
     prereqs += assemblerPrereqs
     if vId in self.__assemblersCache:
         assemblerData = self.__assemblersCache.get(vId, None)
         if assemblerData is not None:
             oldAssembler = assemblerData.assembler
             LOG_WARNING(
                 'The latest resources for the vehicle are not loaded yet, deleting old assember and creating new one %s %s'
                 % (info.typeDescr.name, assemblerData.info.typeDescr))
             del oldAssembler
         del self.__assemblersCache[vId]
     self.__assemblersCache[vId] = _AssemblerData(compoundAssembler,
                                                  assembler, info, prereqs)
     if self.__spaceLoaded:
         BigWorld.loadResourceListBG(prereqs,
                                     partial(_resourceLoaded, prereqs, vId),
                                     loadingPriority(vId))
     return (compoundAssembler, prereqs)
예제 #14
0
def installEquipmentOnVehicle(vehicle, intCD, slotIndex, itemsCache=None):
    """
    Installs equipement on the provided vehicle in particular slot
    :param vehicle: target Vehicle
    :param intCD: equipment intCD
    :param slotIndex: 0, 1, 2 - indexes
    :return:
    """
    if intCD and itemsCache is not None:
        equipment = itemsCache.items.getItemByCD(int(intCD))
    else:
        equipment = None
    if not (equipment and equipment.itemTypeID == GUI_ITEM_TYPE.EQUIPMENT):
        raise AssertionError('Invalid type of item: {}'.format(
            equipment.itemTypeID))
        success, reason = equipment.mayInstall(vehicle, slotIndex)
        if not success:
            LOG_WARNING(
                'Equipment could not installed, reason: '.format(reason))
            return
    vehicle.equipment.regularConsumables[slotIndex] = equipment
    vehicle.equipmentLayout.regularConsumables[slotIndex] = equipment
    return
예제 #15
0
def __deepUpdate_tuple(dst_tpl, src_lst, path):
    success = True
    failIndices = []
    dst_len = len(dst_tpl)
    for i, src_val in enumerate(src_lst[:dst_len]):
        src_ = deepUpdate(dst_tpl[i], src_val, path + '[%d]' % i)
        if src_ is not None:
            success = False
            failIndices.append(i)
            LOG_DEBUG('DeepUpdate needs wg_PyTuple_SetItem to %s of type %s' %
                      (path + '[%d]' % i, type(dst_tpl[i])))

    for src_val in src_lst[dst_len:]:
        LOG_WARNING('DeepUpdate ignores', src_val, path)

    if success:
        return
    else:
        res = list(dst_tpl)
        for i in failIndices:
            res[i] = src_lst[i]

        return tuple(res)
예제 #16
0
 def __readCfg(self, dataSec):
     if not dataSec or dataSec['strategic']:
         LOG_WARNING('Invalid section <strategicMode/camera> in avatar_input_handler.xml')
     self.__baseCfg = dict()
     bcfg = self.__baseCfg
     bcfg['keySensitivity'] = readFloat(dataSec, 'keySensitivity', 0.005, 10, 0.025)
     bcfg['sensitivity'] = readFloat(dataSec, 'sensitivity', 0.005, 10, 0.025)
     bcfg['scrollSensitivity'] = readFloat(dataSec, 'scrollSensitivity', 0.005, 10, 0.025)
     bcfg['distRange'] = readVec2(dataSec, 'distRange', (1, 1), (10000, 10000), (2, 30))
     ds = Settings.g_instance.userPrefs[Settings.KEY_CONTROL_MODE]
     if ds is not None:
         ds = ds['strategicMode/camera']
     self.__userCfg = dict()
     ucfg = self.__userCfg
     ucfg['horzInvert'] = self.settingsCore.getSetting('mouseHorzInvert')
     ucfg['vertInvert'] = self.settingsCore.getSetting('mouseVertInvert')
     ucfg['keySensitivity'] = readFloat(ds, 'keySensitivity', 0.0, 10.0, 1.0)
     ucfg['sensitivity'] = readFloat(ds, 'sensitivity', 0.0, 10.0, 1.0)
     ucfg['scrollSensitivity'] = readFloat(ds, 'scrollSensitivity', 0.0, 10.0, 1.0)
     ucfg['camDist'] = readFloat(ds, 'camDist', 0.0, 60.0, 0)
     self.__cfg = dict()
     cfg = self.__cfg
     cfg['keySensitivity'] = bcfg['keySensitivity']
     cfg['sensitivity'] = bcfg['sensitivity']
     cfg['scrollSensitivity'] = bcfg['scrollSensitivity']
     cfg['distRange'] = bcfg['distRange']
     cfg['camDist'] = ucfg['camDist']
     cfg['keySensitivity'] *= ucfg['keySensitivity']
     cfg['sensitivity'] *= ucfg['sensitivity']
     cfg['scrollSensitivity'] *= ucfg['scrollSensitivity']
     cfg['horzInvert'] = ucfg['horzInvert']
     cfg['vertInvert'] = ucfg['vertInvert']
     dynamicsSection = dataSec['dynamics']
     self.__dynamicCfg.readImpulsesConfig(dynamicsSection)
     self.__positionOscillator = createOscillatorFromSection(dynamicsSection['oscillator'], False)
     self.__positionNoiseOscillator = createOscillatorFromSection(dynamicsSection['randomNoiseOscillatorFlat'], False)
     return
 def __makeRequest(self, requestFunc, successStatus, errorCallback):
     if self.__retriesCount == 0:
         if not self.__isMaintenance:
             self.as_showWaitingS(backport.msgid(R.strings.waiting.hof.loading()))
         self.__requestProcessing = True
     else:
         self.__retryCallback = None
     response = yield requestFunc()
     if self.__viewDisposed:
         LOG_WARNING('ProfileHof request canceled: ProfileHof view was disposed')
         return
     else:
         if response:
             self.__refreshRequest()
             if self.__isMaintenance:
                 self.as_hideServiceViewS()
                 self.as_setBtnCountersS(self.__getCountersList())
                 self.__isMaintenance = False
             errors = response.getErrors()
             if not errors:
                 self.__status = successStatus
                 self.as_setStatusS(successStatus)
             else:
                 errorCallback(errors[0])
         elif self.__retriesCount < self._requestRetriesCount:
             self.__retriesCount += 1
             self.__retryCallback = BigWorld.callback(self._retryDelay, partial(self.__makeRequest, requestFunc, successStatus, errorCallback))
         else:
             self.__refreshRequest()
             if not self.__isMaintenance:
                 self.__isMaintenance = True
                 header = icons.alert() + i18n.makeString(MENU.BROWSER_DATAUNAVAILABLE_HEADER)
                 description = i18n.makeString(MENU.BROWSER_DATAUNAVAILABLE_DESCRIPTION)
                 self.as_showServiceViewS(header, description)
                 self.as_setBtnCountersS([])
         return
 def __doLogin(self, callback):
     if not LOGIN_STATE.canDoLogin(self.__loginState):
         callback(self.isLoggedOn())
         return
     LOG_DEBUG('Wgcg gate login processing...')
     self.__loginState = LOGIN_STATE.LOGGING_IN
     nextLoginState = LOGIN_STATE.LOGGED_OFF
     LOG_DEBUG('Requesting spa token...')
     response = yield self._tokenRequester.request(allowDelay=True)
     if response and response.isValid():
         pDbID = getPlayerDatabaseID()
         if response.getDatabaseID() == pDbID:
             LOG_DEBUG('Trying to login to the wgcg lib...')
             responseTime = time_utils.getServerUTCTime()
             isJwt = self._webCtrl.getRequesterConfig().isJwtEnabled()
             result = yield self.sendRequest(
                 LogInCtx(pDbID, response.getToken(), isJwt))
             nextLoginState = LOGIN_STATE.LOGGED_OFF
             if result.isSuccess():
                 data = result.getData()
                 if data:
                     nextLoginState = LOGIN_STATE.LOGGED_ON
                     self.__accessTokenData = AccessTokenData(
                         data['access_token'],
                         responseTime + float(data['expires_in']))
                 else:
                     LOG_DEBUG(
                         "Response of login to the wgcg doesn't contain data"
                     )
     else:
         LOG_WARNING('There is error while getting spa token for wgcg gate',
                     response)
     self.__loginState = nextLoginState
     self.__clanSync = False
     self.__processWaitingRequests()
     callback(self.isLoggedOn())
예제 #19
0
    def onEnterWorld(self, prereqs):
        if prereqs.failedIDs:
            LOG_ERROR('Failed to load flag model %s' % (prereqs.failedIDs, ))
            return
        else:
            self.__parent = g_ctfManager.getFlagInfo(self.flagID)['flag']
            self.model = prereqs[g_ctfManager.flagModelName]
            self.__circleModel = prereqs[g_ctfManager.flagCircleModelName]
            self.__circleModel.position = self.position
            self.model.position = self.position
            if g_ctfManager.flagAnimAction is not None:
                try:
                    animAction = self.model.action(g_ctfManager.flagAnimAction)
                    animAction()
                except:
                    LOG_WARNING(
                        'Unable to start "%s" animation action for model "%s"'
                        % (g_ctfManager.flagAnimAction,
                           g_ctfManager.flagModelName))

            self.model.visible = False
            self.__parent.flagEnterWorld(self)
            self.model.addMotor(BigWorld.Servo(self.matrix))
            return
예제 #20
0
    def obdataResponse(callback, dbgCallback, movieClipRef, responseob):
        headers, respdata, code = responseob
        try:
            if respdata:
                for ifaces, idTypeList in respdata:
                    if 'ISquad' in ifaces:
                        import VOIP
                        VOIP.api().updateSquad(idTypeList[0][0], ifaces['ISquad'])

        except:
            pass

        movieClip = movieClipRef()
        if movieClip:
            if dbgCallback:
                dbgCallback(respdata)
            if code == 0:
                movieClip.subscribeIFace(respdata, callback, False)
                sendDataToUICallbacks(headers, respdata, callback, movieClip, broadcast=headers[1] != METHODTOINDEX['view'] or callback is None)
            elif callback:
                movieClip.call_1(callback, respdata, code)
        else:
            LOG_WARNING('obdataRequest: Movie already unloaded')
        return
예제 #21
0
    def stop(self):
        if not self.__isStarted:
            return
        self.__isStarted = False
        records = []
        for targetID, windowsData in self.__storedData.iteritems():
            if not self.__targetMask & targetID and len(windowsData):
                LOG_WARNING(
                    'Target is not enabled. Records are ignored to flush',
                    targetID, self.__targetMask)
                continue
            for data in windowsData:
                if not data.isTrusted():
                    LOG_DEBUG('Data is not trusted. It do not write to file',
                              data)
                    continue
                record = data.pack()
                if record is None:
                    continue
                records.append((targetID, data.getDataType()) + record)

        self.__loader.flush(self.__targetMask, records)
        self.__loader = None
        self.__storedData.clear()
예제 #22
0
    def __hideVehicle(self, entry):
        matrix = entry.getMatrix()
        if matrix is not None:
            matrix = matrix_factory.convertToLastSpottedVehicleMP(matrix)
            isDeactivate = not _FEATURES.isOn(
                self.__flags) or self._isInPostmortemMode(
                ) and not entry.isEnemy()
        else:
            LOG_WARNING(
                'Matrix of vehicle entry is None, vehicle features is skipped',
                entry)
            isDeactivate = True
        self.__setInAoI(entry, False)
        self.__setLocationAndMatrix(entry, VEHICLE_LOCATION.UNDEFINED, matrix)
        vehicleToHideID = None
        for vehicleID, savedEntry in self._entries.iteritems():
            if savedEntry.getID() == entry.getID():
                vehicleToHideID = vehicleID
                break

        self.__replayRegistrator.registerHideVehicle(vehicleToHideID)
        if isDeactivate:
            self.__setActive(entry, False)
        return
예제 #23
0
    def getSelectedVehicles(self, section, useAll=True):
        accSettings = dict(AccountSettings.getSettings('unitWindow'))
        vehicles = accSettings.get(section, [])
        items = self.itemsCache.items
        if vehicles or not useAll:
            selectedVehicles = []
            for vehCD in vehicles:
                vehCD = int(vehCD)
                if items.doesVehicleExist(vehCD):
                    vehicle = self.itemsCache.items.getItemByCD(vehCD)
                    if vehicle.isInInventory:
                        selectedVehicles.append(vehCD)
                LOG_WARNING(
                    'There is invalid vehicle compact descriptor in the stored unit seelected vehicles data',
                    vehCD)

        else:
            criteria = REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.ACTIVE_IN_NATION_GROUP
            selectedVehicles = [
                k for k, v in self.itemsCache.items.getVehicles(
                    criteria).iteritems()
                if v.level in self._rosterSettings.getLevelsRange()
            ]
        return selectedVehicles
예제 #24
0
    def _callbackTrailParticleLoaded(self, elemDesc, pixie):
        if self.__vehicle is None or self.__vehicle.model is None:
            LOG_WARNING("The vehicle object is 'None', can't attach pixie '%s'" % elemDesc[self._TRAIL_E_PIXIE_FILE])
            return
        elif pixie is None:
            LOG_ERROR("Can't create pixie '%s'." % elemDesc[self._TRAIL_E_PIXIE_FILE])
            return
        else:
            pixie.drawOrder = elemDesc[self._TRAIL_E_PIXIE_ORDER]
            elemDesc[self._TRAIL_E_PIXIE_NODE].attach(pixie)
            basicRates = []
            for i in xrange(pixie.nSystems()):
                try:
                    source = pixie.system(i).action(1)
                    basicRates.append(source.rate)
                    source.rate = source.rate * 0.001
                except:
                    basicRates.append(-1.0)
                    source = pixie.system(i).action(16)
                    source.MultRate(0.01)

            elemDesc[self._TRAIL_E_PIXIE_EFFECTS][0] = pixie
            elemDesc[self._TRAIL_E_PIXIE_EFFECTS][4] = basicRates
            return
예제 #25
0
 def constructAppearance(self, vId, resourceRefs):
     assemblerData = self.__assemblersCache.get(vId, None)
     if assemblerData is None:
         return
     else:
         appearance = assemblerData.appearance
         if _ENABLE_CACHE_TRACKER:
             LOG_DEBUG(
                 'Appearance cache. Constructed vID = {0}'.format(vId))
         if not resourceRefs.has_key(assemblerData.info.typeDescr.name):
             LOG_WARNING(
                 'Loaded appearance is not latest requested appearance, construction of the appearance is skipped ',
                 assemblerData.info.typeDescr.name, resourceRefs)
             return
         assemblerData.info.typeDescr.keepPrereqs(resourceRefs)
         appearance.construct(BigWorld.player().playerVehicleID == vId,
                              resourceRefs)
         oldAppearance = self.__appearanceCache.get(vId, None)
         apperanceOwner = None
         if oldAppearance is not None:
             apperanceOwner = oldAppearance[0].getVehicle()
             if apperanceOwner is not None:
                 apperanceOwner.stopVisual()
             oldAppearance[0].destroy()
             self.__appearanceCache[vId] = None
             if _ENABLE_CACHE_TRACKER:
                 LOG_DEBUG(
                     'Appearance cache. Deleting old appearance vID = {0}'.
                     format(vId))
         self.__appearanceCache[vId] = (appearance, assemblerData.info)
         if apperanceOwner is not None:
             apperanceOwner.startVisual()
         del self.__assemblersCache[vId]
         if _ENABLE_CACHE_TRACKER:
             d_cacheInfo[vId] = BigWorld.time()
         return appearance
예제 #26
0
    def fromXmlString(self, xmlString):
        if not self.__isEnabled:
            self.__pending.append(xmlString)
            return
        try:
            notID, ttl, actionsHolder, guiItemsHolder, proxyDataHolder = fromString(
                xmlString)
        except ParseError as e:
            LOG_ERROR('Can not parse notification', e.message, xmlString)
            return

        if notID in self.__nots:
            LOG_WARNING('Notification already is added', notID,
                        self.__nots[notID])
            return 0
        vo = _NotificationVO(notID, ttl, actionsHolder, guiItemsHolder,
                             proxyDataHolder)
        if not vo.isActive():
            return 0
        if not vo.validate():
            return 0
        self.__nots[notID] = vo
        vo.showAll()
        return notID
예제 #27
0
 def registerFlashComponent(self, component, alias, *args):
     from gui.Scaleform.framework import g_entitiesFactories
     componentPy, idx = g_entitiesFactories.factory(alias, *args)
     if componentPy is not None:
         componentPy = g_entitiesFactories.initialize(
             componentPy, component, idx)
     else:
         LOG_ERROR('Component not found in python', alias)
         return
     from gui.Scaleform.framework.entities.View import View
     if isinstance(componentPy, View):
         LOG_ERROR(
             'registered component {0} can`t extend a View class. It must be DAAPIModule only!'
             .format(str(componentPy)))
         return
     else:
         if alias in self.__components.keys():
             LOG_WARNING(
                 'Class with alias `%s` already registered in object %s.\t\t\t\tIt will be rewritten.'
                 % (alias, str(self)))
         self.__components[alias] = componentPy
         componentPy.create()
         self._onRegisterFlashComponent(componentPy, alias)
         return
def _getHandlerClass(handlerType):
    if handlerType in _handlers:
        return _handlers[handlerType]
    else:
        LOG_WARNING('Unknown context menu handler type', handlerType)
        return None
 def __setData(self):
     seasonID, cohort, _ = ranked_helpers.getRankedDataFromTokenQuestID(
         self._quest.getID())
     season = self.rankedController.getSeason(int(seasonID))
     if season is not None:
         leagueData = yield self.rankedController.getLeagueData()
         if leagueData is not None:
             position = BigWorld.wg_getNiceNumberFormat(
                 leagueData['position'])
             league = leagueData.get('league', 0)
         else:
             position = '0'
             league = 0
         itemsCache = dependency.instance(IItemsCache)
         dossier = itemsCache.items.getAccountDossier(
         ).getPreviousSeasonRankedStats()
         seasonPoints = season.getPoints()
         efficiency = dossier.getStepsEfficiency()
         if efficiency is not None:
             efficiencyValue = efficiency * 100
         else:
             efficiencyValue = 0
         avgExp = dossier.getAvgXP()
         if avgExp is None:
             avgExp = 0
         self.as_setDataS({
             'leagueImage':
             RES_ICONS.getRankedWebLeagueIcon('big', league),
             'scoresValue':
             BigWorld.wg_getNiceNumberFormat(seasonPoints),
             'scoresLabel':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_TOTALSCORES),
             'effectValue':
             BigWorld.wg_getIntegralFormat(efficiencyValue),
             'effectLabel':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_EFFECTLABEL),
             'placeValue':
             position,
             'placeLabel':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_PLACEINRATING),
             'expValue':
             BigWorld.wg_getIntegralFormat(avgExp),
             'expLabel':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_EXPLABEL),
             'congratulationTitle':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_BIGTITLE,
                 season=str(season.getNumber())),
             'typeTitle':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_SMALLTITLE),
             'typeIcon':
             RES_ICONS.MAPS_ICONS_BATTLETYPES_40X40_RANKED,
             'nextButtonLabel':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_LEADERSBUTTON),
             'bgSource':
             RES_ICONS.MAPS_ICONS_RANKEDBATTLES_BG_RANK_BLUR,
             'leagueLabel':
             _ms(RANKED_BATTLES.SEASONCOMPLETE_UNDERLABEL)
         })
         self.as_setRewardsDataS({
             'ribbonType': 'ribbon2',
             'rendererLinkage':
             COMPONENTS_ALIASES.RIBBON_AWARD_ANIM_RENDERER,
             'gap': 20,
             'rendererWidth': 80,
             'rendererHeight': 80,
             'awards': self._packAwards()
         })
     else:
         LOG_WARNING(
             'Try to show RankedBattlesSeasonCompleteView, but season is None. Params: ',
             seasonID, cohort)
     return
 def onOptionSelect(self, optionId):
     if optionId in self.__handlers:
         return getattr(self, self.__handlers[optionId])()
     LOG_WARNING('Unknown context menu option', self, self.__cmProxy,
                 optionId)