diff --git a/src/game/ChatCommands/Level3.cpp b/src/game/ChatCommands/Level3.cpp index b79682b5..f0b587e6 100644 --- a/src/game/ChatCommands/Level3.cpp +++ b/src/game/ChatCommands/Level3.cpp @@ -5004,7 +5004,7 @@ bool ChatHandler::HandleQuestCompleteCommand(char* args) if (ReqOrRewMoney < 0) { player->ModifyMoney(-ReqOrRewMoney); } - 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 65b20058..6a7e6ecd 100644 --- a/src/game/Object/Player.cpp +++ b/src/game/Object/Player.cpp @@ -12528,11 +12528,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) @@ -13123,7 +13123,11 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const { QuestStatusMap::const_iterator itr = mQuestStatus.find(quest_id); if (itr != mQuestStatus.end()) - { return itr->second.m_status; } + { + 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 09a659a7..bfbed92f 100644 --- a/src/game/Object/Player.h +++ b/src/game/Object/Player.h @@ -1032,8 +1032,8 @@ class Player : public Unit void SetGMVisible(bool on); void SetPvPDeath(bool on) { - if (on) { m_ExtraFlags |= PLAYER_EXTRA_PVP_DEATH; } - else { m_ExtraFlags &= ~PLAYER_EXTRA_PVP_DEATH; } + if (on) { m_ExtraFlags |= PLAYER_EXTRA_PVP_DEATH; } + else { m_ExtraFlags &= ~PLAYER_EXTRA_PVP_DEATH; } } // 0 = own auction, -1 = enemy auction, 1 = goblin auction @@ -1116,12 +1116,12 @@ class Player : public Unit void Say(const std::string& text, const uint32 language); void Yell(const std::string& text, const uint32 language); void TextEmote(const std::string& text); - /** + /** * This will log a whisper depending on the setting LogWhispers in mangosd.conf, for a list * of available levels please see \ref WhisperLoggingLevels. The logging is done to database * in the table characters.character_whispers and includes to/from, text and when the whisper * was sent. - * + * * @param text the text that was sent * @param receiver guid of the receiver of the message * \see WhisperLoggingLevels @@ -1337,7 +1337,7 @@ class Player : public Unit // The returned quest can then be used by AddQuest( ) to add to the character_queststatus table Quest const* GetQuestTemplate(uint32 quest_id); 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); @@ -1360,7 +1360,7 @@ class Player : public Unit bool GetQuestRewardStatus(uint32 quest_id) const; QuestStatus GetQuestStatus(uint32 quest_id) const; void SetQuestStatus(uint32 quest_id, QuestStatus status); - // This is used to change the quest's rewarded state + // This is used to change the quest's rewarded state void SetQuestRewarded(uint32 quest_id, bool rewarded); uint16 FindQuestSlot(uint32 quest_id) const; diff --git a/src/game/WorldHandlers/QuestDef.h b/src/game/WorldHandlers/QuestDef.h index b39cc8e9..0b6ff7a7 100644 --- a/src/game/WorldHandlers/QuestDef.h +++ b/src/game/WorldHandlers/QuestDef.h @@ -99,6 +99,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 };