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/shared/protocol.cc | 20 ++++++++++++++------ game/shared/protocol.hh | 11 +++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'game/shared') diff --git a/game/shared/protocol.cc b/game/shared/protocol.cc index 576502e..7115807 100644 --- a/game/shared/protocol.cc +++ b/game/shared/protocol.cc @@ -21,7 +21,7 @@ ENetPacket* protocol::encode(const protocol::StatusRequest& packet, enet_uint32 { write_buffer.reset(); write_buffer.write(protocol::StatusRequest::ID); - write_buffer.write(packet.version); + write_buffer.write(packet.game_version_major); return write_buffer.to_packet(flags); } @@ -29,10 +29,12 @@ ENetPacket* protocol::encode(const protocol::StatusResponse& packet, enet_uint32 { write_buffer.reset(); write_buffer.write(protocol::StatusResponse::ID); - write_buffer.write(packet.version); + write_buffer.write(packet.game_version_major); write_buffer.write(packet.max_players); write_buffer.write(packet.num_players); write_buffer.write(packet.motd); + write_buffer.write(packet.game_version_minor); + write_buffer.write(packet.game_version_patch); return write_buffer.to_packet(flags); } @@ -40,11 +42,13 @@ ENetPacket* protocol::encode(const protocol::LoginRequest& packet, enet_uint32 f { write_buffer.reset(); write_buffer.write(protocol::LoginRequest::ID); - write_buffer.write(packet.version); + write_buffer.write(packet.game_version_major); write_buffer.write(packet.voxel_registry_checksum); write_buffer.write(packet.item_registry_checksum); write_buffer.write(packet.password_hash); write_buffer.write(packet.username.substr(0, protocol::MAX_USERNAME)); + write_buffer.write(packet.game_version_minor); + write_buffer.write(packet.game_version_patch); return write_buffer.to_packet(flags); } @@ -268,26 +272,30 @@ void protocol::decode(entt::dispatcher& dispatcher, const ENetPacket* packet, EN switch(id) { case protocol::StatusRequest::ID: status_request.peer = peer; - status_request.version = read_buffer.read(); + status_request.game_version_major = read_buffer.read(); dispatcher.trigger(status_request); break; case protocol::StatusResponse::ID: status_response.peer = peer; - status_response.version = read_buffer.read(); + status_response.game_version_major = read_buffer.read(); status_response.max_players = read_buffer.read(); status_response.num_players = read_buffer.read(); status_response.motd = read_buffer.read(); + status_response.game_version_minor = read_buffer.read(); + status_response.game_version_patch = read_buffer.read(); dispatcher.trigger(status_response); break; case protocol::LoginRequest::ID: login_request.peer = peer; - login_request.version = read_buffer.read(); + login_request.game_version_major = read_buffer.read(); login_request.voxel_registry_checksum = read_buffer.read(); login_request.item_registry_checksum = read_buffer.read(); login_request.password_hash = read_buffer.read(); login_request.username = read_buffer.read(); + login_request.game_version_minor = read_buffer.read(); + login_request.game_version_patch = read_buffer.read(); dispatcher.trigger(login_request); break; diff --git a/game/shared/protocol.hh b/game/shared/protocol.hh index 3133275..f0bdff6 100644 --- a/game/shared/protocol.hh +++ b/game/shared/protocol.hh @@ -14,7 +14,6 @@ constexpr static std::size_t MAX_USERNAME = 64; constexpr static std::size_t MAX_SOUNDNAME = 1024; constexpr static std::uint16_t TICKRATE = 60; constexpr static std::uint16_t PORT = 43103; -constexpr static std::uint32_t VERSION = 15; constexpr static std::uint8_t CHANNEL = 0; } // namespace protocol @@ -107,22 +106,26 @@ ENetPacket* make_dimension_info(const world::Dimension* dimension); } // namespace protocol::utils struct protocol::StatusRequest final : public protocol::Base<0x0000> { - std::uint32_t version; + std::uint32_t game_version_major; // renamed from 'version' in v16.x.x }; struct protocol::StatusResponse final : public protocol::Base<0x0001> { - std::uint32_t version; + std::uint32_t game_version_major; // renamed from 'version' in v16.x.x std::uint16_t max_players; std::uint16_t num_players; std::string motd; + std::uint32_t game_version_minor { UINT32_MAX }; // added in v16.x.x + std::uint32_t game_version_patch { UINT32_MAX }; }; struct protocol::LoginRequest final : public protocol::Base<0x0002> { - std::uint32_t version; + std::uint32_t game_version_major; // renamed from 'version' in v16.x.x std::uint64_t voxel_registry_checksum; std::uint64_t item_registry_checksum; std::uint64_t password_hash; std::string username; + std::uint32_t game_version_minor; // added in v16.x.x + std::uint32_t game_version_patch; }; struct protocol::LoginResponse final : public protocol::Base<0x0003> { -- cgit