diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-12-31 18:37:09 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-12-31 23:22:55 +0100 |
| commit | 66621a85e970bf370e4e16c690e0401f4e168c1c (patch) | |
| tree | 07e146a35b688778dbb6f86106b2609d3207458d /src/server/game/Server | |
| parent | 89c91c271b94f34076be7256378610a2a45c9ed2 (diff) | |
Core/Quests: Implemented player choice rewards
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 97 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 54 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 4 |
3 files changed, 94 insertions, 61 deletions
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index d076315fde3..39981b9ba9d 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -600,77 +600,82 @@ WorldPacket const* WorldPackets::Quest::WorldQuestUpdate::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponse const& response) +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceResponseRewardEntry const& playerChoiceResponseRewardEntry) { - data << int32(response.ResponseID); - data << int32(response.ChoiceArtFileID); + data << playerChoiceResponseRewardEntry.Item; + data << int32(playerChoiceResponseRewardEntry.Quantity); + return data; +} - data.WriteBits(response.Answer.length(), 9); - data.WriteBits(response.Header.length(), 9); - data.WriteBits(response.Description.length(), 11); - data.WriteBits(response.Confirmation.length(), 7); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceResponseReward const& playerChoiceResponseReward) +{ + data << int32(playerChoiceResponseReward.TitleID); + data << int32(playerChoiceResponseReward.PackageID); + data << int32(playerChoiceResponseReward.SkillLineID); + data << uint32(playerChoiceResponseReward.SkillPointCount); + data << uint32(playerChoiceResponseReward.ArenaPointCount); + data << uint32(playerChoiceResponseReward.HonorPointCount); + data << uint64(playerChoiceResponseReward.Money); + data << uint32(playerChoiceResponseReward.Xp); + data << uint32(playerChoiceResponseReward.Items.size()); + data << uint32(playerChoiceResponseReward.Currencies.size()); + data << uint32(playerChoiceResponseReward.Factions.size()); + data << uint32(playerChoiceResponseReward.ItemChoices.size()); - data.WriteBit(response.Reward.is_initialized()); - data.FlushBits(); + for (WorldPackets::Quest::PlayerChoiceResponseRewardEntry const& item : playerChoiceResponseReward.Items) + data << item; + + for (WorldPackets::Quest::PlayerChoiceResponseRewardEntry const& currency : playerChoiceResponseReward.Currencies) + data << currency; - if (response.Reward.is_initialized()) - data << (*response.Reward); + for (WorldPackets::Quest::PlayerChoiceResponseRewardEntry const& faction : playerChoiceResponseReward.Factions) + data << faction; + + for (WorldPackets::Quest::PlayerChoiceResponseRewardEntry const& itemChoice : playerChoiceResponseReward.ItemChoices) + data << itemChoice; - data.WriteString(response.Answer); - data.WriteString(response.Header); - data.WriteString(response.Description); - data.WriteString(response.Confirmation); return data; } -ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponseReward const& reward) +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceResponse const& playerChoiceResponse) { - data << int32(reward.TitleID); - data << int32(reward.PackageID); - data << int32(reward.SkillLineID); - data << uint32(reward.SkillPointCount); - data << uint32(reward.ArenaPointCount); - data << uint32(reward.HonorPointCount); - data << uint64(reward.Money); - data << uint32(reward.Xp); - - data << uint32(0); // itemCount - data << uint32(0); // currencyCount - data << uint32(0); // factionCount - data << uint32(0); // itemChoiceCount - - /*for (var i = 0u; i < itemCount; ++i) - ReadPlayerChoiceResponseRewardEntry(packet, "Item", i); + data << int32(playerChoiceResponse.ResponseID); + data << int32(playerChoiceResponse.ChoiceArtFileID); - for (var i = 0u; i < currencyCount; ++i) - ReadPlayerChoiceResponseRewardEntry(packet, "Currency", i); - - for (var i = 0u; i < factionCount; ++i) - ReadPlayerChoiceResponseRewardEntry(packet, "Faction", i); + data.WriteBits(playerChoiceResponse.Answer.length(), 9); + data.WriteBits(playerChoiceResponse.Header.length(), 9); + data.WriteBits(playerChoiceResponse.Description.length(), 11); + data.WriteBits(playerChoiceResponse.Confirmation.length(), 7); + data.WriteBit(playerChoiceResponse.Reward.is_initialized()); + data.FlushBits(); - for (var i = 0u; i < itemChoiceCount; ++i) - ReadPlayerChoiceResponseRewardEntry(packet, "ItemChoice", i);*/ + if (playerChoiceResponse.Reward) + data << *playerChoiceResponse.Reward; + data.WriteString(playerChoiceResponse.Answer); + data.WriteString(playerChoiceResponse.Header); + data.WriteString(playerChoiceResponse.Description); + data.WriteString(playerChoiceResponse.Confirmation); return data; } WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write() { - _worldPacket << int32(Choice->ChoiceId); - _worldPacket << uint32(Choice->Responses.size()); + _worldPacket << int32(ChoiceID); + _worldPacket << uint32(Responses.size()); _worldPacket << SenderGUID; - _worldPacket.WriteBits(Choice->Question.length(), 8); + _worldPacket.WriteBits(Question.length(), 8); _worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.FlushBits(); - for (auto response : Choice->Responses) - _worldPacket << response.second; + for (PlayerChoiceResponse const& response : Responses) + _worldPacket << response; - _worldPacket.WriteString(Choice->Question); + _worldPacket.WriteString(Question); return &_worldPacket; } -void WorldPackets::Quest::PlayerChoiceResponse::Read() +void WorldPackets::Quest::ChoiceResponse::Read() { _worldPacket >> ChoiceID; _worldPacket >> ResponseID; diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index a087c5de241..7effcdfa4d5 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -20,12 +20,8 @@ #include "Packet.h" #include "ItemPacketsCommon.h" -#include "QuestDef.h" #include "ObjectGuid.h" - -struct PlayerChoice; -struct PlayerChoiceResponse; -struct PlayerChoiceResponseReward; +#include "QuestDef.h" namespace WorldPackets { @@ -638,6 +634,39 @@ namespace WorldPackets std::vector<WorldQuestUpdateInfo> WorldQuestUpdates; }; + struct PlayerChoiceResponseRewardEntry + { + WorldPackets::Item::ItemInstance Item; + int32 Quantity = 0; + }; + + struct PlayerChoiceResponseReward + { + int32 TitleID = 0; + int32 PackageID = 0; + int32 SkillLineID = 0; + uint32 SkillPointCount = 0; + uint32 ArenaPointCount = 0; + uint32 HonorPointCount = 0; + uint64 Money = 0; + uint32 Xp = 0; + std::vector<PlayerChoiceResponseRewardEntry> Items; + std::vector<PlayerChoiceResponseRewardEntry> Currencies; + std::vector<PlayerChoiceResponseRewardEntry> Factions; + std::vector<PlayerChoiceResponseRewardEntry> ItemChoices; + }; + + struct PlayerChoiceResponse + { + int32 ResponseID = 0; + int32 ChoiceArtFileID = 0; + std::string Answer; + std::string Header; + std::string Description; + std::string Confirmation; + Optional<PlayerChoiceResponseReward> Reward; + }; + class DisplayPlayerChoice final : public ServerPacket { public: @@ -646,26 +675,25 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid SenderGUID; - PlayerChoice const* Choice; + int32 ChoiceID = 0; + std::string Question; + std::vector<PlayerChoiceResponse> Responses; bool CloseChoiceFrame = false; }; - class PlayerChoiceResponse final : public ClientPacket + class ChoiceResponse final : public ClientPacket { public: - PlayerChoiceResponse(WorldPacket&& packet) : ClientPacket(CMSG_CHOICE_RESPONSE, std::move(packet)) { } + ChoiceResponse(WorldPacket&& packet) : ClientPacket(CMSG_CHOICE_RESPONSE, std::move(packet)) { } void Read() override; - int32 ChoiceID; - int32 ResponseID; + int32 ChoiceID = 0; + int32 ResponseID = 0; }; } } -ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponse const& response); -ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponseReward const& reward); - ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards); ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestGiverOfferReward const& offer); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 5d680a1dab1..1606d00acff 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -596,7 +596,7 @@ namespace WorldPackets class QuestPushResult; class PushQuestToParty; class RequestWorldQuestUpdate; - class PlayerChoiceResponse; + class ChoiceResponse; } namespace RaF @@ -1443,7 +1443,7 @@ class TC_GAME_API WorldSession void HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& packet); void HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& packet); void HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& packet); - void HandlePlayerChoiceResponse(WorldPackets::Quest::PlayerChoiceResponse& packet); + void HandlePlayerChoiceResponse(WorldPackets::Quest::ChoiceResponse& choiceResponse); void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chatMessage); void HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& chatMessageWhisper); |
