]> git.lizzy.rs Git - minetest.git/blobdiff - src/script/cpp_api/s_mainmenu.cpp
[CSM] Don't Load the package library (#6944)
[minetest.git] / src / script / cpp_api / s_mainmenu.cpp
index 5c54f7368668facb78d029b956996e59ff9354b1..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,14 +42,13 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
 {
        SCRIPTAPI_PRECHECKHEADER
 
-       lua_pushcfunction(L, script_error_handler);
-       int errorhandler = lua_gettop(L);
+       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
-       if(lua_isnil(L, -1)) {
+       lua_remove(L, -2); // Remove core
+       if (lua_isnil(L, -1)) {
                lua_pop(L, 1); // Pop event_handler
                return;
        }
@@ -52,41 +56,38 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
 
        // Call it
        lua_pushstring(L, text.c_str());
-       if(lua_pcall(L, 1, 0, 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
 
-       lua_pushcfunction(L, script_error_handler);
-       int errorhandler = lua_gettop(L);
+       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
-       if(lua_isnil(L, -1)) {
+       lua_remove(L, -2); // Remove core
+       if (lua_isnil(L, -1)) {
                lua_pop(L, 1); // Pop button handler
                return;
        }
        luaL_checktype(L, -1, LUA_TFUNCTION);
 
-       // Convert fields to lua table
+       // Convert fields to a Lua table
        lua_newtable(L);
-       for(std::map<std::string, std::string>::const_iterator
-               i = fields.begin(); i != fields.end(); i++){
-               const std::string &name = i->first;
-               const std::string &value = i->second;
+       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());
                lua_pushlstring(L, value.c_str(), value.size());
                lua_settable(L, -3);
        }
 
        // Call it
-       if(lua_pcall(L, 1, 0, errorhandler))
-               scriptError();
+       PCALL_RES(lua_pcall(L, 1, 0, error_handler));
        lua_pop(L, 1); // Pop error handler
 }