コード例 #1
0
 def __stripServerQuestData(self, questClientData):
     questClientData.pop('serverOnly', None)
     questClientData['bonus'] = walkBonuses(questClientData['bonus'],
                                            StripVisitor())
     questClientData['bonusDelayed'] = walkBonuses(
         questClientData['bonusDelayed'], StripVisitor())
     return
コード例 #2
0
    def getAllAwardsForCycle(self, cycleID):
        resultDict = {}
        maxRank = self.__getDossierForCycle(cycleID).rank
        questsIterator = self.eventsCache.getRankedQuests(
            lambda q: q.getRank() == maxRank and q.getCycleID(
            ) == cycleID and q.isProcessedAtCycleEnd()).itervalues()
        for quest in questsIterator:
            qProgress = self.eventsCache.questsProgress.getQuestProgress(
                quest.getID()) or {}
            if qProgress:
                bonusTrack = qProgress.get(None, {}).get('bonusTracks',
                                                         [''])[0]
                trackReplay = TrackVisitor(BONUS_MERGERS, bonusTrack, 1, None)
                trackResult = walkBonuses(quest.getData().get('bonus', {}),
                                          trackReplay)
                for bonus in quest.getBonuses(bonusData=trackResult):
                    for awardVO in bonus.getRankedAwardVOs(iconSize='big',
                                                           withCounts=True,
                                                           withKey=True):
                        itemKey = awardVO.pop('itemKey')
                        if itemKey in resultDict:
                            resultDict[itemKey]['count'] += awardVO['count']
                        resultDict[itemKey] = awardVO

        return resultDict
