From e880cc40e98e7eedd7e8b51810cbc0348fff4a6f Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Mon, 28 Nov 2011 14:55:24 +0200 Subject: [PATCH] Fix stuff in inventory.{cpp,h} --- src/inventory.cpp | 26 +++++++++++++++++++++++--- src/inventory.h | 2 ++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/inventory.cpp b/src/inventory.cpp index f3b81090b..4e897d9ff 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -168,6 +168,13 @@ InventoryItem* InventoryItem::deSerialize(std::istream &is, IGameDef *gamedef) } } +InventoryItem* InventoryItem::deSerialize(const std::string &str, + IGameDef *gamedef) +{ + std::istringstream is(str, std::ios_base::binary); + return deSerialize(is, gamedef); +} + std::string InventoryItem::getItemString() { // Get item string std::ostringstream os(std::ios_base::binary); @@ -535,21 +542,22 @@ u32 InventoryList::getFreeSlots() const InventoryItem * InventoryList::getItem(u32 i) const { - if(i > m_items.size() - 1) + if(i >= m_items.size()) return NULL; return m_items[i]; } InventoryItem * InventoryList::getItem(u32 i) { - if(i > m_items.size() - 1) + if(i >= m_items.size()) return NULL; return m_items[i]; } InventoryItem * InventoryList::changeItem(u32 i, InventoryItem *newitem) { - assert(i < m_items.size()); + if(i >= m_items.size()) + return newitem; InventoryItem *olditem = m_items[i]; m_items[i] = newitem; @@ -606,6 +614,8 @@ InventoryItem * InventoryList::addItem(u32 i, InventoryItem *newitem) { if(newitem == NULL) return NULL; + if(i >= m_items.size()) + return newitem; //setDirty(true); @@ -853,6 +863,16 @@ InventoryList * Inventory::getList(const std::string &name) return m_lists[i]; } +bool Inventory::deleteList(const std::string &name) +{ + s32 i = getListIndex(name); + if(i == -1) + return false; + delete m_lists[i]; + m_lists.erase(i); + return true; +} + const InventoryList * Inventory::getList(const std::string &name) const { s32 i = getListIndex(name); diff --git a/src/inventory.h b/src/inventory.h index 441b2ca4d..6253ea50e 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -41,6 +41,8 @@ public: virtual ~InventoryItem(); static InventoryItem* deSerialize(std::istream &is, IGameDef *gamedef); + static InventoryItem* deSerialize(const std::string &str, + IGameDef *gamedef); virtual const char* getName() const = 0; // Shall write the name and the parameters