def update(self, questIdList, quest, newQuest): if quest and isinstance(quest, Quest.Quest): if newQuest: localAvatar.questStatus.assignQuest(quest) container = localAvatar.questStatus.getContainer(quest.questId) if not container: container = localAvatar.getQuestById(quest.questId) container.viewedInGUI = False for button in self.buttons: button.destroy() self.buttons = [] self.trees = {} for questId in questIdList: path = QuestLadderDB.getFamePath(questId) if path: pathName = path[0].getName() tree = self.trees.get(pathName) self.trees[pathName] = self.__makeTree(path, tree) else: path = QuestLadderDB.getFortunePath(questId) if path: pathName = path[0].getName() tree = self.trees.get(pathName) self.trees[pathName] = self.__makeTree(path, tree) else: path = [QuestDB.QuestDict.get(questId)] self.trees[questId] = self.__makeTree(path, tree=None) treeList = self.orderTrees() for tree in treeList: self.__makeButtons(self.getCanvas(), tree) self.repack() return
def update(self, questIdList, quest, newQuest): if quest and isinstance(quest, Quest.Quest): if newQuest: localAvatar.questStatus.assignQuest(quest) container = localAvatar.questStatus.getContainer(quest.questId) if not container: container = localAvatar.getQuestById(quest.questId) container.viewedInGUI = False for button in self.buttons: button.destroy() self.buttons = [] self.trees = { } for questId in questIdList: path = QuestLadderDB.getFamePath(questId) if path: pathName = path[0].getName() tree = self.trees.get(pathName) self.trees[pathName] = self._QuestTitleList__makeTree(path, tree) continue path = QuestLadderDB.getFortunePath(questId) if path: pathName = path[0].getName() tree = self.trees.get(pathName) self.trees[pathName] = self._QuestTitleList__makeTree(path, tree) continue path = [ QuestDB.QuestDict.get(questId)] self.trees[questId] = self._QuestTitleList__makeTree(path, tree = None) treeList = self.orderTrees() for tree in treeList: self._QuestTitleList__makeButtons(self.getCanvas(), tree) self.repack()
def hasQuestOffersForLocalAvatar(self): av = localAvatar inventory = av.getInventory() selfId = self.getQuestGiverId() if inventory: numInProgress = 0 for quest in inventory.getQuestList(): questType = self.QuestIconDontCare if quest.tasks is None: self.notify.warning('quest %s: does not contain a dna; potential for crash.' % quest.getQuestId()) return False for (task, taskState) in zip(quest.tasks, quest.taskStates): if isinstance(task, QuestTaskDNA.VisitTaskDNA): if task.npcId == selfId: questStatus = self.QuestIconComplete return (questType, questStatus) task.npcId == selfId if quest.canBeReturnedTo(selfId): isComplete = False if quest.isComplete(): container = localAvatar.questStatus.getContainer(quest.getQuestId()) if container and container.parent and container.parent.isChoice(): isComplete = True for q in container.parent.getContainers(): if q.quest and not q.quest.isComplete(): isComplete = False continue else: isComplete = True if isComplete: questStatus = self.QuestIconComplete return (questType, questStatus) else: numInProgress += 1 else: self.notify.warning('avatar does not have inventory yet') return False offerDict = { } fromQuests = [] prereqExcludes = base.config.GetString('exclude-prereq-quests', '') for (questId, questDNA) in QuestDB.QuestDict.items(): if prereqExcludes and questId in prereqExcludes: continue passed = True for prereq in questDNA.prereqs: if not prereq.giverCanGive(selfId): passed = False break if not prereq.avIsReady(localAvatar): passed = False break if questDNA.minLevel > localAvatar.level: passed = False break if not base.cr.questDependency.checkDependency(questId, localAvatar.getQuestLadderHistory(), 1): passed = False break boolWeapLvlCheck = (questDNA.weapLvlType != None) & (questDNA.minWeapLevel > 0) if boolWeapLvlCheck & (questDNA.minWeapLevel > getLevelFromTotalReputation(questDNA.weapLvlType, inventory.getReputation(questDNA.weapLvlType))[0]): passed = False break if questDNA.getAcquireOnce(): history = localAvatar.getQuestLadderHistory() questLadderId = base.cr.questDynMap.findQuestLadderInt(questId) containsLadderId = history.count(questLadderId) if containsLadderId: passed = False break if questDNA.getHoliday() is not None: holidayId = questDNA.getHoliday() if base.cr.newsManager and not base.cr.newsManager.getHoliday(holidayId): passed = False break not base.cr.newsManager.getHoliday(holidayId) if questDNA.prereqs and passed: fromQuests.append(questDNA) continue if len(fromQuests): inventory = av.getInventory() if inventory: questsLeft = [] questList = inventory.getQuestList() for questDNA in fromQuests: questId = questDNA.questId if not av.questStatus.hasLadderQuestId(questId): continue if _[1] not in [ x.questId for x in questList ]: questsLeft.append(questDNA) continue [] fromQuests = questsLeft if fromQuests: questType = self.QuestIconWork for quest in fromQuests: if QuestLadderDB.getFamePath(quest.questId): questType = self.QuestIconStory break continue questStatus = self.QuestIconNew return (questType, questStatus) if numInProgress: questStatus = self.QuestIconProgress return (questType, questStatus) return False
def presentQuestOffer(self, offers, ladder = False): if self.questMenuGUI: DistributedQuestGiver.notify.warning('setQuestOffer: old questMenu GUI still around') self.cleanUpQuestMenu() self.cleanUpQuestDetails() def handleSelection(offer, self = self, offers = offers): self.cleanUpQuestMenu() if offer == QuestConstants.CANCEL_QUEST: index = QuestConstants.CANCEL_QUEST else: index = offers.index(offer) self.sendOfferResponse(index, ladder) def handleOption(option, offer): base.test = self self.ignore('lastSubtitlePage') self.adjustNPCCamera('back') if option == PLocalizer.Accept: handleSelection(offer) elif self.questMenuGUI: self.questMenuGUI.show() self.cleanUpQuestDetails(hide = True) def displayQuestDetails(offer): self.questDetailGUI = QuestDetailGUI(offer, None) self.questDetailGUI.showPanel() base.questdet = self.questDetailGUI def displayBranchDetails(offer): self.selectedOffer = offer self.cleanUpQuestDetails() self.questDetailGUI = QuestDetailGUI(offer, None) self.questDetailGUI.showPanel() base.questdet = self.questDetailGUI def displayBranchOptions(offer, callback, descCallback): self.branchMenuGUI = BranchMenuGUI.BranchMenuGUI(offer, callback, descCallback) def handleBranchOption(option): if option == PLocalizer.Accept: if self.selectedOffer: self.sendOfferResponse(0, ladder, self.selectedOffer) self.adjustNPCCamera('back') self.cleanUpQuestDetails(hide = True) self.cleanUpBranchMenu() if self.questMenuGUI: self.questMenuGUI.show() def describeQuest(offer): self.adjustNPCCamera('forward') questDNA = offer.getQuestDNA() if questDNA: if isinstance(offer, QuestOffer.QuestTimerResetOffer): self.requestQuestReset(offer.getQuestId()) return None elif isinstance(offer, QuestOffer.QuestBranchResetOffer): self.requestBranchReset(offer.getQuestId()) return None questStr = questDNA.getStringBefore() if questDNA.isBranch(): self.acceptOnce('lastSubtitlePage', displayBranchOptions, [ offer, None, displayBranchDetails]) localAvatar.guiMgr.subtitler.setPageChat(questStr, options = [ PLocalizer.Decline, PLocalizer.Accept], callback = handleBranchOption) else: self.acceptOnce('lastSubtitlePage', displayQuestDetails, [ offer]) localAvatar.guiMgr.subtitler.setPageChat(questStr, options = [ PLocalizer.Decline, PLocalizer.Accept], callback = handleOption, extraArgs = [ offer]) def questFull(arg): self.cleanUpQuestMenu() self.sendOfferResponse(QuestConstants.CANCEL_QUEST, ladder) inv = base.localAvatar.getInventory() numWorkQuests = 0 if inv: questList = inv.getQuestList() for questId in questList: if not QuestLadderDB.getFamePath(questId): numWorkQuests += 1 continue hasStoryQuest = False for offer in offers: if QuestLadderDB.getFamePath(offer.getQuestId()): hasStoryQuest = True continue if not hasStoryQuest and numWorkQuests > QuestConstants.MAXIMUM_MERC_WORK: self.questMenuGUI = PDialog.PDialog(text = PLocalizer.QuestFull, style = OTPDialog.Acknowledge, command = questFull) else: self.questMenuGUI = QuestMenuGUI.QuestMenuGUI(offers, handleSelection, describeQuest) localAvatar.currentStoryQuests = [] self.clearOffer()