diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/player.cpp | 4 | ||||
-rw-r--r-- | src/player.h | 21 | ||||
-rw-r--r-- | src/server.cpp | 32 |
3 files changed, 36 insertions, 21 deletions
diff --git a/src/player.cpp b/src/player.cpp index 12f18de75..147b6c97a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -36,6 +36,8 @@ std::wstring privsToString(u64 privs) os<<L"settime,"; if(privs & PRIV_PRIVS) os<<L"privs,"; + if(privs & PRIV_SHOUT) + os<<L"shout,"; if(os.tellp()) { // Drop the trailing comma. (Why on earth can't @@ -65,6 +67,8 @@ u64 stringToPrivs(std::wstring str) privs |= PRIV_SETTIME; else if(*i == L"privs") privs |= PRIV_PRIVS; + else if(*i == L"shout") + privs |= PRIV_SHOUT; else return PRIV_INVALID; } diff --git a/src/player.h b/src/player.h index 925252e49..4b776a03f 100644 --- a/src/player.h +++ b/src/player.h @@ -34,14 +34,19 @@ with this program; if not, write to the Free Software Foundation, Inc., // 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_BUILD = 1; // Can build - i.e. modify the world +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_SHOUT = 32; // Can broadcast chat messages to all + // players + +// Default privileges - these can be overriden for new players using the +// config option "default_privs" - however, this value still applies for +// players that existed before the privileges system was added. +const u64 PRIV_DEFAULT = PRIV_BUILD|PRIV_SHOUT; const u64 PRIV_ALL = 0x7FFFFFFFFFFFFFFFULL; const u64 PRIV_INVALID = 0x8000000000000000ULL; diff --git a/src/server.cpp b/src/server.cpp index 9b4ee1fad..6a4fe3c02 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2908,6 +2908,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) // Whether to send to other players bool send_to_others = false; + // Local player gets all privileges regardless of + // what's set on their account. + u64 privs = player->privs; + if(g_settings.get("name") == player->getName()) + privs = PRIV_ALL; + // Parse commands std::wstring commandprefix = L"/#"; if(message.substr(0, commandprefix.size()) == commandprefix) @@ -2916,12 +2922,6 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) message = message.substr(commandprefix.size()); - // Local player gets all privileges regardless of - // what's set on their account. - u64 privs = player->privs; - if(g_settings.get("name") == player->getName()) - privs = PRIV_ALL; - ServerCommandContext *ctx = new ServerCommandContext( str_split(message, L' '), this, @@ -2937,13 +2937,19 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } else { - line += L"<"; - /*if(is_operator) - line += L"@";*/ - line += name; - line += L"> "; - line += message; - send_to_others = true; + if(privs & PRIV_SHOUT) + { + line += L"<"; + line += name; + line += L"> "; + line += message; + send_to_others = true; + } + else + { + line += L"Server: You are not allowed to shout"; + send_to_sender = true; + } } if(line != L"") |