99 lines
2.7 KiB
Plaintext
99 lines
2.7 KiB
Plaintext
//::////////////////////////////////////////////////////////////////////////////
|
|
//::
|
|
//:: Script Name: npc_clear
|
|
//::
|
|
//:: Use: This script is used in conjuction with area_enter to clear the NPC's
|
|
//:: and trash from the area when the player leaves to reduce overhead on the
|
|
//:: system.
|
|
//::
|
|
//:: Created By: Birdman076
|
|
//::
|
|
//:: Created On: July 27, 2009
|
|
//::
|
|
//:: Note: This script is meant to be used in conjuction with "area_enter"
|
|
//::
|
|
//::////////////////////////////////////////////////////////////////////////////
|
|
|
|
// function removes all objects in inventory then object itself.
|
|
void TrashObject(object oObject)
|
|
{
|
|
/* search and destroy contents of body bag's, others just destroy */
|
|
if( GetHasInventory( oObject ) )
|
|
{
|
|
object oItem = GetFirstItemInInventory( oObject );
|
|
|
|
/* recursively trash all items inside container */
|
|
while( GetIsObjectValid( oItem ) )
|
|
{
|
|
TrashObject( oItem );
|
|
|
|
oItem = GetNextItemInInventory( oObject );
|
|
}
|
|
}
|
|
DestroyObject( oObject );
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPC = GetExitingObject();
|
|
object oArea = OBJECT_SELF;
|
|
|
|
// only execute for PC's exiting an area
|
|
if( GetIsPC( oPC ) )
|
|
{
|
|
|
|
|
|
// Start up the loop, setting oPC now to the first PC
|
|
oPC = GetFirstPC();
|
|
|
|
// Continue looping until there are no more PCs left
|
|
while( oPC != OBJECT_INVALID )
|
|
{
|
|
|
|
// Check the Area against the Area of the current PC, and if they are the same
|
|
// exit the function, as we do not need to check anymore PCs
|
|
if( oArea == GetArea( oPC ) )
|
|
return;
|
|
|
|
// If not, continue to the next PC
|
|
else oPC = GetNextPC();
|
|
}
|
|
|
|
SetLocalInt( oArea, "NPC_AMT", 0 );
|
|
|
|
// If we've made it this far, we know that there aren't any PCs in the area
|
|
// Set oObject to the first object in the Area
|
|
object oObject = GetFirstObjectInArea( oArea );
|
|
|
|
// Continue looping until there are no more objects left
|
|
while( oObject != oArea && GetIsObjectValid( oObject ) )
|
|
{
|
|
// Test to see if oObject is a creature spawned from an encounter and if so,
|
|
// destroy the object
|
|
switch( GetObjectType( oObject ) )
|
|
{
|
|
case OBJECT_TYPE_ITEM:
|
|
TrashObject( oObject );
|
|
break;
|
|
case OBJECT_TYPE_PLACEABLE:
|
|
if( GetTag( oObject ) == "BodyBag")
|
|
TrashObject( oObject );
|
|
break;
|
|
case OBJECT_TYPE_CREATURE:
|
|
if( GetMaster( oObject ) == OBJECT_INVALID )
|
|
{
|
|
AssignCommand( oObject, SetIsDestroyable( TRUE, FALSE, FALSE ) );
|
|
TrashObject( oObject );
|
|
}
|
|
break;
|
|
case OBJECT_TYPE_AREA_OF_EFFECT:
|
|
DestroyObject( oObject );
|
|
break;
|
|
}
|
|
|
|
// Move on to the next object
|
|
oObject = GetNextObjectInArea( oArea );
|
|
}
|
|
}
|
|
}
|