From 973c07358b0169df3ccadb93e0308847224f51e6 Mon Sep 17 00:00:00 2001 From: Antz Date: Wed, 22 Nov 2017 18:57:03 +0000 Subject: [PATCH] Add state for GM command completed quests. Thanks H0zen for assistance --- src/game/ChatCommands/Level3.cpp | 2 +- src/game/Object/Player.cpp | 8 ++++++-- src/game/Object/Player.h | 2 +- src/game/WorldHandlers/QuestDef.h | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/game/ChatCommands/Level3.cpp b/src/game/ChatCommands/Level3.cpp index 0dc6495c4..49a35fa19 100644 --- a/src/game/ChatCommands/Level3.cpp +++ b/src/game/ChatCommands/Level3.cpp @@ -5646,7 +5646,7 @@ bool ChatHandler::HandleQuestCompleteCommand(char* args) if (uint32 spell = pQuest->GetReqSpellLearned()) player->learnSpell(spell, false); - player->CompleteQuest(entry); + player->CompleteQuest(entry, QUEST_STATUS_FORCE_COMPLETE); return true; } diff --git a/src/game/Object/Player.cpp b/src/game/Object/Player.cpp index 5f2115bbb..d5587b4c0 100644 --- a/src/game/Object/Player.cpp +++ b/src/game/Object/Player.cpp @@ -13742,11 +13742,11 @@ void Player::AddQuest(Quest const* pQuest, Object* questGiver) UpdateForQuestWorldObjects(); } -void Player::CompleteQuest(uint32 quest_id) +void Player::CompleteQuest(uint32 quest_id, QuestStatus status) { if (quest_id) { - SetQuestStatus(quest_id, QUEST_STATUS_COMPLETE); + SetQuestStatus(quest_id, status); uint16 log_slot = FindQuestSlot(quest_id); if (log_slot < MAX_QUEST_LOG_SIZE) @@ -14485,7 +14485,11 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const { QuestStatusMap::const_iterator itr = mQuestStatus.find(quest_id); if (itr != mQuestStatus.end()) + { + if (itr->second.m_status == QUEST_STATUS_FORCE_COMPLETE) + return QUEST_STATUS_COMPLETE; return itr->second.m_status; + } } return QUEST_STATUS_NONE; } diff --git a/src/game/Object/Player.h b/src/game/Object/Player.h index 39d5d3b10..91a9e569f 100644 --- a/src/game/Object/Player.h +++ b/src/game/Object/Player.h @@ -1463,7 +1463,7 @@ class Player : public Unit bool CanRewardQuest(Quest const* pQuest, bool msg) const; bool CanRewardQuest(Quest const* pQuest, uint32 reward, bool msg) const; void AddQuest(Quest const* pQuest, Object* questGiver); - void CompleteQuest(uint32 quest_id); + void CompleteQuest(uint32 quest_id, QuestStatus status = QUEST_STATUS_FORCE_COMPLETE); void IncompleteQuest(uint32 quest_id); void RewardQuest(Quest const* pQuest, uint32 reward, Object* questGiver, bool announce = true); diff --git a/src/game/WorldHandlers/QuestDef.h b/src/game/WorldHandlers/QuestDef.h index 604d701db..a9b35d068 100644 --- a/src/game/WorldHandlers/QuestDef.h +++ b/src/game/WorldHandlers/QuestDef.h @@ -109,6 +109,7 @@ enum QuestStatus QUEST_STATUS_INCOMPLETE = 3, QUEST_STATUS_AVAILABLE = 4, // unused in fact QUEST_STATUS_FAILED = 5, + QUEST_STATUS_FORCE_COMPLETE = 6, MAX_QUEST_STATUS };