PRC8_fork/nwn/nwnprc/trunk/smp/smp_s_bladebara.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

87 lines
2.8 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Blade Barrier : On Enter
//:: Spell FileName SMP_S_BladeBarA
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Here, apply the right one.
Can be a circle, or a wall.
Either way, it provides cover to those who stay in it, and does damage
every heartbeat, and on enter.
HB:
- Damage (Up to 15d6) piercing, reflex save
Enter:
- Apply (if not already got) Blade Barrier +4AC, +2 Reflex saves
Exit:
- Remove (if couter at 0) all blade barrier effects.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "SMP_INC_SPELLS"
void main()
{
// Check AOE creator.
if(!SMP_CheckAOECreator()) return;
// Declare Major Variables
object oCreator = GetAreaOfEffectCreator();
object oTarget = GetEnteringObject();
int nCasterLevel = SMP_GetAOECasterLevel();
int nSpellSaveDC = SMP_GetSpellSaveDC();
int nDamage;
int nMetaMagic = SMP_GetAOEMetaMagic();
int nSpellId = GetSpellId();
// Dice is limited to 15
int nDice = SMP_LimitInteger(nCasterLevel, 15);
// Declare major effects
effect eAC = EffectACIncrease(4, AC_DODGE_BONUS);
effect eReflex = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, 2);
// Link
effect eLink = EffectLinkEffects(eAC, eReflex);
// PvP Check, Do damage
if(!GetIsReactionTypeFriendly(oTarget, oCreator) &&
// Make sure they are not immune to spells
!SMP_TotalSpellImmunity(oTarget))
{
//Fire cast spell at event for the target
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_BLADE_BARRIER);
// Spell Resistance check
if(!SMP_SpellResistanceCheck(oCreator, oTarget))
{
// Declare damage
nDamage = SMP_MaximizeOrEmpower(6, nDice, nMetaMagic);
// Reflex save - +2 DC IF they have blade barriers +2 reflex save
if(GetHasSpellEffect(nSpellId, oTarget))
{
// Reflex save
nDamage = SMP_GetAdjustedDamage(SAVING_THROW_REFLEX, nDamage, oTarget, nSpellSaveDC + 2, SAVING_THROW_TYPE_NONE, oCreator);
}
else
{
// Reflex save
nDamage = SMP_GetAdjustedDamage(SAVING_THROW_REFLEX, nDamage, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oCreator);
}
if(nDamage > 0)
{
// Apply damage
SMP_ApplyDamageToObject(oTarget, nDamage, DAMAGE_TYPE_SLASHING);
}
}
}
// Always apply effects of the spell (+4 AC, +2 reflex saves).
SMP_AOE_OnEnterEffects(eLink, oTarget, SMP_SPELL_BLADE_BARRIER);
}