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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |