def check_quest_giver_npc_is_related(quest_giver_entry, quest_entry): is_related = False relations_list = WorldDatabaseManager.creature_quest_get_by_entry(quest_giver_entry) for relation in relations_list: if relation.entry == quest_giver_entry and relation.quest == quest_entry: is_related = True return is_related
def prepare_quest_giver_gossip_menu(self, quest_giver, guid): quest_menu = QuestMenu() # Type is unit, but not player if quest_giver.get_type( ) == ObjectTypes.TYPE_UNIT and quest_giver.get_type( ) != ObjectTypes.TYPE_PLAYER: relations_list = WorldDatabaseManager.creature_quest_get_by_entry( quest_giver.entry) involved_relations_list = WorldDatabaseManager.creature_involved_quest_get_by_entry( quest_giver.entry) elif quest_giver.get_type() == ObjectTypes.TYPE_GAMEOBJECT: # TODO: Gameobjects relations_list = [] involved_relations_list = [] else: return # TODO: Finish quests for involved_relation in involved_relations_list: if len(involved_relation) == 0: continue continue # Starting quests for relation in relations_list: if len(relation) == 0: continue quest_entry = relation[1] quest = WorldDatabaseManager.quest_get_by_entry(quest_entry) if not quest or not self.check_quest_requirements( quest) or not self.check_quest_level(quest, False): continue quest_menu.add_menu_item(quest, QuestStatus.QUEST_OFFER) if len(quest_menu.items) == 1: # TODO: handle a single quest situation, open the quest directly quest = list(quest_menu.items.values())[0] self.send_quest_giver_quest_list("Greetings, $N.", guid, quest_menu.items) else: # TODO: Send the proper greeting message self.send_quest_giver_quest_list("Greetings, $N.", guid, quest_menu.items)
def get_dialog_status(self, world_obj, defstatus): dialog_status = defstatus rbounds = WorldDatabaseManager.creature_quest_get_by_entry( world_obj.entry) # realtions bounds, the quest giver irbounds = WorldDatabaseManager.creature_involved_quest_get_by_entry( world_obj.entry ) # involved relations bounds, the quest completer # TODO: If unit is hostile to player, do not display status # Quest finish, Loop through all the completion quests offered by this quest giver # TODO: This loop for irbound in irbounds: if len(irbound) == 0: continue quest_entry = irbound[1] quest = WorldDatabaseManager.quest_get_by_entry(quest_entry) # TODO: put in a check for quest status when you have quests that are already accepted by player # Quest start, Loop through all the acceptable quests offered by this quest giver for rbound in rbounds: new_dialog_status = QuestGiverStatuses.QUEST_GIVER_NONE quest_entry = rbound[1] quest = WorldDatabaseManager.quest_get_by_entry(quest_entry) if (quest.Method == 0): new_dialog_status = QuestGiverStatuses.QUEST_GIVER_REWARD elif (self.owner.level < quest.MinLevel & self.owner.level >= quest.MinLevel - 4): new_dialog_status = QuestGiverStatuses.QUEST_GIVER_FUTURE # Silver ! elif (self.owner.level >= quest.MinLevel & self.owner.level < quest.QuestLevel + 7): new_dialog_status = QuestGiverStatuses.QUEST_GIVER_QUEST # Yellow ! elif (self.owner.level > quest.QuestLevel + 7): new_dialog_status = QuestGiverStatuses.QUEST_GIVER_TRIVIAL # ez quest # print("Classes: %s"%(quest.RequiredClasses)) # Update the status if it appears to be a "higher" code then any of the previous if new_dialog_status > dialog_status: dialog_status = new_dialog_status # return the status return dialog_status
def prepare_quest_giver_gossip_menu(self, quest_giver, guid): quest_menu = QuestMenu() # Type is unit, but not player if quest_giver.get_type() == ObjectTypes.TYPE_UNIT and quest_giver.get_type() != ObjectTypes.TYPE_PLAYER: relations_list = WorldDatabaseManager.creature_quest_get_by_entry(quest_giver.entry) involved_relations_list = WorldDatabaseManager.creature_involved_quest_get_by_entry(quest_giver.entry) elif quest_giver.get_type() == ObjectTypes.TYPE_GAMEOBJECT: # TODO: Gameobjects relations_list = [] involved_relations_list = [] else: return # TODO: Finish quests for involved_relation in involved_relations_list: if len(involved_relation) == 0: continue continue # Starting quests for relation in relations_list: if len(relation) == 0: continue quest_entry = relation[1] quest = WorldDatabaseManager.quest_get_by_entry(quest_entry) if not quest or not self.check_quest_requirements(quest) or not self.check_quest_level(quest, False): continue quest_menu.add_menu_item(quest, QuestStatus.QUEST_OFFER) if len(quest_menu.items) == 1: quest_menu_item = list(quest_menu.items.values())[0] if quest_menu_item.status == QuestStatus.QUEST_REWARD: # TODO: Handle completed quest return 0 elif quest_menu_item.status == QuestStatus.QUEST_ACCEPTED: # TODO: Handle in progress quests return 0 else: self.send_quest_giver_quest_details(quest_menu_item.quest, guid, True) else: # TODO: Send the proper greeting message self.send_quest_giver_quest_list("Greetings, $N.", guid, quest_menu.items) self.update_surrounding_quest_status()
def get_dialog_status(self, world_obj): dialog_status = QuestGiverStatus.QUEST_GIVER_NONE # Relations bounds, the quest giver; Involved relations bounds, the quest completer relations_list = WorldDatabaseManager.creature_quest_get_by_entry( world_obj.entry) involved_relations_list = WorldDatabaseManager.creature_involved_quest_get_by_entry( world_obj.entry) if self.player_mgr.is_enemy_to(world_obj): return dialog_status # TODO: Quest finish for involved_relation in involved_relations_list: if len(involved_relation) == 0: continue quest_entry = involved_relation[1] quest = WorldDatabaseManager.quest_get_by_entry(quest_entry) if not quest: continue # TODO: put in a check for quest status when you have quests that are already accepted by player # Quest start for relation in relations_list: new_dialog_status = QuestGiverStatus.QUEST_GIVER_NONE quest_entry = relation[1] quest = WorldDatabaseManager.quest_get_by_entry(quest_entry) if not quest or not self.check_quest_requirements(quest): continue if quest.Method == 0: new_dialog_status = QuestGiverStatus.QUEST_GIVER_REWARD elif quest.MinLevel > self.player_mgr.level >= quest.MinLevel - 4: new_dialog_status = QuestGiverStatus.QUEST_GIVER_FUTURE elif quest.MinLevel <= self.player_mgr.level < quest.QuestLevel + 7: new_dialog_status = QuestGiverStatus.QUEST_GIVER_QUEST elif self.player_mgr.level > quest.QuestLevel + 7: new_dialog_status = QuestGiverStatus.QUEST_GIVER_TRIVIAL if new_dialog_status > dialog_status: dialog_status = new_dialog_status return dialog_status
def update_surrounding_quest_status(self): for guid, unit in list(GridManager.get_surrounding_units(self.player_mgr).items()): if WorldDatabaseManager.creature_involved_quest_get_by_entry(unit.entry) or WorldDatabaseManager.creature_quest_get_by_entry(unit.entry): quest_status = self.get_dialog_status(unit) self.send_quest_giver_status(guid, quest_status)