aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp37
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp1
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 7c1e2d036bb..4c170235539 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -14652,6 +14652,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
@@ -14665,6 +14669,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);
}
@@ -15763,8 +15770,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*/)
@@ -15780,11 +15798,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);
@@ -15793,7 +15814,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 4b5909fcb39..8b2020a98a6 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)
{