Added 'shout' player privilege

This commit is contained in:
Ciaran Gultnieks 2011-05-23 20:40:25 +01:00
parent a9940c2ccf
commit 8bbc512fe5
3 changed files with 35 additions and 20 deletions

View File

@ -36,6 +36,8 @@ std::wstring privsToString(u64 privs)
os<<L"settime,"; os<<L"settime,";
if(privs & PRIV_PRIVS) if(privs & PRIV_PRIVS)
os<<L"privs,"; os<<L"privs,";
if(privs & PRIV_SHOUT)
os<<L"shout,";
if(os.tellp()) if(os.tellp())
{ {
// Drop the trailing comma. (Why on earth can't // Drop the trailing comma. (Why on earth can't
@ -65,6 +67,8 @@ u64 stringToPrivs(std::wstring str)
privs |= PRIV_SETTIME; privs |= PRIV_SETTIME;
else if(*i == L"privs") else if(*i == L"privs")
privs |= PRIV_PRIVS; privs |= PRIV_PRIVS;
else if(*i == L"shout")
privs |= PRIV_SHOUT;
else else
return PRIV_INVALID; return PRIV_INVALID;
} }

View File

@ -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 // of the player, and define things they're allowed to do. See also
// the static methods Player::privsToString and stringToPrivs that // the static methods Player::privsToString and stringToPrivs that
// convert these to human-readable form. // convert these to human-readable form.
const u64 PRIV_BUILD = 1; // Can build - i.e. modify the world 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_TELEPORT = 2; // Can teleport const u64 PRIV_SETTIME = 4; // Can set the time
const u64 PRIV_SETTIME = 4; // Can set the time const u64 PRIV_PRIVS = 8; // Can grant and revoke privileges
const u64 PRIV_PRIVS = 8; // Can grant and revoke privileges const u64 PRIV_SERVER = 16; // Can manage the server (e.g. shutodwn
const u64 PRIV_SERVER = 16; // Can manage the server (e.g. shutodwn ,settings) // ,settings)
const u64 PRIV_SHOUT = 32; // Can broadcast chat messages to all
// players
const u64 PRIV_DEFAULT = PRIV_BUILD; // 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_ALL = 0x7FFFFFFFFFFFFFFFULL;
const u64 PRIV_INVALID = 0x8000000000000000ULL; const u64 PRIV_INVALID = 0x8000000000000000ULL;

View File

@ -2908,6 +2908,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
// Whether to send to other players // Whether to send to other players
bool send_to_others = false; 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 // Parse commands
std::wstring commandprefix = L"/#"; std::wstring commandprefix = L"/#";
if(message.substr(0, commandprefix.size()) == commandprefix) 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()); 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( ServerCommandContext *ctx = new ServerCommandContext(
str_split(message, L' '), str_split(message, L' '),
this, this,
@ -2937,13 +2937,19 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
} }
else else
{ {
line += L"<"; if(privs & PRIV_SHOUT)
/*if(is_operator) {
line += L"@";*/ line += L"<";
line += name; line += name;
line += L"> "; line += L"> ";
line += message; line += message;
send_to_others = true; send_to_others = true;
}
else
{
line += L"Server: You are not allowed to shout";
send_to_sender = true;
}
} }
if(line != L"") if(line != L"")