forked from Jaysyn/PRC8
96 lines
3.4 KiB
Plaintext
96 lines
3.4 KiB
Plaintext
|
/*:://////////////////////////////////////////////
|
|||
|
//:: Spell Name Wave Of Exaltation
|
|||
|
//:: Spell FileName XXX_S_WaveOfExal
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: In Game Spell desctiption
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
Transmutation
|
|||
|
Also known as: Elhiria<69>s Wave Of Exaltation
|
|||
|
Level: Brd 2, Sor/Wiz 2
|
|||
|
Components: V, S
|
|||
|
Casting Time: 1 standard action
|
|||
|
Range: 6.67M (20ft.)
|
|||
|
Area: Caster and 1 creature/level, in a 6.67M. burst (20ft.) centered on
|
|||
|
the caster
|
|||
|
Duration: 1 minute/level (D)
|
|||
|
Saving Throw: Fortitude Negates (Harmless)
|
|||
|
Spell Resistance: Yes (Harmless)
|
|||
|
Source: Various (VolkorTheRed)
|
|||
|
|
|||
|
A wave starts at the point of origin of the spell and spreads out te envelop
|
|||
|
all affected allied creatures in a mantle of positive feelings and resolvement.
|
|||
|
|
|||
|
The transmuted creatures<65> skin becomes harder to penetrate by enemy weapons.
|
|||
|
The creatures receive DR 1/Epic and get an +1 morale bonus on all saving
|
|||
|
throws.
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Spell Effects Applied / Notes
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
As the spell says - DR 1/Epic, and +1 bonus on saving throws.
|
|||
|
|
|||
|
Changed to +1 on saves, Saving Grace still has some potency then.
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Created By: Jasperre
|
|||
|
//::////////////////////////////////////////////*/
|
|||
|
|
|||
|
#include "SMP_INC_SPELLS"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
// Spell hook check.
|
|||
|
if(!SMP_SpellHookCheck(SMP_SPELL_WAVE_OF_EXALTATION)) return;
|
|||
|
|
|||
|
//Declare major variables
|
|||
|
object oCaster = OBJECT_SELF;
|
|||
|
object oTarget;
|
|||
|
object oTargetDiamond;
|
|||
|
// 1 creature/level.
|
|||
|
int nCasterLevel = SMP_GetCasterLevel();
|
|||
|
int nMetaMagic = SMP_GetMetaMagicFeat();
|
|||
|
int nCnt;
|
|||
|
|
|||
|
// Note: This does increase by 1 if caster is affected
|
|||
|
int nDoneCreatures = 0;
|
|||
|
|
|||
|
// 1 round/level duration
|
|||
|
float fDuration = SMP_GetDuration(SMP_ROUNDS, nCasterLevel, nMetaMagic);
|
|||
|
|
|||
|
// Delcare effects
|
|||
|
effect eDR = EffectDamageReduction(1, DAMAGE_POWER_PLUS_TWENTY);
|
|||
|
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL);
|
|||
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|||
|
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_MIND);
|
|||
|
|
|||
|
// Link effects
|
|||
|
effect eLink = EffectLinkEffects(eDR, eDur);
|
|||
|
eLink = EffectLinkEffects(eLink, eSave);
|
|||
|
|
|||
|
// Loop all targets without effect nearby. Start with the caster!
|
|||
|
oTarget = oCaster;
|
|||
|
// Loop for 6.67M or 20ft
|
|||
|
while(GetIsObjectValid(oTarget) && nDoneCreatures < nCasterLevel &&
|
|||
|
GetDistanceToObject(oTarget) <= RADIUS_SIZE_FEET_20)
|
|||
|
{
|
|||
|
// Make sure they are in our LOS, are a friend too.
|
|||
|
if((LineOfSightObject(oCaster, oTarget) &&
|
|||
|
(GetIsFriend(oTarget) || GetFactionEqual(oTarget))) ||
|
|||
|
(oTarget == oCaster))
|
|||
|
{
|
|||
|
// Add one to nDoneCreatures
|
|||
|
nDoneCreatures++;
|
|||
|
|
|||
|
// Signal spell cast at event
|
|||
|
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_WAVE_OF_EXALTATION, FALSE);
|
|||
|
|
|||
|
// Remove previous castings
|
|||
|
SMP_RemoveSpellEffectsFromTarget(SMP_SPELL_WAVE_OF_EXALTATION, oTarget);
|
|||
|
|
|||
|
// Apply effects
|
|||
|
SMP_ApplyDurationAndVFX(oTarget, eVis, eDur, fDuration);
|
|||
|
}
|
|||
|
// Get next nearest target
|
|||
|
nCnt++;
|
|||
|
oTarget = GetNearestObject(OBJECT_TYPE_CREATURE, oCaster, nCnt);
|
|||
|
}
|
|||
|
}
|