]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/server.cpp
Tune smooth lighting a bit
[dragonfireclient.git] / src / server.cpp
index b33e2477e78f5d692b6a1eaf15148889a04acc86..522916a2f4224080073e3dfd425a5b4dbbdc7aff 100644 (file)
@@ -2176,6 +2176,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                verbosestream<<"Server: Got TOSERVER_INIT2 from "
                                <<peer_id<<std::endl;
 
+               Player *player = m_env->getPlayer(peer_id);
+               if(!player){
+                       verbosestream<<"Server: TOSERVER_INIT2: "
+                                       <<"Player not found; ignoring."<<std::endl;
+                       return;
+               }
 
                getClient(peer_id)->serialization_version
                                = getClient(peer_id)->pending_serialization_version;
@@ -2203,8 +2209,6 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                UpdateCrafting(peer_id);
                SendInventory(peer_id);
                
-               Player *player = m_env->getPlayer(peer_id);
-
                // Send HP
                SendPlayerHP(peer_id);
                
@@ -2955,8 +2959,13 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                */
                if(!checkPriv(player->getName(), "interact"))
                {
-                       infostream<<"Ignoring interaction from player "<<player->getName()
-                                       <<" (no interact privilege)"<<std::endl;
+                       actionstream<<player->getName()<<" attempted to interact with "
+                                       <<pointed.dump()<<" without 'interact' privilege"
+                                       <<std::endl;
+                       // Re-send block to revert change on client-side
+                       RemoteClient *client = getClient(peer_id);
+                       v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS));
+                       client->SetBlockNotSent(blockpos);
                        return;
                }
 
@@ -3041,6 +3050,14 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                                }
                                if(n.getContent() != CONTENT_IGNORE)
                                        scriptapi_node_on_dig(m_lua, p_under, n, playersao);
+
+                               if (m_env->getMap().getNodeNoEx(p_under).getContent() != CONTENT_AIR)
+                               {
+                                       // Re-send block to revert change on client-side
+                                       RemoteClient *client = getClient(peer_id);
+                                       v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS));
+                                       client->SetBlockNotSent(blockpos);
+                               }
                        }
                } // action == 2
                
@@ -4322,7 +4339,10 @@ void Server::reportPrivsModified(const std::string &name)
                if(!player)
                        return;
                SendPlayerPrivileges(player->peer_id);
-               player->getPlayerSAO()->updatePrivileges(
+               PlayerSAO *sao = player->getPlayerSAO();
+               if(!sao)
+                       return;
+               sao->updatePrivileges(
                                getPlayerEffectivePrivs(name),
                                isSingleplayer());
        }