PWE_PRC8/_module/nss/j_inc_ondeath.nss
Jaysyn904 ee1dc35889 Initial Commit
Initial Commit
2025-04-03 10:29:41 -04:00

90 lines
2.8 KiB
Plaintext

// Include for death, to speed it up.
// Returns True if the specific int is there.
int GetSpawnInCondition(int nCondition);
// This will destroy the body, if still dead.
void DeathCheck();
// This will delete all things, local things, and un-droppable items, before they fade out.
void DeleteAllThings();
// Used in DeleteAllThings.
void ClearSlot(int iSlotID);
// This is for the spawn in conditions.
int NW_FLAG_DEATH_EVENT = 0x00020000;
int GetSpawnInCondition(int nCondition)
{
int nPlot = GetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER");
if(nPlot & nCondition)
{
return TRUE;
}
return FALSE;
}
void DeathCheck()
{
if(GetIsObjectValid(GetArea(OBJECT_SELF)))// Trying to not crash limbo.
{
if(GetIsDead(OBJECT_SELF) && GetLocalInt(OBJECT_SELF, "IS_DEAD") > 0)
{
DeleteLocalInt(OBJECT_SELF, "IS_DEAD");
DeleteAllThings();
SetIsDestroyable(TRUE, FALSE, FALSE);
DestroyObject(OBJECT_SELF);
}
DeleteLocalInt(OBJECT_SELF, "IS_DEAD");
}
else
{
DelayCommand(60.0, DeathCheck());
}
}
void ClearSlot(int iSlotID)
{
object oItem = GetItemInSlot(iSlotID);
if (GetIsObjectValid(oItem) && !GetDroppableFlag(oItem))
DestroyObject(oItem);
}
void DeleteAllThings()
{
// Destroy all equipped slots - 0 to 17
int iSlotID;
for (iSlotID = 0; iSlotID < 18; iSlotID++)
{
ClearSlot(iSlotID);
}
// Destroy all inventory items
object oItem = GetFirstItemInInventory();
while(GetIsObjectValid(oItem))
{
if (!GetDroppableFlag(oItem))
DestroyObject(oItem);
oItem = GetNextItemInInventory();
}
// Delete all locals that should exsist, or may exsist, from my AI things.
DeleteLocalObject(OBJECT_SELF, "TO_ATTACK");
DeleteLocalObject(OBJECT_SELF, "TO_FLEE");
DeleteLocalInt(OBJECT_SELF, "NW_GENERIC_DRAGONS_BREATH");
DeleteLocalInt(OBJECT_SELF, "AI_WING_BUFFET");
DeleteLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER");
DeleteLocalInt(OBJECT_SELF, "AI_MORALE");
DeleteLocalInt(OBJECT_SELF, "AI_INTELLIGENCE");
DeleteLocalInt(OBJECT_SELF, "AI_HEALING_ALLIES_PERCENT");
DeleteLocalInt(OBJECT_SELF, "AI_CORPSE_DESTROY_TIME");
DeleteLocalInt(OBJECT_SELF, "AI_ANIMATIONS");
DeleteLocalInt(OBJECT_SELF, "ROUNDS_UNTIL_SPELL_TRIGGER_RELEASE");
DeleteLocalInt(OBJECT_SELF, "AI_SPELL_TRIGGERS");
DeleteLocalFloat(OBJECT_SELF, "RANGE_TO_MOVE_TO");
// Time stop has up to 25
int iCnt = 1;
int iLast = GetLocalInt(OBJECT_SELF, "TIME_STOP_LAST_" + IntToString(iCnt));
while(iCnt < 25 && iLast != 0)
{
DeleteLocalInt(OBJECT_SELF, "TIME_STOP_LAST_" + IntToString(iCnt));
iCnt++;
iLast = GetLocalInt(OBJECT_SELF, "TIME_STOP_LAST_" + IntToString(iCnt));
}
}