/////////////////////////////////////////////////////////////////// // unit_inv_h - Handles reequipping of items // By Deva Bryson Winblood. 04/28/2005 /////////////////////////////////////////////////////////////////// /////////////////////////// // PROTOTYPES /////////////////////////// // FILE: unit_inv_h FUNCTION: EquipItem() // This function will attempt to get the NPC to equip the // specified item. void EquipItem(object oNPC,object oItem); // FILE: unit_inv_h FUNCTION: ReturnBelongings() // This function will return the belongings to the NPC void ReturnBelongings(object oNPC,object oSource); /////////////////////////// // FUNCTIONS /////////////////////////// int fnReturnSlotType(object oItem) { // PURPOSE: Return the slot type this item uses when equipped int nRet=-1; int nBT=GetBaseItemType(oItem); if (nBT==BASE_ITEM_AMULET) nRet=INVENTORY_SLOT_NECK; else if (nBT==BASE_ITEM_ARMOR) nRet=INVENTORY_SLOT_CHEST; else if (nBT==BASE_ITEM_ARROW) nRet=INVENTORY_SLOT_ARROWS; else if (nBT==BASE_ITEM_BELT) nRet=INVENTORY_SLOT_BELT; else if (nBT==BASE_ITEM_BOLT) nRet=INVENTORY_SLOT_BOLTS; else if (nBT==BASE_ITEM_BOOTS) nRet=INVENTORY_SLOT_BOOTS; else if (nBT==BASE_ITEM_BULLET) nRet=INVENTORY_SLOT_BULLETS; else if (nBT==BASE_ITEM_CLOAK) nRet=INVENTORY_SLOT_CLOAK; else if (nBT==BASE_ITEM_HELMET) nRet=INVENTORY_SLOT_HEAD; else if (nBT==BASE_ITEM_LARGESHIELD) nRet=INVENTORY_SLOT_LEFTHAND; else if (nBT==BASE_ITEM_RING) nRet=INVENTORY_SLOT_RIGHTRING; else if (nBT==BASE_ITEM_SMALLSHIELD) nRet=INVENTORY_SLOT_LEFTHAND; else if (nBT==BASE_ITEM_TORCH) nRet=INVENTORY_SLOT_LEFTHAND; else if (nBT==BASE_ITEM_TOWERSHIELD) nRet=INVENTORY_SLOT_LEFTHAND; else { nRet=INVENTORY_SLOT_RIGHTHAND; } return nRet; } // fnReturnSlotType() void EquipItem(object oNPC,object oItem) { int nSlot=fnReturnSlotType(oItem); object oCurrent=GetItemInSlot(nSlot,oNPC); if (nSlot==INVENTORY_SLOT_LEFTHAND&&oCurrent==OBJECT_INVALID) { // equip AssignCommand(oNPC,ActionEquipItem(oItem,nSlot)); } // equip else if (nSlot==INVENTORY_SLOT_RIGHTHAND&&oCurrent==OBJECT_INVALID) { // equip AssignCommand(oNPC,ActionEquipItem(oItem,nSlot)); } // equip else if (nSlot==INVENTORY_SLOT_RIGHTHAND&&oCurrent!=OBJECT_INVALID) { // equip - check left hand and dual wielding options oCurrent=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oNPC); if (GetHasFeat(FEAT_AMBIDEXTERITY,oNPC)||GetHasFeat(FEAT_TWO_WEAPON_FIGHTING,oNPC)) { // can dual wield if (oCurrent==OBJECT_INVALID) { // equip AssignCommand(oNPC,ActionEquipItem(oItem,INVENTORY_SLOT_LEFTHAND)); } // equip } // can dual wield } // equip - check left hand and dual wielding options else if (nSlot==INVENTORY_SLOT_RIGHTRING&&oCurrent==OBJECT_INVALID) { // equip ring AssignCommand(oNPC,ActionEquipItem(oItem,nSlot)); } // equip ring else if (nSlot==INVENTORY_SLOT_RIGHTRING&&oCurrent!=OBJECT_INVALID) { // equip ring - try other hand oCurrent=GetItemInSlot(INVENTORY_SLOT_LEFTRING,oNPC); if (oCurrent==OBJECT_INVALID) { // equip AssignCommand(oNPC,ActionEquipItem(oItem,INVENTORY_SLOT_LEFTRING)); } // equip } // equip ring - try other hand else if (oCurrent==OBJECT_INVALID) { // try slot AssignCommand(oNPC,ActionEquipItem(oItem,nSlot)); } // try slot } // EquipItem() void ReturnBelongings(object oNPC,object oSource) { object oItem=GetFirstItemInInventory(oSource); int nSS; while(oItem!=OBJECT_INVALID) { // copy over items nSS=GetItemStackSize(oItem); CreateItemOnObject(GetResRef(oItem),oNPC,nSS); DelayCommand(0.5,DestroyObject(oItem)); oItem=GetNextItemInInventory(oSource); } // copy over items } // ReturnBelongings() //void main(){}