DMH-Online

Dungeon Masters Helper · Est. 2005

PCs Scripts

NWN Script: drop_items.htm

Author Sticky: Post Working Scripts Here
Panduh Posted: Saturday, 29 June 08:29AM
Hi all. I finally figured out how to make a PC drop all his items onto the ground. It requires the creation of a placeable container first in order to hold all the equipment. The equipment is then all transferred into the bag. You can place this into onDeath in order to create a Item-drop penalty.

Code:
/**********************************
ItemLossUponDeath()
By: Panduh
Date: 6/29/2002
**********************************/
void ItemLossUponDeath(object oPlayer)
{
    // Find PC's current location
    location loc_Current    = GetLocation(oPlayer);
    // Create a loot bag to hold PC's stuff.
    object oBagLoot = CreateObject(OBJECT_TYPE_PLACEABLE, "pclootbag", loc_Current);
    //Pick off the equipped items(I would love a stack/array to work with)
    object oChest       = GetItemInSlot( INVENTORY_SLOT_CHEST, oPlayer);
    object oBelt        = GetItemInSlot( INVENTORY_SLOT_BELT, oPlayer);
    object oCloak       = GetItemInSlot( INVENTORY_SLOT_CLOAK, oPlayer);
    object oHead        = GetItemInSlot( INVENTORY_SLOT_HEAD, oPlayer);
    object oLeftRing    = GetItemInSlot( INVENTORY_SLOT_LEFTRING, oPlayer);
    object oRightRing   = GetItemInSlot( INVENTORY_SLOT_RIGHTRING, oPlayer);
    object oAmulet      = GetItemInSlot( INVENTORY_SLOT_NECK, oPlayer);
    object oBoots       = GetItemInSlot( INVENTORY_SLOT_BOOTS, oPlayer);
    object oGloves      = GetItemInSlot( INVENTORY_SLOT_ARMS, oPlayer);
    object oWeapon      = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPlayer);
    object oOffhand     = GetItemInSlot( INVENTORY_SLOT_LEFTHAND, oPlayer);
    // Pop all the valid equipment into the loot bag
    if (GetIsObjectValid(oChest))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oChest, oPlayer));
    }
    if (GetIsObjectValid(oBelt))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oBelt, oPlayer));
    }
    if (GetIsObjectValid(oCloak))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oCloak, oPlayer));
    }
    if (GetIsObjectValid(oHead))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oHead, oPlayer));
    }
    if (GetIsObjectValid(oLeftRing))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oLeftRing, oPlayer));
    }
    if (GetIsObjectValid(oRightRing))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oRightRing, oPlayer));
    }
    if (GetIsObjectValid(oAmulet))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oAmulet, oPlayer));
    }
    if (GetIsObjectValid(oBoots))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oBoots, oPlayer));
    }
    if (GetIsObjectValid(oGloves))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oGloves, oPlayer));
    }
    if (GetIsObjectValid(oWeapon))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oWeapon, oPlayer));
    }
    if (GetIsObjectValid(oOffhand))
    {
        AssignCommand(oBagLoot, ActionTakeItem(oOffhand, oPlayer));
    }
    // Loop thru the backpack and have loot bag "take" all the items
    object oItem = GetFirstItemInInventory(oPlayer);
    while ( GetIsObjectValid(oItem) == TRUE )
    {
        AssignCommand(oBagLoot, ActionTakeItem(oItem, oPlayer));
        oItem = GetNextItemInInventory(oPlayer);
    }
}



By the way, thanks to Jhenne over at the DM forum for giving me the idea to have a lootbag "take" the items from the player. Good workaround for the lack of a GetResRef() function in NWNScript.

⌂ All Scripts ← PreviousNext → 👁 Category List

All PCs Scripts

📄 adjust_faction 📄 alt_idle_pc_anim 📄 bleeding 📄 bleeding_002 📄 bleeding_003 📄 bleeding_004 📄 creature_item 📄 drop_items 📄 force_zone 📄 give_pc_item 📄 inspect_inv 📄 limited_druid 📄 move_items_to_container 📄 notify_of_loot 📄 pc_respawn 📄 pc_respawn_002 📄 pc_respawn_003 📄 pc_respawn_004 📄 pc_respawn_005 📄 pc_respawn_006 📄 pc_respawn_007 📄 remove_neg 📄 save_spots 📄 strip_inv_give_gold 📄 strip_inv_plot 📄 subraces 📄 subraces_002 📄 voting