#include "actionequip.hpp" #include "../mwbase/environment.hpp" #include "../mwworld/world.hpp" #include "../mwworld/inventorystore.hpp" #include "../mwworld/player.hpp" namespace MWWorld { ActionEquip::ActionEquip (const MWWorld::Ptr& object) : mObject (object) { } void ActionEquip::execute () { MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); MWWorld::InventoryStore& invStore = static_cast(MWWorld::Class::get(player).getContainerStore(player)); // slots that this item can be equipped in std::pair, bool> slots = MWWorld::Class::get(mObject).getEquipmentSlots(mObject); // retrieve ContainerStoreIterator to the item MWWorld::ContainerStoreIterator it = invStore.begin(); for (; it != invStore.end(); ++it) { if (*it == mObject) { break; } } assert(it != invStore.end()); // equip the item in the first free slot for (std::vector::const_iterator slot=slots.first.begin(); slot!=slots.first.end(); ++slot) { // if all slots are occupied, replace the last slot if (slot == --slots.first.end()) { invStore.equip(*slot, it); break; } if (invStore.getSlot(*slot) == invStore.end()) { // slot is not occupied invStore.equip(*slot, it); break; } } } }