2024-02-20 22:24:11 -05:00
|
|
|
|
//::///////////////////////////////////////////////
|
|
|
|
|
//:: Name Mass Fire Shield
|
|
|
|
|
//:: FileName sp_mass_frshld.nss
|
|
|
|
|
//:://////////////////////////////////////////////
|
|
|
|
|
/**@file Mass Fire Shield
|
|
|
|
|
Evocation [Fire or Cold]
|
|
|
|
|
Level: Sorcerer/wizard 5, warmage 5
|
|
|
|
|
Components: V, S, M
|
|
|
|
|
Casting Time: 1 standard action
|
|
|
|
|
Range: Close (25 ft. + 5 ft./2 levels)
|
|
|
|
|
Targets: One or more allied creatures, no two of which
|
|
|
|
|
can be more than 30 ft. apart
|
|
|
|
|
Duration: 1 round/level (D)
|
|
|
|
|
Save: Will negates (harmless)
|
|
|
|
|
Spell Resistance: Yes (harmless)
|
|
|
|
|
|
|
|
|
|
This spell functions like fire shield (see
|
|
|
|
|
page 230 of the Player<65>s Handbook),
|
|
|
|
|
except as noted above.
|
|
|
|
|
|
|
|
|
|
Author: Tenjac
|
|
|
|
|
Created: 7/6/07
|
|
|
|
|
*/
|
|
|
|
|
//:://////////////////////////////////////////////
|
|
|
|
|
//:://////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#include "prc_inc_spells"
|
|
|
|
|
|
|
|
|
|
void main()
|
|
|
|
|
{
|
|
|
|
|
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
|
|
|
|
|
|
|
|
|
if(!X2PreSpellCastCode()) return;
|
|
|
|
|
|
|
|
|
|
object oPC = OBJECT_SELF;
|
|
|
|
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|
|
|
|
location lLoc = PRCGetSpellTargetLocation();
|
|
|
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
2025-02-10 14:06:04 -05:00
|
|
|
|
int nDam = PRCMin(40,nCasterLvl);
|
2024-02-20 22:24:11 -05:00
|
|
|
|
float fDur = RoundsToSeconds(nCasterLvl);
|
|
|
|
|
effect eVis, eShield, eReduce;
|
|
|
|
|
int nSpell = GetSpellId();
|
|
|
|
|
float fRadius = FeetToMeters(15.0);
|
|
|
|
|
|
|
|
|
|
//Extend
|
|
|
|
|
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
|
|
|
|
|
|
|
|
|
if(nSpell == SPELL_MASS_FIRE_SHIELD_RED)
|
|
|
|
|
{
|
|
|
|
|
eVis = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
|
|
|
|
|
eShield = EffectDamageShield(nDam, DAMAGE_BONUS_1d6, ChangedElementalDamage(oPC, DAMAGE_TYPE_FIRE));
|
|
|
|
|
eReduce = EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD, 50);
|
|
|
|
|
}
|
|
|
|
|
else if (nSpell == SPELL_MASS_FIRE_SHIELD_BLUE)
|
|
|
|
|
{
|
|
|
|
|
eVis = EffectVisualEffect(VFX_DUR_CHILL_SHIELD);
|
|
|
|
|
eShield = EffectDamageShield(nDam, DAMAGE_BONUS_1d6, ChangedElementalDamage(oPC, DAMAGE_TYPE_COLD));
|
|
|
|
|
eReduce = EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE, 50);
|
|
|
|
|
}
|
|
|
|
|
effect eLink = EffectLinkEffects(eShield, eVis);
|
|
|
|
|
eLink = EffectLinkEffects(eLink, eReduce);
|
|
|
|
|
|
|
|
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
|
|
|
|
while(GetIsObjectValid(oTarget))
|
|
|
|
|
{
|
|
|
|
|
if(GetIsFriend(oTarget, oPC))
|
|
|
|
|
{
|
|
|
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur, TRUE, nSpell, nCasterLvl);
|
|
|
|
|
}
|
|
|
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
|
|
|
|
}
|
|
|
|
|
PRCSetSchool();
|
|
|
|
|
}
|
|
|
|
|
|