PRC8/nwn/nwnprc/trunk/newspellbook/shd_myst_dskdwna.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

106 lines
4.8 KiB
Plaintext

/*
12/02/19 by Stratovarius
Dusk and Dawn, OnEnter
Apprentice, Shutters and Clouds
Level/School: 1st/Evocation
Range: Close (25 ft. + 5 ft./2 levels)
Area: 20-ft.-radius emanation centered on a point in space
Duration: 10 minutes/level (D)
Saving Throw: None
Spell Resistance: No
By drawing shade from the Plane of Shadow, or banishing the shadows back to it, you control the level of illumination in the area.
You make a dark area lighter or a light area darker, blanketing the affected area in shadowy illumination. Creatures with darkvision can see through this area normally.
*/
#include "shd_inc_shdfunc"
void DeadlyShade(object oTarget, struct mystery myst);
void main()
{
object oShadow = GetAreaOfEffectCreator();
object oTarget = GetEnteringObject();
object oAoE = OBJECT_SELF;
effect eDark = EffectDarkness();
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eLink = EffectLinkEffects(eDark, eDur);
struct mystery myst = GetLocalMystery(oShadow, MYST_HOLD_MYST+"6");
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oShadow))
{
//Fire cast spell at event for the target
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELL_DARKNESS));
//Apply reduced movement effect and VFX_Impact
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget, 0.0f, FALSE);
}// end if - Difficulty check
if (myst.nMystId == MYST_DEADLY_SHADE_DR && GetIsFriend(oShadow, oTarget))
{
eLink = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_PIERCING, 4), EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING, 4));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_SLASHING, 4));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_FIRE, 4));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, 4));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, 4));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 4));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_SONIC, 4));
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_BLUESHIELDPROTECT));
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget, 0.0f, FALSE);
}
if (myst.nMystId == MYST_DEADLY_SHADE_NEG)
{
SetLocalInt(oTarget, "DeadlyShade", TRUE);
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget, 0.0f, FALSE);
DeadlyShade(oTarget, myst);
}
if (myst.nMystId == MYST_FEARFUL_GLOOM)
{
if (GetHitDice(oTarget) > 4)
{
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, myst.nSaveDC, SAVING_THROW_TYPE_FEAR))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, RoundsToSeconds(d6(2)), TRUE, myst.nMystId, myst.nShadowcasterLevel);
}
else
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectShaken(), oTarget, RoundsToSeconds(1), TRUE, myst.nMystId, myst.nShadowcasterLevel);
}
else
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, RoundsToSeconds(d6(2)), TRUE, myst.nMystId, myst.nShadowcasterLevel);
}
if (myst.nMystId == MYST_SICKENING_SHADOW)
{
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, myst.nSaveDC, SAVING_THROW_TYPE_SPELL))
{
float fDur = RoundsToSeconds(d4(1));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oTarget, fDur), oTarget, fDur, TRUE, myst.nMystId, myst.nShadowcasterLevel);
DelayCommand(fDur, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, RoundsToSeconds(d6(2)), TRUE, myst.nMystId, myst.nShadowcasterLevel));
}
else
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, RoundsToSeconds(d6(2)), TRUE, myst.nMystId, myst.nShadowcasterLevel);
}
}
void DeadlyShade(object oTarget, struct mystery myst)
{
if (GetLocalInt(oTarget, "DeadlyShade"))
{
int nLast = GetLocalInt(oTarget, "DeadlyShadeHP");
int nCur = GetCurrentHitPoints(oTarget);
SetLocalInt(oTarget, "DeadlyShadeHP", nCur);
if (nLast > nCur)
{
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, myst.nSaveDC, SAVING_THROW_TYPE_SPELL))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNegativeLevel(1), oTarget, HoursToSeconds(myst.nShadowcasterLevel), TRUE, myst.nMystId, myst.nShadowcasterLevel);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGBLAST_ENERGY), oTarget);
}
}
DelayCommand(1.0, DeadlyShade(oTarget, myst));
}
}