diff options
author | Kahrl <kahrl@gmx.net> | 2012-01-22 00:49:02 +0100 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-01-22 17:31:20 +0200 |
commit | b4dd5d3bd7d2152fdf02e0e7422b1305caf151f2 (patch) | |
tree | b47e57a55e6a2787464e49ffe172592b956c5a96 /src/server.cpp | |
parent | 1efdc36b22532807d21a0beac94524e3eacfe7bc (diff) | |
download | minetest-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.cpp | 12 |
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()); |