def __stripServerQuestData(self, questClientData): questClientData.pop('serverOnly', None) questClientData['bonus'] = walkBonuses(questClientData['bonus'], StripVisitor()) questClientData['bonusDelayed'] = walkBonuses( questClientData['bonusDelayed'], StripVisitor()) return
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
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
def __stripServerQuestData(self, questClientData): questClientData.pop('serverOnly', None) questClientData['bonus'] = walkBonuses(questClientData['bonus'], StripVisitor()) return
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