PRC8_fork/nwn/nwnprc/trunk/smp/phs_s_wavesofexh.nss

70 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Waves of Exhaustion
//:: Spell FileName PHS_S_WavesOfExh
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Necromancy
Level: Sor/Wiz 7
Components: V, S
Casting Time: 1 standard action
Range: 20M (60 ft.)
Area: Cone-shaped burst
Duration: Instantaneous
Saving Throw: No
Spell Resistance: Yes
Waves of negative energy cause all living creatures in the spell<6C>s area to
become exhausted. This spell has no effect on a creature that is already
exhausted.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Easy, using PHS_ApplyFatigue(), and thats that.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check
if(!PHS_SpellHookCheck(PHS_SPELL_WAVES_OF_EXHAUSTION)) return;
// Delcare major variables
object oCaster = OBJECT_SELF;
object oTarget;
location lTarget = GetSpellTargetLocation();
float fDelay;
// Declare effects
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
// Cycle through all objects in the 20M cone.
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 20.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
// PvP check
if(!GetIsReactionTypeFriendly(oTarget) &&
// Make sure they are not immune to spells
!PHS_TotalSpellImmunity(oTarget))
{
// Signal event
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_WAVES_OF_EXHAUSTION);
// Get delay
fDelay = GetDistanceToObject(oTarget)/20;
// Spell resistance check
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
{
// Apply exhaustion
DelayCommand(fDelay - 0.1, PHS_ApplyFatigue(oTarget, TRUE));
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eVis));
}
}
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 20.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}