def _substituteBonuses(self, mainQuest=None):
        if not self.event.isCompensationPossible():
            return self.event.getBonuses()
        else:
            if mainQuest is None:
                mainQuest = first(
                    self.eventsCache.getQuests(lambda q: isMarathon(q.getID(
                    )) and q.getGroupID() == self.event.getGroupID()).values())
            if mainQuest:
                bonuses = self.event.getBonuses()
                toCompensate = []
                for token in mainQuest.accountReqs.getTokens():
                    if token.isAvailable():
                        toCompensate.append(token.getID())

                if not toCompensate:
                    return bonuses
                resultBonus = []
                for bonus in bonuses:
                    if bonus.getName() == 'battleToken':
                        tokenID = first(bonus.getTokens())
                        if tokenID in toCompensate:
                            compensation = self.eventsCache.getCompensation(
                                tokenID)
                            if compensation:
                                resultBonus.extend(compensation)
                                continue
                    resultBonus.append(bonus)

                return resultBonus
            return self.event.getBonuses()
            return
Ejemplo n.º 2
0
 def _getBackGround(self, status):
     if status == EVENT_STATUS.COMPLETED:
         return BG_STATES.COMPLETED
     elif isMarathon(self.event.getGroupID()):
         return BG_STATES.MARATHON
     else:
         return BG_STATES.DEFAULT
Ejemplo n.º 3
0
 def userFilterFunc(q):
     if q.getType(
     ) == EVENT_TYPE.MOTIVE_QUEST and not q.isAvailable()[0]:
         return False
     if q.getType() == EVENT_TYPE.TOKEN_QUEST and isMarathon(q.getID()):
         return False
     return filterFunc(q)
Ejemplo n.º 4
0
def showMission(eventID, eventType=None):
    """ Open missions interface with given event's detailed view.
    
    Possible requests:
        eventID is marathon's quest: open marathon tab with quest details;
        eventID is main marathon quest: open marathon tab;
        eventID is some othe quest: open categories tab with quest details;
        eventID is personal mission: open old quest interface.
    """
    eventsCache = dependency.instance(IEventsCache)
    quests = eventsCache.getQuests()
    quest = quests.get(eventID)
    if eventType is not None and eventType == constants.EVENT_TYPE.PERSONAL_MISSION:
        showPersonalMission(eventID)
    elif quest is not None:
        if formatters.isMarathon(quest.getGroupID()):
            groups = eventsCache.getGroups()
            group = groups.get(quest.getGroupID())
            groupContent = group.getGroupContent(quests)
            mainQuest = group.getMainQuest(groupContent)
            if mainQuest and quest.getID() != mainQuest.getID():
                showMissionsMarathons(missionID=quest.getID(),
                                      groupID=group.getID(),
                                      anchor=group.getID())
            else:
                showMissionsMarathons(anchor=group.getID())
        else:
            showMissionsCategories(missionID=quest.getID(),
                                   groupID=quest.getGroupID(),
                                   anchor=quest.getGroupID())
    return
Ejemplo n.º 5
0
 def __invalidateCompensations(self):
     """
     Store hidden quests compensations for marathons quest to improve performance
     """
     self.__compensations.clear()
     for q in self.getHiddenQuests(
             lambda q: isMarathon(q.getGroupID())).itervalues():
         self.__compensations.update(q.getCompensation())
    def getMainQuest(self, events):
        if not self.isMarathon():
            LOG_ERROR('Trying to find main quest in non-marathon group',
                      self.getID())
            return None
        else:
            for quest in events:
                if isMarathon(quest.getID()):
                    return quest

            LOG_ERROR('There is no main token quest in the marathon',
                      self.getID())
            return None
Ejemplo n.º 7
0
    def getMainQuest(self, events):
        """ Get marathon's main quest (quest with special prefix)
        """
        if not self.isMarathon():
            LOG_ERROR('Trying to find main quest in non-marathon group',
                      self.getID())
            return None
        else:
            tokenQuests = []
            for quest in events:
                if isMarathon(quest.getID()):
                    return quest

            LOG_ERROR('There is no main token quest in the marathon',
                      self.getID())
            return None
Ejemplo n.º 8
0
    def _substituteBonuses(self, mainQuest=None):
        """ Applies compensation to the quests that emit already gathered tokens.
        
        Compensation works on top of tokens mechanism: if main marathon token quest
        already consumed all necessary tokens, these tokens should be explicitly
        substituted with compensation in the emitter quests.
        
        Compensation means bonuses from the hidden compensation quests.
        """
        if not self.event.isCompensationPossible():
            return self.event.getBonuses()
        else:
            if mainQuest is None:
                mainQuest = first(
                    self.eventsCache.getQuests(lambda q: isMarathon(q.getID(
                    )) and q.getGroupID() == self.event.getGroupID()).values())
            if mainQuest:
                bonuses = self.event.getBonuses()
                toCompensate = []
                for token in mainQuest.accountReqs.getTokens():
                    if token.isAvailable():
                        toCompensate.append(token.getID())

                if not toCompensate:
                    return bonuses
                resultBonus = []
                for bonus in bonuses:
                    if bonus.getName() == 'battleToken':
                        tokenID = first(bonus.getTokens())
                        if tokenID in toCompensate:
                            compensation = self.eventsCache.getCompensation(
                                tokenID)
                            if compensation:
                                resultBonus.extend(compensation)
                                continue
                    resultBonus.append(bonus)

                return resultBonus
            return self.event.getBonuses()
            return
def showMission(eventID, eventType=None):
    eventsCache = dependency.instance(IEventsCache)
    quests = eventsCache.getQuests()
    quest = quests.get(eventID)
    if eventType is not None and eventType == constants.EVENT_TYPE.PERSONAL_MISSION:
        showPersonalMission(eventID)
    elif quest is not None:
        if formatters.isMarathon(quest.getGroupID()):
            groups = eventsCache.getGroups()
            group = groups.get(quest.getGroupID())
            groupContent = group.getGroupContent(quests)
            mainQuest = group.getMainQuest(groupContent)
            if mainQuest and quest.getID() != mainQuest.getID():
                showMissionsMarathons(missionID=quest.getID(),
                                      groupID=group.getID(),
                                      anchor=group.getID())
            else:
                showMissionsMarathons(anchor=group.getID())
        else:
            showMissionsCategories(missionID=quest.getID(),
                                   groupID=quest.getGroupID(),
                                   anchor=quest.getGroupID())
    return
Ejemplo n.º 10
0
 def _getViewQuestFilter(self):
     return lambda q: isMarathon(q.getGroupID())
 def isCompensationPossible(self):
     return isMarathon(self.getGroupID()) and bool(
         self.getBonuses('tokens'))
 def isMarathon(self):
     return isMarathon(self.getID())
 def __invalidateCompensations(self):
     self.__compensations.clear()
     for q in self.getHiddenQuests(
             lambda q: isMarathon(q.getGroupID())).itervalues():
         self.__compensations.update(q.getCompensation())
 def _getBackGround(self, status):
     if status == MISSIONS_STATES.COMPLETED:
         return BG_STATES.COMPLETED
     return BG_STATES.MARATHON if isMarathon(
         self.event.getGroupID()) else BG_STATES.DEFAULT