diff options
| author | NoName <322016+Faq@users.noreply.github.com> | 2020-08-19 15:47:55 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-19 14:47:55 +0200 |
| commit | 01c7663bdd771b54cbf65e9e3a158a2802ad12d2 (patch) | |
| tree | 68864f3d7021907ca7d975de9132628968a13e7e /src/server/game/Server | |
| parent | 515a34f64f200ea0fb9722914b76ab8abd358891 (diff) | |
Core/PacketIO: Update SMSG_QUESTGIVER_OFFER_REWARD (#25251)
Co-authored-by: Carbenium <carbenium@outlook.com>
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 60 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 18 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 2 |
4 files changed, 80 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 9bad6dd5b7b..eb937f8052f 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -184,3 +184,63 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Quest::QuestGiverOfferRewardMessage::Write() +{ + _worldPacket << QuestGiverGUID; + _worldPacket << uint32(QuestID); + + _worldPacket << Title; + _worldPacket << RewardText; + + _worldPacket << uint8(AutoLaunched); + _worldPacket << uint32(Flags); + _worldPacket << uint32(SuggestedGroupNum); + + _worldPacket << uint32(Emotes.size()); + for (WorldPackets::Quest::QuestDescEmote const& emote : Emotes) + { + _worldPacket << uint32(emote.Delay); + _worldPacket << uint32(emote.Type); + } + + _worldPacket << uint32(Rewards.UnfilteredChoiceItems.size()); + for (WorldPackets::Quest::QuestChoiceItem const& item : Rewards.UnfilteredChoiceItems) + { + _worldPacket << uint32(item.ItemID); + _worldPacket << uint32(item.Quantity); + _worldPacket << uint32(item.DisplayID); + } + + _worldPacket << uint32(Rewards.RewardItems.size()); + for (WorldPackets::Quest::QuestChoiceItem const& item : Rewards.RewardItems) + { + _worldPacket << uint32(item.ItemID); + _worldPacket << uint32(item.Quantity); + _worldPacket << uint32(item.DisplayID); + } + + _worldPacket << uint32(Rewards.RewardMoney); + _worldPacket << uint32(Rewards.RewardXPDifficulty); + + _worldPacket << uint32(Rewards.RewardHonor); + _worldPacket << float(Rewards.RewardKillHonor); + _worldPacket << uint32(0); // Unknown value. Read in the packet handler but unused + _worldPacket << uint32(Rewards.RewardDisplaySpell); + _worldPacket << int32(Rewards.RewardSpell); + _worldPacket << uint32(Rewards.RewardTitleId); + _worldPacket << uint32(Rewards.RewardTalents); + _worldPacket << uint32(Rewards.RewardArenaPoints); + _worldPacket << uint32(Rewards.RewardFactionFlags); + + for (uint32 factionId : Rewards.RewardFactionID) + _worldPacket << uint32(factionId); + + for (uint32 value : Rewards.RewardFactionValue) + _worldPacket << int32(value); + + for (uint32 valueOverride : Rewards.RewardFactionValueOverride) + _worldPacket << int32(valueOverride); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 1d7248e7d82..073ff6138e6 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -166,6 +166,24 @@ namespace WorldPackets QuestRewards Rewards; std::vector<QuestDescEmote> DescEmotes; }; + + class QuestGiverOfferRewardMessage final : public ServerPacket + { + public: + QuestGiverOfferRewardMessage() : ServerPacket(SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE, 600) { } + + WorldPacket const* Write() override; + + ObjectGuid QuestGiverGUID; + uint32 QuestID = 0; + std::string Title; + std::string RewardText; + bool AutoLaunched = false; + uint32 Flags = 0; + uint32 SuggestedGroupNum = 0; + std::vector<QuestDescEmote> Emotes; + QuestRewards Rewards; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a10e2af8f03..33d7e334de1 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -525,7 +525,7 @@ void OpcodeTable::Initialize() /*0x18A*/ DEFINE_HANDLER(CMSG_QUESTGIVER_COMPLETE_QUEST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestgiverCompleteQuest ); /*0x18B*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_REQUEST_ITEMS, STATUS_NEVER); /*0x18C*/ DEFINE_HANDLER(CMSG_QUESTGIVER_REQUEST_REWARD, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestgiverRequestRewardOpcode); - /*0x18D*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_OFFER_REWARD, STATUS_NEVER); + /*0x18D*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE, STATUS_NEVER); /*0x18E*/ DEFINE_HANDLER(CMSG_QUESTGIVER_CHOOSE_REWARD, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestgiverChooseRewardOpcode); /*0x18F*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_QUEST_INVALID, STATUS_NEVER); /*0x190*/ DEFINE_HANDLER(CMSG_QUESTGIVER_CANCEL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestgiverCancel ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index f5fdcb6e091..61f6c89ea9d 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -423,7 +423,7 @@ enum Opcodes : uint16 CMSG_QUESTGIVER_COMPLETE_QUEST = 0x18A, SMSG_QUESTGIVER_REQUEST_ITEMS = 0x18B, CMSG_QUESTGIVER_REQUEST_REWARD = 0x18C, - SMSG_QUESTGIVER_OFFER_REWARD = 0x18D, + SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x18D, CMSG_QUESTGIVER_CHOOSE_REWARD = 0x18E, SMSG_QUESTGIVER_QUEST_INVALID = 0x18F, CMSG_QUESTGIVER_CANCEL = 0x190, |
