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.
150 lines
5.1 KiB
Plaintext
150 lines
5.1 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Inflict XXX Wounds, Mass
|
|
//:: Spell FileName PHS_S_InflictMas
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Inflict Name | d8 | Caster Limit
|
|
Light, Mass | 1 | 25
|
|
Moderate, Mass | 2 | 30
|
|
Serious, Mass | 3 | 35
|
|
Critical, Mass | 4 | 40
|
|
|
|
Target: One creature/level, no two of which can be more than 30 ft. apart
|
|
Duration: Instantaneous
|
|
Saving Throw: Will half
|
|
Spell Resistance: Yes
|
|
|
|
Negative energy spreads out in all directions from the point of origin,
|
|
dealing 1d8 points of damage +1 point per caster level (maximum +25) to
|
|
nearby living enemies.
|
|
|
|
Like other inflict spells, mass inflict light wounds cures undead in its
|
|
area rather than damaging them. A cleric capable of spontaneously casting
|
|
inflict spells can also spontaneously cast mass inflict spells.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
As spell.
|
|
|
|
1 creature/level.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Get the spell being cast (No sub-spells)
|
|
int nSpellId = GetSpellId();
|
|
// Spell Hook Check
|
|
if(!PHS_SpellHookCheck(nSpellId)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
int nDice, nCasterBonus, nToHeal, nVis, nCount;
|
|
float fDelay;
|
|
|
|
if(nSpellId == PHS_SPELL_INFLICT_LIGHT_WOUNDS_MASS)
|
|
{
|
|
nDice = 1;
|
|
nVis = PHS_VFX_IMP_INFLICTING_S;//VFX_IMP_HEALING_S
|
|
}
|
|
else if(nSpellId == PHS_SPELL_INFLICT_MODERATE_WOUNDS_MASS)
|
|
{
|
|
nDice = 2;
|
|
nVis = PHS_VFX_IMP_INFLICTING_M;
|
|
}
|
|
else if(nSpellId == PHS_SPELL_INFLICT_SERIOUS_WOUNDS_MASS)
|
|
{
|
|
nDice = 3;
|
|
nVis = PHS_VFX_IMP_INFLICTING_L;
|
|
}
|
|
else if(nSpellId == PHS_SPELL_INFLICT_CRITICAL_WOUNDS_MASS)
|
|
{
|
|
nDice = 4;
|
|
nVis = PHS_VFX_IMP_INFLICTING_G;
|
|
}
|
|
|
|
// Limit how much we are limiting the caster level
|
|
// 25, 30, 35, 40... (20 + nDice * 5)
|
|
nCasterBonus = PHS_LimitInteger(nCasterLevel, (20 + (nDice * 5)));
|
|
|
|
// Visual effect
|
|
effect eVis = EffectVisualEffect(nVis);
|
|
effect eHeal;
|
|
|
|
// Apply AOE visual
|
|
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_20);
|
|
PHS_ApplyLocationVFX(lTarget, eImpact);
|
|
|
|
// Loop all enemies in a shpere of radius 15ft.
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_15, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
while(GetIsObjectValid(oTarget) && nCount < nCasterLevel)
|
|
{
|
|
// Make sure they are not immune to spells
|
|
if(!PHS_TotalSpellImmunity(oTarget))
|
|
{
|
|
// Get delay
|
|
fDelay = GetDistanceBetweenLocations(GetLocation(oTarget), lTarget) / 20;
|
|
|
|
// Check if alive to start
|
|
if(PHS_GetIsAliveCreature(oTarget))
|
|
{
|
|
// PvP Check - must be an enemy
|
|
if(GetIsReactionTypeHostile(oTarget))
|
|
{
|
|
// One more affected
|
|
nCount++;
|
|
|
|
// Get total damage to be done
|
|
nToHeal = PHS_MaximizeOrEmpower(8, nDice, nMetaMagic, nCasterBonus);
|
|
|
|
// Spell resistance check
|
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Will save for half damage
|
|
if(PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_NEGATIVE))
|
|
{
|
|
nToHeal /= 2;
|
|
}
|
|
// Check nToHeal
|
|
if(nToHeal > 0)
|
|
{
|
|
// Do damage and visual
|
|
DelayCommand(fDelay, PHS_ApplyDamageVFXToObject(oTarget, eVis, nToHeal, DAMAGE_TYPE_NEGATIVE));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Check racial type
|
|
else if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
|
{
|
|
// Make sure they are a friend
|
|
if(GetIsFriend(oTarget))
|
|
{
|
|
// Add one to count
|
|
nCount++;
|
|
|
|
// Get total healing to be done
|
|
nToHeal = PHS_MaximizeOrEmpower(8, nDice, nMetaMagic, nCasterBonus);
|
|
|
|
// Declare what to heal
|
|
eHeal = EffectHeal(nToHeal);
|
|
|
|
// Do the healing and visual
|
|
DelayCommand(fDelay, PHS_ApplyInstantAndVFX(oTarget, eVis, eHeal));
|
|
}
|
|
}
|
|
}
|
|
// Get Next Target
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_15, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|