aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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 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)
{