Improve glass
[oweals/minetest.git] / src / servercommand.cpp
index 3c0e6d5108086f93c8505ec968fb86b9dfe84a82..3c6868e36d8392818e09999b477ced1b15676fc5 100644 (file)
@@ -19,6 +19,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "servercommand.h"
 #include "utility.h"
 #include "settings.h"
+#include "main.h" // For g_settings
 
 #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
 
@@ -250,20 +251,19 @@ void cmd_banunban(std::wostringstream &os, ServerCommandContext *ctx)
                        os<<L"-!- No such player";
                        return;
                }
-
-               con::Peer *peer = ctx->server->getPeerNoEx(player->peer_id);
-               if(peer == NULL)
-               {
+               
+               try{
+                       Address address = ctx->server->getPeerAddress(player->peer_id);
+                       std::string ip_string = address.serializeString();
+                       ctx->server->setIpBanned(ip_string, player->getName());
+                       os<<L"-!- Banned "<<narrow_to_wide(ip_string)<<L"|"
+                                       <<narrow_to_wide(player->getName());
+
+                       actionstream<<ctx->player->getName()<<" bans "
+                                       <<player->getName()<<" / "<<ip_string<<std::endl;
+               } catch(con::PeerNotFoundException){
                        dstream<<__FUNCTION_NAME<<": peer was not found"<<std::endl;
-                       return;
                }
-               std::string ip_string = peer->address.serializeString();
-               ctx->server->setIpBanned(ip_string, player->getName());
-               os<<L"-!- Banned "<<narrow_to_wide(ip_string)<<L"|"
-                               <<narrow_to_wide(player->getName());
-
-               actionstream<<ctx->player->getName()<<" bans "
-                               <<player->getName()<<" / "<<ip_string<<std::endl;
        }
        else
        {
@@ -277,6 +277,35 @@ void cmd_banunban(std::wostringstream &os, ServerCommandContext *ctx)
        }
 }
 
+void cmd_clearobjects(std::wostringstream &os,
+       ServerCommandContext *ctx)
+{
+       if((ctx->privs & PRIV_SERVER) ==0)
+       {
+               os<<L"-!- You don't have permission to do that";
+               return;
+       }
+
+       actionstream<<ctx->player->getName()
+                       <<" clears all objects"<<std::endl;
+       
+       {
+               std::wstring msg;
+               msg += L"Clearing all objects. This may take long.";
+               msg += L" You may experience a timeout. (by ";
+               msg += narrow_to_wide(ctx->player->getName());
+               msg += L")";
+               ctx->server->notifyPlayers(msg);
+       }
+
+       ctx->env->clearAllObjects();
+                                       
+       actionstream<<"object clearing done"<<std::endl;
+       
+       os<<L"*** cleared all objects";
+       ctx->flags |= SEND_TO_OTHERS;
+}
+
 
 std::wstring processServerCommand(ServerCommandContext *ctx)
 {
@@ -302,45 +331,28 @@ std::wstring processServerCommand(ServerCommandContext *ctx)
                        os<<L" ban unban";
        }
        else if(ctx->parms[0] == L"status")
-       {
                cmd_status(os, ctx);
-       }
        else if(ctx->parms[0] == L"privs")
-       {
                cmd_privs(os, ctx);
-       }
        else if(ctx->parms[0] == L"grant" || ctx->parms[0] == L"revoke")
-       {
                cmd_grantrevoke(os, ctx);
-       }
        else if(ctx->parms[0] == L"time")
-       {
                cmd_time(os, ctx);
-       }
        else if(ctx->parms[0] == L"shutdown")
-       {
                cmd_shutdown(os, ctx);
-       }
        else if(ctx->parms[0] == L"setting")
-       {
                cmd_setting(os, ctx);
-       }
        else if(ctx->parms[0] == L"teleport")
-       {
                cmd_teleport(os, ctx);
-       }
        else if(ctx->parms[0] == L"ban" || ctx->parms[0] == L"unban")
-       {
                cmd_banunban(os, ctx);
-       }
        else if(ctx->parms[0] == L"me")
-       {
                cmd_me(os, ctx);
-       }
+       else if(ctx->parms[0] == L"clearobjects")
+               cmd_clearobjects(os, ctx);
        else
-       {
                os<<L"-!- Invalid command: " + ctx->parms[0];
-       }
+       
        return os.str();
 }