diff --git a/src/core/application.cpp b/src/core/application.cpp index 818fbc1b..afd3a463 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -5134,6 +5134,11 @@ void Application::loadOnlineWorldTerrain(uint32_t mapId, float x, float y, float if (addonManager_ && !addonsLoaded_) { addonManager_->loadAllAddons(); addonsLoaded_ = true; + addonManager_->fireEvent("VARIABLES_LOADED"); + addonManager_->fireEvent("PLAYER_LOGIN"); + addonManager_->fireEvent("PLAYER_ENTERING_WORLD"); + } else if (addonManager_ && addonsLoaded_) { + // Subsequent world entries (e.g. teleport, instance entry) addonManager_->fireEvent("PLAYER_ENTERING_WORLD"); } } diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 6cf2853c..a7bbab69 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -4050,7 +4050,18 @@ void GameHandler::handlePacket(network::Packet& packet) { break; } worldStateMapId_ = packet.readUInt32(); - worldStateZoneId_ = packet.readUInt32(); + { + uint32_t newZoneId = packet.readUInt32(); + if (newZoneId != worldStateZoneId_ && newZoneId != 0) { + worldStateZoneId_ = newZoneId; + if (addonEventCallback_) { + addonEventCallback_("ZONE_CHANGED_NEW_AREA", {}); + addonEventCallback_("ZONE_CHANGED", {}); + } + } else { + worldStateZoneId_ = newZoneId; + } + } // WotLK adds areaId (uint32) before count; Classic/TBC/Turtle use the shorter format size_t remaining = packet.getSize() - packet.getReadPos(); bool isWotLKFormat = isActiveExpansion("wotlk");