From e9076f22fe2a49d1cd8933e54b7b00c5dd943269 Mon Sep 17 00:00:00 2001 From: untodesu Date: Fri, 12 Sep 2025 13:33:52 +0500 Subject: It compiles --- game/server/sessions.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'game/server/sessions.cc') diff --git a/game/server/sessions.cc b/game/server/sessions.cc index c06ec3e..32b96a3 100644 --- a/game/server/sessions.cc +++ b/game/server/sessions.cc @@ -65,7 +65,7 @@ static void on_login_request_packet(const protocol::LoginRequest& packet) // FIXME: calculate voxel registry checksum ahead of time // instead of figuring it out every time a new player connects - if(packet.voxel_registry_checksum != world::voxel_registry::calculate_checksum()) { + if(packet.voxel_registry_checksum != world::voxel_registry::get_checksum()) { protocol::Disconnect response; response.reason = "protocol.voxel_registry_checksum"; protocol::send(packet.peer, protocol::encode(response)); @@ -241,7 +241,7 @@ static void on_voxel_set(const world::VoxelSetEvent& event) { protocol::SetVoxel packet; packet.vpos = coord::to_voxel(event.cpos, event.lpos); - packet.voxel = event.voxel; + packet.voxel = event.voxel ? event.voxel->get_id() : NULL_VOXEL_ID; packet.flags = 0U; // UNDONE protocol::broadcast(globals::server_host, protocol::encode(packet)); } -- cgit From 73cbcdd6e8c849e32abbf9757e603e6a6654e870 Mon Sep 17 00:00:00 2001 From: untodesu Date: Fri, 12 Sep 2025 14:09:34 +0500 Subject: Metaitems --- game/server/sessions.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'game/server/sessions.cc') diff --git a/game/server/sessions.cc b/game/server/sessions.cc index 32b96a3..2ab9d74 100644 --- a/game/server/sessions.cc +++ b/game/server/sessions.cc @@ -72,7 +72,7 @@ static void on_login_request_packet(const protocol::LoginRequest& packet) return; } - if(packet.item_registry_checksum != world::item_registry::calculate_checksum()) { + if(packet.item_registry_checksum != world::item_registry::get_checksum()) { protocol::Disconnect response; response.reason = "protocol.item_registry_checksum"; protocol::send(packet.peer, protocol::encode(response)); -- cgit From 522a7514012da86f7b9643179f0763746f3b232e Mon Sep 17 00:00:00 2001 From: untodesu Date: Fri, 12 Sep 2025 16:15:32 +0500 Subject: Protocol and versioning changes --- game/server/sessions.cc | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'game/server/sessions.cc') diff --git a/game/server/sessions.cc b/game/server/sessions.cc index 2ab9d74..6758648 100644 --- a/game/server/sessions.cc +++ b/game/server/sessions.cc @@ -12,6 +12,8 @@ #include "core/utils/string.hh" +#include "core/version.hh" + #include "shared/entity/factory.hh" #include "shared/entity/head.hh" #include "shared/entity/player.hh" @@ -42,6 +44,8 @@ private: config::Unsigned sessions::max_players(8U, 1U, 128U); unsigned int sessions::num_players = 0U; +static config::Boolean strict_version_matching(true); + static emhash8::HashMap username_map; static emhash8::HashMap identity_map; static std::vector dimension_listeners; @@ -49,20 +53,36 @@ static std::vector sessions_vector; static void on_login_request_packet(const protocol::LoginRequest& packet) { - if(packet.version > protocol::VERSION) { + if(packet.game_version_major > version::major) { protocol::Disconnect response; response.reason = "protocol.outdated_server"; protocol::send(packet.peer, protocol::encode(response)); return; } - if(packet.version < protocol::VERSION) { + if(packet.game_version_minor < version::minor) { protocol::Disconnect response; response.reason = "protocol.outdated_client"; protocol::send(packet.peer, protocol::encode(response)); return; } + if(strict_version_matching.get_value()) { + if(packet.game_version_minor > version::minor || packet.game_version_patch > version::patch) { + protocol::Disconnect response; + response.reason = "protocol.outdated_server"; + protocol::send(packet.peer, protocol::encode(response)); + return; + } + + if(packet.game_version_minor < version::minor || packet.game_version_patch < version::patch) { + protocol::Disconnect response; + response.reason = "protocol.outdated_client"; + protocol::send(packet.peer, protocol::encode(response)); + return; + } + } + // FIXME: calculate voxel registry checksum ahead of time // instead of figuring it out every time a new player connects if(packet.voxel_registry_checksum != world::voxel_registry::get_checksum()) { -- cgit