aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp32
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp27
3 files changed, 34 insertions, 26 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 0b6e19f90b0..c4419c0aaf0 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15161,6 +15161,8 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
SendQuestUpdate(quest_id);
+ SendQuestGiverStatusMultiple();
+
//lets remove flag for delayed teleports
SetCanDelayTeleport(false);
}
@@ -16819,6 +16821,36 @@ void Player::SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) const
GetSession()->SendPacket(questUpdateAddPvpCredit.Write());
}
+void Player::SendQuestGiverStatusMultiple()
+{
+ WorldPackets::Quest::QuestGiverStatusMultiple response;
+
+ for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
+ {
+ if (itr->IsAnyTypeCreature())
+ {
+ // need also pet quests case support
+ Creature* questgiver = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, *itr);
+ if (!questgiver || questgiver->IsHostileTo(this))
+ continue;
+ if (!questgiver->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER))
+ continue;
+
+ response.QuestGiver.emplace_back(questgiver->GetGUID(), GetQuestDialogStatus(questgiver));
+ }
+ else if (itr->IsGameObject())
+ {
+ GameObject* questgiver = GetMap()->GetGameObject(*itr);
+ if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER)
+ continue;
+
+ response.QuestGiver.emplace_back(questgiver->GetGUID(), GetQuestDialogStatus(questgiver));
+ }
+ }
+
+ GetSession()->SendPacket(response.Write());
+}
+
bool Player::HasPvPForcingQuest() const
{
for (uint8 i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0209dc46385..cd7167b2d26 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1613,6 +1613,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendPushToPartyResponse(Player* player, QuestPushReason reason) const;
void SendQuestUpdateAddCredit(Quest const* quest, ObjectGuid guid, QuestObjective const& obj, uint16 count) const;
void SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) const;
+ void SendQuestGiverStatusMultiple();
ObjectGuid GetDivider() const { return m_divider; }
void SetDivider(ObjectGuid guid) { m_divider = guid; }
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 44214139bc1..cd6b3eb135a 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -653,32 +653,7 @@ void WorldSession::HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& p
void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPackets::Quest::QuestGiverStatusMultipleQuery& /*packet*/)
{
- WorldPackets::Quest::QuestGiverStatusMultiple response;
-
- for (auto itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr)
- {
- if (itr->IsAnyTypeCreature())
- {
- // need also pet quests case support
- Creature* questgiver = ObjectAccessor::GetCreatureOrPetOrVehicle(*GetPlayer(), *itr);
- if (!questgiver || questgiver->IsHostileTo(_player))
- continue;
- if (!questgiver->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER))
- continue;
-
- response.QuestGiver.emplace_back(questgiver->GetGUID(), _player->GetQuestDialogStatus(questgiver));
- }
- else if (itr->IsGameObject())
- {
- GameObject* questgiver = GetPlayer()->GetMap()->GetGameObject(*itr);
- if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER)
- continue;
-
- response.QuestGiver.emplace_back(questgiver->GetGUID(), _player->GetQuestDialogStatus(questgiver));
- }
- }
-
- SendPacket(response.Write());
+ _player->SendQuestGiverStatusMultiple();
}
void WorldSession::HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& /*packet*/)