mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 20:26:48 +00:00 
			
		
		
		
	Edit InventoryStore::equip() to call the new unequipSlot function…
…to unequip previously equipped item.
This commit is contained in:
		
							parent
							
								
									52cef19982
								
							
						
					
					
						commit
						2786530430
					
				
					 6 changed files with 26 additions and 25 deletions
				
			
		|  | @ -384,7 +384,7 @@ namespace MWGui | |||
|             MWWorld::ContainerStoreIterator it = invStore.getSlot(slot); | ||||
|             if (it != invStore.end() && *it == item) | ||||
|             { | ||||
|                 invStore.equip(slot, invStore.end()); | ||||
|                 invStore.equip(slot, invStore.end(), mPtr); | ||||
|                 std::string script = MWWorld::Class::get(*it).getScript(*it); | ||||
| 
 | ||||
|                 // Unset OnPCEquip Variable on item's script, if it has a script with that variable declared
 | ||||
|  |  | |||
|  | @ -159,7 +159,7 @@ namespace MWMechanics | |||
|         // auto-equip again. we need this for when the race is changed to a beast race
 | ||||
|         MWWorld::InventoryStore& invStore = MWWorld::Class::get(ptr).getInventoryStore(ptr); | ||||
|         for (int i=0; i<MWWorld::InventoryStore::Slots; ++i) | ||||
|             invStore.equip(i, invStore.end()); | ||||
|             invStore.equip(i, invStore.end(), ptr); | ||||
|         invStore.autoEquip(ptr); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,10 +32,10 @@ namespace MWWorld | |||
|             case 0: | ||||
|                 return; | ||||
|             case 2: | ||||
|                 invStore.equip(MWWorld::InventoryStore::Slot_CarriedLeft, invStore.end()); | ||||
|                 invStore.unequipSlot(MWWorld::InventoryStore::Slot_CarriedLeft, actor); | ||||
|                 break; | ||||
|             case 3: | ||||
|                 invStore.equip(MWWorld::InventoryStore::Slot_CarriedRight, invStore.end()); | ||||
|                 invStore.unequipSlot(MWWorld::InventoryStore::Slot_CarriedRight, actor); | ||||
|                 break; | ||||
|         } | ||||
| 
 | ||||
|  | @ -64,7 +64,7 @@ namespace MWWorld | |||
|             // if all slots are occupied, replace the last slot
 | ||||
|             if (slot == --slots.first.end()) | ||||
|             { | ||||
|                 invStore.equip(*slot, it); | ||||
|                 invStore.equip(*slot, it, actor); | ||||
|                 equipped = true; | ||||
|                 break; | ||||
|             } | ||||
|  | @ -72,7 +72,7 @@ namespace MWWorld | |||
|             if (invStore.getSlot(*slot) == invStore.end()) | ||||
|             { | ||||
|                 // slot is not occupied
 | ||||
|                 invStore.equip(*slot, it); | ||||
|                 invStore.equip(*slot, it, actor); | ||||
|                 equipped = true; | ||||
|                 break; | ||||
|             } | ||||
|  |  | |||
|  | @ -81,7 +81,7 @@ MWWorld::ContainerStoreIterator MWWorld::InventoryStore::add(const Ptr& itemPtr, | |||
|     return retVal; | ||||
| } | ||||
| 
 | ||||
