diff options
author | Meji <alvaro.megias@outlook.com> | 2024-04-08 13:26:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-08 13:26:04 +0200 |
commit | c90dbeb648f4bba2c354ed37b89f696f99e5bc94 (patch) | |
tree | b924c7c2623b5ccbd66e2477621ff0ca483ed25b | |
parent | f331bd1a28ec24e5a03544d929263ed3aaeef725 (diff) |
Core/Quests: Update phaseshift when taking or abandoning quests (#29901)
-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) { |