diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 1 |
2 files changed, 33 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a59c6b47328..50e5c2bcc71 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14992,6 +14992,10 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) SendQuestUpdate(quest_id); + bool updateVisibility = false; + if (quest->HasFlag(QUEST_FLAGS_UPDATE_PHASESHIFT)) + updateVisibility = PhasingHandler::OnConditionChange(this, false); + if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled { // prepare Quest Tracker datas @@ -15005,6 +15009,9 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) CharacterDatabase.Execute(stmt); } + if (updateVisibility) + UpdateObjectVisibility(); + sScriptMgr->OnQuestStatusChange(this, quest_id); sScriptMgr->OnQuestStatusChange(this, quest, oldStatus, questStatusData.Status); } @@ -16104,8 +16111,19 @@ void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/) m_QuestStatusSave[questId] = QUEST_DELETE_SAVE_TYPE; } + Quest const* quest = sObjectMgr->GetQuestTemplate(questId); + bool updateVisibility = false; + if (update) + { SendQuestUpdate(questId); + + if (quest && quest->HasFlag(QUEST_FLAGS_UPDATE_PHASESHIFT)) + updateVisibility = PhasingHandler::OnConditionChange(this, false); + } + + if (updateVisibility) + UpdateObjectVisibility(); } void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) @@ -16121,11 +16139,14 @@ void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) SetQuestCompletedBit(questBit, false); // Remove seasonal quest also - Quest const* qInfo = sObjectMgr->GetQuestTemplate(questId); - ASSERT(qInfo); - if (qInfo->IsSeasonal()) + Quest const* quest = sObjectMgr->GetQuestTemplate(questId); + bool updateVisibility = false; + + ASSERT(quest); + + if (quest->IsSeasonal()) { - uint16 eventId = qInfo->GetEventIdForQuest(); + uint16 eventId = quest->GetEventIdForQuest(); if (m_seasonalquests.find(eventId) != m_seasonalquests.end()) { m_seasonalquests[eventId].erase(questId); @@ -16134,7 +16155,15 @@ void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) } if (update) + { SendQuestUpdate(questId); + + if (quest && quest->HasFlag(QUEST_FLAGS_UPDATE_PHASESHIFT)) + updateVisibility = PhasingHandler::OnConditionChange(this, false); + } + + if (updateVisibility) + UpdateObjectVisibility(); } void Player::SendQuestUpdate(uint32 questId, bool updateInteractions /*= true*/, bool updateGameObjectQuestGiverStatus /*= false*/) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 38245779846..fe9d3027ef7 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -40,7 +40,6 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPackets::Quest::QuestGiverStatusQuery& packet) { - Object* questGiver = ObjectAccessor::GetObjectByTypeMask(*_player, packet.QuestGiverGUID, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); if (!questGiver) { |