コード例 #3
0
    def __readXML(self, section, gStartTime, gFinishTime, curTime):
        nodes = {}
        for typeName, questSection in section.items():
            enabled = questSection.readBool('enabled', False)
            if not enabled:
                continue
            eventType = EVENT_TYPE.NAME_TO_TYPE[typeName]
            mainNode = XMLNode('main')
            mainNode.info = info = self.__readHeader(eventType, questSection,
                                                     gStartTime, gFinishTime,
                                                     curTime)
            if eventType == EVENT_TYPE.GROUP:
                mainNode.groupContent = tuple(
                    self.__readGroupContent(questSection))
            conditionReaders = self.__getConditionReaders(eventType)
            availableBonuses = self.__getAvailableBonuses(eventType)
            bonusNode = XMLNode('bonus')
            prebattleNode = XMLNode('preBattle')
            prebattleNode.addChild(bonusNode, False)
            mainNode.addChild(prebattleNode)
            accountNode = XMLNode('account')
            prebattleNode.addChild(accountNode)
            vehicleNode = XMLNode('vehicle')
            prebattleNode.addChild(vehicleNode)
            battleNode = XMLNode('battle')
            prebattleNode.addChild(battleNode)
            postbattleNode = XMLNode('postBattle')
            mainNode.addChild(postbattleNode)
            postbattleNode.addChild(bonusNode, False)
            mainNode.addChild(bonusNode)
            conditions = questSection['conditions']
            if conditions and conditions.has_key('preBattle'):
                condition = conditions['preBattle']
                if condition.has_key('account'):
                    self.__readBattleResultsConditionList(
                        conditionReaders, condition['account'], accountNode)
                if eventType in EVENT_TYPE.LIKE_BATTLE_QUESTS:
                    if condition.has_key('vehicle'):
                        self.__readBattleResultsConditionList(
                            conditionReaders, condition['vehicle'],
                            vehicleNode)
                    if condition.has_key('battle'):
                        self.__readBattleResultsConditionList(
                            conditionReaders, condition['battle'], battleNode)
            if eventType in EVENT_TYPE.LIKE_BATTLE_QUESTS and conditions and conditions.has_key(
                    'postBattle'):
                condition = conditions['postBattle']
                self.__readBattleResultsConditionList(conditionReaders,
                                                      condition,
                                                      postbattleNode)
            if conditions and conditions.has_key('bonus'):
                condition = conditions['bonus']
                self.__readBattleResultsConditionList(conditionReaders,
                                                      condition, bonusNode)
            daily = bonusNode.getChildNode('daily')
            info['isDaily'] = daily is not None
            groupBy = bonusNode.getChildNode('groupBy')
            info['groupBy'] = groupBy.getChildNode(
                'groupName').getFirstChildValue() if groupBy else None
            info['isIGR'] = accountNode.isExistChildNode('igrType')
            inrow = bonusNode.getChildNode('inrow')
            unit = bonusNode.getChildNode('unit')
            bonusLimit = bonusNode.getChildNode('bonusLimit')
            cumulative = bonusNode.getChildNode('cumulative')
            vehicleKills = bonusNode.getChildNode('vehicleKills')
            battles = bonusNode.getChildNode('battles')
            battleCount = battles.getChildNode(
                'count').getFirstChildValue() if battles else None
            if bonusLimit is None:
                bonusLimitNode = XMLNode('bonusLimit')
                bonusLimitNode.addChild(1 if eventType in EVENT_TYPE.
                                        ONE_BONUS_QUEST else MAX_BONUS_LIMIT)
                bonusNode.addChild(bonusLimitNode)
            if eventType in EVENT_TYPE.LIKE_BATTLE_QUESTS:
                if (cumulative or unit or vehicleKills) and inrow:
                    raise Exception(
                        'battleQuest: Unexpected tags (vehicleKills, cumulative, unit/cumulative) with inrow'
                    )
                if not (cumulative or unit or vehicleKills or bonusLimit
                        or battles) and (daily or groupBy):
                    raise Exception(
                        'battleQuest: daily and groupBy should be used with cumulative, unit, vehicleKills, bonusLimit or battles tags'
                    )
                if battles and not battleCount:
                    raise Exception('Invalid battles section')
            elif eventType in EVENT_TYPE.LIKE_TOKEN_QUESTS:
                if cumulative or unit or vehicleKills or groupBy or battles:
                    raise Exception(
                        'tokenQuest: Unexpected tags (cumulative, unit, vehicleKills, groupBy, battles)'
                    )
                if not bonusLimit and daily:
                    raise Exception(
                        'tokenQuest: daily should be used with bonusLimit tag')
            mainNode.bonus = walkBonuses(
                readBonusSection(availableBonuses, questSection['bonus'],
                                 eventType), FilterVisitor(eventType))
            questClientData = dict(info)
            questClientData['bonus'] = deepcopy(mainNode.bonus)
            questClientData['conditions'] = mainNode.questClientConditions
            if mainNode.groupContent:
                questClientData['groupContent'] = mainNode.groupContent
            self.__stripServerQuestData(questClientData)
            mainNode.info['questClientData'] = questClientData
            nodes.setdefault(eventType, []).append(mainNode)

        return nodes
コード例 #4
0
 def __stripServerQuestData(self, questClientData):
     questClientData.pop('serverOnly', None)
     questClientData['bonus'] = walkBonuses(questClientData['bonus'], StripVisitor())
     return
