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, 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)