Core/Packets: enabled and added packet class for SMSG_REQUEST_PVP_REWARDS_RESPONSE

This commit is contained in:
Ovahlord
2024-07-31 17:38:39 +02:00
parent 58456bff19
commit 8a3a46050c
8 changed files with 124 additions and 90 deletions

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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;
};
}
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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__

View File

@@ -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);