#include "X_O2_CONINCLUDE"



void RespawnObject(string sTag, int iType, location lLoc) {

// ResRef must be derivable from Tag
string sResRef = GetStringLowerCase(GetStringLeft(sTag, 16));

CreateObject(iType, sResRef, lLoc);

}



void main()
{
     object oLastOpener = GetLastOpener();

     ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNegativeLevel(5), oLastOpener, 600.0);

    if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0) {
       return; }
       SetLocalInt(OBJECT_SELF, "GT_MAX_LEVEL", 20);



    // * May 13 2002: Must create appropriate treasure for each
    // * faction member in the party.
    if (GetIsObjectValid(oLastOpener) == TRUE)
    {
        object oMember = GetFirstFactionMember(oLastOpener, TRUE);
        while (GetIsObjectValid(oMember) == TRUE)
        {
             object oContainer = OBJECT_SELF;
            GenerateBossTreasure(oMember, OBJECT_SELF);
            GenerateBossTreasure(oMember, OBJECT_SELF);
            GenerateBossTreasure(oMember, OBJECT_SELF);
            oMember = GetNextFactionMember(oLastOpener, TRUE);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUNBEAM), oContainer);
        }
        SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);
    }
    ShoutDisturbed();



string sTag = GetTag(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);

// For creatures, save the location at spawn-time as a local location and
// use it instead. Otherwise, the creature will respawn where it died.
location lLoc = GetLocation(OBJECT_SELF);

float fDelay = 1000.0;  // 1000 second delay

DestroyObject(OBJECT_SELF, fDelay);
AssignCommand(GetArea(OBJECT_SELF), DelayCommand(fDelay, RespawnObject(sTag, iType, lLoc)));
}