82 lines
2.4 KiB
Plaintext
82 lines
2.4 KiB
Plaintext
/*******************************************************************************
|
|
* lc_area_exit
|
|
*
|
|
* by LasCivious Sept 2004
|
|
* Called by area's OnExit event. Clears area encounters, dropped items,
|
|
* stores & cleans placeable inventories if no PC is present for a length of time.
|
|
*******************************************************************************/
|
|
|
|
// Set this to FALSE if you do not want placeable inventories cleared
|
|
int nClearPlaceInv = TRUE;
|
|
// Set the amount of time to wait for cleaning here in seconds
|
|
float fDelayTime = 180.0;
|
|
|
|
void CleanArea(object oArea)
|
|
{
|
|
object oTrash = GetFirstObjectInArea(oArea);
|
|
object oInvItem;
|
|
|
|
//Check for PCs
|
|
object oPC = GetFirstPC();
|
|
while (GetIsObjectValid(oPC)) {
|
|
if (GetArea(oPC) == oArea) {
|
|
DeleteLocalInt(oArea, "CleanArea");
|
|
return;
|
|
}
|
|
oPC = GetNextPC();
|
|
}
|
|
|
|
while(GetIsObjectValid(oTrash)) {
|
|
string sTagPrefix = GetStringLeft(GetTag(oTrash), 15);
|
|
// Clear remains, dropped items
|
|
if(GetObjectType(oTrash)==OBJECT_TYPE_ITEM ||
|
|
GetStringLowerCase(GetName(oTrash)) == "remains") {
|
|
AssignCommand(oTrash, SetIsDestroyable(TRUE));
|
|
if (GetHasInventory(oTrash)) {
|
|
oInvItem = GetFirstItemInInventory(oTrash);
|
|
while(GetIsObjectValid(oInvItem)) {
|
|
DestroyObject(oInvItem,0.0);
|
|
oInvItem = GetNextItemInInventory(oTrash);
|
|
}
|
|
}
|
|
else DestroyObject(oTrash, 0.0);
|
|
}
|
|
// Clear placeable inventories
|
|
if(GetObjectType(oTrash)==OBJECT_TYPE_PLACEABLE &&
|
|
nClearPlaceInv == TRUE) {
|
|
if (GetHasInventory(oTrash))
|
|
{
|
|
object oInvItem = GetFirstItemInInventory(oTrash);
|
|
while(GetIsObjectValid(oInvItem)) {
|
|
DestroyObject(oInvItem,0.0);
|
|
oInvItem = GetNextItemInInventory(oTrash);
|
|
}
|
|
}
|
|
}
|
|
// Clear encounters
|
|
else if (GetIsEncounterCreature(oTrash) ||
|
|
sTagPrefix == "PWFSE_SPAWNERID")
|
|
{
|
|
AssignCommand(oTrash, SetIsDestroyable(TRUE));
|
|
DestroyObject(oTrash, 0.0);
|
|
}
|
|
|
|
oTrash = GetNextObjectInArea(oArea);
|
|
}
|
|
DeleteLocalInt(oArea, "CleanArea");
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oArea = OBJECT_SELF;
|
|
object oPC = GetExitingObject();
|
|
if (!GetIsPC(oPC)) return;
|
|
|
|
if (GetLocalInt(oArea, "CleanArea") != 1)
|
|
{
|
|
DelayCommand(fDelayTime, CleanArea(oArea));
|
|
SetLocalInt(oArea, "CleanArea", 1);
|
|
}
|
|
}
|
|
|