Exemple #1
0
    def requestInteract(self, avId, npc):
        av = self.air.doId2do.get(avId)
        if not av:
            self.notify.warning("Got requestInteract with unknown avId: %s" %
                                avId)
            return

        # check if the avatar wants to turn in a quest
        quests = av.getQuests()
        for i in xrange(0, len(quests), 5):
            quest = quests[i:i + 5]
            klass = Quests.getQuest(quest[0])

            if not klass:
                self.notify.debug('Quest %s has no class.' % quest[0])
                continue

            if klass.getCompletionStatus(av, quest, npc) == Quests.COMPLETE:
                # complete quest, the avatar is turning it in
                self.notify.debug("Toon %s completed quest %s" %
                                  (av.doId, quest[0]))

                # fill the laff
                av.toonUp(av.maxHp)

                if isinstance(klass, Quests.TrackChoiceQuest):
                    npc.presentTrackChoice(avId, quest[0], klass.getChoices())
                    return 1

                nextQuest = Quests.getNextQuest(quest[0], npc, av)
                if nextQuest[0] != Quests.NA:
                    self.__goToNextQuest(av, npc, quest[0], nextQuest)

                else:
                    npc.completeQuest(avId, quest[0], quest[-2])
                    self.__questCompleted(av, quest[0])

                return 1

        if self.__considerProgressTier(av):
            npc.rejectAvatarTierNotDone(avId)
            return 0

        # give choices if the av doesn't have enough quests already
        if len(quests) / 5 < av.getQuestCarryLimit():
            choices = Quests.chooseBestQuests(av.getRewardTier(), npc, av)
            if choices:
                npc.presentQuestChoice(avId, choices)
                return 1

        return 0
 def requestInteract(self, avId, npc):
     av = self.air.doId2do.get(avId)
     if not av:
         self.notify.warning("Got requestInteract with unknown avId: %s" % avId)
         return
                     
     # check if the avatar wants to turn in a quest
     quests = av.getQuests()
     for i in xrange(0, len(quests), 5):
         quest = quests[i:i + 5]
         klass = Quests.getQuest(quest[0])
         
         if not klass:
             self.notify.debug('Quest %s has no class.' % quest[0])
             continue
             
         if klass.getCompletionStatus(av, quest, npc) == Quests.COMPLETE:
             # complete quest, the avatar is turning it in
             self.notify.debug("Toon %s completed quest %s" % (av.doId, quest[0]))
             
             # fill the laff
             av.toonUp(av.maxHp)
             
             if isinstance(klass, Quests.TrackChoiceQuest):
                 npc.presentTrackChoice(avId, quest[0], klass.getChoices())
                 return 1
                 
             nextQuest = Quests.getNextQuest(quest[0], npc, av)
             if nextQuest[0] != Quests.NA:
                 self.__goToNextQuest(av, npc, quest[0], nextQuest)
                 
             else:
                 npc.completeQuest(avId, quest[0], quest[-2])
                 self.__questCompleted(av, quest[0])
                 
             return 1
             
     if self.__considerProgressTier(av):
         npc.rejectAvatarTierNotDone(avId)
         return 0
             
     # give choices if the av doesn't have enough quests already
     if len(quests) / 5 < av.getQuestCarryLimit():
         choices = Quests.chooseBestQuests(av.getRewardTier(), npc, av)
         if choices:
             npc.presentQuestChoice(avId, choices)
             return 1
     
     return 0
 def avatarQuestChoice(self, toon, npc):
     tasks = Quests.chooseBestQuests(toon.getRewardTier(), npc, toon)
     #Does the avatar already have any of these rewardIds?
     #[QuestId, RewardId, toNPCID]
     toonQuests = toon.getQuests() #Flattened Quests.
     rewardList = [] #Unflattened Quests.
     for i in xrange(0, len(toonQuests), 5):
         questDesc = toonQuests[i:i + 5]
         rewardList.append(questDesc[3])
     for task in tasks:
         if task[1] in rewardList:
             tier = toon.getRewardHistory()[0]
             rewards = Quests.getOptionalRewardsInTier(tier)
             if rewards:
                 rewardId = random.choice(Quests.getOptionalRewardsInTier(tier))
                 task[1] = rewardId
     return tasks
 def avatarQuestChoice(self, toon, npc):
     tasks = Quests.chooseBestQuests(toon.getRewardTier(), npc, toon)
     #Does the avatar already have any of these rewardIds?
     #[QuestId, RewardId, toNPCID]
     toonQuests = toon.getQuests() #Flattened Quests.
     rewardList = [] #Unflattened Quests.
     for i in xrange(0, len(toonQuests), 5):
         questDesc = toonQuests[i:i + 5]
         rewardList.append(questDesc[3])
     for task in tasks:
         if task[1] in rewardList:
             tier = toon.getRewardHistory()[0]
             rewards = Quests.getOptionalRewardsInTier(tier)
             if rewards:
                 rewardId = random.choice(Quests.getOptionalRewardsInTier(tier))
                 task[1] = rewardId
     return tasks
