NPC Weapons Equip/Unequip Script
All the relevant info is in the comments at the start of the file. Enjoy
NWScript:
int GetBaseGroup(int nItem) {
int nValue = 0;
switch (nItem ) {
case BASE_ITEM_SMALLSHIELD:
case BASE_ITEM_TOWERSHIELD:
case BASE_ITEM_LARGESHIELD:
nValue = 1;
break;
case BASE_ITEM_BASTARDSWORD:
case BASE_ITEM_BATTLEAXE:
case BASE_ITEM_CLUB:
case BASE_ITEM_DAGGER:
case BASE_ITEM_DART:
case BASE_ITEM_HANDAXE:
case BASE_ITEM_KAMA:
case BASE_ITEM_KATANA:
case BASE_ITEM_KUKRI:
case BASE_ITEM_LIGHTFLAIL:
case BASE_ITEM_LIGHTHAMMER:
case BASE_ITEM_LIGHTMACE:
case BASE_ITEM_LONGSWORD:
case BASE_ITEM_RAPIER:
case BASE_ITEM_SCIMITAR:
case BASE_ITEM_SHORTSWORD:
case BASE_ITEM_MORNINGSTAR:
case BASE_ITEM_SHURIKEN:
case BASE_ITEM_SICKLE:
case BASE_ITEM_SLING:
case BASE_ITEM_THROWINGAXE:
case BASE_ITEM_WARHAMMER:
nValue = 2;
break;
case BASE_ITEM_GREATSWORD:
case BASE_ITEM_LIGHTCROSSBOW:
case BASE_ITEM_SHORTBOW:
case BASE_ITEM_DIREMACE:
case BASE_ITEM_DOUBLEAXE:
case BASE_ITEM_GREATAXE:
case BASE_ITEM_HALBERD:
case BASE_ITEM_HEAVYCROSSBOW:
case BASE_ITEM_HEAVYFLAIL:
case BASE_ITEM_LONGBOW:
case BASE_ITEM_QUARTERSTAFF:
case BASE_ITEM_SCYTHE:
case BASE_ITEM_SHORTSPEAR:
case BASE_ITEM_TWOBLADEDSWORD:
nValue = 3;
break;
}
return nValue;
}
void EquipWeapon() {
if( !GetIsObjectValid( GetItemInSlot( INVENTORY_SLOT_RIGHTHAND ) ) ) {
object objInv;
objInv = GetFirstItemInInventory();
while( objInv != OBJECT_INVALID ) {
if( GetBaseGroup( GetBaseItemType( objInv ) ) == 2 ) {
ActionEquipItem( objInv, INVENTORY_SLOT_RIGHTHAND );
break;
}
objInv = GetNextItemInInventory();
}
}
return;
}
void EquipOffWeapon()
{
if( !GetIsObjectValid( GetItemInSlot( INVENTORY_SLOT_LEFTHAND ) ) )
{
object objInv;
objInv = GetFirstItemInInventory();
while( objInv != OBJECT_INVALID )
{
if( GetBaseGroup( GetBaseItemType( objInv ) ) == 2 )
{
ActionEquipItem( objInv, INVENTORY_SLOT_LEFTHAND );
break;
}
objInv = GetNextItemInInventory();
}
}
return;
}
void EquipTwoHandWeapon() {
if( !GetIsObjectValid( GetItemInSlot( INVENTORY_SLOT_RIGHTHAND ) ) ) {
object objInv;
objInv = GetFirstItemInInventory();
while( objInv != OBJECT_INVALID ) {
if( GetBaseGroup( GetBaseItemType( objInv ) ) == 3 ) {
ActionEquipItem( objInv, INVENTORY_SLOT_RIGHTHAND );
break;
}
objInv = GetNextItemInInventory();
}
}
return;
}
void EquipShield()
{
if( !GetIsObjectValid( GetItemInSlot( INVENTORY_SLOT_LEFTHAND ) ) )
{
object objInv;
objInv = GetFirstItemInInventory();
while( objInv != OBJECT_INVALID )
{
if( GetBaseGroup( GetBaseItemType( objInv ) ) == 1 )
{
ActionEquipItem( objInv, INVENTORY_SLOT_LEFTHAND );
break;
}
objInv = GetNextItemInInventory();
}
}
return;
}
void PutWeaponAway()
{
object objInHand;
objInHand = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND );
if( GetBaseGroup( GetBaseItemType( objInHand ) ) == 2 || GetBaseGroup( GetBaseItemType( objInHand ) ) == 3)
{
ActionUnequipItem( objInHand );
}
objInHand = GetItemInSlot( INVENTORY_SLOT_LEFTHAND );
if( GetBaseGroup( GetBaseItemType( objInHand ) ) == 2 || GetBaseGroup( GetBaseItemType( objInHand ) ) == 1)
{
DelayCommand(1.0, ActionUnequipItem( objInHand ));
}
return;
}
By the way, I didn't explain the use of the dual-wielding function
because it barely works at this point. Once I figure out how to do it
right, I'll update the script. If YOU can figure it out, please let me
know
_________________
Black Knight: Have at you!
Arthur: You are indeed brave, sir knight, but the fight is mine.
B. Knight: Oh, had enough eh?
Arthur: Look, you stupid bastard. You've got no arms left!
B. Knight: Yes I have.
Arthur: Look!
B. Knight: Just a flesh wound!
|