From d1d3645d2b9f25cbe6ef56068da75d807b60d265 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 23 Mar 2026 00:23:22 -0700 Subject: [PATCH] feat: add WEATHER_CHANGED event and GetWeatherInfo query Fire WEATHER_CHANGED(weatherType, intensity) when the server sends SMSG_WEATHER with a new weather state. Enables weather-aware addons to react to rain/snow/storm transitions. GetWeatherInfo() returns current weatherType (0=clear, 1=rain, 2=snow, 3=storm) and intensity (0.0-1.0). Weather data is already tracked by game_handler and used by the renderer for particle effects and fog. --- src/addons/lua_engine.cpp | 8 ++++++++ src/game/game_handler.cpp | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/addons/lua_engine.cpp b/src/addons/lua_engine.cpp index 0d8cc20f..1027fc92 100644 --- a/src/addons/lua_engine.cpp +++ b/src/addons/lua_engine.cpp @@ -5062,6 +5062,14 @@ void LuaEngine::registerCoreAPI() { lua_pushboolean(L, 1); // isCastable return 4; }}, + // --- Weather --- + {"GetWeatherInfo", [](lua_State* L) -> int { + auto* gh = getGameHandler(L); + if (!gh) { lua_pushnumber(L, 0); lua_pushnumber(L, 0); return 2; } + lua_pushnumber(L, gh->getWeatherType()); + lua_pushnumber(L, gh->getWeatherIntensity()); + return 2; + }}, // --- Vendor Buy/Sell --- {"BuyMerchantItem", [](lua_State* L) -> int { auto* gh = getGameHandler(L); diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 06c959bb..961f8efd 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -5221,6 +5221,9 @@ void GameHandler::handlePacket(network::Packet& packet) { } if (weatherMsg) addSystemChatMessage(weatherMsg); } + // Notify addons of weather change + if (addonEventCallback_) + addonEventCallback_("WEATHER_CHANGED", {std::to_string(wType), std::to_string(wIntensity)}); // Storm transition: trigger a low-frequency thunder rumble shake if (wType == 3 && wIntensity > 0.3f && cameraShakeCallback_) { float mag = 0.03f + wIntensity * 0.04f; // 0.03–0.07 units