UW2_PRC8/_module/nss/afx_area_exit.nss
Jaysyn904 5197ad9a4d Initial upload
Initial upload
2023-09-25 20:24:01 -04:00

106 lines
2.6 KiB
Plaintext

void TrashObject(object oObject)
{
/* search and destroy contents of body bag's, others just destroy */
if (GetObjectType(oObject) == OBJECT_TYPE_PLACEABLE) {
object oItem = GetFirstItemInInventory(oObject);
/* recursively trash all items inside container */
while (GetIsObjectValid(oItem))
{
TrashObject(oItem);
oItem = GetNextItemInInventory(oObject);
}
}
DestroyObject(oObject);
}
#include "afx_sfunc"
void main()
{
/* only execute for PC's entering an area */
if(!GetIsPC(GetExitingObject()) ) {
return; }
object oPC = GetExitingObject();
// First check to see if the ExitingObject is a PC or not
if(GetIsPC(oPC) == TRUE) {
afx_remove_effects(oPC,OBJECT_SELF);
}
if (!GetIsPC(oPC))
return;
// 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
// If they are the same, exit the function, as we do not need to
// check anymore PCs
if (OBJECT_SELF == GetArea(oPC))
return;
// If not, continue to the next PC
else oPC = GetNextPC();
}
// 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(OBJECT_SELF);
// Continue looping until there are no more objects left
while (oObject != OBJECT_INVALID)
{
// Test to see if oObject is a creature spawned from an encounter
// If so, destroy the object
if (GetIsEncounterCreature(oObject))
DestroyObject(oObject);
// Move on to the next object
oObject = GetNextObjectInArea(OBJECT_SELF);
/* only execute for PC's entering an area */
}
object oItem = GetFirstObjectInArea();
while (GetIsObjectValid(oItem))
{
int iObjectType = GetObjectType(oItem);
switch (iObjectType) {
case OBJECT_TYPE_PLACEABLE:
/* monster drop containers are tagged placeables */
if (GetTag(oItem) != "BodyBag") {
break; }
/* note: no break here, allow fall-through */
case OBJECT_TYPE_ITEM:
TrashObject(oItem); } /* destruct time has passed, trash the object */
/* note: no action if destruct time set but not passed */
oItem = GetNextObjectInArea();
}
}