MWWorld::ContainerStoreIterator MWWorld::InventoryStore::add(const Ptr& itemPtr, int count, const Ptr& actorPtr, bool setOwner) { const MWWorld::ContainerStoreIterator& retVal = MWWorld::ContainerStore::add(itemPtr, count, actorPtr, setOwner); // Auto-equip items if an armor/clothing or weapon item is added, but not for the player nor werewolves if (actorPtr != MWMechanics::getPlayer() && !(actorPtr.getClass().isNpc() && actorPtr.getClass().getNpcStats(actorPtr).isWerewolf())) { std::string type = itemPtr.getTypeName(); if (type == typeid(ESM::Armor).name() || type == typeid(ESM::Clothing).name()) autoEquip(actorPtr); } return retVal; }
MWWorld::ContainerStoreIterator MWWorld::InventoryStore::add(const Ptr& itemPtr, int count, const Ptr& actorPtr, bool setOwner) { const MWWorld::ContainerStoreIterator& retVal = MWWorld::ContainerStore::add(itemPtr, count, actorPtr, setOwner); // Auto-equip items if an armor/clothing or weapon item is added, but not for the player nor werewolves if ((actorPtr.getRefData().getHandle() != "player") && !(actorPtr.getClass().isNpc() && actorPtr.getClass().getNpcStats(actorPtr).isWerewolf()) && !actorPtr.getClass().getCreatureStats(actorPtr).isDead()) { std::string type = itemPtr.getTypeName(); if ((type == typeid(ESM::Armor).name()) || (type == typeid(ESM::Clothing).name()) || (type == typeid(ESM::Weapon).name())) autoEquip(actorPtr); } updateRechargingItems(); return retVal; }
int MWWorld::InventoryStore::remove(const Ptr& item, int count, const Ptr& actor, bool equipReplacement) { int retCount = ContainerStore::remove(item, count, actor); bool wasEquipped = false; if (!item.getRefData().getCount()) { for (int slot=0; slot < MWWorld::InventoryStore::Slots; ++slot) { if (mSlots[slot] == end()) continue; if (*mSlots[slot] == item) { unequipSlot(slot, actor); wasEquipped = true; break; } } } // If an armor/clothing item is removed, try to find a replacement, // but not for the player nor werewolves, and not if the RemoveItem script command // was used (equipReplacement is false) if (equipReplacement && wasEquipped && (actor != MWMechanics::getPlayer()) && actor.getClass().isNpc() && !actor.getClass().getNpcStats(actor).isWerewolf()) { std::string type = item.getTypeName(); if (type == typeid(ESM::Armor).name() || type == typeid(ESM::Clothing).name()) autoEquip(actor); } if (item.getRefData().getCount() == 0 && mSelectedEnchantItem != end() && *mSelectedEnchantItem == item) { mSelectedEnchantItem = end(); } if (mListener) mListener->itemRemoved(item, retCount); return retCount; }
//Display the StuffItem menu void show_stuff(Player *target) { int userChoice = 0; int userChoice2 = 0; StuffItem* toEquip; item_display(target->armory); printf("1 : EQUIP item\n2 : DELETE item\n(press 0 to get back)\n"); userChoice = userInputInt(); switch(userChoice) { case 1: printf("Which object you want to EQUIP ?\n(Type the corresponding number)\n"); userChoice2 = userInputInt(); //Take the stuffitem the user wants to equip toEquip = item_return_stuff(target->armory, userChoice2); //Equip it autoEquip(target, stuffItem_ctor(toEquip->name,toEquip->price,toEquip->type,toEquip->I_bonusATT,toEquip->I_bonusDEFRel,toEquip->I_bonusDEFAbs)); //Then remove it from the armory item_remove_id(target->armory, userChoice2); show_stuff(target); break; case 2: printf("Which object you want to DELETE ?\n(Type the corresponding number)\n"); userChoice2 = userInputInt(); //Simply delete the selected stuffItem item_remove_id(target->armory, userChoice2); show_stuff(target); break; case 0: //menu_player(target, 0); return (0); default: printf("Please choose only 1 or 2\n"); break; } }
int MWWorld::InventoryStore::remove(const Ptr& item, int count, const Ptr& actor) { int retCount = ContainerStore::remove(item, count, actor); if (!item.getRefData().getCount()) { for (int slot=0; slot < MWWorld::InventoryStore::Slots; ++slot) { if (mSlots[slot] == end()) continue; if (*mSlots[slot] == item) { unequipSlot(slot, actor); break; } } } // If an armor/clothing item is removed, try to find a replacement, // but not for the player nor werewolves. if ((actor.getRefData().getHandle() != "player") && !(actor.getClass().isNpc() && actor.getClass().getNpcStats(actor).isWerewolf())) { std::string type = item.getTypeName(); if (((type == typeid(ESM::Armor).name()) || (type == typeid(ESM::Clothing).name())) && !actor.getClass().getCreatureStats(actor).isDead()) autoEquip(actor); } if (item.getRefData().getCount() == 0 && mSelectedEnchantItem != end() && *mSelectedEnchantItem == item && actor.getRefData().getHandle() == "player") { mSelectedEnchantItem = end(); MWBase::Environment::get().getWindowManager()->unsetSelectedSpell(); } updateRechargingItems(); return retCount; }
//Give the stuff at start depending on the job chosen void setStuffAtStart(Player *target) { target->armory = item_new(); switch(target->job){ case WARRIOR: autoEquip(target, stuffItem_ctor("My First Sword", 10, RIGHT_HAND, 5, 0, 0)); autoEquip(target, stuffItem_ctor("Textile Armor", 10, ARMOR, 0, 1, 5)); break; case RANGER: autoEquip(target, stuffItem_ctor("My First Bow", 10, TWO_HAND, 4, 0, 0)); autoEquip(target, stuffItem_ctor("A Tiny Short", 10, ARMOR, 0, 1, 4)); break; case WIZARD: autoEquip(target, stuffItem_ctor("My First Wand", 10, RIGHT_HAND, 5, 0, 0)); autoEquip(target, stuffItem_ctor("My First Robe", 10, ARMOR, 0, 2, 3)); break; default: break; } }