summaryrefslogtreecommitdiff
path: root/src/player.h
diff options
context:
space:
mode:
authorCiaran Gultnieks <ciaran@ciarang.com>2011-05-16 10:41:19 +0100
committerCiaran Gultnieks <ciaran@ciarang.com>2011-05-16 10:41:19 +0100
commit248d7c8469f8cb37406ea0ce56d0945e38334cfb (patch)
treedf8c2ad03a674f8d7c08d6af01ddb3f2a7e7b689 /src/player.h
parentdadac0e79f96b112947a50f37b39ad9677e870d0 (diff)
downloadminetest-248d7c8469f8cb37406ea0ce56d0945e38334cfb.tar.gz
minetest-248d7c8469f8cb37406ea0ce56d0945e38334cfb.tar.bz2
minetest-248d7c8469f8cb37406ea0ce56d0945e38334cfb.zip
Improved server commands and added player permissions.
--HG-- extra : rebase_source : 178fe08f10b7de3ebaba088bd24faad795114216
Diffstat (limited to 'src/player.h')
-rw-r--r--src/player.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/player.h b/src/player.h
index f70b52fe7..778bb54b3 100644
--- a/src/player.h
+++ b/src/player.h
@@ -28,11 +28,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,"
+// Player privileges. These form a bitmask stored in the privs field
+// of the player, and define things they're allowed to do. See also
+// the static methods Player::privsToString and stringToPrivs that
+// convert these to human-readable form.
+const u64 PRIV_BUILD = 1; // Can build - i.e. modify the world
+ // (not enforced yet)
+const u64 PRIV_TELEPORT = 2; // Can teleport
+const u64 PRIV_SETTIME = 4; // Can set the time
+const u64 PRIV_PRIVS = 8; // Can grant and revoke privileges
+const u64 PRIV_SERVER = 16; // Can manage the server (e.g. shutodwn ,settings)
+
+const u64 PRIV_DEFAULT = PRIV_BUILD;
+const u64 PRIV_ALL = 0x7FFFFFFFFFFFFFFFULL;
+const u64 PRIV_INVALID = 0x8000000000000000ULL;
+
+
class Map;
class Player
{
public:
+
+
Player();
virtual ~Player();
@@ -123,6 +141,9 @@ public:
u16 hp;
+ // Player's privileges - a bitmaps of PRIV_xxxx.
+ u64 privs;
+
u16 peer_id;
protected:
@@ -131,6 +152,57 @@ protected:
f32 m_yaw;
v3f m_speed;
v3f m_position;
+
+public:
+
+ // Converst a prvileges value into a human-readable string,
+ // with each component separated by a comma.
+ static std::wstring privsToString(u64 privs)
+ {
+ std::wostringstream os(std::ios_base::binary);
+ if(privs & PRIV_BUILD)
+ os<<L"build,";
+ if(privs & PRIV_TELEPORT)
+ os<<L"teleport,";
+ if(privs & PRIV_SETTIME)
+ os<<L"settime,";
+ if(privs & PRIV_PRIVS)
+ os<<L"privs,";
+ if(os.tellp())
+ {
+ // Drop the trailing comma. (Why on earth can't
+ // you truncate a C++ stream anyway???)
+ std::wstring tmp = os.str();
+ return tmp.substr(0, tmp.length() -1);
+ }
+ return os.str();
+ }
+
+ // Converts a comma-seperated list of privilege values into a
+ // privileges value. The reverse of privsToString(). Returns
+ // PRIV_INVALID if there is anything wrong with the input.
+ static u64 stringToPrivs(std::wstring str)
+ {
+ u64 privs=0;
+ std::vector<std::wstring> pr;
+ pr=str_split(str, ',');
+ for(std::vector<std::wstring>::iterator i = pr.begin();
+ i != pr.end(); ++i)
+ {
+ if(*i == L"build")
+ privs |= PRIV_BUILD;
+ else if(*i == L"teleport")
+ privs |= PRIV_TELEPORT;
+ else if(*i == L"settime")
+ privs |= PRIV_SETTIME;
+ else if(*i == L"privs")
+ privs |= PRIV_PRIVS;
+ else
+ return PRIV_INVALID;
+ }
+ return privs;
+ }
+
};
/*