From b6292f3509045724ed4aafe92ea21efa8b32256d Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Sat, 2 May 2026 07:09:00 -0500 Subject: [PATCH] fix(Core/Druid): preserve shapeshift form across map changes (#25556) Co-authored-by: blinkysc --- src/server/game/Globals/ObjectMgr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 0e4f733a9..2590926cc 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1895,7 +1895,10 @@ uint32 ObjectMgr::GetModelForShapeshift(ShapeshiftForm form, Player* player) con else customizationID = player->GetByteValue(PLAYER_BYTES, 0); // Use Skin Color - auto itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), customizationID, player->getGender())); + // getGender() tracks the active display model; real gender lives in PLAYER_BYTES_3 + uint8 gender = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); + + auto itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), customizationID, gender)); if (itr != _playerShapeshiftModel.end()) return itr->second; // Explicit combination @@ -1903,7 +1906,7 @@ uint32 ObjectMgr::GetModelForShapeshift(ShapeshiftForm form, Player* player) con if (itr != _playerShapeshiftModel.end()) return itr->second; // Combination applied to both genders - itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), 255, player->getGender())); + itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), 255, gender)); if (itr != _playerShapeshiftModel.end()) return itr->second; // Default gender-dependent model