diff --git a/lib/CArtHandler.cpp b/lib/CArtHandler.cpp index d5e9699d8..1a9badeca 100644 --- a/lib/CArtHandler.cpp +++ b/lib/CArtHandler.cpp @@ -1208,32 +1208,28 @@ bool CArtifactSet::isPositionFree(const ArtifactPosition & pos, bool onlyLockChe return true; //no slot means not used } -ArtSlotInfo & CArtifactSet::retrieveNewArtSlot(const ArtifactPosition & slot) +void CArtifactSet::setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked) { assert(!vstd::contains(artifactsWorn, slot)); + ArtSlotInfo * slotInfo; if(slot == ArtifactPosition::TRANSITION_POS) { // Always add to the end. Always take from the beginning. artifactsTransitionPos.emplace_back(); - return artifactsTransitionPos.back(); + slotInfo = &artifactsTransitionPos.back(); } - if(!ArtifactUtils::isSlotBackpack(slot)) - return artifactsWorn[slot]; - - ArtSlotInfo newSlot; - size_t index = slot - GameConstants::BACKPACK_START; - auto position = artifactsInBackpack.begin() + index; - auto inserted = artifactsInBackpack.insert(position, newSlot); - - return *inserted; -} - -void CArtifactSet::setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked) -{ - ArtSlotInfo & asi = retrieveNewArtSlot(slot); - asi.artifact = art; - asi.locked = locked; + else if(ArtifactUtils::isSlotEquipment(slot)) + { + slotInfo = &artifactsWorn[slot]; + } + else + { + auto position = artifactsInBackpack.begin() + slot - GameConstants::BACKPACK_START; + slotInfo = &(*artifactsInBackpack.emplace(position, ArtSlotInfo())); + } + slotInfo->artifact = art; + slotInfo->locked = locked; } void CArtifactSet::eraseArtSlot(const ArtifactPosition & slot) diff --git a/lib/CArtHandler.h b/lib/CArtHandler.h index 265027a46..2df6e4395 100644 --- a/lib/CArtHandler.h +++ b/lib/CArtHandler.h @@ -297,7 +297,6 @@ public: std::map artifactsWorn; //map; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5 std::vector artifactsTransitionPos; // Used as transition position for dragAndDrop artifact exchange - ArtSlotInfo & retrieveNewArtSlot(const ArtifactPosition & slot); void setNewArtSlot(const ArtifactPosition & slot, CArtifactInstance * art, bool locked); void eraseArtSlot(const ArtifactPosition & slot);