Implement basic trade request/accept/decline flow

- Parse SMSG_TRADE_STATUS for all 20+ status codes: incoming request,
  open/cancel/complete/accept notifications, error conditions (too far,
  wrong faction, stunned, dead, trial account, etc.)
- SMSG_TRADE_STATUS_EXTENDED consumed via shared handler (no full item
  window yet; state tracking sufficient for accept/decline flow)
- Add acceptTradeRequest() (CMSG_BEGIN_TRADE), declineTradeRequest(),
  acceptTrade() (CMSG_ACCEPT_TRADE), cancelTrade() (CMSG_CANCEL_TRADE)
- Add BeginTradePacket, CancelTradePacket, AcceptTradePacket builders
- Add renderTradeRequestPopup(): shows "X wants to trade" with
  Accept/Decline buttons when tradeStatus_ == PendingIncoming
- TradeStatus enum tracks None/PendingIncoming/Open/Accepted/Complete
This commit is contained in:
Kelsi 2026-03-09 14:05:42 -07:00
parent b4f6ca2ca7
commit f369fe9c6e
6 changed files with 178 additions and 0 deletions

View file

@ -1326,6 +1326,24 @@ public:
static network::Packet build(uint64_t targetGuid);
};
/** CMSG_BEGIN_TRADE packet builder (no payload — accepts incoming trade request) */
class BeginTradePacket {
public:
static network::Packet build();
};
/** CMSG_CANCEL_TRADE packet builder (no payload) */
class CancelTradePacket {
public:
static network::Packet build();
};
/** CMSG_ACCEPT_TRADE packet builder (no payload — lock in current offer) */
class AcceptTradePacket {
public:
static network::Packet build();
};
/** CMSG_ATTACKSWING packet builder */
class AttackSwingPacket {
public: