mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Improved server commands and added player permissions.
--HG-- extra : rebase_source : 178fe08f10b7de3ebaba088bd24faad795114216
This commit is contained in:
parent
dadac0e79f
commit
248d7c8469
8 changed files with 454 additions and 70 deletions
|
@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "materials.h"
|
||||
#include "mineral.h"
|
||||
#include "config.h"
|
||||
#include "servercommand.h"
|
||||
|
||||
#define BLOCK_EMERGE_FLAG_FROMDISK (1<<0)
|
||||
|
||||
|
@ -1994,6 +1995,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
if(datasize < 13)
|
||||
return;
|
||||
|
||||
if((player->privs & PRIV_BUILD) == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
[0] u16 command
|
||||
[2] u8 button (0=left, 1=right)
|
||||
|
@ -2075,6 +2079,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
if(datasize < 7)
|
||||
return;
|
||||
|
||||
if((player->privs & PRIV_BUILD) == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
length: 7
|
||||
[0] u16 command
|
||||
|
@ -2167,6 +2174,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
{
|
||||
if(datasize < 17)
|
||||
return;
|
||||
if((player->privs & PRIV_BUILD) == 0)
|
||||
return;
|
||||
/*
|
||||
length: 17
|
||||
[0] u16 command
|
||||
|
@ -2615,6 +2624,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
#endif
|
||||
else if(command == TOSERVER_SIGNTEXT)
|
||||
{
|
||||
if((player->privs & PRIV_BUILD) == 0)
|
||||
return;
|
||||
/*
|
||||
u16 command
|
||||
v3s16 blockpos
|
||||
|
@ -2672,6 +2683,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
}
|
||||
else if(command == TOSERVER_SIGNNODETEXT)
|
||||
{
|
||||
if((player->privs & PRIV_BUILD) == 0)
|
||||
return;
|
||||
/*
|
||||
u16 command
|
||||
v3s16 p
|
||||
|
@ -2853,71 +2866,19 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
line += L"Server: ";
|
||||
|
||||
message = message.substr(commandprefix.size());
|
||||
// Get player name as narrow string
|
||||
std::string name_s = player->getName();
|
||||
// Convert message to narrow string
|
||||
std::string message_s = wide_to_narrow(message);
|
||||
// Operator is the single name defined in config.
|
||||
std::string operator_name = g_settings.get("name");
|
||||
bool is_operator = (operator_name != "" &&
|
||||
wide_to_narrow(name) == operator_name);
|
||||
bool valid_command = false;
|
||||
if(message_s == "help")
|
||||
{
|
||||
line += L"-!- Available commands: ";
|
||||
line += L"status ";
|
||||
if(is_operator)
|
||||
{
|
||||
line += L"shutdown setting time ";
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
send_to_sender = true;
|
||||
valid_command = true;
|
||||
}
|
||||
else if(message_s == "status")
|
||||
{
|
||||
line = getStatusString();
|
||||
send_to_sender = true;
|
||||
valid_command = true;
|
||||
}
|
||||
else if(is_operator)
|
||||
{
|
||||
if(message_s == "shutdown")
|
||||
{
|
||||
dstream<<DTIME<<" Server: Operator requested shutdown."
|
||||
<<std::endl;
|
||||
m_shutdown_requested.set(true);
|
||||
|
||||
line += L"*** Server shutting down (operator request)";
|
||||
send_to_sender = true;
|
||||
valid_command = true;
|
||||
}
|
||||
else if(message_s.substr(0,8) == "setting ")
|
||||
{
|
||||
std::string confline = message_s.substr(8);
|
||||
g_settings.parseConfigLine(confline);
|
||||
line += L"-!- Setting changed.";
|
||||
send_to_sender = true;
|
||||
valid_command = true;
|
||||
}
|
||||
else if(message_s.substr(0,5) == "time ")
|
||||
{
|
||||
u32 time = stoi(message_s.substr(5));
|
||||
m_time_of_day.set(time);
|
||||
m_time_of_day_send_timer = 0;
|
||||
line += L"-!- time_of_day changed.";
|
||||
send_to_sender = true;
|
||||
valid_command = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(valid_command == false)
|
||||
{
|
||||
line += L"-!- Invalid command: " + message;
|
||||
send_to_sender = true;
|
||||
}
|
||||
|
||||
ServerCommandContext *ctx = new ServerCommandContext(
|
||||
str_split(message, L' '),
|
||||
this,
|
||||
&m_env,
|
||||
player
|
||||
);
|
||||
|
||||
line += ServerCommand::processCommand(ctx);
|
||||
send_to_sender = ctx->flags & 1;
|
||||
send_to_others = ctx->flags & 2;
|
||||
delete ctx;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue