summaryrefslogtreecommitdiff
path: root/src/inventory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/inventory.cpp')
-rw-r--r--src/inventory.cpp42
1 files changed, 30 insertions, 12 deletions
diff --git a/src/inventory.cpp b/src/inventory.cpp
index eecaacd6c..c91a7411a 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -362,24 +362,42 @@ int Inventory::findIndexByTag(const int tag) const
return -1;
}
-void Inventory::addVirtualItem(const Item *const item)
+void Inventory::addVirtualItem(const Item *const item,
+ int index)
{
if (item && !PlayerInfo::isItemProtected(item->getId()))
{
if (findIndexByTag(item->getInvIndex()) != -1)
return;
- const int index = addItem(item->getId(),
- item->getType(),
- 1,
- 1,
- item->getColor(),
- item->getIdentified(),
- item->getDamaged(),
- item->getFavorite(),
- Equipm_false,
- Equipped_false);
- Item *const item2 = getItem(index);
+ if (index >= 0 && index < mSize && mItems[index] == nullptr)
+ {
+ setItem(index,
+ item->getId(),
+ item->getType(),
+ 1,
+ 1,
+ item->getColor(),
+ item->getIdentified(),
+ item->getDamaged(),
+ item->getFavorite(),
+ Equipm_false,
+ Equipped_false);
+ }
+ else
+ {
+ index = addItem(item->getId(),
+ item->getType(),
+ 1,
+ 1,
+ item->getColor(),
+ item->getIdentified(),
+ item->getDamaged(),
+ item->getFavorite(),
+ Equipm_false,
+ Equipped_false);
+ }
+ Item *const item2 = getItem(index);
if (item2)
item2->setTag(item->getInvIndex());
}