diff options
author | SmallJoker <mk939@ymail.com> | 2023-04-05 20:23:16 +0200 |
---|---|---|
committer | SmallJoker <SmallJoker@users.noreply.github.com> | 2023-04-08 17:23:17 +0200 |
commit | ba2fee07518d9c6154799b61ba1b14a2cb43ace7 (patch) | |
tree | 9a4c7c7b9d40aad5611b60716708728a1768c7df /src/server.cpp | |
parent | f8e0778fc9e402674b091fcf529d0295acd4ddd0 (diff) | |
download | minetest-ba2fee07518d9c6154799b61ba1b14a2cb43ace7.tar.xz |
Particle spawner: Fix missing parameters
The changes done to clientpackethandler.cpp and server.cpp move the
compatibility code into a protocol version check so that older code
parts can easily be removed in the future (e.g. bump of minimal version).
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/server.cpp b/src/server.cpp index 197e76e16..89629a15d 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1649,7 +1649,18 @@ void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version, NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 100, peer_id); pkt << p.amount << p.time; - { // serialize legacy fields + + if (protocol_version >= 42) { + // Serialize entire thing + std::ostringstream os(std::ios_base::binary); + p.pos.serialize(os); + p.vel.serialize(os); + p.acc.serialize(os); + p.exptime.serialize(os); + p.size.serialize(os); + pkt.putRawString(os.str()); + } else { + // serialize legacy fields only (compatibility) std::ostringstream os(std::ios_base::binary); p.pos.start.legacySerialize(os); p.vel.start.legacySerialize(os); @@ -1672,21 +1683,23 @@ void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version, pkt << p.node.param0 << p.node.param2 << p.node_tile; { // serialize new fields - // initial bias for older properties - pkt << p.pos.start.bias - << p.vel.start.bias - << p.acc.start.bias - << p.exptime.start.bias - << p.size.start.bias; - std::ostringstream os(std::ios_base::binary); - - // final tween frames of older properties - p.pos.end.serialize(os); - p.vel.end.serialize(os); - p.acc.end.serialize(os); - p.exptime.end.serialize(os); - p.size.end.serialize(os); + if (protocol_version < 42) { + // initial bias for older properties + pkt << p.pos.start.bias + << p.vel.start.bias + << p.acc.start.bias + << p.exptime.start.bias + << p.size.start.bias; + + // final tween frames of older properties + p.pos.end.serialize(os); + p.vel.end.serialize(os); + p.acc.end.serialize(os); + p.exptime.end.serialize(os); + p.size.end.serialize(os); + } + // else: fields are already written by serialize() very early // properties for legacy texture field p.texture.serialize(os, protocol_version, true); |