diff options
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/src/server.cpp b/src/server.cpp index 5451e3833..10c41bc76 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1870,7 +1870,7 @@ void Server::SendSetLighting(session_t peer_id, const Lighting &lighting) { NetworkPacket pkt(TOCLIENT_SET_LIGHTING, 4, peer_id); - + pkt << lighting.shadow_intensity; Send(&pkt); @@ -2251,50 +2251,31 @@ void Server::fadeSound(s32 handle, float step, float gain) void Server::sendRemoveNode(v3s16 p, std::unordered_set<u16> *far_players, float far_d_nodes) { - float maxd = far_d_nodes * BS; v3f p_f = intToFloat(p, BS); v3s16 block_pos = getNodeBlockPos(p); NetworkPacket pkt(TOCLIENT_REMOVENODE, 6); pkt << p; - std::vector<session_t> clients = m_clients.getClientIDs(); - ClientInterface::AutoLock clientlock(m_clients); - - for (session_t client_id : clients) { - RemoteClient *client = m_clients.lockedGetClientNoEx(client_id); - if (!client) - continue; - - RemotePlayer *player = m_env->getPlayer(client_id); - PlayerSAO *sao = player ? player->getPlayerSAO() : nullptr; - - // If player is far away, only set modified blocks not sent - if (!client->isBlockSent(block_pos) || (sao && - sao->getBasePosition().getDistanceFrom(p_f) > maxd)) { - if (far_players) - far_players->emplace(client_id); - else - client->SetBlockNotSent(block_pos); - continue; - } - - // Send as reliable - m_clients.send(client_id, 0, &pkt, true); - } + sendNodeChangePkt(pkt, block_pos, p_f, far_d_nodes, far_players); } void Server::sendAddNode(v3s16 p, MapNode n, std::unordered_set<u16> *far_players, float far_d_nodes, bool remove_metadata) { - float maxd = far_d_nodes * BS; v3f p_f = intToFloat(p, BS); v3s16 block_pos = getNodeBlockPos(p); NetworkPacket pkt(TOCLIENT_ADDNODE, 6 + 2 + 1 + 1 + 1); pkt << p << n.param0 << n.param1 << n.param2 << (u8) (remove_metadata ? 0 : 1); + sendNodeChangePkt(pkt, block_pos, p_f, far_d_nodes, far_players); +} +void Server::sendNodeChangePkt(NetworkPacket &pkt, v3s16 block_pos, + v3f p, float far_d_nodes, std::unordered_set<u16> *far_players) +{ + float maxd = far_d_nodes * BS; std::vector<session_t> clients = m_clients.getClientIDs(); ClientInterface::AutoLock clientlock(m_clients); @@ -2308,7 +2289,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, std::unordered_set<u16> *far_player // If player is far away, only set modified blocks not sent if (!client->isBlockSent(block_pos) || (sao && - sao->getBasePosition().getDistanceFrom(p_f) > maxd)) { + sao->getBasePosition().getDistanceFrom(p) > maxd)) { if (far_players) far_players->emplace(client_id); else |