diff options
author | Robert Zenz <Robert.Zenz@bonsaimind.org> | 2015-09-03 21:28:38 +0200 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2015-10-22 19:55:48 +0200 |
commit | c32847838d72c327031520c48b76607b63da4ccc (patch) | |
tree | 9b5d7f9015dda039264652d23f8a38f4a09e3b74 | |
parent | 37c1e2012724a5d74aa0b720ab91953a2cf2bf05 (diff) | |
download | minetest-c32847838d72c327031520c48b76607b63da4ccc.tar.gz minetest-c32847838d72c327031520c48b76607b63da4ccc.tar.bz2 minetest-c32847838d72c327031520c48b76607b63da4ccc.zip |
Add more ways to pass data to check_player_privs
The callback can now be invoked with either the player object or name as
the first parameter, and with either a table or a list of strings, like
this:
minetest.check_player_privs(player_name, { shout = true, fly = true })
minetest.check_player_privs(player_name, "shout", "fly")
minetest.check_player_privs(player, { shout = true, fly = true })
minetest.check_player_privs(player, "shout", "fly")
-rw-r--r-- | builtin/game/misc.lua | 29 | ||||
-rw-r--r-- | doc/lua_api.txt | 7 |
2 files changed, 29 insertions, 7 deletions
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index dee419767..efd0f8dc7 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -74,18 +74,37 @@ function core.after(time, func, ...) } end -function core.check_player_privs(name, privs) +function core.check_player_privs(player_or_name, ...) + local name = player_or_name + -- Check if we have been provided with a Player object. + if type(name) ~= "string" then + name = name:get_player_name() + end + + local requested_privs = {...} local player_privs = core.get_player_privs(name) local missing_privileges = {} - for priv, val in pairs(privs) do - if val - and not player_privs[priv] then - table.insert(missing_privileges, priv) + + if type(requested_privs[1]) == "table" then + -- We were provided with a table like { privA = true, privB = true }. + for priv, value in pairs(requested_privs[1]) do + if value and not player_privs[priv] then + table.insert(missing_privileges, priv) + end + end + else + -- Only a list, we can process it directly. + for key, priv in pairs(requested_privs) do + if not player_privs[priv] then + table.insert(missing_privileges, priv) + end end end + if #missing_privileges > 0 then return false, missing_privileges end + return true, "" end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 489154fb3..0339345ba 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1924,8 +1924,11 @@ Call these functions only at load time! * `minetest.set_player_privs(name, {priv1=true,...})` * `minetest.get_player_privs(name) -> {priv1=true,...}` * `minetest.auth_reload()` -* `minetest.check_player_privs(name, {priv1=true,...})`: returns `bool, missing_privs` - * A quickhand for checking privileges +* `minetest.check_player_privs(player_or_name, ...)`: returns `bool, missing_privs` + * A quickhand for checking privileges. + * `player_or_name`: Either a Player object or the name of a player. + * `...` is either a list of strings, e.g. `"priva", "privb"` or + a table, e.g. `{ priva = true, privb = true }`. * `minetest.get_player_ip(name)`: returns an IP address string `minetest.set_player_password`, `minetest_set_player_privs`, `minetest_get_player_privs` |