aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-03-05 15:51:49 +0100
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-03-05 15:51:49 +0100
commit232923667a49be16d0fd3fedd61cb6fe901a0af2 (patch)
tree72c4980276a0f69ae78c723c8ab0cce4c7ed31b2
parent1f4d8d860ebb6784842e794c8e2633954bbb5332 (diff)
downloadminetest-232923667a49be16d0fd3fedd61cb6fe901a0af2.tar.xz
Send all item metadata when local map saving is enabled
-rw-r--r--src/client/client.cpp3
-rw-r--r--src/clientiface.h2
-rw-r--r--src/network/serverpackethandler.cpp7
-rw-r--r--src/server.cpp4
4 files changed, 13 insertions, 3 deletions
diff --git a/src/client/client.cpp b/src/client/client.cpp
index ef4a3cdfc..d8a83136c 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -1008,7 +1008,7 @@ AuthMechanism Client::choseAuthMech(const u32 mechs)
void Client::sendInit(const std::string &playerName)
{
- NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size()));
+ NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size()) + 1);
// we don't support network compression yet
u16 supp_comp_modes = NETPROTO_COMPRESSION_NONE;
@@ -1016,6 +1016,7 @@ void Client::sendInit(const std::string &playerName)
pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) supp_comp_modes;
pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX;
pkt << playerName;
+ pkt << (u8) (m_localdb ? 1 : 0);
Send(&pkt);
}
diff --git a/src/clientiface.h b/src/clientiface.h
index cc5292b71..9aa760d15 100644
--- a/src/clientiface.h
+++ b/src/clientiface.h
@@ -233,6 +233,8 @@ public:
//
u16 net_proto_version = 0;
+ u8 mapsaving_enabled = 0;
+
/* Authentication information */
std::string enc_pwd = "";
bool create_player_on_auth_success = false;
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index ddc6f4e47..f485f0c8d 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -100,10 +100,17 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
u16 min_net_proto_version = 0;
u16 max_net_proto_version;
std::string playerName;
+ u8 mapsaving_enabled = 0;
*pkt >> client_max >> supp_compr_modes >> min_net_proto_version
>> max_net_proto_version >> playerName;
+ try {
+ *pkt >> mapsaving_enabled;
+ } catch (PacketError &e) {};
+
+ client->mapsaving_enabled = mapsaving_enabled;
+
u8 our_max = SER_FMT_VER_HIGHEST_READ;
// Use the highest version supported by both
u8 depl_serial_v = std::min(client_max, our_max);
diff --git a/src/server.cpp b/src/server.cpp
index 13aad1dbf..ef15ed7ba 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1471,7 +1471,7 @@ void Server::SendInventory(PlayerSAO *sao, bool incremental)
NetworkPacket pkt(TOCLIENT_INVENTORY, 0, sao->getPeerID());
std::ostringstream os(std::ios::binary);
- sao->getInventory()->serialize(os, incremental, g_settings->getBool("send_all_item_metadata"));
+ sao->getInventory()->serialize(os, incremental, g_settings->getBool("send_all_item_metadata") || getClient(sao->getPeerID(), CS_InitDone)->mapsaving_enabled);
sao->getInventory()->setModified(false);
player->setModified(true);
@@ -2335,7 +2335,7 @@ void Server::SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver,
*/
thread_local const int net_compression_level = rangelim(g_settings->getS16("map_compression_level_net"), -1, 9);
std::ostringstream os(std::ios_base::binary);
- block->serialize(os, ver, false, net_compression_level, g_settings->getBool("send_all_item_metadata"));
+ block->serialize(os, ver, false, net_compression_level, g_settings->getBool("send_all_item_metadata") || getClient(peer_id)->mapsaving_enabled);
block->serializeNetworkSpecific(os);
std::string s = os.str();