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,";
|
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;
|
||||||
}
|
}
|
||||||
|
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
|
// 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;
|
||||||
|
|
||||||
|
@ -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"")
|
||||||
|
Loading…
Reference in New Issue
Block a user