Core/Packets: converted all remaining trade packets to packet class

This commit is contained in:
Ovahlord committed 2021-07-13 15:56:31 +02:00
1 parent 11e3cfd66d
commit b7ab244e79
4 files changed
+122 -42

No files matched your search

+17 -34
View File
@@ -41,14 +41,12 @@ void WorldSession::SendTradeStatus(WorldPackets::Trade::TradeStatus& info)
SendPacket(info.Write());
}
void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleIgnoreTradeOpcode(WorldPackets::Trade::IgnoreTrade& /*ignoreTrade*/)
{
TC_LOG_DEBUG("network", "WORLD: Ignore Trade %u", _player->GetGUID().GetCounter());
}
void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleBusyTradeOpcode(WorldPackets::Trade::BusyTrade& /*busyTRade*/)
{
TC_LOG_DEBUG("network", "WORLD: Busy Trade %u", _player->GetGUID().GetCounter());
}
void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
@@ -530,7 +528,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
}
}
void WorldSession::HandleUnacceptTradeOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleUnacceptTradeOpcode(WorldPackets::Trade::UnacceptTrade& /*unacceptTrade*/)
{
TradeData* my_trade = _player->GetTradeData();
if (!my_trade)
@@ -539,7 +537,7 @@ void WorldSession::HandleUnacceptTradeOpcode(WorldPacket& /*recvPacket*/)
my_trade->SetAccepted(false, true);
}
void WorldSession::HandleBeginTradeOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleBeginTradeOpcode(WorldPackets::Trade::BeginTrade& /*beginTrade*/)
{
TradeData* my_trade = _player->m_trade;
if (!my_trade)
@@ -561,7 +559,7 @@ void WorldSession::SendCancelTrade()
SendTradeStatus(info);
}
void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade& /*cancelTrade*/)
{
// sent also after LOGOUT COMPLETE
if (_player) // needed because STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT
@@ -690,37 +688,25 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade&
pOther->GetSession()->SendTradeStatus(info);
}
void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket)
void WorldSession::HandleSetTradeGoldOpcode(WorldPackets::Trade::SetTradeGold& setTradeGold)
{
uint64 gold;
recvPacket >> gold;
TradeData* my_trade = _player->GetTradeData();
if (!my_trade)
return;
my_trade->UpdateClientStateIndex();
my_trade->SetMoney(gold);
my_trade->SetMoney(setTradeGold.Coinage);
}
void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
void WorldSession::HandleSetTradeItemOpcode(WorldPackets::Trade::SetTradeItem& setTradeItem)
{
// send update
uint8 tradeSlot;
uint8 bag;
uint8 slot;
recvPacket >> slot;
recvPacket >> tradeSlot;
recvPacket >> bag;
TradeData* my_trade = _player->GetTradeData();
if (!my_trade)
return;
WorldPackets::Trade::TradeStatus info;
// invalid slot number
if (tradeSlot >= TRADE_SLOT_COUNT)
if (setTradeItem.TradeSlot >= TRADE_SLOT_COUNT)
{
info.Status = TRADE_STATUS_TRADE_CANCELED;
SendTradeStatus(info);
@@ -728,8 +714,8 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
}
// check cheating, can't fail with correct client operations
Item* item = _player->GetItemByPos(bag, slot);
if (!item || (tradeSlot != TRADE_SLOT_NONTRADED && !item->CanBeTraded(false, true)))
Item* item = _player->GetItemByPos(setTradeItem.PackSlot, setTradeItem.ItemSlotInPack);
if (!item || (setTradeItem.TradeSlot != TRADE_SLOT_NONTRADED && !item->CanBeTraded(false, true)))
{
info.Status = TRADE_STATUS_TRADE_CANCELED;
SendTradeStatus(info);
@@ -749,22 +735,19 @@ void WorldSession::HandleSetTradeItemOpcode(WorldPacket& recvPacket)
my_trade->UpdateClientStateIndex();
if (tradeSlot != TRADE_SLOT_NONTRADED && item->IsBindedNotWith(my_trade->GetTrader()))
if (setTradeItem.TradeSlot != TRADE_SLOT_NONTRADED && item->IsBindedNotWith(my_trade->GetTrader()))
{
info.Status = TRADE_STATUS_NOT_ON_TAPLIST;
info.TradeSlot = tradeSlot;
info.TradeSlot = setTradeItem.TradeSlot;
SendTradeStatus(info);
return;
}
my_trade->SetItem(TradeSlots(tradeSlot), item);
my_trade->SetItem(TradeSlots(setTradeItem.TradeSlot), item);
}
void WorldSession::HandleClearTradeItemOpcode(WorldPacket& recvPacket)
void WorldSession::HandleClearTradeItemOpcode(WorldPackets::Trade::ClearTradeItem& clearTradeItem)
{
uint8 tradeSlot;
recvPacket >> tradeSlot;
TradeData* my_trade = _player->m_trade;
if (!my_trade)
return;
@@ -772,8 +755,8 @@ void WorldSession::HandleClearTradeItemOpcode(WorldPacket& recvPacket)
my_trade->UpdateClientStateIndex();
// invalid slot number
if (tradeSlot >= TRADE_SLOT_COUNT)
if (clearTradeItem.TradeSlot >= TRADE_SLOT_COUNT)
return;
my_trade->SetItem(TradeSlots(tradeSlot), nullptr);
my_trade->SetItem(TradeSlots(clearTradeItem.TradeSlot), nullptr);
}
@@ -193,3 +193,20 @@ void WorldPackets::Trade::AcceptTrade::Read()
{
_worldPacket >> StateIndex;
}
void WorldPackets::Trade::ClearTradeItem::Read()
{
_worldPacket >> TradeSlot;
}
void WorldPackets::Trade::SetTradeItem::Read()
{
_worldPacket >> ItemSlotInPack;
_worldPacket >> TradeSlot;
_worldPacket >> PackSlot;
}
void WorldPackets::Trade::SetTradeGold::Read()
{
_worldPacket >> Coinage;
}
@@ -106,6 +106,78 @@ namespace WorldPackets
uint32 StateIndex = 0;
};
class ClearTradeItem final : public ClientPacket
{
public:
ClearTradeItem(WorldPacket&& packet) : ClientPacket(CMSG_CLEAR_TRADE_ITEM, std::move(packet)) { }
void Read() override;
uint8 TradeSlot = 0;
};
class SetTradeItem final : public ClientPacket
{
public:
SetTradeItem(WorldPacket&& packet) : ClientPacket(CMSG_SET_TRADE_ITEM, std::move(packet)) { }
void Read() override;
uint8 TradeSlot = 0;
uint8 ItemSlotInPack = 0;
uint8 PackSlot = 0;
};
class SetTradeGold final : public ClientPacket
{
public:
SetTradeGold(WorldPacket&& packet) : ClientPacket(CMSG_SET_TRADE_GOLD, std::move(packet)) { }
void Read() override;
uint64 Coinage = 0;
};
class CancelTrade final : public ClientPacket
{
public:
CancelTrade(WorldPacket&& packet) : ClientPacket(CMSG_CANCEL_TRADE, std::move(packet)) { }
void Read() override { }
};
class BeginTrade final : public ClientPacket
{
public:
BeginTrade(WorldPacket&& packet) : ClientPacket(CMSG_BEGIN_TRADE, std::move(packet)) { }
void Read() override { }
};
class BusyTrade final : public ClientPacket
{
public:
BusyTrade(WorldPacket&& packet) : ClientPacket(CMSG_BUSY_TRADE, std::move(packet)) { }
void Read() override { }
};
class IgnoreTrade final : public ClientPacket
{
public:
IgnoreTrade(WorldPacket&& packet) : ClientPacket(CMSG_IGNORE_TRADE, std::move(packet)) { }
void Read() override { }
};
class UnacceptTrade final : public ClientPacket
{
public:
UnacceptTrade(WorldPacket&& packet) : ClientPacket(CMSG_UNACCEPT_TRADE, std::move(packet)) { }
void Read() override { }
};
}
}
+16 -8
View File
@@ -211,8 +211,16 @@ namespace WorldPackets
namespace Trade
{
class AcceptTrade;
class BeginTrade;
class BusyTrade;
class CancelTrade;
class ClearTradeItem;
class IgnoreTrade;
class InitiateTrade;
class SetTradeGold;
class SetTradeItem;
class TradeStatus;
class UnacceptTrade;
}
namespace Who
@@ -885,15 +893,15 @@ class TC_GAME_API WorldSession
void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
void HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& packet);
void HandleBeginTradeOpcode(WorldPacket& recvPacket);
void HandleBusyTradeOpcode(WorldPacket& recvPacket);
void HandleCancelTradeOpcode(WorldPacket& recvPacket);
void HandleClearTradeItemOpcode(WorldPacket& recvPacket);
void HandleIgnoreTradeOpcode(WorldPacket& recvPacket);
void HandleBeginTradeOpcode(WorldPackets::Trade::BeginTrade& packet);
void HandleBusyTradeOpcode(WorldPackets::Trade::BusyTrade& packet);
void HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade& packet);
void HandleClearTradeItemOpcode(WorldPackets::Trade::ClearTradeItem& packet);
void HandleIgnoreTradeOpcode(WorldPackets::Trade::IgnoreTrade& packet);
void HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade& packet);
void HandleSetTradeGoldOpcode(WorldPacket& recvPacket);
void HandleSetTradeItemOpcode(WorldPacket& recvPacket);
void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
void HandleSetTradeGoldOpcode(WorldPackets::Trade::SetTradeGold& packet);
void HandleSetTradeItemOpcode(WorldPackets::Trade::SetTradeItem& packet);
void HandleUnacceptTradeOpcode(WorldPackets::Trade::UnacceptTrade& packet);
void HandleAuctionHelloOpcode(WorldPacket& recvPacket);
void HandleAuctionListItems(WorldPacket& recvData);