diff options
| author | untodesu <kirill@untode.su> | 2025-03-16 21:29:35 +0500 |
|---|---|---|
| committer | untodesu <kirill@untode.su> | 2025-03-16 21:29:35 +0500 |
| commit | 68b0b663514d1a5dcf79cfbdeea544b5d69ed1ed (patch) | |
| tree | e9b58a03b2b1004d05a3094655dc8537c00b44d8 /game/server/receive.cc | |
| parent | fd50a3687d8859764aa6c038545e93fa0ce7bd46 (diff) | |
| download | voxelius-68b0b663514d1a5dcf79cfbdeea544b5d69ed1ed.tar.bz2 voxelius-68b0b663514d1a5dcf79cfbdeea544b5d69ed1ed.zip | |
Attempt to fix ghosted chunks
Diffstat (limited to 'game/server/receive.cc')
| -rw-r--r-- | game/server/receive.cc | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/game/server/receive.cc b/game/server/receive.cc index d2862e2..780ae53 100644 --- a/game/server/receive.cc +++ b/game/server/receive.cc @@ -85,41 +85,27 @@ static void on_set_voxel_packet(const protocol::SetVoxel &packet) auto index = coord::to_index(lpos); if(worldgen::is_generating(session->dimension, cpos)) { - // The chunk is currently being - // generated, so we must ignore any - // requests from players to build there + // The chunk is currently being generated; + // ignore all requests from players to build there return; } auto chunk = session->dimension->find_chunk(cpos); - auto created = false; if(chunk == nullptr) { - chunk = universe::load_chunk(session->dimension, cpos); - created = true; + // The chunk is not loaded, so we must + // ignore any requests from players to build there + return; } - if(chunk == nullptr) { - chunk = session->dimension->create_chunk(cpos); - created = true; - } - chunk->set_voxel(packet.voxel, index); - if(created) { - session->dimension->chunks.emplace_or_replace<InhabitedComponent>(chunk->get_entity()); + session->dimension->chunks.emplace_or_replace<InhabitedComponent>(chunk->get_entity()); - protocol::ChunkVoxels response; - response.voxels = chunk->get_voxels(); - response.chunk = cpos; - sessions::broadcast(session->dimension, protocol::encode(response)); - } - else { - protocol::SetVoxel response; - response.vpos = packet.vpos; - response.voxel = packet.voxel; - sessions::broadcast(session->dimension, protocol::encode(response), session->peer); - } + protocol::SetVoxel response; + response.vpos = packet.vpos; + response.voxel = packet.voxel; + sessions::broadcast(session->dimension, protocol::encode(response), session->peer); return; } |