コード例 #5
0
    def __readXML(self, section, gStartTime, gFinishTime, curTime):
        nodes = {}
        for typeName, questSection in section.items():
            enabled = questSection.readBool('enabled', False)
            if not enabled:
                continue
            eventType = EVENT_TYPE.NAME_TO_TYPE[typeName]
            mainNode = XMLNode('main')
            mainNode.info = info = self.__readHeader(eventType, questSection, gStartTime, gFinishTime, curTime)
            if eventType == EVENT_TYPE.GROUP:
                mainNode.groupContent = tuple(self.__readGroupContent(questSection))
            conditionReaders = self.__getConditionReaders(eventType)
            availableBonuses = self.__getAvailableBonuses(eventType)
            bonusNode = XMLNode('bonus')
            prebattleNode = XMLNode('preBattle')
            prebattleNode.addChild(bonusNode, False)
            mainNode.addChild(prebattleNode)
            accountNode = XMLNode('account')
            prebattleNode.addChild(accountNode)
            vehicleNode = XMLNode('vehicle')
            prebattleNode.addChild(vehicleNode)
            battleNode = XMLNode('battle')
            prebattleNode.addChild(battleNode)
            postbattleNode = XMLNode('postBattle')
            mainNode.addChild(postbattleNode)
            postbattleNode.addChild(bonusNode, False)
            mainNode.addChild(bonusNode)
            conditions = questSection['conditions']
            if conditions and conditions.has_key('preBattle'):
                condition = conditions['preBattle']
                if condition.has_key('account'):
                    self.__readBattleResultsConditionList(conditionReaders, condition['account'], accountNode)
                if eventType in EVENT_TYPE.LIKE_BATTLE_QUESTS:
                    if condition.has_key('vehicle'):
                        self.__readBattleResultsConditionList(conditionReaders, condition['vehicle'], vehicleNode)
                    if condition.has_key('battle'):
                        self.__readBattleResultsConditionList(conditionReaders, condition['battle'], battleNode)
            if eventType in EVENT_TYPE.LIKE_BATTLE_QUESTS and conditions and conditions.has_key('postBattle'):
                condition = conditions['postBattle']
                self.__readBattleResultsConditionList(conditionReaders, condition, postbattleNode)
            if conditions and conditions.has_key('bonus'):
                condition = conditions['bonus']
                self.__readBattleResultsConditionList(conditionReaders, condition, bonusNode)
            daily = bonusNode.getChildNode('daily')
            info['isDaily'] = daily is not None
            groupBy = bonusNode.getChildNode('groupBy')
            info['groupBy'] = groupBy.getChildNode('groupName').getFirstChildValue() if groupBy else None
            info['isIGR'] = accountNode.isExistChildNode('igrType')
            inrow = bonusNode.getChildNode('inrow')
            unit = bonusNode.getChildNode('unit')
            bonusLimit = bonusNode.getChildNode('bonusLimit')
            cumulative = bonusNode.getChildNode('cumulative')
            vehicleKills = bonusNode.getChildNode('vehicleKills')
            battles = bonusNode.getChildNode('battles')
            battleCount = battles.getChildNode('count').getFirstChildValue() if battles else None
            if bonusLimit is None:
                bonusLimitNode = XMLNode('bonusLimit')
                bonusLimitNode.addChild(1 if eventType in EVENT_TYPE.ONE_BONUS_QUEST else MAX_BONUS_LIMIT)
                bonusNode.addChild(bonusLimitNode)
            if eventType in EVENT_TYPE.LIKE_BATTLE_QUESTS:
                if (cumulative or unit or vehicleKills) and inrow:
                    raise Exception('battleQuest: Unexpected tags (vehicleKills, cumulative, unit/cumulative) with inrow')
                if not (cumulative or unit or vehicleKills or bonusLimit or battles) and (daily or groupBy):
                    raise Exception('battleQuest: daily and groupBy should be used with cumulative, unit, vehicleKills, bonusLimit or battles tags')
                if battles and not battleCount:
                    raise Exception('Invalid battles section')
            elif eventType in EVENT_TYPE.LIKE_TOKEN_QUESTS:
                if cumulative or unit or vehicleKills or groupBy or battles:
                    raise Exception('tokenQuest: Unexpected tags (cumulative, unit, vehicleKills, groupBy, battles)')
                if not bonusLimit and daily:
                    raise Exception('tokenQuest: daily should be used with bonusLimit tag')
            mainNode.bonus = walkBonuses(readBonusSection(availableBonuses, questSection['bonus'], eventType), FilterVisitor(eventType))
            questClientData = dict(info)
            questClientData['bonus'] = deepcopy(mainNode.bonus)
            questClientData['conditions'] = mainNode.questClientConditions
            if mainNode.groupContent:
                questClientData['groupContent'] = mainNode.groupContent
            self.__stripServerQuestData(questClientData)
            mainNode.info['questClientData'] = questClientData
            nodes.setdefault(eventType, []).append(mainNode)

        return nodes