54 lines
2.0 KiB
Plaintext
54 lines
2.0 KiB
Plaintext
// Vampire buried heartbeat
|
|
void main()
|
|
{
|
|
object oTarget=GetLocalObject(OBJECT_SELF,"oVampire");
|
|
effect eEff;
|
|
float fDist;
|
|
object oNearby;
|
|
int nC=1;
|
|
int nT;
|
|
int nR;
|
|
if (oTarget==OBJECT_INVALID)
|
|
{
|
|
oNearby=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,OBJECT_SELF,nC,CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
|
|
if (GetLocalInt(oNearby,"nIsVampire")==TRUE)
|
|
{
|
|
oTarget=oNearby;
|
|
SetLocalObject(OBJECT_SELF,"oVampire",oNearby);
|
|
}
|
|
}
|
|
if ((GetIsDay()==TRUE||GetIsDawn()==TRUE)&&GetArea(oTarget)==GetArea(OBJECT_SELF))
|
|
{ // stay buried
|
|
SetLocalInt(oTarget,"nBuried",TRUE);
|
|
eEff=EffectCutsceneParalyze();
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEff,oTarget,10.0);
|
|
eEff=EffectInvisibility(INVISIBILITY_TYPE_IMPROVED);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEff,oTarget,10.0);
|
|
oNearby=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,OBJECT_SELF,nC,CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
|
|
fDist=GetDistanceBetween(oNearby,OBJECT_SELF);
|
|
while(oNearby!=OBJECT_INVALID&&fDist<15.0)
|
|
{ // cold chills
|
|
if (GetAlignmentGoodEvil(oNearby)==ALIGNMENT_GOOD)
|
|
{ // good player
|
|
nR=d20()+GetSkillRank(SKILL_SPOT,oNearby);
|
|
if (nR>18&&oNearby!=oTarget)
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_PALADIN,oNearby)>0)
|
|
SendMessageToPC(oNearby,"You feel the presence of a foul spirit nearby.");
|
|
else if (GetLevelByClass(CLASS_TYPE_WIZARD,oNearby)>0)
|
|
SendMessageToPC(oNearby,"You feel the presence of a powerful undead force nearby.");
|
|
else { SendMessageToPC(oNearby,"You feel cold chills."); }
|
|
}
|
|
} // good player
|
|
nC++;
|
|
oNearby=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,OBJECT_SELF,nC,CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
|
|
fDist=GetDistanceBetween(oNearby,OBJECT_SELF);
|
|
} // cold chills
|
|
} // stay buried
|
|
else
|
|
{ //
|
|
SetLocalInt(oTarget,"nBuried",FALSE);
|
|
DestroyObject(OBJECT_SELF);
|
|
} //
|
|
}
|