Privileges: Improve chapter

This commit is contained in:
rubenwardy 2018-10-04 20:38:52 +01:00
parent 3999a45d30
commit 2ed367aa28
No known key found for this signature in database
GPG Key ID: A1E29D52FF81513C

View File

@ -21,11 +21,8 @@ which abilities each player has.
## When to use Privileges
A privilege should give a player **the ability to do something**.
Privileges are **not for indicating class or status**.
The main admin of a server (the name set by the `name` setting in the
minetest.conf file) is automatically given all available privileges.
A privilege should give a player the ability to do something.
Privileges are **not** for indicating class or status.
**Good Privileges:**
@ -57,14 +54,8 @@ minetest.register_privilege("vote", {
})
```
If `give_to_singleplayer` is true, you can remove it, because true is the default
when it is not specified. This simplifies the privilege registration to:
```lua
minetest.register_privilege("vote", {
description = "Can vote on issues"
})
```
`give_to_singleplayer` defaults to true when not specified, so it isn't
actually needed in the above definition.
## Checking for Privileges
@ -76,20 +67,15 @@ local has, missing = minetest.check_player_privs(player_or_name, {
vote = true })
```
In this example, `has` is true if the player has all the privileges needed.\\
If `has` is false, then `missing` will contain a dictionary
of missing privileges.
In this example, `has` is true if the player has all the privileges needed.
If `has` is false, then `missing` will contain a key-value table
of the missing privileges.
```lua
if minetest.check_player_privs(name, {interact=true, vote=true}) then
print("Player has all privs!")
else
print("Player is missing some privs!")
end
local has, missing = minetest.check_player_privs(name, {
interact = true,
vote = true })
if has then
print("Player has all privs!")
else
@ -97,17 +83,31 @@ else
end
```
If you don't need to check the missing privileges, you can put
`check_player_privs` directly into the if statement.
```lua
if not minetest.check_player_privs(name, { interact=true }) then
return false, "You need interact for this!"
end
```
## Getting and Setting Privileges
To get a table containing a player's privileges, regardless of whether
the player is logged in, use `minetest.get_player_privs`:
Player privileges can be accessed or modified regardless of the player
being online.
```lua
local privs = minetest.get_player_privs(name)
print(dump(privs))
privs.vote = true
minetest.set_player_privs(name, privs)
```
This example may give:
Privileges are always specified as a key-value table with the key being
the privilege name and the value being a boolean.
```lua
{
@ -117,22 +117,6 @@ This example may give:
}
```
To set a player's privileges, use `minetest.set_player_privs`:
```lua
minetest.set_player_privs(name, {
interact = true,
shout = true })
```
To grant a player privileges, use a combination of the above two functions:
```lua
local privs = minetest.get_player_privs(name)
privs.vote = true
minetest.set_player_privs(name, privs)
```
## Adding Privileges to basic_privs
Players with the `basic_privs` privilege are able to grant and revoke a limited