]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
[CSM] Add function to get player privileges (#5933)
authorred-001 <red-001@outlook.ie>
Wed, 7 Jun 2017 07:09:06 +0000 (08:09 +0100)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Wed, 7 Jun 2017 07:09:06 +0000 (09:09 +0200)
* [CSM] Add function to get player privileges + move related help functions to common

* Added @Zeno- const

builtin/common/misc_helpers.lua
builtin/game/auth.lua
clientmods/preview/init.lua
doc/client_lua_api.md
src/client.h
src/script/lua_api/l_client.cpp
src/script/lua_api/l_client.h

index 68481f7c8e79f262e1e53d6e51c5a0d7d195d02d..d162bc0a2873a8c12cce18df32fe8def347cfe58 100644 (file)
@@ -723,3 +723,28 @@ function core.pointed_thing_to_face_pos(placer, pointed_thing)
        end
        return fine_pos
 end
+
+function core.string_to_privs(str, delim)
+       assert(type(str) == "string")
+       delim = delim or ','
+       local privs = {}
+       for _, priv in pairs(string.split(str, delim)) do
+               privs[priv:trim()] = true
+       end
+       return privs
+end
+
+function core.privs_to_string(privs, delim)
+       assert(type(privs) == "table")
+       delim = delim or ','
+       local list = {}
+       for priv, bool in pairs(privs) do
+               if bool then
+                       list[#list + 1] = priv
+               end
+       end
+       return table.concat(list, delim)
+end
+
+assert(core.string_to_privs("a,b").b == true)
+assert(core.privs_to_string({a=true,b=true}) == "a,b")
index 8cb4ebf57dedbfb57c1e37c3ddaa3df9a6409804..7a6be8788a81231699e8590bda58366b1452c154 100644 (file)
@@ -4,31 +4,6 @@
 -- Authentication handler
 --
 
-function core.string_to_privs(str, delim)
-       assert(type(str) == "string")
-       delim = delim or ','
-       local privs = {}
-       for _, priv in pairs(string.split(str, delim)) do
-               privs[priv:trim()] = true
-       end
-       return privs
-end
-
-function core.privs_to_string(privs, delim)
-       assert(type(privs) == "table")
-       delim = delim or ','
-       local list = {}
-       for priv, bool in pairs(privs) do
-               if bool then
-                       list[#list + 1] = priv
-               end
-       end
-       return table.concat(list, delim)
-end
-
-assert(core.string_to_privs("a,b").b == true)
-assert(core.privs_to_string({a=true,b=true}) == "a,b")
-
 core.auth_file_path = core.get_worldpath().."/auth.txt"
 core.auth_table = {}
 
index f3992612a66660c7528d0f3cfa53c8c9b818d7ab..073ea11db5fb361d213a67499c71327d8fd08c29 100644 (file)
@@ -150,3 +150,9 @@ core.register_on_punchnode(function(pos, node)
        return false
 end)
 
+core.register_chatcommand("privs", {
+       func = function(param)
+               return true, core.privs_to_string(minetest.get_privilege_list())
+       end,
+})
+
index 1375e135536c59f9643e631ad592cc415cde0fa7..42d2bfbbf72c586e1de0519c30248b162e674fa2 100644 (file)
@@ -730,6 +730,13 @@ Call these functions only at load time!
 * `minetest.localplayer`
     * Reference to the LocalPlayer object. See [`LocalPlayer`](#localplayer) class reference for methods.
 
+### Privileges
+* `minetest.get_privilege_list()`
+    * Returns a list of privileges the currect player has in the format `{priv1=true,...}`
+* `minetest.string_to_privs(str)`: returns `{priv1=true,...}`
+* `minetest.privs_to_string(privs)`: returns `"priv1,priv2,..."`
+    * Convert between two privilege representations
+
 ### Client Environment
 * `minetest.get_player_names()`
     * Returns list of player names on server
index 149fdfe57705e3d40c4a84d60adac1e7a63abbbf..9aec0d0619dc1d4b4a52cecdbb3c02bd9d7c2ee1 100644 (file)
@@ -416,6 +416,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        bool checkPrivilege(const std::string &priv) const
        { return (m_privileges.count(priv) != 0); }
 
+       const std::unordered_set<std::string> &getPrivilegeList() const
+       { return m_privileges; }
+
        bool getChatMessage(std::wstring &message);
        void typeChatMessage(const std::wstring& message);
 
index 3c2955bcd3dfc5e7ba00b45abbfc8376ab1a0f3e..eab7bdfae0c07acc45991f5b510bae065aa2ac4b 100644 (file)
@@ -329,6 +329,16 @@ int ModApiClient::l_take_screenshot(lua_State *L)
        return 0;
 }
 
+int ModApiClient::l_get_privilege_list(lua_State *L)
+{
+       const Client *client = getClient(L);
+       lua_newtable(L);
+       for (const std::string &priv : client->getPrivilegeList()) {
+               lua_pushboolean(L, true);
+               lua_setfield(L, -2, priv.c_str());
+       }
+       return 1;
+}
 void ModApiClient::Initialize(lua_State *L, int top)
 {
        API_FCT(get_current_modname);
@@ -353,4 +363,5 @@ void ModApiClient::Initialize(lua_State *L, int top)
        API_FCT(get_item_def);
        API_FCT(get_node_def);
        API_FCT(take_screenshot);
+       API_FCT(get_privilege_list);
 }
index fe5780fb1eee8025b8c98dd793501bc561f47cb2..2f0c2e3f8b5797cee2afd5e7b9f72117b52acaa1 100644 (file)
@@ -89,8 +89,12 @@ class ModApiClient : public ModApiBase
        // get_node_def(nodename)
        static int l_get_node_def(lua_State *L);
 
+       // take_screenshot()
        static int l_take_screenshot(lua_State *L);
 
+       // get_privilege_list()
+       static int l_get_privilege_list(lua_State *L);
+
 public:
        static void Initialize(lua_State *L, int top);
 };