aboutsummaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorSmallJoker <mk939@ymail.com>2023-04-05 20:23:16 +0200
committerSmallJoker <SmallJoker@users.noreply.github.com>2023-04-08 17:23:17 +0200
commitba2fee07518d9c6154799b61ba1b14a2cb43ace7 (patch)
tree9a4c7c7b9d40aad5611b60716708728a1768c7df /src/server.cpp
parentf8e0778fc9e402674b091fcf529d0295acd4ddd0 (diff)
downloadminetest-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.cpp43
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);