//Script Name: cleartown (Horse Edition!) ////////////////////////////////////////// //Created By: Genisys (Guile) //Created On: 9/17/08 ///////////////////////////////////////// /* This script goes in the OnExit event for all areas within your module, if you want to clean inventories of placeable objects, in some areas I suggest you save this under a new name FIRST! This script destroys all horses which are not assigned to a PC left in the area IF there are no more PCs in the area the script will fire. */ //////////////////////////////////////// //Required Horse Include #include "x3_inc_horse" //////////////////////////////////////// //OPTIONS///// //Note: This is a very important script, it should go on the exit event of //all area you create. (with some exceptions) This reduces lagg too! //IMPORTANT: If you change this option change the script name! (Save As) // Set this to TRUE if you want placeable object's inventories cleared int nClearPlaceInv = FALSE; // Set the amount of time to wait for cleaning here in seconds float fDelayTime = 5.0; /////////////////WARNING: DON'T TOUCH ANYTHING BELOW!!!//////////// void CleanArea(object oArea) { object oTrash = GetFirstObjectInArea(oArea); object oInvItem; //Check for PCs object oPC = GetFirstPC(); while (GetIsObjectValid(oPC)) { if(!GetIsDM(oPC)||!GetIsDMPossessed(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); } } } else if (GetIsEncounterCreature(oTrash) || sTagPrefix == "PWFSE_SPAWNERID") { AssignCommand(oTrash, SetIsDestroyable(TRUE)); DestroyObject(oTrash, 0.0); } // If it's a mountable creature! else if (HorseGetIsAMount(oTrash)) { //If the mount has no master! if(HorseGetOwner(oTrash)== OBJECT_INVALID) { 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); } }