63 lines
1.9 KiB
Plaintext
63 lines
1.9 KiB
Plaintext
//
|
|
// NESS V8.0
|
|
// Spawn: Corpse Decay Script
|
|
//
|
|
//
|
|
// Do NOT Modify this File
|
|
// See 'spawn__readme' for Instructions
|
|
//
|
|
|
|
#include "spawn_functions"
|
|
|
|
void main()
|
|
{
|
|
object oHostBody = OBJECT_SELF;
|
|
object oLootCorpse = GetLocalObject(oHostBody, "Corpse");
|
|
object oItem;
|
|
float fCorpseDecay;
|
|
|
|
// Don't Decay while Someone is Looting
|
|
if (GetIsOpen(oLootCorpse) == TRUE)
|
|
{
|
|
// try again
|
|
fCorpseDecay = GetLocalFloat(oHostBody, "CorpseDecay");
|
|
DelayCommand(fCorpseDecay, ExecuteScript("spawn_corpse_dcy", oHostBody));
|
|
return;
|
|
}
|
|
|
|
// Don't Decay if not Empty and Timer not Expired
|
|
oItem = GetFirstItemInInventory(oLootCorpse);
|
|
int nDecayTimerExpired = GetLocalInt(oHostBody, "DecayTimerExpired");
|
|
|
|
// Don't think this should ever happen, since nDecayTimerExpired should
|
|
// be set to try by the command immediately beforethe one invoking this
|
|
// script!
|
|
if (oItem != OBJECT_INVALID && nDecayTimerExpired == FALSE)
|
|
{
|
|
fCorpseDecay = GetLocalFloat(oHostBody, "CorpseDecay");
|
|
DelayCommand(fCorpseDecay - 0.1, SetLocalInt(oHostBody, "DecayTimerExpired", TRUE));
|
|
DelayCommand(fCorpseDecay, ExecuteScript("spawn_corpse_dcy", oHostBody));
|
|
return;
|
|
}
|
|
|
|
int bDeleteLootOnDecay = GetLocalInt(oHostBody, "CorpseDeleteLootOnDecay");
|
|
|
|
// To avoid potential memory leaks, we clean everything that might be left on the
|
|
// original creatures body
|
|
NESS_CleanCorpse(oHostBody);
|
|
|
|
// Destroy all loot if indicated (R7 subflag)
|
|
if (bDeleteLootOnDecay)
|
|
{
|
|
NESS_CleanInventory(oLootCorpse);
|
|
}
|
|
|
|
// Destroy the invis corpse and drop a loot bag (if any loot left)
|
|
SetPlotFlag(oLootCorpse, FALSE);
|
|
DestroyObject(oLootCorpse);
|
|
|
|
// Destroy the visible corpse
|
|
SetObjectIsDestroyable(oHostBody, TRUE, FALSE, FALSE);
|
|
DestroyObject(oHostBody, 0.2);
|
|
}
|