3 Copyright (C) 2010-11 celeron55, Perttu Ahola <celeron55@gmail.com>
4 Copyright (C) 2011 Ciaran Gultnieks <ciaran@ciarang.com>
6 Permission to use, copy, modify, and distribute this software for any
7 purpose with or without fee is hereby granted, provided that the above
8 copyright notice and this permission notice appear in all copies.
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include "servercommand.h"
22 void cmd_status(std::wostringstream &os,
23 ServerCommandContext *ctx)
25 os<<ctx->server->getStatusString();
28 void cmd_privs(std::wostringstream &os,
29 ServerCommandContext *ctx)
31 if(ctx->parms.size() == 1)
33 // Show our own real privs, without any adjustments
34 // made for admin status
35 os<<L"-!- " + narrow_to_wide(privsToString(
36 ctx->server->getPlayerAuthPrivs(ctx->player->getName())));
40 if((ctx->privs & PRIV_PRIVS) == 0)
42 os<<L"-!- You don't have permission to do that";
46 Player *tp = ctx->env->getPlayer(wide_to_narrow(ctx->parms[1]).c_str());
49 os<<L"-!- No such player";
53 os<<L"-!- " + narrow_to_wide(privsToString(ctx->server->getPlayerAuthPrivs(tp->getName())));
56 void cmd_grantrevoke(std::wostringstream &os,
57 ServerCommandContext *ctx)
59 if(ctx->parms.size() != 3)
61 os<<L"-!- Missing parameter";
65 if((ctx->privs & PRIV_PRIVS) == 0)
67 os<<L"-!- You don't have permission to do that";
71 u64 newprivs = stringToPrivs(wide_to_narrow(ctx->parms[2]));
72 if(newprivs == PRIV_INVALID)
74 os<<L"-!- Invalid privileges specified";
78 Player *tp = ctx->env->getPlayer(wide_to_narrow(ctx->parms[1]).c_str());
81 os<<L"-!- No such player";
85 std::string playername = wide_to_narrow(ctx->parms[1]);
86 u64 privs = ctx->server->getPlayerAuthPrivs(playername);
88 if(ctx->parms[0] == L"grant")
93 ctx->server->setPlayerAuthPrivs(playername, privs);
95 os<<L"-!- Privileges change to ";
96 os<<narrow_to_wide(privsToString(privs));
99 void cmd_time(std::wostringstream &os,
100 ServerCommandContext *ctx)
102 if(ctx->parms.size() != 2)
104 os<<L"-!- Missing parameter";
108 if((ctx->privs & PRIV_SETTIME) ==0)
110 os<<L"-!- You don't have permission to do that";
114 u32 time = stoi(wide_to_narrow(ctx->parms[1]));
115 ctx->server->setTimeOfDay(time);
116 os<<L"-!- time_of_day changed.";
119 void cmd_shutdown(std::wostringstream &os,
120 ServerCommandContext *ctx)
122 if((ctx->privs & PRIV_SERVER) ==0)
124 os<<L"-!- You don't have permission to do that";
128 dstream<<DTIME<<" Server: Operator requested shutdown."
130 ctx->server->requestShutdown();
132 os<<L"*** Server shutting down (operator request)";
136 void cmd_setting(std::wostringstream &os,
137 ServerCommandContext *ctx)
139 if((ctx->privs & PRIV_SERVER) ==0)
141 os<<L"-!- You don't have permission to do that";
145 /*std::string confline = wide_to_narrow(
146 ctx->parms[1] + L" = " + ctx->params[2]);*/
148 std::string confline = wide_to_narrow(ctx->paramstring);
150 g_settings.parseConfigLine(confline);
152 ctx->server->saveConfig();
154 os<< L"-!- Setting changed and configuration saved.";
157 void cmd_teleport(std::wostringstream &os,
158 ServerCommandContext *ctx)
160 if((ctx->privs & PRIV_TELEPORT) ==0)
162 os<<L"-!- You don't have permission to do that";
166 if(ctx->parms.size() != 2)
168 os<<L"-!- Missing parameter";
172 std::vector<std::wstring> coords = str_split(ctx->parms[1], L',');
173 if(coords.size() != 3)
175 os<<L"-!- You can only specify coordinates currently";
179 v3f dest(stoi(coords[0])*10, stoi(coords[1])*10, stoi(coords[2])*10);
180 ctx->player->setPosition(dest);
181 ctx->server->SendMovePlayer(ctx->player);
183 os<< L"-!- Teleported.";
187 std::wstring processServerCommand(ServerCommandContext *ctx)
190 std::wostringstream os(std::ios_base::binary);
191 ctx->flags = 1; // Default, unless we change it.
193 u64 privs = ctx->privs;
195 if(ctx->parms.size() == 0 || ctx->parms[0] == L"help")
197 os<<L"-!- Available commands: ";
198 os<<L"status privs ";
199 if(privs & PRIV_SERVER)
200 os<<L"shutdown setting ";
201 if(privs & PRIV_SETTIME)
203 if(privs & PRIV_TELEPORT)
205 if(privs & PRIV_PRIVS)
206 os<<L" grant revoke";
208 else if(ctx->parms[0] == L"status")
212 else if(ctx->parms[0] == L"privs")
216 else if(ctx->parms[0] == L"grant" || ctx->parms[0] == L"revoke")
218 cmd_grantrevoke(os, ctx);
220 else if(ctx->parms[0] == L"time")
224 else if(ctx->parms[0] == L"shutdown")
226 cmd_shutdown(os, ctx);
228 else if(ctx->parms[0] == L"setting")
230 cmd_setting(os, ctx);
232 else if(ctx->parms[0] == L"teleport")
234 cmd_teleport(os, ctx);
238 os<<L"-!- Invalid command: " + ctx->parms[0];