1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Optional reconnect functionality

Enable the server to request the client to reconnect.

This can be done with the now extended minetest.request_shutdown([reason], [reconnect]) setting.
This commit is contained in:
est31 2015-07-17 16:40:41 +02:00
parent 1e0e85f82e
commit 3b50b2766a
25 changed files with 232 additions and 109 deletions

View file

@ -21,15 +21,21 @@ 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);
}

View file

@ -22,16 +22,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_base.h"
#include "util/string.h"
#include "../guiMainMenu.h"
class ScriptApiMainMenu
: virtual public ScriptApiBase
{
class ScriptApiMainMenu : virtual public ScriptApiBase {
public:
/**
* set gamedata.errormessage to inform lua of an error
* @param errormessage the error message
* Hand over MainMenuDataForScript to lua to inform lua of the content
* @param data the data
*/
void setMainMenuErrorMessage(std::string errormessage);
void setMainMenuData(MainMenuDataForScript *data);
/**
* process events received from formspec

View file

@ -114,15 +114,19 @@ int ModApiMainMenu::l_start(lua_State *L)
bool valid = false;
MainMenuData *data = engine->m_data;
engine->m_data->selected_world = getIntegerData(L, "selected_world",valid) -1;
engine->m_data->simple_singleplayer_mode = getBoolData(L,"singleplayer",valid);
engine->m_data->name = getTextData(L,"playername");
engine->m_data->password = getTextData(L,"password");
engine->m_data->address = getTextData(L,"address");
engine->m_data->port = getTextData(L,"port");
engine->m_data->serverdescription = getTextData(L,"serverdescription");
engine->m_data->servername = getTextData(L,"servername");
data->selected_world = getIntegerData(L, "selected_world",valid) -1;
data->simple_singleplayer_mode = getBoolData(L,"singleplayer",valid);
data->do_reconnect = getBoolData(L, "do_reconnect", valid);
if (!data->do_reconnect) {
data->name = getTextData(L,"playername");
data->password = getTextData(L,"password");
data->address = getTextData(L,"address");
data->port = getTextData(L,"port");
}
data->serverdescription = getTextData(L,"serverdescription");
data->servername = getTextData(L,"servername");
//close menu next time
engine->m_startgame = true;

View file

@ -30,7 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// request_shutdown()
int ModApiServer::l_request_shutdown(lua_State *L)
{
getServer(L)->requestShutdown();
const char *msg = lua_tolstring(L, 1, NULL);
bool reconnect = lua_toboolean(L, 2);
getServer(L)->requestShutdown(msg ? msg : "", reconnect);
return 0;
}

View file

@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class ModApiServer : public ModApiBase {
private:
// request_shutdown()
// request_shutdown([message], [reconnect])
static int l_request_shutdown(lua_State *L);
// get_server_status()