Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Server::sendMetadataChanged(const std::list<v3s16> &meta_updates, float far_d_nodes)
- {
- float maxd = far_d_nodes * BS;
- NodeMetadataList *meta_updates_list = new NodeMetadataList();
- std::vector<u16> clients = m_clients.getClientIDs();
- for (std::vector<u16>::iterator i = clients.begin();
- i != clients.end(); ++i) {
- meta_updates_list->clear();
- Player *player = m_env->getPlayer(*i);
- m_clients.lock();
- RemoteClient* client = m_clients.lockedGetClientNoEx(*i);
- if (client != 0) {
- if (client->net_proto_version >= 28) {
- for (std::list<v3s16>::const_iterator i2 = meta_updates.begin();
- i2 != meta_updates.end(); ++i2) {
- v3s16 pos = *i2;
- NodeMetadata *meta = m_env->getMap().getNodeMetadata(pos);
- if (!meta) {
- continue;
- }
- if (player) {
- // If player is far away, only set modified blocks not sent
- v3f player_pos = player->getPosition();
- if (player_pos.getDistanceFrom(intToFloat(pos, BS)) > maxd) {
- client->SetBlockNotSent(getNodeBlockPos(pos));
- continue;
- }
- }
- meta_updates_list->set(pos, meta);
- }
- //here will go the packet sending
- } else {
- // Older clients expect whole blocks, set them not sent
- for (std::list<v3s16>::const_iterator i2 = meta_updates.begin();
- i2 != meta_updates.end(); ++i2) {
- v3s16 pos = *i2;
- client->SetBlockNotSent(getNodeBlockPos(pos));
- }
- }
- }
- m_clients.unlock();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement