PRC8/nwn/nwnprc/trunk/newspellbook/shd_myst_grpshdc.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

77 lines
2.9 KiB
Plaintext

/*
15/02/19 by Stratovarius
Curtain of Shadows
Initiate, Veil of Shadows
Level/School: 5th/Transmutation
Range: Close (25 ft. + 5 ft./2 levels)
Effect: Shadowy wall
Duration: 1 minute/level
Saving Throw: None
Spell Resistance: No
You create a wall of frigid shadow that wracks all who pass through it with cold.
You create a wall of shadow. Any creature passing through the wall takes 1d6 points of cold damage per caster level (maximum 15d6).
*/
void DecrementTentacleCount(object oTarget, string sVar)
{
SetLocalInt(oTarget, sVar, GetLocalInt(oTarget, sVar) - 1);
}
#include "shd_inc_shdfunc"
#include "prc_inc_combmove"
void main()
{
if (!GetIsObjectValid(GetAreaOfEffectCreator()))
{
DestroyObject(OBJECT_SELF);
return;
}
//Declare major variables
object oShadow = GetAreaOfEffectCreator();
struct mystery myst = GetLocalMystery(oShadow, MYST_HOLD_MYST);
object oTarget = GetFirstInPersistentObject();
while(GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oShadow) && GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL) != TRUE)
{
//Fire cast spell at event for the target
SignalEvent(oTarget, EventSpellCastAt(oShadow, SPELL_EVARDS_BLACK_TENTACLES));
//now do grappling and stuff
int nGrappleSucessful = FALSE;
//this spell doesnt need to make a touch attack
//as defined in the spell
int nAttackerGrappleMod = myst.nShadowcasterLevel + 8;
nGrappleSucessful = _DoGrappleCheck(OBJECT_INVALID, oTarget, nAttackerGrappleMod);
if(nGrappleSucessful)
{
//if already being grappled, apply damage
if(GetLocalInt(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF)))
{
//apply the damage
int nDamage = MetashadowsDamage(myst, 6, 1, 4);
effect eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_PLUS_TWO);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
//now being grappled
AssignCommand(oTarget, ClearAllActions());
effect eHold = EffectCutsceneImmobilize();
effect eEntangle = EffectVisualEffect(VFX_DUR_SPELLTURNING_R);
effect eLink = EffectLinkEffects(eHold, eEntangle);
//eLink = EffectKnockdown();
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
SetLocalInt(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF),
GetLocalInt(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF))+1);
DelayCommand(6.1, DecrementTentacleCount(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF)));
}
}
oTarget = GetNextInPersistentObject();
}
}