diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-07-24 20:57:17 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-07-24 20:57:17 +0300 |
commit | 2ac20982e0772b94b21d95b53519bd2164632d98 (patch) | |
tree | 3a2e7b783ff4362ac723dee22809a8e6b7f8750a /src/client.cpp | |
parent | 96eac87d47e4d9e815dff5c9f830326e515d4ea2 (diff) | |
download | minetest-2ac20982e0772b94b21d95b53519bd2164632d98.tar.gz minetest-2ac20982e0772b94b21d95b53519bd2164632d98.tar.bz2 minetest-2ac20982e0772b94b21d95b53519bd2164632d98.zip |
Detached inventories
Diffstat (limited to 'src/client.cpp')
-rw-r--r-- | src/client.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/client.cpp b/src/client.cpp index 3a2edede3..e47bce142 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -304,6 +304,15 @@ Client::~Client() sleep_ms(100); delete m_inventory_from_server; + + // Delete detached inventories + { + for(std::map<std::string, Inventory*>::iterator + i = m_detached_inventories.begin(); + i != m_detached_inventories.end(); i++){ + delete i->second; + } + } } void Client::connect(Address address) @@ -1698,6 +1707,24 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) assert(player != NULL); player->inventory_formspec = deSerializeLongString(is); } + else if(command == TOCLIENT_DETACHED_INVENTORY) + { + std::string datastring((char*)&data[2], datasize-2); + std::istringstream is(datastring, std::ios_base::binary); + + std::string name = deSerializeString(is); + + infostream<<"Client: Detached inventory update: \""<<name<<"\""<<std::endl; + + Inventory *inv = NULL; + if(m_detached_inventories.count(name) > 0) + inv = m_detached_inventories[name]; + else{ + inv = new Inventory(m_itemdef); + m_detached_inventories[name] = inv; + } + inv->deSerialize(is); + } else { infostream<<"Client: Ignoring unknown command " @@ -2090,6 +2117,13 @@ Inventory* Client::getInventory(const InventoryLocation &loc) return meta->getInventory(); } break; + case InventoryLocation::DETACHED: + { + if(m_detached_inventories.count(loc.name) == 0) + return NULL; + return m_detached_inventories[loc.name]; + } + break; default: assert(0); } |