Now SAOs will reflect changes to their temporary inventory object

Also, the temp item wasn't being deleted, might have been a memory leak.
Now you will only eat 1 item off a stack
This commit is contained in:
JacobF 2011-09-01 17:16:55 -04:00 committed by Perttu Ahola
parent 2d872ce3fa
commit c68ea19e8d
3 changed files with 21 additions and 5 deletions

View File

@ -226,6 +226,11 @@ void ItemSAO::rightClick(Player *player)
if(to_be_deleted) if(to_be_deleted)
m_removed = true; m_removed = true;
else
// Reflect changes to the item here
m_inventorystring = item->getItemString();
delete item;
} }
/* /*

View File

@ -122,16 +122,20 @@ InventoryItem* InventoryItem::deSerialize(std::istream &is)
} }
} }
std::string InventoryItem::getItemString() {
// Get item string
std::ostringstream os(std::ios_base::binary);
serialize(os);
return os.str();
}
ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f pos) ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f pos)
{ {
/* /*
Create an ItemSAO Create an ItemSAO
*/ */
// Get item string
std::ostringstream os(std::ios_base::binary);
serialize(os);
// Create object // Create object
ServerActiveObject *obj = new ItemSAO(env, 0, pos, os.str()); ServerActiveObject *obj = new ItemSAO(env, 0, pos, getItemString());
return obj; return obj;
} }
@ -200,12 +204,17 @@ bool CraftItem::use(ServerEnvironment *env, Player *player)
{ {
if(item_craft_is_eatable(m_subname)) if(item_craft_is_eatable(m_subname))
{ {
u16 result_count = getCount() - 1; // Eat one at a time
s16 hp_change = item_craft_eat_hp_change(m_subname); s16 hp_change = item_craft_eat_hp_change(m_subname);
if(player->hp + hp_change > 20) if(player->hp + hp_change > 20)
player->hp = 20; player->hp = 20;
else else
player->hp += hp_change; player->hp += hp_change;
if(result_count < 1)
return true; return true;
else
setCount(result_count);
} }
return false; return false;
} }

View File

@ -58,6 +58,8 @@ public:
#endif #endif
// Shall return a text to show in the GUI // Shall return a text to show in the GUI
virtual std::string getText() { return ""; } virtual std::string getText() { return ""; }
// Returns the string used for inventory
virtual std::string getItemString();
// Creates an object from the item, to be placed in the world. // Creates an object from the item, to be placed in the world.
virtual ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos); virtual ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos);
// Gets amount of items that dropping one SAO will decrement // Gets amount of items that dropping one SAO will decrement