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 hasQuestOffers(self): AvailableQuests = [] inventory = localAvatar.getInventory() prereqExcludes = base.config.GetString('exclude-prereq-quests', '') for (questId, questDNA) in QuestDB.QuestDict.items(): if len(prereqExcludes): if questId in prereqExcludes: continue prereqs = questDNA.getPrereqs() passed = True for prereq in prereqs: if not prereq.giverCanGive(self.getUniqueId()): 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.getVelvetRoped() and not Freebooter.getPaidStatus(localAvatar.getDoId()): 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 prereqs and passed: AvailableQuests.append(questDNA) continue if len(AvailableQuests): inventory = localAvatar.getInventory() if inventory: toRemove = [] questList = inventory.getQuestList() for questDNA in AvailableQuests: questId = questDNA.getQuestId() found = False for quest in questList: if questId == quest.getQuestId() or localAvatar.questStatus.hasLadderQuestId(questId): found = True continue if found: toRemove.append(questDNA) continue for questDNA in toRemove: AvailableQuests.remove(questDNA) for quest in localAvatar.getQuests(): if quest and quest.getTimeLimit() and quest.canBeReturnedTo(self.getQuestGiverId()): return True continue return len(AvailableQuests) > 0