forked from Mirrorlandia_minetest/minetest
Added 'shout' player privilege
This commit is contained in:
parent
a9940c2ccf
commit
8bbc512fe5
@ -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;
|
||||
}
|
||||
|
19
src/player.h
19
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_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
|
||||
|
||||
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_INVALID = 0x8000000000000000ULL;
|
||||
|
||||
|
@ -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"")
|
||||
|
Loading…
Reference in New Issue
Block a user