ActionEquipMostEffectiveArmor()

Causes the calling creature to equip the best armor in its inventory.

void ActionEquipMostEffectiveArmor();

Description

The calling creature will equip the armor in its possession that has the highest armor class. Remember, in combat, a creature cannot change its armor.



Remarks

As with all ActionEquip* functions, it is not necessary to first unequip the current item in the same inventory slot before equipping the new item.

Also note that Clothing, with 0 AC, will, for some reason, not be equipped. Only padded armor or better (even with AC bonuses/decreases) will get equipped.

See the second example code for how to equip the first armor found, thus any clothing will be equipped.


Known Bugs

Not really a bug, but intended, as noted above, any clothing (still "armor") is not equipped, even if it has a positive AC bonus. Because the base AC is 0, it is not considered proper armor by this function.


Version

1.62

Example

// When we are ordered to, in a conversation, to "Prepare for
// battle", by the PC, we equip our best armor (we should have
// some armor in our inventory, and be wearing something 
// worse (eg: clothes) currently).

// It will also equip the biggest bestest ranged weapon, or lacking
// that, melee weapon we have.

void main()
{
    // Stop what we are doing, do the equipping
    ClearAllActions();
    SpeakString("Um, I'm now ready, you know...to fight...");
    ActionEquipMostDamagingRanged();
    ActionEquipMostEffectiveArmor();
}

// Example 2
// This will equip any armor in the entering objects inventory.
// Ceasily be modified to be used on a NPC's spawn script, but
// this is a good thing to have as a trigger around the module
// spawn point for PC's.
// Thanks to georage.

void main()
{
    // Get the entering object
    object oPC = GetEnteringObject();
    string sLocal = "DO_ONCE" + ObjectToString(OBJECT_SELF);

    // Only do this once, only affects PC's
    if(GetLocalInt(oPC, sLocal) || !GetIsPC(oPC)) return;

    // Set to not do it again
    SetLocalInt(oPC, sLocal, TRUE);

    // Loop the objects inventory and equip the first
    object oItem = GetFirstItemInInventory(oPC);
    while(GetIsObjectValid(oItem))
    {
        // Check if armor, of course
        if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
        {
            // Equip it and stop the script
            AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST));
            return;
        }
        oItem = GetNextItemInInventory(oPC);
    }
}

See Also

functions: ActionEquipMostDamagingMelee | ActionEquipMostDamagingRanged | GetItemACValue
categories: Action on Object Functions | Combat Actions Functions | Inventory Functions


 author: Troels Therkelsen, editor: Jasperre, additional contributor(s): Jasperre, georage