From 74d9b6010fd42573d20cdbe78f7aaa07badfbf1b Mon Sep 17 00:00:00 2001 From: Lejo Date: Fri, 1 May 2020 16:47:17 +0200 Subject: [PATCH] Give the online lua mainmenu also the client_list and mods (#8691) --- doc/menu_lua_api.txt | 25 +++++----- src/script/lua_api/l_mainmenu.cpp | 81 +++++++++++++++++++++---------- 2 files changed, 70 insertions(+), 36 deletions(-) diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index df6424ad7..8f5460acb 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -156,18 +156,21 @@ core.get_favorites(location) -> list of favorites (possible in async calls) ^ location: "local" or "online" ^ returns { [1] = { - clients = , - clients_max = , - version = , - password = , - creative = , - damage = , - pvp = , - description = , - name = , - address =
, - port = + clients = , + clients_max = , + version = , + password = , + creative = , + damage = , + pvp = , + description = , + name = , + address =
, + port = + clients_list = + mods = }, + ... } core.delete_favorite(id, location) -> success diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 867e84e13..a76e9f079 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -280,8 +280,8 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) { std::string listtype = "local"; - if (!lua_isnone(L,1)) { - listtype = luaL_checkstring(L,1); + if (!lua_isnone(L, 1)) { + listtype = luaL_checkstring(L, 1); } std::vector servers; @@ -298,7 +298,7 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) for (const Json::Value &server : servers) { - lua_pushnumber(L,index); + lua_pushnumber(L, index); lua_newtable(L); int top_lvl2 = lua_gettop(L); @@ -306,11 +306,11 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) if (!server["clients"].asString().empty()) { std::string clients_raw = server["clients"].asString(); char* endptr = 0; - int numbervalue = strtol(clients_raw.c_str(),&endptr,10); + int numbervalue = strtol(clients_raw.c_str(), &endptr,10); if ((!clients_raw.empty()) && (*endptr == 0)) { - lua_pushstring(L,"clients"); - lua_pushnumber(L,numbervalue); + lua_pushstring(L, "clients"); + lua_pushnumber(L, numbervalue); lua_settable(L, top_lvl2); } } @@ -319,83 +319,83 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) std::string clients_max_raw = server["clients_max"].asString(); char* endptr = 0; - int numbervalue = strtol(clients_max_raw.c_str(),&endptr,10); + int numbervalue = strtol(clients_max_raw.c_str(), &endptr,10); if ((!clients_max_raw.empty()) && (*endptr == 0)) { - lua_pushstring(L,"clients_max"); - lua_pushnumber(L,numbervalue); + lua_pushstring(L, "clients_max"); + lua_pushnumber(L, numbervalue); lua_settable(L, top_lvl2); } } if (!server["version"].asString().empty()) { - lua_pushstring(L,"version"); + lua_pushstring(L, "version"); std::string topush = server["version"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["proto_min"].asString().empty()) { - lua_pushstring(L,"proto_min"); + lua_pushstring(L, "proto_min"); lua_pushinteger(L, server["proto_min"].asInt()); lua_settable(L, top_lvl2); } if (!server["proto_max"].asString().empty()) { - lua_pushstring(L,"proto_max"); + lua_pushstring(L, "proto_max"); lua_pushinteger(L, server["proto_max"].asInt()); lua_settable(L, top_lvl2); } if (!server["password"].asString().empty()) { - lua_pushstring(L,"password"); + lua_pushstring(L, "password"); lua_pushboolean(L, server["password"].asBool()); lua_settable(L, top_lvl2); } if (!server["creative"].asString().empty()) { - lua_pushstring(L,"creative"); + lua_pushstring(L, "creative"); lua_pushboolean(L, server["creative"].asBool()); lua_settable(L, top_lvl2); } if (!server["damage"].asString().empty()) { - lua_pushstring(L,"damage"); + lua_pushstring(L, "damage"); lua_pushboolean(L, server["damage"].asBool()); lua_settable(L, top_lvl2); } if (!server["pvp"].asString().empty()) { - lua_pushstring(L,"pvp"); + lua_pushstring(L, "pvp"); lua_pushboolean(L, server["pvp"].asBool()); lua_settable(L, top_lvl2); } if (!server["description"].asString().empty()) { - lua_pushstring(L,"description"); + lua_pushstring(L, "description"); std::string topush = server["description"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["name"].asString().empty()) { - lua_pushstring(L,"name"); + lua_pushstring(L, "name"); std::string topush = server["name"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["address"].asString().empty()) { - lua_pushstring(L,"address"); + lua_pushstring(L, "address"); std::string topush = server["address"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } if (!server["port"].asString().empty()) { - lua_pushstring(L,"port"); + lua_pushstring(L, "port"); std::string topush = server["port"].asString(); - lua_pushstring(L,topush.c_str()); + lua_pushstring(L, topush.c_str()); lua_settable(L, top_lvl2); } @@ -406,6 +406,37 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) lua_settable(L, top_lvl2); } + if (server["clients_list"].isArray()) { + unsigned int index_lvl2 = 1; + lua_pushstring(L, "clients_list"); + lua_newtable(L); + int top_lvl3 = lua_gettop(L); + for (const Json::Value &client : server["clients_list"]) { + lua_pushnumber(L, index_lvl2); + std::string topush = client.asString(); + lua_pushstring(L, topush.c_str()); + lua_settable(L, top_lvl3); + index_lvl2++; + } + lua_settable(L, top_lvl2); + } + + if (server["mods"].isArray()) { + unsigned int index_lvl2 = 1; + lua_pushstring(L, "mods"); + lua_newtable(L); + int top_lvl3 = lua_gettop(L); + for (const Json::Value &mod : server["mods"]) { + + lua_pushnumber(L, index_lvl2); + std::string topush = mod.asString(); + lua_pushstring(L, topush.c_str()); + lua_settable(L, top_lvl3); + index_lvl2++; + } + lua_settable(L, top_lvl2); + } + lua_settable(L, top); index++; }