diff options
Diffstat (limited to 'src/script/lua_api/l_mainmenu.cpp')
-rw-r--r-- | src/script/lua_api/l_mainmenu.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 789096d23..9c828430c 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -39,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/renderingengine.h" #include "network/networkprotocol.h" #include "content/mod_configuration.h" +#include "threading/mutex_auto_lock.h" /******************************************************************************/ std::string ModApiMainMenu::getTextData(lua_State *L, std::string name) @@ -1008,6 +1009,44 @@ int ModApiMainMenu::l_do_async_callback(lua_State *L) } /******************************************************************************/ +// this is intentionally a global and not part of MainMenuScripting or such +namespace { + std::unordered_map<std::string, std::string> once_values; + std::mutex once_mutex; +} + +int ModApiMainMenu::l_set_once(lua_State *L) +{ + std::string key = readParam<std::string>(L, 1); + if (lua_isnil(L, 2)) + return 0; + std::string value = readParam<std::string>(L, 2); + + { + MutexAutoLock lock(once_mutex); + once_values[key] = value; + } + + return 0; +} + +int ModApiMainMenu::l_get_once(lua_State *L) +{ + std::string key = readParam<std::string>(L, 1); + + { + MutexAutoLock lock(once_mutex); + auto it = once_values.find(key); + if (it == once_values.end()) + lua_pushnil(L); + else + lua_pushstring(L, it->second.c_str()); + } + + return 1; +} + +/******************************************************************************/ void ModApiMainMenu::Initialize(lua_State *L, int top) { API_FCT(update_formspec); @@ -1054,6 +1093,8 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(open_dir); API_FCT(share_file); API_FCT(do_async_callback); + API_FCT(set_once); + API_FCT(get_once); } /******************************************************************************/ |