Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
87 lines
2.9 KiB
Plaintext
87 lines
2.9 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Blade Barrier : On Heartbeat 2 (ROUND)
|
|
//:: Spell FileName SMP_S_BladeBarE
|
|
//:://////////////////////////////////////////////
|
|
//:: 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;
|
|
int nCasterLevel = SMP_GetAOECasterLevel();
|
|
int nSpellSaveDC = SMP_GetSpellSaveDC();
|
|
int nDamage;
|
|
int nSpellId = GetSpellId();
|
|
int nMetaMagic = SMP_GetAOEMetaMagic();
|
|
|
|
// Dice is limited to 15
|
|
int nDice = SMP_LimitInteger(nCasterLevel, 15);
|
|
|
|
// Loop targets in our AOE.
|
|
oTarget = GetFirstInPersistentObject();
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// Check if we can even hit them
|
|
if(GetDistanceToObject(oTarget) > 2.0)
|
|
{
|
|
// 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
oTarget = GetNextInPersistentObject();
|
|
}
|
|
}
|