forked from Mirrorlandia_minetest/minetest
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:
parent
2d872ce3fa
commit
c68ea19e8d
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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;
|
||||||
return true;
|
|
||||||
|
if(result_count < 1)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
setCount(result_count);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user