| void MWWorld::InventoryStore::equip (int slot, const ContainerStoreIterator& iterator) | ||||
| void MWWorld::InventoryStore::equip (int slot, const ContainerStoreIterator& iterator, const Ptr& actor) | ||||
| { | ||||
|     if (slot<0 || slot>=static_cast<int> (mSlots.size())) | ||||
|         throw std::runtime_error ("slot number out of range"); | ||||
|  | @ -98,19 +98,8 @@ void MWWorld::InventoryStore::equip (int slot, const ContainerStoreIterator& ite | |||
|             throw std::runtime_error ("invalid slot"); | ||||
|     } | ||||
| 
 | ||||
|     // restack item previously in this slot (if required)
 | ||||
|     if (mSlots[slot] != end()) | ||||
|     { | ||||
|         for (MWWorld::ContainerStoreIterator iter (begin()); iter!=end(); ++iter) | ||||
|         { | ||||
|             if (stacks(*iter, *mSlots[slot])) | ||||
|             { | ||||
|                 iter->getRefData().setCount( iter->getRefData().getCount() + mSlots[slot]->getRefData().getCount() ); | ||||
|                 mSlots[slot]->getRefData().setCount(0); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|         unequipSlot(slot, actor); | ||||
| 
 | ||||
|     // unstack item pointed to by iterator if required
 | ||||
|     if (iterator!=end() && !slots.second && iterator->getRefData().getCount() > 1) // if slots.second is true, item can stay stacked when equipped
 | ||||
|  | @ -214,10 +203,10 @@ void MWWorld::InventoryStore::autoEquip (const MWWorld::Ptr& npc) | |||
|                 case 0: | ||||
|                     continue; | ||||
|                 case 2: | ||||
|                     invStore.equip(MWWorld::InventoryStore::Slot_CarriedLeft, invStore.end()); | ||||
|                     invStore.unequipSlot(MWWorld::InventoryStore::Slot_CarriedLeft, npc); | ||||
|                     break; | ||||
|                 case 3: | ||||
|                     invStore.equip(MWWorld::InventoryStore::Slot_CarriedRight, invStore.end()); | ||||
|                     invStore.unequipSlot(MWWorld::InventoryStore::Slot_CarriedRight, npc); | ||||
|                     break; | ||||
|             } | ||||
| 
 | ||||
|  | @ -325,7 +314,7 @@ int MWWorld::InventoryStore::remove(const Ptr& item, int count, const Ptr& actor | |||
| 
 | ||||
|         if (*mSlots[slot] == item) | ||||
|         { | ||||
|             unequipSlot(slot, actorPtr); | ||||
|             unequipSlot(slot, actor); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  | @ -338,7 +327,19 @@ void MWWorld::InventoryStore::unequipSlot(int slot, const MWWorld::Ptr& actor) | |||
|     ContainerStoreIterator it = getSlot(slot); | ||||
|     if (it != end()) | ||||
|     { | ||||
|         equip(slot, end()); | ||||
|         // restack item previously in this slot
 | ||||
|         for (MWWorld::ContainerStoreIterator iter (begin()); iter != end(); ++iter) | ||||
|         { | ||||
|             if (stacks(*iter, *mSlots[slot])) | ||||
|             { | ||||
|                 iter->getRefData().setCount(iter->getRefData().getCount() + mSlots[slot]->getRefData().getCount()); | ||||
|                 mSlots[slot]->getRefData().setCount(0); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // empty this slot
 | ||||
|         mSlots[slot] = end(); | ||||
| 
 | ||||
|         if (actor.getRefData().getHandle() == "player") | ||||
|         { | ||||
|  |  | |||
|  | @ -76,7 +76,7 @@ namespace MWWorld | |||
|             ///
 | ||||
|             /// @return if stacking happened, return iterator to the item that was stacked against, otherwise iterator to the newly inserted item.
 | ||||
| 
 | ||||
|             void equip (int slot, const ContainerStoreIterator& iterator); | ||||
|             void equip (int slot, const ContainerStoreIterator& iterator, const Ptr& actor); | ||||
|             ///< \note \a iterator can be an end-iterator
 | ||||
| 
 | ||||
|             void setSelectedEnchantItem(const ContainerStoreIterator& iterator); | ||||
|  |  | |||
|  | @ -1960,7 +1960,7 @@ namespace MWWorld | |||
| 
 | ||||
|             // Not sure this is right
 | ||||
|             InventoryStore &inv = Class::get(actor).getInventoryStore(actor); | ||||
|             inv.equip(InventoryStore::Slot_Robe, inv.add(ref.getPtr(), actor)); | ||||
|             inv.equip(InventoryStore::Slot_Robe, inv.add(ref.getPtr(), actor), actor); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue