Beispiel #1
0
 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)
Beispiel #3
0
    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
Beispiel #4
0
    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
Beispiel #6
0
 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)