/*  _________________________________________________________________________
   /                                                                         \
                         << Legend of the Red Dragon ReVisited >>

    Author:
        Dom Queron, dom(at)gulbsoft(dot)de, http://www.gulbsoft.de

    Description:

        Graveyard Themed Ambient Placeable Package (3) OnUsed Script
        Holds several OnUse Scripts in order to cut down the number of
        scripts in the module.

    version:
        $v1.0 00-00-00

    module information:
         http://gulbsoft.de/phpBB2x/g_viewcat.php?t=225


   \_________________________________________________________________________/

*/


int LORD_INT_XP_FOR_RETURNING_CORPSES = 50; // how much XP is awarded to a PC returning a corpse to an empty grave


int LORD_INT_GRAVESAYINGS = 22; //number of different texts available

// Grave Inscriptions ... <%name%> (random name) and <%killer%> (playername) are valid variables
string LORD_SZGRAVE_00 = "Here lies <%name%>";
string LORD_SZGRAVE_01 = "RIP <%name%>, you will never be forgotten!";
string LORD_SZGRAVE_02 = "<%name%>, farewell good friend";
string LORD_SZGRAVE_03 = "Goodbye dear <%name%>, we will remember you! ";
string LORD_SZGRAVE_04 = "This grave belongs to <%name%>, who died a very unfortunate death";
string LORD_SZGRAVE_05 = "<%name%>, may your bones rot here forever!";
string LORD_SZGRAVE_06 = "You cannot deciper what was once written on the grave";
string LORD_SZGRAVE_07 = "Here lies <%name%>'s sister, missed forever!";
string LORD_SZGRAVE_08 = "<%name%> lies here. Only the good die young!";
string LORD_SZGRAVE_09 = "<%name%>, who fell victim to the plague last year";
string LORD_SZGRAVE_10 = "This gravestone is too damaged to decipher what was inscribed on it";
string LORD_SZGRAVE_11 = "Rest in peace <%name%>, another young life lost too early";
string LORD_SZGRAVE_12 = "<%name%> the younger. He never scored" ;
string LORD_SZGRAVE_13 = "The <%name%> family grave" ;
string LORD_SZGRAVE_14 = "The inscription on this gravestone has been removed" ;
string LORD_SZGRAVE_15 = "Two unnamed adventurers rest here.";
string LORD_SZGRAVE_16 = "<%name%>'s cat.";
string LORD_SZGRAVE_17 = "The inscription says that <%name%>'s body rests in this grave";
string LORD_SZGRAVE_18 = "Here lies another victim of <%name%>'s bad ale";
string LORD_SZGRAVE_19 = "RIP <%name%>, may your soul safely travel to heaven";
string LORD_SZGRAVE_20 = "This is the last resting place of <%name%>. May he burn in hell";
string LORD_SZGRAVE_21 = "The remains of <%name%> rest here, it is said he was killed by <%killer%>";



// Ambient Comments ... <%area%> and <%playername%> are valid variables
string LORD_SZGYAMBIENT_00 = "I hate this graveyard odor!";
string LORD_SZGYAMBIENT_01 = "Why must graveyards always be that chilling?";
string LORD_SZGYAMBIENT_02 = "<%area%> ... a fitting description for this place.";
string LORD_SZGYAMBIENT_03 = "These graveyards! You always await the dead raising from their graves...";
string LORD_SZGYAMBIENT_04 = "This is not a nice place to work at!";
string LORD_SZGYAMBIENT_05 = "Only a necromancer could feel comfortable in this place.";


// Ambient Comments ... <%area%> and <%playername%> are valid variables
string LORD_SZGYAMBIENTC_00 = "I have a bad feeling about this place!";
string LORD_SZGYAMBIENTC_01 = "There is something wrong here ... I can feel it!";
string LORD_SZGYAMBIENTC_02 = "I know we should not have come here ... This place is creepy!";
string LORD_SZGYAMBIENTC_03 = "Something is amiss here ... I better be careful!";
string LORD_SZGYAMBIENTC_04 = "<%playername%> doesn't like this place ... it's creepy!";
string LORD_SZGYAMBIENTC_05 = "This place is haunted ... or something even worse. I feel it!";


void CreatePLCWrapper(string sTag, location lLoc, float fDestTime=0.0f)
{
    object oPlc = CreateObject(OBJECT_TYPE_PLACEABLE,sTag,lLoc);
    if (fDestTime>0.0f)
        DestroyObject(oPlc,fDestTime);
}

