aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-12-31 18:37:09 +0100
committerShauren <shauren.trinity@gmail.com>2017-12-31 23:22:55 +0100
commit66621a85e970bf370e4e16c690e0401f4e168c1c (patch)
tree07e146a35b688778dbb6f86106b2609d3207458d /src/server/game/Server
parent89c91c271b94f34076be7256378610a2a45c9ed2 (diff)
Core/Quests: Implemented player choice rewards
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp97
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h54
-rw-r--r--src/server/game/Server/WorldSession.h4
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);