PRC8_fork/trunk/smp/phs_s_stormven.nss

75 lines
2.8 KiB
Plaintext
Raw Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Storm of Vengance
//:: Spell FileName PHS_S_StormVen
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Creates a storm, level 9,40M range, 120M AOE, and up to 10 rounds of concentration
until finnished.
On Enter: saving throw or deafened for 1d4x10 minutes.
2nd round: Acid rain, 1d6 damage to everyone in AOE. No save.
3rd round: 6 bolts of lightning. 6 enemies affected. 10d6 reflex electrcity.
4th round: Hailstones, for 5d6 points of bludgeoning damage. No save.
5th to 10th rounds: Speed reduced by 3/4ths, and 20% miss chance.
No ranged attacks in the cloud. Spells cast within the area are disrupted unless
the caster succeeds on a Concentration check against a DC equal to the storm
of vengeance<63>s save DC + the level of the spell the caster is trying to cast.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
As above, really!
Concentration checks are made here in 2 second delay command heartbeats,
which are checked for the integer each time in the heartbeat.
If concentration is broken, the AOE is destroyed.
Also note that only 1 AOE can be cast in an area. No overlapping.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check
if(!PHS_SpellHookCheck(PHS_SPELL_STORM_OF_VENGEANCE)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
location lTarget = GetSpellTargetLocation();
// We cannot actually cast it if it'll be in an exisiting AOE
object oOtherAOE = GetNearestObjectByTag(PHS_AOE_TAG_PER_STORM_OF_VENGEANCE, oCaster, 1);
object oArea = GetArea(oCaster);
// check distance and validility
if(GetIsObjectValid(oOtherAOE) &&
GetDistanceBetweenLocations(GetLocation(oOtherAOE), lTarget) <= 120.0)
{
FloatingTextStringOnCreature("You cannot create another storm which overlaps with an exsisting one", oCaster, FALSE);
return;
}
// Must be above ground, and outside, duh!
if(GetIsAreaAboveGround(oArea) == AREA_UNDERGROUND ||
GetIsAreaInterior(oArea))
{
FloatingTextStringOnCreature("You cannot cast Storm of Vengeance underground or inside!", oCaster, FALSE);
return;
}
// Declare effects
effect eAOE = EffectAreaOfEffect(PHS_AOE_PER_STORM_OF_VENGEANCE);
effect eImpact = EffectVisualEffect(VFX_FNF_STORM);
// Get 10 rounds worth of time
float fDuration = RoundsToSeconds(10);
// Apply AOE effects at location
PHS_ApplyLocationDurationAndVFX(lTarget, eImpact, eAOE, fDuration);
}