Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
//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;
    }
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
//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;
    }
}