string ReplaceString(string sText, string sOld, string sNew)
{
    int nLen = GetStringLength(sOld);

    int nRep = FindSubString(sText,sOld);
    if (nRep != -1)
    {
        string sLeft = GetStringLeft(sText,nRep);
        string sRight = GetStringRight(sText,GetStringLength(sText)-nRep-(nLen));
        sText = sLeft + sNew + sRight;
    }
    return sText;
}

// create some random grave treasure
int GyardCreateRandomTreasure(object oTarget)
{
    int n = d20();
    string sTag ="";
    switch (n)
    {
        case 1:  sTag = "NW_IT_MSMLMISC13";  break; // skeleton knuckles
        case 2:  sTag = "nw_it_gold001";  break; // goldpiece
        case 3:  sTag = "nw_it_msmlmisc21"; break; // rags
        case 4:  sTag = "nw_it_thnmisc001"; break;// empty bottle
        case 5:  sTag = "nw_cloth023"; break; // rags
        case 6:  sTag = "nw_cloth009"; break;
        case 7:  sTag = "NW_IT_MRING023"; break; // gold ring
        case 8:  sTag = "nw_it_gem003"; break; // gem
        case 9:  sTag = "nw_it_mpotion021"; break; // ale
        case 10: sTag = "nw_it_mpotion023"; break; // wine
    }

    if (sTag != "")
    {
        CreateItemOnObject(sTag,oTarget);
        if (d20()<10)
            CreateItemOnObject("nw_it_gold001",oTarget, d10());

        return TRUE;
    }

return FALSE;
}

string LordGetAmbGraveText(object oGrave = OBJECT_SELF)
{
   int nSaying = GetLocalInt(oGrave,"LORD_GRAVE_SAYING");
   object oUser = GetLastUsedBy();
   string sName = GetLocalString(oGrave,"LORD_GRAVE_NAME");
   if (nSaying  == 0)
   {
        nSaying = Random(LORD_INT_GRAVESAYINGS);
        SetLocalInt(oGrave,"LORD_GRAVE_SAYING",nSaying );
   }

   if (sName =="")
   {
        sName = RandomName();
        SetLocalString(oGrave,"LORD_GRAVE_NAME",sName);
        SetLocalString(oGrave,"LORD_GRAVE_FIRSTUSE_NAME",GetName(oUser));
   }

    string sText = "Unlabeled Grave";
    switch (nSaying)
    {
        case 1: sText = LORD_SZGRAVE_00;break;
        case 2: sText = LORD_SZGRAVE_01;break;
        case 3: sText = LORD_SZGRAVE_02;break;
        case 4: sText = LORD_SZGRAVE_03;break;
        case 5: sText = LORD_SZGRAVE_04;break;
        case 6: sText = LORD_SZGRAVE_05;break;
        case 7: sText = LORD_SZGRAVE_06;break;
        case 8: sText = LORD_SZGRAVE_07;break;
        case 9: sText = LORD_SZGRAVE_08;break;
        case 10: sText = LORD_SZGRAVE_09;break;
        case 11: sText = LORD_SZGRAVE_10;break;
        case 12:  sText = LORD_SZGRAVE_11;break;
        case 13: sText = LORD_SZGRAVE_12;break;
        case 14: sText = LORD_SZGRAVE_13;break;
        case 15:  sText = LORD_SZGRAVE_14;break;
        case 16: sText = LORD_SZGRAVE_15;break;
        case 17:  sText = LORD_SZGRAVE_16;break;
        case 18: sText = LORD_SZGRAVE_17;break;
        case 19: sText = LORD_SZGRAVE_18;break;
        case 20:  sText = LORD_SZGRAVE_19;break;
        case 21:  sText = LORD_SZGRAVE_20;break;
        case 22:  sText = LORD_SZGRAVE_21;break;
    }

    sText = ReplaceString(sText, "<%name%>", sName);
    string sKiller = GetLocalString(oGrave,"LORD_GRAVE_FIRSTUSE_NAME");
    sText = ReplaceString(sText, "<%killer%>", sKiller);

    return sText;
}


void DoBurnObject()
{
            object oUser = GetLastUsedBy();
            AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0f,2.0f));

            SetPlotFlag(OBJECT_SELF,FALSE);
            effect eFlame2 = EffectVisualEffect(VFX_IMP_FLAME_M);
            effect eSmoke =  EffectVisualEffect(VFX_FNF_SMOKE_PUFF);
            object oFlame = CreateObject(OBJECT_TYPE_PLACEABLE,"plc_flamesmall",GetLocation(OBJECT_SELF));
            DelayCommand(2.0f,PlaySound("al_na_firesmldr"));
            DelayCommand(2.0f,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSmoke, OBJECT_SELF));
            DestroyObject(oFlame,5.0f);
            DelayCommand(4.0f,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSmoke, OBJECT_SELF));
            oFlame = CreateObject(OBJECT_TYPE_PLACEABLE,"plc_flamemedium",GetLocation(OBJECT_SELF));
            DestroyObject(oFlame,8.0f);
            DelayCommand(4.0f,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eFlame2, OBJECT_SELF));
            DelayCommand(6.0f,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSmoke, OBJECT_SELF));
            DelayCommand(7.0f,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eFlame2, OBJECT_SELF));
            DestroyObject(OBJECT_SELF,8.0f);
            oFlame = CreateObject(OBJECT_TYPE_PLACEABLE,"plc_weathmark",GetLocation(OBJECT_SELF));
            DestroyObject(oFlame, 30.0f);
}

void main()
{

    string sTag = GetTag(OBJECT_SELF);
    object oUser = GetLastUsedBy();

    // Random Gravestone
    if (sTag == "lordo_randgrave")
    {
        ActionSpeakString(LordGetAmbGraveText());
        return;
    }
    // Random Gravestone2
    if (sTag == "lordo_randgraveb")
    {
        if (GetLocalInt(OBJECT_SELF,"NW_L_AMION") == 0)
    {
        PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
        DelayCommand(0.4,SetPlaceableIllumination(OBJECT_SELF, TRUE));
        SetLocalInt(OBJECT_SELF,"NW_L_AMION",1);
        DelayCommand(0.5,RecomputeStaticLighting(GetArea(OBJECT_SELF)));
    }
    else
    {
        PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
        DelayCommand(0.4,SetPlaceableIllumination(OBJECT_SELF, FALSE));
        SetLocalInt(OBJECT_SELF,"NW_L_AMION",0);
        DelayCommand(0.9,RecomputeStaticLighting(GetArea(OBJECT_SELF)));
    }
        DelayCommand(1.2f,ActionSpeakString(LordGetAmbGraveText()));
        return;
    }

    // Empty Grave

    else if (sTag == "lordo_egrave")
    {

        if (GetItemPossessedBy(oUser,"lordi_corpse") != OBJECT_INVALID)
        {
         AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0f,3.0f));
         DelayCommand(0.5f, PlaySound("as_cv_mineshovl3"));
         DestroyObject(GetItemPossessedBy(oUser,"lordi_corpse"), 2.0f);
         DelayCommand(3.0f, GiveXPToCreature(oUser, LORD_INT_XP_FOR_RETURNING_CORPSES));
         location lLoc = GetLocation(OBJECT_SELF);
         DestroyObject(OBJECT_SELF, 3.0f);
         DelayCommand(3.5f,CreatePLCWrapper("lordo_randgrave2",lLoc));
        }
        else
        {
            AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_BOW));
            if (d2()==1)
                AssignCommand(oUser, ActionSpeakString("A fresh empty grave, I wonder for whom..."));
            else
                AssignCommand(oUser, ActionSpeakString("This grave is empty"));
        }

    }

    // Random Grave
    else if (sTag == "lordo_randgrave2")
    {
        ActionStartConversation(oUser,"",TRUE);
        return;
    }
    else if (sTag == "lordo_corpsewag")
    {
         AssignCommand(oUser, ActionSpeakString("Lets see..."));
         AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD,1.0f,3.0f));
         effect eInsects = EffectAreaOfEffect(AOE_PER_CREEPING_DOOM,"lord_dummy","lord_dummy","lord_dummy");
         DelayCommand(0.1f,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eInsects,GetLocation(OBJECT_SELF),4.0f));
         DelayCommand(3.0f,PlaySound("al_an_flies1"));
         if (d2()==1)
             AssignCommand(oUser, ActionSpeakString("This is ... disgusting!"));
         else
             AssignCommand(oUser, ActionSpeakString("That smell ... arg!"));

         if (FortitudeSave(oUser,14,SAVING_THROW_TYPE_POISON) == 0)
         {
             string sSnd = "as_pl_hangoverm1";
             if (GetGender(oUser) != GENDER_MALE)
                sSnd = "as_pl_hangoverf1";

             AssignCommand(oUser,PlaySound(sSnd));
             AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_BOW,1.0f,3.0f));
             effect eVomit = EffectVisualEffect(VFX_COM_BLOOD_LRG_GREEN);
             DelayCommand(3.0f, PlaySound(sSnd));
             DelayCommand(3.0f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVomit,oUser,15.0f));
             DelayCommand(3.2f,FloatingTextStringOnCreature("*vomit*", oUser));
             DelayCommand(3.3f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVomit,oUser,15.0f));
             AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK,1.0f,5.0f));
             AssignCommand(oUser, ActionSpeakString("I'm just not used to this!"));
        }
        else
        {
          AssignCommand(oUser,PlayVoiceChat(VOICE_CHAT_LAUGH));
          AssignCommand(oUser,ActionWait(1.5f));
          AssignCommand(oUser,ActionSpeakString ("Good that I'm blessed with a strong stomach"));
        }

       return;
    }
    // Corpse
    else if (sTag == "lordo_corpse")
    {
         if (FindSubString(GetStringUpperCase(GetName(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oUser))),"TORCH") != -1)
         {
            AssignCommand(oUser, ActionSpeakString("Ashes to ashes, dust to dust..."));
            DoBurnObject();
            return;
         }
        AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.5f,3.0f));
        DestroyObject(OBJECT_SELF);
        CreateItemOnObject("lordi_corpse",oUser);
        return;
    }
    // Impaled Corpse
    else if (sTag == "lordo_impcorpse")
    {

            if (GetAlignmentLawChaos(oUser) == ALIGNMENT_CHAOTIC)
            {
                 if (FindSubString(GetStringUpperCase(GetName(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oUser))),"TORCH") != -1)
                 {
                    AssignCommand(oUser, ActionSpeakString("Let's roast Spikey a bit!"));
                    DoBurnObject();
                    return;
                 }

                 AssignCommand(oUser, ActionSpeakString("Let's check Spikey for valuables..."));
                 {
                   AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.5f,3.0f));
                   effect eVomit = EffectVisualEffect(VFX_COM_BLOOD_LRG_RED);
                   DelayCommand(1.5f,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVomit,OBJECT_SELF));
                   DelayCommand(2.3f,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVomit,OBJECT_SELF));
                   DelayCommand(2.3f,AssignCommand(oUser,PlayVoiceChat(VOICE_CHAT_LAUGH)));
                   DelayCommand(2.5f,AssignCommand(oUser, ActionSpeakString("Nothing ... except for that stake")));

                 }
            }
            else if (GetAlignmentLawChaos(oUser) == ALIGNMENT_NEUTRAL)
            {
                     if (FindSubString(GetStringUpperCase(GetName(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oUser))),"TORCH") != -1)
                     {
                        AssignCommand(oUser, ActionSpeakString("Back to dust, poor fellow!"));
                        DoBurnObject();
                        return;
                     }

                  AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT));
                  AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT));
                  AssignCommand(oUser,ActionSpeakString("What a waste of valuable human resources"));
            }
            else if (GetAlignmentLawChaos(oUser) == ALIGNMENT_LAWFUL)
            {
                  AssignCommand(oUser,ActionSpeakString("Indeed an act of pure evil and vileness!!"));
                  AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL,1.5f, 3.0f));
                  AssignCommand(oUser,ActionSpeakString("This man deserves better, I shall remove him from that spike!"));
                  AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.5f,3.0f));
                  location lLoc = GetLocation(OBJECT_SELF);
                  DelayCommand(4.5f, DestroyObject(OBJECT_SELF,0.1f));
                  DelayCommand(4.6f, CreatePLCWrapper("lordo_corpse",lLoc));

            }


    }
    //diseased corpse
    else if (sTag == "lordo_dcorpse")
    {

         if (FindSubString(GetStringUpperCase(GetName(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oUser))),"TORCH") != -1)
         {
            AssignCommand(oUser, ActionSpeakString("I better burn this corpse before somebody gets infected"));
            AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0f,2.0f));

            DoBurnObject();

         }
            if (GetLocalInt(OBJECT_SELF,"LORD_OBJECT_TRIGGERED"))
         {
             AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD));
             AssignCommand(oUser, ActionSpeakString("This corpse looks maggot infested and already looted, I shouldn't touch it"));
             return;
         }

         AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0f,4.0f));

         effect eInsects = EffectAreaOfEffect(AOE_PER_CREEPING_DOOM,"lord_dummy","lord_dummy","lord_dummy");
         DelayCommand(2.0f,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eInsects,GetLocation(OBJECT_SELF),4.0f));
         DelayCommand(2.0f,PlaySound("al_an_flies1"));

         if (d2()==1)
             AssignCommand(oUser, ActionSpeakString("Eeek, insects!"));
         else
            AssignCommand(oUser, PlayVoiceChat(VOICE_CHAT_BADIDEA));

         if (FortitudeSave(oUser,14,SAVING_THROW_TYPE_DISEASE) == 0)
         {
            effect eDisease;
            if (d2()==1)
                eDisease = EffectDisease(DISEASE_BURROW_MAGGOTS);
            else
                eDisease = EffectDisease(DISEASE_FILTH_FEVER);

            ApplyEffectToObject(DURATION_TYPE_INSTANT, eDisease,oUser);
        }

        object oItem = GetFirstItemInInventory();
        if (oItem == OBJECT_INVALID)
        {
           if (d2()==1)
                AssignCommand(oUser, ActionSpeakString("Nothing except maggots!"));
           else
               AssignCommand(oUser, ActionSpeakString("Nothing, I should burn this insect infested corpse"));

        }
        SetLocalInt(OBJECT_SELF,"LORD_OBJECT_TRIGGERED", TRUE);
        return;

    }
    // Torture Equipment
    else if (sTag == "lordo_torteq1")
    {
       effect eDmg = EffectDamage(1);
       object oBlood;
       int n = Random(6);
       switch (n)
       {
           case 0:
                AssignCommand(oUser,ActionSpeakString("Poor fellow, looks like a really squishy experience"));
                AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0f,4.0f));
                DelayCommand(1.0f,ActionDoCommand(PlaySound("as_cv_winch1")));
                AssignCommand(oUser,ActionSpeakString("It's jammed!"));
                break;
           case 1:
                AssignCommand(oUser,ActionSpeakString("I wonder how this works..."));
                AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID));
                AssignCommand(oUser,ActionDoCommand(PlaySound("bf_med_insect")));
                AssignCommand(oUser,PlayVoiceChat(VOICE_CHAT_PAIN1));
                ApplyEffectToObject(DURATION_TYPE_INSTANT,eDmg, oUser);
                DelayCommand(0.6f,CreatePLCWrapper("plc_bloodstain",GetLocation(oUser),10.0f));
                DelayCommand(0.6f,FloatingTextStringOnCreature("*Squish*", oUser));
                DelayCommand(1.0f, AssignCommand(oUser,ActionSpeakString("Wow, watch it, this thing is dangerous!")));
                break;
           case 2:
                AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0f,4.0f));
                AssignCommand(oUser,ActionSpeakString("This torture equipment seems quite successful in making people remain silent"));
                break;
           case 3:
                AssignCommand(oUser,PlayVoiceChat(VOICE_CHAT_BADIDEA));
                break;
           case 4:
                AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID));
                AssignCommand(oUser,ActionDoCommand(PlaySound("bf_med_insect")));
                AssignCommand(oUser,PlayVoiceChat(VOICE_CHAT_PAIN2));
                ApplyEffectToObject(DURATION_TYPE_INSTANT,eDmg, oUser);
                DelayCommand(0.6f,FloatingTextStringOnCreature("*Squish*", oUser));
                DelayCommand(0.6f,CreatePLCWrapper("plc_bloodstain",GetLocation(oUser),10.0f));
                DelayCommand(1.0f, AssignCommand(oUser,ActionSpeakString("Ouch, my fingers!")));

                break;
           case 5:
               AssignCommand(oUser,ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD));
               AssignCommand(oUser,ActionSpeakString("A most uncomfortable and unfortunate death"));
               break;
       }
       return;

    }
    // ambient comment trigger
    else if (sTag == "lordt_gyardcom1")
    {


        int nBreak = GetLocalInt(OBJECT_SELF,"LORD_TRIGGER_SLEEPING");
        if (nBreak)
            return;

        object oPC = GetEnteringObject(); // I know it is ugly as the script is labeled *_used, but on the other hand,
                                          // its one less script in the module <g>

        if (!GetIsPC(oPC) || GetIsDM(oPC)) // we do not want monster's or DM's  to comment on the grayeyard they live in ...
            return;
        int n = Random(6);
        string sText;
        switch (n)
        {
           case 0: sText =LORD_SZGYAMBIENT_00;
                   break;
           case 1: sText =LORD_SZGYAMBIENT_01;
                   break;
           case 2: sText =LORD_SZGYAMBIENT_02;
                   break;
           case 3: sText =LORD_SZGYAMBIENT_03;
                   break;
           case 4: sText =LORD_SZGYAMBIENT_04;
                   break;
           case 5: sText =LORD_SZGYAMBIENT_05;
                   break;
        }
        //replace variables
        sText =     ReplaceString(sText, "<%playername%>", GetName(oPC));
        sText =     ReplaceString(sText, "<%area%>", GetName(GetArea(oPC)));
        if (!GetIsInCombat(oPC))
            AssignCommand(oPC, ClearAllActions());
        AssignCommand(oPC, ActionSpeakString(sText));
        // deactivate trigger
        SetLocalInt(OBJECT_SELF,"LORD_TRIGGER_SLEEPING",TRUE);

        //reactivate trigger after 20 seconds
        DelayCommand(20.0f,DeleteLocalInt(OBJECT_SELF,"LORD_TRIGGER_SLEEPING"));
    }
    else if (sTag == "lordt_gyardcom2")
    {


        int nBreak = GetLocalInt(OBJECT_SELF,"LORD_TRIGGER_SLEEPING");
        if (nBreak)
            return;

        object oPC = GetEnteringObject(); // I know it is ugly as the script is labeled *_used, but on the other hand,
                                          // its one less script in the module <g>

        if (!GetIsPC(oPC) || GetIsDM(oPC)) // we do not want monster's or DM's  to comment on the grayeyard they live in ...
            return;
        int n = Random(6);
        string sText;
        switch (n)
        {
           case 0: sText =LORD_SZGYAMBIENTC_00;
                   break;
           case 1: sText =LORD_SZGYAMBIENTC_01;
                   break;
           case 2: sText =LORD_SZGYAMBIENTC_02;
                   break;
           case 3: sText =LORD_SZGYAMBIENTC_03;
                   break;
           case 4: sText =LORD_SZGYAMBIENTC_04;
                   break;
           case 5: sText =LORD_SZGYAMBIENTC_05;
                   break;
        }
        //replace variables
        sText =     ReplaceString(sText, "<%playername%>", GetName(oPC));
        sText =     ReplaceString(sText, "<%area%>", GetName(GetArea(oPC)));
        if (!GetIsInCombat(oPC))
            AssignCommand(oPC, ClearAllActions());
        AssignCommand(oPC, ActionSpeakString(sText));
        // deactivate trigger
        SetLocalInt(OBJECT_SELF,"LORD_TRIGGER_SLEEPING",TRUE);

        //reactivate trigger after 20 seconds
        DelayCommand(20.0f,DeleteLocalInt(OBJECT_SELF,"LORD_TRIGGER_SLEEPING"));


    }
    else if (sTag == "lordo_bones" || sTag == "lordo_corpse3")
    {
       if (GetLocalInt(OBJECT_SELF,"NW_L_DOONCE") == 0)
       {
        if (!GyardCreateRandomTreasure(OBJECT_SELF))
        {
            SendMessageToPC(oUser,"As you touch the remains of a human body, they crumble to dust");
            DestroyObject(OBJECT_SELF);
        }
        SetLocalInt(OBJECT_SELF,"NW_L_DOONCE",1);
       }
       else
       {
            DestroyObject(OBJECT_SELF);
            SendMessageToPC(oUser,"As you touch the remains of a human body, they crumble to dust");
       }


    }
    else if (sTag == "lordo_gmemo")
    {
        string sDeity = GetName(OBJECT_SELF);
        SendMessageToPC(oUser, "You take some time to pray at the " + sDeity );
        AssignCommand(oUser,ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE,1.0f,6.0f));
        effect eLight =  EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_10);
        DelayCommand(6.0f, SendMessageToPC(oUser,"You feel enlighted!"));
        DelayCommand(6.0f,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLight,oUser,45.0f));
    }




}