feat: implement self-resurrection (Reincarnation/Twisting Nether)

SMSG_PRE_RESURRECT was silently discarded; Shamans with Reincarnation
and Warlocks with Twisting Nether could never see or use the self-res
ability. Now:

- SMSG_PRE_RESURRECT sets selfResAvailable_ flag when addressed to the
  local player
- Death dialog gains a "Use Self-Resurrection" button (blue, shown above
  Release Spirit) when the flag is set
- Clicking it sends CMSG_SELF_RES (empty body) and clears the flag
- selfResAvailable_ is cleared on all resurrection and session-reset
  paths so it never bleeds across deaths or logins
This commit is contained in:
Kelsi 2026-03-18 00:06:39 -07:00
parent 395a8f77c4
commit 5a5c2dcda3
3 changed files with 43 additions and 3 deletions

View file

@ -1171,6 +1171,10 @@ public:
bool isPlayerGhost() const { return releasedSpirit_; }
bool showDeathDialog() const { return playerDead_ && !releasedSpirit_; }
bool showResurrectDialog() const { return resurrectRequestPending_; }
/** True when SMSG_PRE_RESURRECT arrived — Reincarnation/Twisting Nether available. */
bool canSelfRes() const { return selfResAvailable_; }
/** Send CMSG_SELF_RES to use Reincarnation / Twisting Nether. */
void useSelfRes();
const std::string& getResurrectCasterName() const { return resurrectCasterName_; }
bool showTalentWipeConfirmDialog() const { return talentWipePending_; }
uint32_t getTalentWipeCost() const { return talentWipeCost_; }
@ -3314,6 +3318,7 @@ private:
uint64_t pendingSpiritHealerGuid_ = 0;
bool resurrectPending_ = false;
bool resurrectRequestPending_ = false;
bool selfResAvailable_ = false; // SMSG_PRE_RESURRECT received — Reincarnation/Twisting Nether
// ---- Talent wipe confirm dialog ----
bool talentWipePending_ = false;
uint64_t talentWipeNpcGuid_ = 0;