diff options
Diffstat (limited to 'src/player.h')
-rw-r--r-- | src/player.h | 72 |
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; + } + }; /* |