Further file organization
Further file organization
This commit is contained in:
76
nwn/nwnprc/trunk/newspellbook/shd_myst_grpshdc.nss
Normal file
76
nwn/nwnprc/trunk/newspellbook/shd_myst_grpshdc.nss
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user