From 2c6a345e326f20081d20ca43d7b9395c2e5eb6c5 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sat, 21 Mar 2026 08:13:47 -0700 Subject: [PATCH] feat: fire UNIT_MODEL_CHANGED event when unit display model changes Fire UNIT_MODEL_CHANGED for player/target/focus/pet when their UNIT_FIELD_DISPLAYID update field changes. This covers polymorph, mount display changes, shapeshifting, and model swaps. Used by unit frame addons that display 3D portraits and by nameplate addons that track model state changes. --- src/game/game_handler.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 8757e30c..14b79d94 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -11908,7 +11908,18 @@ void GameHandler::applyUpdateObjectBlock(const UpdateBlock& block, bool& newItem else if (key == ufFlags) { unit->setUnitFlags(val); } else if (key == ufBytes0) { unit->setPowerType(static_cast((val >> 24) & 0xFF)); - } else if (key == ufDisplayId) { unit->setDisplayId(val); } + } else if (key == ufDisplayId) { + unit->setDisplayId(val); + if (addonEventCallback_) { + std::string uid; + if (block.guid == playerGuid) uid = "player"; + else if (block.guid == targetGuid) uid = "target"; + else if (block.guid == focusGuid) uid = "focus"; + else if (block.guid == petGuid_) uid = "pet"; + if (!uid.empty()) + addonEventCallback_("UNIT_MODEL_CHANGED", {uid}); + } + } else if (key == ufNpcFlags) { unit->setNpcFlags(val); } else if (key == ufDynFlags) { unit->setDynamicFlags(val);