Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
91 lines
3.3 KiB
Plaintext
91 lines
3.3 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Wail of the Banshee
|
|
//:: Spell FileName PHS_S_WailofBnsh
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
13.33M radius! 8M range, Death, sonic and fortitude negates - death save.
|
|
1 creature/level. Spell resistance = yes.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Massive AOE!
|
|
|
|
Anyway, this does death to all allies or enemies, who are not dead,
|
|
who can hear us (not the other way around) so do not have to be in LOS.
|
|
|
|
Visual on self, however!
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_WAIL_OF_THE_BANSHEE)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();// Should be OBJECT_SELF's location
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|
float fDelay, fDistance;
|
|
int nCnt, nTargetsAffected;
|
|
|
|
// Declare effects
|
|
effect eDeath = EffectDeath();
|
|
effect eDeathVis = EffectVisualEffect(VFX_IMP_DEATH);
|
|
|
|
// Apply AOE visual
|
|
effect eImpact = EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES);
|
|
PHS_ApplyLocationVFX(lTarget, eImpact);
|
|
|
|
// Get nearest to location, up to nCasterLevel of targets, and loop
|
|
nCnt = 1;
|
|
oTarget = GetNearestObjectToLocation(OBJECT_TYPE_CREATURE, lTarget, nCnt);
|
|
while(GetIsObjectValid(oTarget) && nTargetsAffected < nCasterLevel)
|
|
{
|
|
// Check distance
|
|
fDistance = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget));
|
|
if(fDistance <= 13.33)
|
|
{
|
|
fDelay = fDistance/30;
|
|
// Check reaction and make sure it is not us
|
|
if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oCaster &&
|
|
PHS_GetIsAliveCreature(oTarget))
|
|
{
|
|
// Signal spell cast at
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_WAIL_OF_THE_BANSHEE);
|
|
|
|
// Check if they can hear us!
|
|
if(GetObjectHeard(oCaster, oTarget) &&
|
|
PHS_GetCanHear(oTarget))
|
|
{
|
|
// Check spell resistance and immunity
|
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Fortitude death save
|
|
if(!PHS_SavingThrow(SAVING_THROW_FORT, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_DEATH, oCaster, fDelay))
|
|
{
|
|
// Apply death as failed
|
|
DelayCommand(fDelay, PHS_ApplyInstantAndVFX(oTarget, eDeathVis, eDeath));
|
|
}
|
|
}
|
|
}
|
|
// Add one to targets affected (even if they cannot hear it). It
|
|
// only affects any alive things.
|
|
nTargetsAffected++;
|
|
}
|
|
nCnt++;
|
|
oTarget = GetNearestObjectToLocation(OBJECT_TYPE_CREATURE, lTarget, nCnt);
|
|
}
|
|
else
|
|
{
|
|
nCnt = nCasterLevel;
|
|
}
|
|
}
|
|
}
|