From 3c378d7b0dae3f46afe5501e39d042abfbaafc5b Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 1 Feb 2020 15:47:58 +0100 Subject: [PATCH] Core/Packets: converted SMSG_QUEST_UPDATE_COMPLETE, SMSG_QUEST_UPDATE_FAILED_TIMER, SMSG_QUEST_GIVER_INVALID_QUEST, SMSG_QUEST_GIVER_QUEST_FAILED, MSG_QUEST_PUSH_RESULT, SMSG_QUEST_GIVER_STATUS_MULTIPLE and SMSG_QUEST_LOG_FULL to packet class --- src/server/game/Entities/Player/Player.cpp | 68 +++++++----------- src/server/game/Entities/Player/Player.h | 4 +- .../game/Server/Packets/QuestPackets.cpp | 52 ++++++++++++++ src/server/game/Server/Packets/QuestPackets.h | 70 +++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 14 ++-- src/server/game/Server/Protocol/Opcodes.h | 14 ++-- 6 files changed, 164 insertions(+), 58 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1d97645d939..6fe1a6ab930 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15430,8 +15430,8 @@ bool Player::SatisfyQuestLog(bool msg) const if (msg) { - WorldPacket data(SMSG_QUESTLOG_FULL, 0); - SendDirectMessage(&data); + WorldPackets::Quest::QuestLogFull packet; + SendDirectMessage(packet.Write()); } return false; } @@ -16778,10 +16778,9 @@ void Player::SendQuestComplete(Quest const* quest) const { if (quest) { - WorldPacket data(SMSG_QUESTUPDATE_COMPLETE, 4); - data << uint32(quest->GetQuestId()); - SendDirectMessage(&data); - TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_COMPLETE quest = %u", quest->GetQuestId()); + WorldPackets::Quest::QuestUpdateComplete packet; + packet.QuestID = quest->GetQuestId(); + SendDirectMessage(packet.Write()); } } @@ -16817,30 +16816,28 @@ void Player::SendQuestFailed(uint32 questId, InventoryResult reason) const { if (questId) { - WorldPacket data(SMSG_QUESTGIVER_QUEST_FAILED, 4 + 4); - data << uint32(questId); - data << uint32(reason); // failed reason (valid reasons: 4, 16, 50, 17, 74, other values show default message) - SendDirectMessage(&data); + WorldPackets::Quest::QuestGiverQuestFailed packet; + packet.QuestID = questId; + packet.Reason = reason; + SendDirectMessage(packet.Write()); } } -void Player::SendQuestTimerFailed(uint32 quest_id) const +void Player::SendQuestTimerFailed(uint32 questId) const { - if (quest_id) + if (questId) { - WorldPacket data(SMSG_QUESTUPDATE_FAILEDTIMER, 4); - data << uint32(quest_id); - SendDirectMessage(&data); - TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTUPDATE_FAILEDTIMER"); + WorldPackets::Quest::QuestUpdateFailedTimer packet; + packet.QuestID = questId; + SendDirectMessage(packet.Write()); } } -void Player::SendCanTakeQuestResponse(QuestFailedReason msg) const +void Player::SendCanTakeQuestResponse(QuestFailedReason reason) const { - WorldPacket data(SMSG_QUESTGIVER_QUEST_INVALID, 4); - data << uint32(msg); - SendDirectMessage(&data); - TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_QUEST_INVALID"); + WorldPackets::Quest::QuestGiverInvalidQuest packet; + packet.Reason = reason; + SendDirectMessage(packet.Write()); } void Player::SendQuestConfirmAccept(Quest const* quest, Player* receiver) const @@ -16868,11 +16865,10 @@ void Player::SendPushToPartyResponse(Player* player, uint8 msg) const { if (player) { - WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 1); - data << uint64(player->GetGUID()); - data << uint8(msg); // valid values: 0-8 - SendDirectMessage(&data); - TC_LOG_DEBUG("network", "WORLD: Sent MSG_QUEST_PUSH_RESULT"); + WorldPackets::Quest::QuestPushResultResponse packet; + packet.SenderGUID = player->GetGUID(); + packet.Result = msg; + SendDirectMessage(packet.Write()); } } @@ -16903,10 +16899,7 @@ void Player::SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) void Player::SendQuestGiverStatusMultiple() { - uint32 count = 0; - - WorldPacket data(SMSG_QUESTGIVER_STATUS_MULTIPLE, 4); - data << uint32(count); // placeholder + WorldPackets::Quest::QuestGiverStatusMultiple response; for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) { @@ -16921,11 +16914,7 @@ void Player::SendQuestGiverStatusMultiple() if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) continue; - questStatus = GetQuestDialogStatus(questgiver); - - data << uint64(questgiver->GetGUID()); - data << int32(questStatus); - ++count; + response.QuestGiver.emplace_back(questgiver->GetGUID(), GetQuestDialogStatus(questgiver)); } else if (itr->IsGameObject()) { @@ -16933,16 +16922,11 @@ void Player::SendQuestGiverStatusMultiple() if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) continue; - questStatus = GetQuestDialogStatus(questgiver); - - data << uint64(questgiver->GetGUID()); - data << int32(questStatus); - ++count; + response.QuestGiver.emplace_back(questgiver->GetGUID(), GetQuestDialogStatus(questgiver)); } } - data.put(0, count); // write real count - SendDirectMessage(&data); + SendDirectMessage(response.Write()); } bool Player::HasPvPForcingQuest() const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d342a7ac6c5..49d331e5b97 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1440,8 +1440,8 @@ class TC_GAME_API Player : public Unit, public GridObject void SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp); void SendQuestFailed(uint32 questId, InventoryResult reason = EQUIP_ERR_OK) const; void SendQuestTimerFailed(uint32 questId) const; - void SendCanTakeQuestResponse(QuestFailedReason msg) const; - void SendQuestConfirmAccept(Quest const* quest, Player* pReceiver) const; + void SendCanTakeQuestResponse(QuestFailedReason reason) const; + void SendQuestConfirmAccept(Quest const* quest, Player* receiver) const; void SendPushToPartyResponse(Player* player, uint8 msg) const; void SendQuestUpdateAddCredit(Quest const* quest, ObjectGuid guid, uint32 creatureOrGOIdx, uint16 count); void SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount); diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 8586aa171b4..967c033c3a7 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -194,6 +194,7 @@ WorldPacket const* WorldPackets::Quest::QuestConfirmAcceptResponse::Write() _worldPacket << uint32(QuestID); _worldPacket << QuestTitle; _worldPacket << InitiatedBy; + return &_worldPacket; } @@ -204,6 +205,7 @@ WorldPacket const* WorldPackets::Quest::QuestUpdateAddCredit::Write() _worldPacket << uint32(Count); _worldPacket << uint32(Required); _worldPacket << VictimGUID; + return &_worldPacket; } @@ -212,6 +214,56 @@ WorldPacket const* WorldPackets::Quest::QuestUpdateAddPvPCredit::Write() _worldPacket << uint32(QuestID); _worldPacket << uint32(Count); _worldPacket << uint32(Required); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestUpdateComplete::Write() +{ + _worldPacket << uint32(QuestID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestUpdateFailedTimer::Write() +{ + _worldPacket << uint32(QuestID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestGiverInvalidQuest::Write() +{ + _worldPacket << uint32(Reason); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestGiverQuestFailed::Write() +{ + _worldPacket << uint32(QuestID); + _worldPacket << uint32(Reason); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestPushResultResponse::Write() +{ + _worldPacket << SenderGUID; + _worldPacket << uint8(Result); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Quest::QuestGiverStatusMultiple::Write() +{ + _worldPacket << int32(QuestGiver.size()); + for (QuestGiverInfo const& questGiver : QuestGiver) + { + _worldPacket << questGiver.Guid; + _worldPacket << uint32(questGiver.Status); + } + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 86b6f307ae6..9a37069aecf 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -351,6 +351,76 @@ namespace WorldPackets uint32 Count = 0; uint32 Required = 0; }; + + class QuestUpdateComplete final : public ServerPacket + { + public: + QuestUpdateComplete() : ServerPacket(SMSG_QUEST_UPDATE_COMPLETE, 4) { } + + WorldPacket const* Write() override; + + int32 QuestID = 0; + }; + + class QuestUpdateFailedTimer final : public ServerPacket + { + public: + QuestUpdateFailedTimer() : ServerPacket(SMSG_QUEST_UPDATE_FAILED_TIMER, 4) { } + + WorldPacket const* Write() override; + + uint32 QuestID = 0; + }; + + class QuestGiverInvalidQuest final : public ServerPacket + { + public: + QuestGiverInvalidQuest() : ServerPacket(SMSG_QUEST_GIVER_INVALID_QUEST, 6) { } + + WorldPacket const* Write() override; + + uint32 Reason = 0; + }; + + class QuestGiverQuestFailed final : public ServerPacket + { + public: + QuestGiverQuestFailed() : ServerPacket(SMSG_QUEST_GIVER_QUEST_FAILED, 8) { } + + WorldPacket const* Write() override; + + uint32 QuestID = 0; + uint32 Reason = 0; + }; + + class QuestPushResultResponse final : public ServerPacket + { + public: + QuestPushResultResponse() : ServerPacket(OpcodeServer(MSG_QUEST_PUSH_RESULT), 8 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid SenderGUID; + uint8 Result = 0; + }; + + class QuestGiverStatusMultiple final : public ServerPacket + { + public: + QuestGiverStatusMultiple() : ServerPacket(SMSG_QUEST_GIVER_STATUS_MULTIPLE, 24) { } + + WorldPacket const* Write() override; + + std::vector QuestGiver; + }; + + class QuestLogFull final : public ServerPacket + { + public: + QuestLogFull() : ServerPacket(SMSG_QUEST_LOG_FULL, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 1f16eeeb8ea..c917877ab6f 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1139,18 +1139,18 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_OFFER_REWARD, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_DETAILS, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_INVALID, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_INVALID_QUEST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_REQUEST_ITEMS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_STATUS_MULTIPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTLOG_FULL, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS_MULTIPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_LOG_FULL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTUPDATE_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTUPDATE_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTUPDATE_FAILEDTIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_FORCE_REMOVE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_NPC_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c58b6c7ad42..a517b15a738 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1096,19 +1096,19 @@ enum OpcodeServer SMSG_QUESTGIVER_OFFER_REWARD = 0x2427, SMSG_QUEST_GIVER_QUEST_COMPLETE = 0x55A4, SMSG_QUEST_GIVER_QUEST_DETAILS = 0x2425, - SMSG_QUESTGIVER_QUEST_FAILED = 0x4236, - SMSG_QUESTGIVER_QUEST_INVALID = 0x4016, + SMSG_QUEST_GIVER_QUEST_FAILED = 0x4236, + SMSG_QUEST_GIVER_INVALID_QUEST = 0x4016, SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x0134, SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x6236, SMSG_QUEST_GIVER_STATUS = 0x2115, - SMSG_QUESTGIVER_STATUS_MULTIPLE = 0x4F25, - SMSG_QUESTLOG_FULL = 0x0E36, + SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x4F25, + SMSG_QUEST_LOG_FULL = 0x0E36, SMSG_QUESTUPDATE_ADD_ITEM = 0x0000, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x0D27, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x4416, - SMSG_QUESTUPDATE_COMPLETE = 0x2937, - SMSG_QUESTUPDATE_FAILED = 0x6324, - SMSG_QUESTUPDATE_FAILEDTIMER = 0x6427, + SMSG_QUEST_UPDATE_COMPLETE = 0x2937, + SMSG_QUEST_UPDATE_FAILED = 0x6324, + SMSG_QUEST_UPDATE_FAILED_TIMER = 0x6427, SMSG_QUEST_NPC_QUERY_RESPONSE = 0x75A1, SMSG_QUEST_CONFIRM_ACCEPT = 0x6F07, SMSG_QUEST_FORCE_REMOVE = 0x6605,