]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/cpp_api/s_mainmenu.cpp
Implement on_rightclickplayer callback (#10775)
[dragonfireclient.git] / src / script / cpp_api / s_mainmenu.cpp
index 62baeb40624815ab75780823dcd8e95d470d97aa..1e9ba3a41cf9cb95fad57f65c790fbf03f27cf13 100644 (file)
@@ -21,15 +21,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "cpp_api/s_internal.h"
 #include "common/c_converter.h"
 
-void ScriptApiMainMenu::setMainMenuErrorMessage(std::string errormessage)
+void ScriptApiMainMenu::setMainMenuData(MainMenuDataForScript *data)
 {
        SCRIPTAPI_PRECHECKHEADER
 
        lua_getglobal(L, "gamedata");
        int gamedata_idx = lua_gettop(L);
        lua_pushstring(L, "errormessage");
-       lua_pushstring(L, errormessage.c_str());
+       if (!data->errormessage.empty()) {
+               lua_pushstring(L, data->errormessage.c_str());
+       } else {
+               lua_pushnil(L);
+       }
        lua_settable(L, gamedata_idx);
+       setboolfield(L, gamedata_idx, "reconnect_requested", data->reconnect_requested);
        lua_pop(L, 1);
 }
 
@@ -37,10 +42,12 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
 {
        SCRIPTAPI_PRECHECKHEADER
 
+       int error_handler = PUSH_ERROR_HANDLER(L);
+
        // Get handler function
-       lua_getglobal(L, "engine");
+       lua_getglobal(L, "core");
        lua_getfield(L, -1, "event_handler");
-       lua_remove(L, -2); // Remove engine
+       lua_remove(L, -2); // Remove core
        if (lua_isnil(L, -1)) {
                lua_pop(L, 1); // Pop event_handler
                return;
@@ -49,18 +56,20 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
 
        // Call it
        lua_pushstring(L, text.c_str());
-       if (lua_pcall(L, 1, 0, m_errorhandler))
-               scriptError();
+       PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+       lua_pop(L, 1); // Pop error handler
 }
 
-void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string, std::string> fields)
+void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields)
 {
        SCRIPTAPI_PRECHECKHEADER
 
+       int error_handler = PUSH_ERROR_HANDLER(L);
+
        // Get handler function
-       lua_getglobal(L, "engine");
+       lua_getglobal(L, "core");
        lua_getfield(L, -1, "button_handler");
-       lua_remove(L, -2); // Remove engine
+       lua_remove(L, -2); // Remove core
        if (lua_isnil(L, -1)) {
                lua_pop(L, 1); // Pop button handler
                return;
@@ -69,8 +78,8 @@ void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string, std::string>
 
        // Convert fields to a Lua table
        lua_newtable(L);
-       std::map<std::string, std::string>::const_iterator it;
-       for (it = fields.begin(); it != fields.end(); it++){
+       StringMap::const_iterator it;
+       for (it = fields.begin(); it != fields.end(); ++it) {
                const std::string &name = it->first;
                const std::string &value = it->second;
                lua_pushstring(L, name.c_str());
@@ -79,7 +88,6 @@ void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string, std::string>
        }
 
        // Call it
-       if (lua_pcall(L, 1, 0, m_errorhandler))
-               scriptError();
+       PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+       lua_pop(L, 1); // Pop error handler
 }
-