Exemple #5
0
 def avatarQuestChoice(self, av, npc):
     # Get the best quests for an avatar/npc.
     return Quests.chooseBestQuests(av.getRewardTier(), npc, av)
 def avatarQuestChoice(self, av, npc):
     # Get the best quests for an avatar/npc.
     return Quests.chooseBestQuests(av.getRewardTier(), npc, av)
    def requestInteract(self, avId, npc):
        av = self.air.doId2do.get(avId)
        if not av:
            return

        for index, quest in enumerate(self.__toonQuestsList2Quests(av.quests)):
            questId, fromNpcId, toNpcId, rewardId, toonProgress = av.quests[
                index]
            isComplete = quest.getCompletionStatus(av, av.quests[index], npc)
            if isComplete != Quests.COMPLETE:
                continue

            if avId in self.air.tutorialManager.avId2fsm.keys():
                self.air.tutorialManager.avId2fsm[avId].demand('Tunnel')

            if isinstance(quest, Quests.DeliverGagQuest):
                track, level = quest.getGagType()
                av.inventory.setItem(
                    track, level,
                    av.inventory.numItem(track, level) - quest.getNumGags())
                av.b_setInventory(av.inventory.makeNetString())

            nextQuest = Quests.getNextQuest(questId, npc, av)
            if nextQuest == (Quests.NA, Quests.NA):
                if isinstance(quest, Quests.TrackChoiceQuest):
                    npc.presentTrackChoice(avId, questId, quest.getChoices())
                    return

                rewardId = Quests.getAvatarRewardId(av, questId)
                npc.completeQuest(avId, questId, rewardId)
                self.completeQuest(av, questId)
                self.giveReward(av, rewardId)
                return
            else:
                self.completeQuest(av, questId)
                nextQuestId = nextQuest[0]
                nextRewardId = Quests.getFinalRewardId(questId, 1)
                nextToNpcId = nextQuest[1]
                self.npcGiveQuest(npc, av, nextQuestId, nextRewardId,
                                  nextToNpcId)
                return

        if len(self.__toonQuestsList2Quests(
                av.quests)) >= av.getQuestCarryLimit():
            npc.rejectAvatar(avId)
            return

        if avId in self.air.tutorialManager.avId2fsm.keys():
            if av.getRewardHistory()[0] == 0:
                self.npcGiveQuest(npc,
                                  av,
                                  101,
                                  Quests.findFinalRewardId(101)[0],
                                  Quests.getQuestToNpcId(101),
                                  storeReward=True)
                self.air.tutorialManager.avId2fsm[avId].demand('Battle')
                return

        tier = av.getRewardHistory()[0]
        if Quests.avatarHasAllRequiredRewards(av, tier):
            if not Quests.avatarWorkingOnRequiredRewards(av):
                if tier != Quests.LOOPING_FINAL_TIER:
                    tier += 1

                av.b_setRewardHistory(tier, [])
            else:
                npc.rejectAvatarTierNotDone(avId)
                return

        bestQuests = Quests.chooseBestQuests(tier, npc, av)
        if not bestQuests:
            npc.rejectAvatar(avId)
            return

        npc.presentQuestChoice(avId, bestQuests)
        return
 def avatarQuestChoice(self, av, npc):
     # Get the best quests for an avatar/npc.
     return Quests.chooseBestQuests(npc, av)