Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarPlayerInventory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/StarPlayerInventory.cpp')
-rw-r--r--source/game/StarPlayerInventory.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/source/game/StarPlayerInventory.cpp b/source/game/StarPlayerInventory.cpp
index 0ebb18c..58e2b31 100644
--- a/source/game/StarPlayerInventory.cpp
+++ b/source/game/StarPlayerInventory.cpp
@@ -755,9 +755,18 @@ void PlayerInventory::load(Json const& store) {
m_equipment[EquipmentSlot::LegsCosmetic] = itemDatabase->diskLoad(store.get("legsCosmeticSlot"));
m_equipment[EquipmentSlot::BackCosmetic] = itemDatabase->diskLoad(store.get("backCosmeticSlot"));
- auto itemBags = store.get("itemBags");
- for (String const& bagType : itemBags.toObject().keys())
- m_bags[bagType] = make_shared<ItemBag>(ItemBag::loadStore(itemBags.get(bagType)));
+ //reuse ItemBags so the Inventory pane still works after load()'ing into the same PlayerInventory again (from swap)
+ auto itemBags = store.get("itemBags").toObject();
+ eraseWhere(m_bags, [&](auto const& p) { return !itemBags.contains(p.first); });
+ for (auto const& p : itemBags) {
+ auto& bagType = p.first;
+ auto newBag = ItemBag::loadStore(p.second);
+ auto& bagPtr = m_bags[bagType];
+ if (bagPtr)
+ *bagPtr = move(newBag);
+ else
+ bagPtr = make_shared<ItemBag>(move(newBag));
+ }
m_swapSlot = itemDatabase->diskLoad(store.get("swapSlot"));
m_trashSlot = itemDatabase->diskLoad(store.get("trashSlot"));
@@ -778,6 +787,7 @@ void PlayerInventory::load(Json const& store) {
m_selectedActionBar = jsonToSelectedActionBarLocation(store.get("selectedActionBar"));
+ m_essential.clear();
m_essential[EssentialItem::BeamAxe] = itemDatabase->diskLoad(store.get("beamAxe"));
m_essential[EssentialItem::WireTool] = itemDatabase->diskLoad(store.get("wireTool"));
m_essential[EssentialItem::PaintTool] = itemDatabase->diskLoad(store.get("paintTool"));