Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2012-10-20 16:35:26 +0000
committerStijn Buys <ingar@osirion.org>2012-10-20 16:35:26 +0000
commit75274ebd6ba90784f5aa837b7e5ea97fc6bfb720 (patch)
treea5d51a87bf3f20833df18bc40a3254b946716afb /src/core/netserver.cc
parentf01629dc14b1ee05b44d2e38b3dffbc1441fd85f (diff)
Item id based inventory, support for weapon dealers.
Diffstat (limited to 'src/core/netserver.cc')
-rw-r--r--src/core/netserver.cc19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/core/netserver.cc b/src/core/netserver.cc
index 81bd303..9fb5f78 100644
--- a/src/core/netserver.cc
+++ b/src/core/netserver.cc
@@ -667,16 +667,27 @@ void NetServer::send_inventory_update(NetClient *client, Entity *entity, const u
if (!entity || !entity->inventory())
return;
+ // send message header
std::ostringstream msg;
msg << "inv " << entity->id() << " " << game()->timestamp() << " ";
- size_t nbitems = 0;
+ // send full update marker
+ bool send_full_update = false;
+ if (entity->inventory()->timestamp_erase() >= timestamp) {
+ send_full_update = true;
+ msg << "1 ";
+ } else {
+ send_full_update = false;
+ msg << "0 ";
+ }
+ // send items
+ size_t nbitems = 0;
std::ostringstream itemstr;
for (Inventory::Items::const_iterator it = entity->inventory()->items().begin(); it != entity->inventory()->items().end(); it++) {
const Item *item = (*it);
- if (item->timestamp() >= timestamp) {
- itemstr << item->info()->id() << " ";
+ if (send_full_update || (item->timestamp() >= timestamp)) {
+ itemstr << item->id() << " " << item->info()->id() << " ";
item->serialize_server_update(itemstr);
nbitems++;
}
@@ -733,7 +744,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me
unsigned int protover;
if (msgstream >> protover) {
if (protover != PROTOCOLVERSION) {
- // set protocol version mismatch notification
+ // send protocol version mismatch notification
std::stringstream netmsgstream("");
netmsgstream << "^WProtocol version mismatch: ";
netmsgstream << "client " << protover << " server " << PROTOCOLVERSION << "!\n";