Better synchronisation of build/mine attempts when the player isn't allowed to
authorCiaran Gultnieks <ciaran@ciarang.com>
Mon, 16 May 2011 10:34:06 +0000 (11:34 +0100)
committerCiaran Gultnieks <ciaran@ciarang.com>
Mon, 16 May 2011 10:34:06 +0000 (11:34 +0100)
src/server.cpp

index f77b4f3c641894aedc8457d329746f0c9c839ff3..338b528e75432785dc59c1195746544015cf9c1e 100644 (file)
@@ -2174,8 +2174,6 @@ 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
@@ -2281,6 +2279,10 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                                cannot_remove_node = true;
                        }
 
+                       // Make sure the player is allowed to do it
+                       if((player->privs & PRIV_BUILD) == 0)
+                               cannot_remove_node = true;
+
                        /*
                                If node can't be removed, set block to be re-sent to
                                client and quit.
@@ -2427,7 +2429,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                                try{
                                        // Don't add a node if this is not a free space
                                        MapNode n2 = m_env.getMap().getNode(p_over);
-                                       if(content_buildable_to(n2.d) == false)
+                                       if(content_buildable_to(n2.d) == false
+                                               || (player->privs & PRIV_BUILD) ==0)
                                        {
                                                // Client probably has wrong data.
                                                // Set block not sent, so that client will get