diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-07-31 17:38:39 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-07-31 17:38:39 +0200 |
commit | 8a3a46050cf945ef205c7c281a60ceaae39b3c3f (patch) | |
tree | 2ac4ec48f390aa36b99822c9c9718e20a3424bc5 | |
parent | 58456bff19c8872e6030df6dc1c1ab26d664db7d (diff) |
Core/Packets: enabled and added packet class for SMSG_REQUEST_PVP_REWARDS_RESPONSE
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/Packets/BattlegroundPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/BattlegroundPackets.h | 17 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LFGPackets.cpp | 55 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LFGPackets.h | 32 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LFGPacketsCommon.cpp | 55 | ||||
-rw-r--r-- | src/server/game/Server/Packets/LFGPacketsCommon.h | 35 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
8 files changed, 124 insertions, 90 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1dc712130ad..85b6ef3f9fb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6696,8 +6696,8 @@ void Player::SendCurrencies() const void Player::SendPvpRewards() const { - //WorldPacket packet(SMSG_REQUEST_PVP_REWARDS_RESPONSE, 24); - //GetSession()->SendPacket(&packet); + WorldPackets::Battleground::RequestPvPRewardsResponse pvpRewardsResponse; + SendDirectMessage(pvpRewardsResponse.Write()); } void Player::SetCreateCurrency(uint32 id, uint32 amount) diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 5b583ee11f7..cd4b1717bbf 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -430,3 +430,17 @@ WorldPacket const* WorldPackets::Battleground::CapturePointRemoved::Write() _worldPacket << CapturePointGUID; return &_worldPacket; } + +WorldPacket const* WorldPackets::Battleground::RequestPvPRewardsResponse::Write() +{ + _worldPacket << FirstRandomBGWinReward; + _worldPacket << FirstRandomBGLossReward; + _worldPacket << NthRandomBGWinReward; + _worldPacket << NthRandomBGLossReward; + _worldPacket << RatedBGRewards; + _worldPacket << Arena2v2Rewards; + _worldPacket << Arena3v3Rewards; + _worldPacket << Arena5v5Rewards; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index a320ca96399..b4857330df0 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -566,6 +566,23 @@ namespace WorldPackets ObjectGuid CapturePointGUID; }; + + class RequestPvPRewardsResponse final : public ServerPacket + { + public: + RequestPvPRewardsResponse() : ServerPacket(SMSG_REQUEST_PVP_REWARDS_RESPONSE) { } + + WorldPacket const* Write() override; + + WorldPackets::LFG::LfgPlayerQuestReward FirstRandomBGWinReward; + WorldPackets::LFG::LfgPlayerQuestReward FirstRandomBGLossReward; + WorldPackets::LFG::LfgPlayerQuestReward NthRandomBGWinReward; + WorldPackets::LFG::LfgPlayerQuestReward NthRandomBGLossReward; + WorldPackets::LFG::LfgPlayerQuestReward RatedBGRewards; + WorldPackets::LFG::LfgPlayerQuestReward Arena2v2Rewards; + WorldPackets::LFG::LfgPlayerQuestReward Arena3v3Rewards; + WorldPackets::LFG::LfgPlayerQuestReward Arena5v5Rewards; + }; } } diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index 0e933141dcf..54d3b6ad30f 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -92,61 +92,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGBlackList const& return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestRewardItem const& playerQuestRewardItem) -{ - data << int32(playerQuestRewardItem.ItemID); - data << int32(playerQuestRewardItem.Quantity); - - return data; -} - -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& playerQuestRewardCurrency) -{ - data << int32(playerQuestRewardCurrency.CurrencyID); - data << int32(playerQuestRewardCurrency.Quantity); - - return data; -} - -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestReward const& playerQuestReward) -{ - data << uint8(playerQuestReward.Mask); - data << int32(playerQuestReward.RewardMoney); - data << int32(playerQuestReward.RewardXP); - data << uint32(playerQuestReward.Item.size()); - data << uint32(playerQuestReward.Currency.size()); - data << uint32(playerQuestReward.BonusCurrency.size()); - - for (WorldPackets::LFG::LfgPlayerQuestRewardItem const& item : playerQuestReward.Item) - data << item; - - for (WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& currency : playerQuestReward.Currency) - data << currency; - - for (WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& bonusCurrency : playerQuestReward.BonusCurrency) - data << bonusCurrency; - - data.WriteBit(playerQuestReward.RewardSpellID.has_value()); - data.WriteBit(playerQuestReward.Unused1.has_value()); - data.WriteBit(playerQuestReward.Unused2.has_value()); - data.WriteBit(playerQuestReward.Honor.has_value()); - data.FlushBits(); - - if (playerQuestReward.RewardSpellID) - data << int32(*playerQuestReward.RewardSpellID); - - if (playerQuestReward.Unused1) - data << int32(*playerQuestReward.Unused1); - - if (playerQuestReward.Unused2) - data << uint64(*playerQuestReward.Unused2); - - if (playerQuestReward.Honor) - data << int32(*playerQuestReward.Honor); - - return data; -} - ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerDungeonInfo const& playerDungeonInfo) { data << uint32(playerDungeonInfo.Slot); diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h index 3ca806fe187..9155c55fb45 100644 --- a/src/server/game/Server/Packets/LFGPackets.h +++ b/src/server/game/Server/Packets/LFGPackets.h @@ -155,38 +155,6 @@ namespace WorldPackets std::vector<LFGBlackListSlot> Slot; }; - struct LfgPlayerQuestRewardItem - { - LfgPlayerQuestRewardItem() = default; - LfgPlayerQuestRewardItem(int32 itemId, int32 quantity) : ItemID(itemId), Quantity(quantity) { } - - int32 ItemID = 0; - int32 Quantity = 0; - }; - - struct LfgPlayerQuestRewardCurrency - { - LfgPlayerQuestRewardCurrency() = default; - LfgPlayerQuestRewardCurrency(int32 currencyID, int32 quantity) : CurrencyID(currencyID), Quantity(quantity) { } - - int32 CurrencyID = 0; - int32 Quantity = 0; - }; - - struct LfgPlayerQuestReward - { - uint8 Mask = 0; // Roles required for this reward, only used by ShortageReward in SMSG_LFG_PLAYER_INFO - int32 RewardMoney = 0; // Only used by SMSG_LFG_PLAYER_INFO - int32 RewardXP = 0; - std::vector<LfgPlayerQuestRewardItem> Item; - std::vector<LfgPlayerQuestRewardCurrency> Currency; // Only used by SMSG_LFG_PLAYER_INFO - std::vector<LfgPlayerQuestRewardCurrency> BonusCurrency; // Only used by SMSG_LFG_PLAYER_INFO - Optional<int32> RewardSpellID; // Only used by SMSG_LFG_PLAYER_INFO - Optional<int32> Unused1; - Optional<uint64> Unused2; - Optional<int32> Honor; // Only used by SMSG_REQUEST_PVP_REWARDS_RESPONSE - }; - struct LfgPlayerDungeonInfo { uint32 Slot = 0; diff --git a/src/server/game/Server/Packets/LFGPacketsCommon.cpp b/src/server/game/Server/Packets/LFGPacketsCommon.cpp index a88cc08977e..cace6d46439 100644 --- a/src/server/game/Server/Packets/LFGPacketsCommon.cpp +++ b/src/server/game/Server/Packets/LFGPacketsCommon.cpp @@ -40,3 +40,58 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ti return data; } + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestRewardItem const& playerQuestRewardItem) +{ + data << int32(playerQuestRewardItem.ItemID); + data << int32(playerQuestRewardItem.Quantity); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& playerQuestRewardCurrency) +{ + data << int32(playerQuestRewardCurrency.CurrencyID); + data << int32(playerQuestRewardCurrency.Quantity); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestReward const& playerQuestReward) +{ + data << uint8(playerQuestReward.Mask); + data << int32(playerQuestReward.RewardMoney); + data << int32(playerQuestReward.RewardXP); + data << uint32(playerQuestReward.Item.size()); + data << uint32(playerQuestReward.Currency.size()); + data << uint32(playerQuestReward.BonusCurrency.size()); + + for (WorldPackets::LFG::LfgPlayerQuestRewardItem const& item : playerQuestReward.Item) + data << item; + + for (WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& currency : playerQuestReward.Currency) + data << currency; + + for (WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& bonusCurrency : playerQuestReward.BonusCurrency) + data << bonusCurrency; + + data.WriteBit(playerQuestReward.RewardSpellID.has_value()); + data.WriteBit(playerQuestReward.Unused1.has_value()); + data.WriteBit(playerQuestReward.Unused2.has_value()); + data.WriteBit(playerQuestReward.Honor.has_value()); + data.FlushBits(); + + if (playerQuestReward.RewardSpellID) + data << int32(*playerQuestReward.RewardSpellID); + + if (playerQuestReward.Unused1) + data << int32(*playerQuestReward.Unused1); + + if (playerQuestReward.Unused2) + data << uint64(*playerQuestReward.Unused2); + + if (playerQuestReward.Honor) + data << int32(*playerQuestReward.Honor); + + return data; +} diff --git a/src/server/game/Server/Packets/LFGPacketsCommon.h b/src/server/game/Server/Packets/LFGPacketsCommon.h index 2244b7dcd31..c7837d5c150 100644 --- a/src/server/game/Server/Packets/LFGPacketsCommon.h +++ b/src/server/game/Server/Packets/LFGPacketsCommon.h @@ -40,10 +40,45 @@ namespace WorldPackets Timestamp<> Time; bool Unknown925 = false; }; + + struct LfgPlayerQuestRewardItem + { + LfgPlayerQuestRewardItem() = default; + LfgPlayerQuestRewardItem(int32 itemId, int32 quantity) : ItemID(itemId), Quantity(quantity) { } + + int32 ItemID = 0; + int32 Quantity = 0; + }; + + struct LfgPlayerQuestRewardCurrency + { + LfgPlayerQuestRewardCurrency() = default; + LfgPlayerQuestRewardCurrency(int32 currencyID, int32 quantity) : CurrencyID(currencyID), Quantity(quantity) { } + + int32 CurrencyID = 0; + int32 Quantity = 0; + }; + + struct LfgPlayerQuestReward + { + uint8 Mask = 0; // Roles required for this reward, only used by ShortageReward in SMSG_LFG_PLAYER_INFO + int32 RewardMoney = 0; // Only used by SMSG_LFG_PLAYER_INFO + int32 RewardXP = 0; + std::vector<LfgPlayerQuestRewardItem> Item; + std::vector<LfgPlayerQuestRewardCurrency> Currency; // Only used by SMSG_LFG_PLAYER_INFO + std::vector<LfgPlayerQuestRewardCurrency> BonusCurrency; // Only used by SMSG_LFG_PLAYER_INFO + Optional<int32> RewardSpellID; // Only used by SMSG_LFG_PLAYER_INFO + Optional<int32> Unused1; + Optional<uint64> Unused2; + Optional<int32> Honor; // Only used by SMSG_REQUEST_PVP_REWARDS_RESPONSE + }; } } ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket); ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::RideTicket const& ticket); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestRewardItem const& playerQuestRewardItem); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& playerQuestRewardCurrency); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestReward const& playerQuestReward); #endif // LFGPacketsCommon_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index e183516e4cf..f3ecb895b1b 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1865,7 +1865,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REPLACE_TROPHY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REPORT_PVP_PLAYER_AFK_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_PVP_REWARDS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_PVP_REWARDS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_COMPRESSION_CONTEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_FAILED_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM); |