yep & yep.
// Stores info on item about current possessor and slot equipped.
void RememberEquippedItem(object oPossessor, int iSlot)
{
object oItem = GetItemInSlot(iSlot, oPossessor);
if (GetIsObjectValid(oItem))
{
SetLocalInt(oItem, LAST_SLOT_NUM, iSlot + 1);
SetLocalObject(oItem, LAST_SLOT_OBJ, oPossessor);
}
}
// Stores info on all equipped items of possessor.
void RememberEquippedItems(object oPossessor)
{
int iSlot = INVENTORY_SLOT_HEAD;
for (; iSlot != NUM_INVENTORY_SLOTS; ++iSlot)
{
RememberEquippedItem(oPossessor, iSlot);
}
}
// Restores item to slot last remembered.
void RestoreEquippedItem(object oPossessor, object oItem, int bReset = TRUE)
{
// object oPossessor0 = GetLocalObject(oItem, LAST_SLOT_OBJ);
int iSlot = GetLocalInt(oItem, LAST_SLOT_NUM);
if (iSlot)
{
AssignCommand(oPossessor, ActionEquipItem(oItem, iSlot - 1));
if (bReset)
{
DeleteLocalInt(oItem, LAST_SLOT_NUM);
DeleteLocalObject(oItem, LAST_SLOT_OBJ);
}
}
}
// Restores all inventory items to equipment slot last remembered if any.
void RestoreEquippedItems(object oPossessor, int bReset = TRUE)
{
// NOTE: righthand must be equipped before lefthand.
object oLh;
int iSlot;
object oItem = GetFirstItemInInventory(oPossessor);
while (GetIsObjectValid(oItem))
{
iSlot = GetLocalInt(oItem, LAST_SLOT_NUM);
if (iSlot - 1 != INVENTORY_SLOT_LEFTHAND)
RestoreEquippedItem(oPossessor, oItem, bReset);
else
oLh = oItem;
oItem = GetNextItemInInventory(oPossessor);
}
if (GetIsObjectValid(oLh))
RestoreEquippedItem(oPossessor, oLh, bReset);
}