summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2012-01-22 00:49:02 +0100
committerPerttu Ahola <celeron55@gmail.com>2012-01-22 17:31:20 +0200
commitb4dd5d3bd7d2152fdf02e0e7422b1305caf151f2 (patch)
treeb47e57a55e6a2787464e49ffe172592b956c5a96 /src/server.cpp
parent1efdc36b22532807d21a0beac94524e3eacfe7bc (diff)
downloadminetest-b4dd5d3bd7d2152fdf02e0e7422b1305caf151f2.tar.gz
minetest-b4dd5d3bd7d2152fdf02e0e7422b1305caf151f2.tar.bz2
minetest-b4dd5d3bd7d2152fdf02e0e7422b1305caf151f2.zip
Client-side prediction of inventory changes, and some inventory menu fixes
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/server.cpp b/src/server.cpp
index 177551881..a0c8a0092 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -2373,6 +2373,11 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
}
/*
+ Note: Always set inventory not sent, to repair cases
+ where the client made a bad prediction.
+ */
+
+ /*
Handle restrictions and special cases of the move action
*/
if(a->getType() == IACTION_MOVE)
@@ -2382,6 +2387,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
ma->from_inv.applyCurrentPlayer(player->getName());
ma->to_inv.applyCurrentPlayer(player->getName());
+ setInventoryModified(ma->from_inv);
+ setInventoryModified(ma->to_inv);
+
bool from_inv_is_current_player =
(ma->from_inv.type == InventoryLocation::PLAYER) &&
(ma->from_inv.name == player->getName());
@@ -2461,6 +2469,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
da->from_inv.applyCurrentPlayer(player->getName());
+ setInventoryModified(da->from_inv);
+
// Disallow dropping items if not allowed to interact
if((getPlayerPrivs(player) & PRIV_INTERACT) == 0)
{
@@ -2490,6 +2500,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
ca->craft_inv.applyCurrentPlayer(player->getName());
+ setInventoryModified(ca->craft_inv);
+
//bool craft_inv_is_current_player =
// (ca->craft_inv.type == InventoryLocation::PLAYER) &&
// (ca->craft_inv.name == player->getName());