Implement duel request/accept/decline UI and packet handling

- Parse SMSG_DUEL_REQUESTED: store challenger guid/name, set
  pendingDuelRequest_ flag, show chat notification
- Parse SMSG_DUEL_COMPLETE: clear pending flag, notify on cancel
- Parse SMSG_DUEL_WINNER: show "X defeated Y in a duel!" chat message
- Handle SMSG_DUEL_OUTOFBOUNDS with warning message
- Add acceptDuel() method sending CMSG_DUEL_ACCEPTED (new builder)
- Wire forfeitDuel() to clear pendingDuelRequest_ on decline
- Add renderDuelRequestPopup() ImGui window (Accept/Decline buttons)
  positioned near group invite popup; shown when challenge is pending
- Add DuelAcceptPacket builder to world_packets.hpp/cpp
This commit is contained in:
Kelsi 2026-03-09 13:58:02 -07:00
parent e4f53ce0c3
commit 2d124e7e54
7 changed files with 129 additions and 3 deletions

View file

@ -1265,6 +1265,12 @@ public:
// Duel
// ============================================================
/** CMSG_DUEL_ACCEPTED packet builder (no payload) */
class DuelAcceptPacket {
public:
static network::Packet build();
};
/** CMSG_DUEL_CANCELLED packet builder */
class DuelCancelPacket {
public: