HiddenTradition_PRC8/_module/nss/lts_ambplc3_used.nss
2024-06-20 15:47:42 -04:00

594 lines
24 KiB
Plaintext

/* _________________________________________________________________________
/ \
<< 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));
}
}