From 0aff4b155c280ac513cbc2771de64358e3b780dc Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sun, 29 Mar 2026 17:56:59 -0700 Subject: [PATCH] fix: dismount cleared all indefinite auras instead of just mount aura MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dismount path wiped every aura with maxDurationMs < 0, which includes racial passives, tracking, and zone buffs — not just the mount spell. Now only clears the specific mountAuraSpellId_ so the buff bar stays accurate without waiting for a server aura resync. --- src/game/entity_controller.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/game/entity_controller.cpp b/src/game/entity_controller.cpp index 836c6943..c5807889 100644 --- a/src/game/entity_controller.cpp +++ b/src/game/entity_controller.cpp @@ -512,9 +512,19 @@ void EntityController::detectPlayerMountChange(uint32_t newMountDisplayId, LOG_INFO("Mount detected: displayId=", newMountDisplayId, " auraSpellId=", owner_.mountAuraSpellId_); } if (old != 0 && newMountDisplayId == 0) { + // Only clear the specific mount aura, not all indefinite auras. + // Previously this cleared every aura with maxDurationMs < 0, which + // would strip racial passives, tracking, and zone buffs on dismount. + uint32_t mountSpell = owner_.mountAuraSpellId_; owner_.mountAuraSpellId_ = 0; - if (owner_.spellHandler_) for (auto& a : owner_.spellHandler_->playerAuras_) - if (!a.isEmpty() && a.maxDurationMs < 0) a = AuraSlot{}; + if (mountSpell != 0 && owner_.spellHandler_) { + for (auto& a : owner_.spellHandler_->playerAuras_) { + if (!a.isEmpty() && a.spellId == mountSpell) { + a = AuraSlot{}; + break; + } + } + } } }