From c5f17620dfc9b0a79cc6109dbc366f98f3bc278b Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 1 Feb 2017 00:22:45 +0100 Subject: [PATCH] Core/Quest: Fix SMSG_QUESTGIVER_STATUS_MULTIPLE By Davide --- src/server/game/Entities/Player/Player.cpp | 10 ++++-- src/server/game/Handlers/QuestHandler.cpp | 41 +--------------------- 2 files changed, 9 insertions(+), 42 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4fd6d4c190..b535bc8c0b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2914,6 +2914,9 @@ void Player::GiveLevel(uint8 level) if (Pet* pet = GetPet()) pet->SynchronizeLevelWithOwner(); + //Update QuestGivers + SendQuestGiverStatusMultiple(); + if (MailLevelReward const* mailReward = sObjectMgr->GetMailLevelReward(level, getRaceMask())) { /// @todo Poor design of mail system @@ -15292,6 +15295,9 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, SendQuestUpdate(quest_id); + //Update QuestGivers + SendQuestGiverStatusMultiple(); + //lets remove flag for delayed teleports SetCanDelayTeleport(false); @@ -16899,7 +16905,7 @@ void Player::SendQuestGiverStatusMultiple() questStatus = GetQuestDialogStatus(questgiver); data << uint64(questgiver->GetGUID()); - data << uint8(questStatus); + data << int32(questStatus); ++count; } else if (itr->IsGameObject()) @@ -16911,7 +16917,7 @@ void Player::SendQuestGiverStatusMultiple() questStatus = GetQuestDialogStatus(questgiver); data << uint64(questgiver->GetGUID()); - data << uint8(questStatus); + data << int32(questStatus); ++count; } } diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index fa614bb1c1..f82990a992 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -672,46 +672,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket { TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY"); - uint32 count = 0; - - WorldPacket data(SMSG_QUESTGIVER_STATUS_MULTIPLE, 4 + 8 + 4); - data << uint32(count); // placeholder - - for (auto itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr) - { - uint32 questStatus = DIALOG_STATUS_NONE; - - if (itr->IsAnyTypeCreature()) - { - // need also pet quests case support - Creature* questgiver = ObjectAccessor::GetCreatureOrPetOrVehicle(*GetPlayer(), *itr); - if (!questgiver || questgiver->IsHostileTo(_player)) - continue; - if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) - continue; - - questStatus = _player->GetQuestDialogStatus(questgiver); - - data << uint64(questgiver->GetGUID()); - data << uint32(questStatus); - ++count; - } - else if (itr->IsGameObject()) - { - GameObject* questgiver = GetPlayer()->GetMap()->GetGameObject(*itr); - if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) - continue; - - questStatus = _player->GetQuestDialogStatus(questgiver); - - data << uint64(questgiver->GetGUID()); - data << uint32(questStatus); - ++count; - } - } - - data.put(0, count); // write real count - SendPacket(&data); + _player->SendQuestGiverStatusMultiple(); } void WorldSession::HandleQueryQuestsCompleted(WorldPacket& /*recvData*/)