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.
145 lines
5.4 KiB
Plaintext
145 lines
5.4 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Faerie Fire
|
|
//:: Spell FileName PHS_S_FaerieFire
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Evocation [Light]
|
|
Level: Drd 1
|
|
Components: V, S, DF
|
|
Casting Time: 1 standard action
|
|
Range: Long (40M)
|
|
Area: Creatures and objects within a 1.67-M.-radius burst
|
|
Duration: 1 min./level (D)
|
|
Saving Throw: None
|
|
Spell Resistance: Yes
|
|
|
|
A pale glow surrounds and outlines the subjects. Outlined subjects shed
|
|
light as candles. Outlined creatures have blur, displacement, invisibility,
|
|
or similar effects removed from them, and they cannot apply such effects
|
|
again until the duration expires of Faeri Fire is dispelled. The light is
|
|
too dim to have any special effect on undead or dark-dwelling creatures
|
|
vulnerable to light. The light, however, carries with it a -10 penalty to
|
|
hide checks if illuminated. The faerie fire is randomly blue, green, or violet.
|
|
The faerie fire does not cause any harm to the objects or creatures thus
|
|
outlined.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Ok, small burst.
|
|
|
|
It only removes the effects and doesn't allow them to be reapplied.
|
|
|
|
Note:
|
|
Could change to dispelling effects. This would mean that for the level 1
|
|
spell that it is, it could be less powerful.
|
|
Note 2:
|
|
It has the smallest radius, and might not be too harmful anyway.
|
|
|
|
Applies a -10 penalty to the hide skill, however.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_FAERIE_FIRE)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
float fDelay;
|
|
int nVFX;
|
|
effect eCheck;
|
|
|
|
// Get duration in minutes
|
|
float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Randomise nVFX
|
|
switch(d3())
|
|
{
|
|
case 1: nVFX = VFX_DUR_GLOW_LIGHT_BLUE; break;
|
|
case 2: nVFX = VFX_DUR_GLOW_LIGHT_GREEN; break;
|
|
case 3: nVFX = VFX_DUR_GLOW_LIGHT_PURPLE; break;
|
|
}
|
|
|
|
// Declare Effects
|
|
effect eDur = EffectVisualEffect(nVFX);
|
|
effect eHide = EffectSkillDecrease(SKILL_HIDE, 10);
|
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
|
|
effect eLink = EffectLinkEffects(eDur, eHide);
|
|
eLink = EffectLinkEffects(eLink, eCessate);
|
|
|
|
// Apply AOE visual
|
|
effect eImpact = EffectVisualEffect(PHS_VFX_FNF_FAERIE_FIRE);
|
|
PHS_ApplyLocationVFX(lTarget, eImpact);
|
|
|
|
// Get all targets in a sphere, 1.67M radius, creatures only.
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 1.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
// Loop targets
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// PvP Check
|
|
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
|
|
// Make sure they are not immune to spells
|
|
!PHS_TotalSpellImmunity(oTarget))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_FAERIE_FIRE);
|
|
|
|
//Get the distance between the explosion and the target to calculate delay
|
|
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/30;
|
|
|
|
// Spell resistance And immunity checking.
|
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Remove the effects from the target:
|
|
// * Displacement, EffectInvisibility, Blur.
|
|
eCheck = GetFirstEffect(oTarget);
|
|
while(GetIsEffectValid(eCheck))
|
|
{
|
|
switch(GetEffectType(eCheck))
|
|
{
|
|
case EFFECT_TYPE_INVISIBILITY:
|
|
case EFFECT_TYPE_IMPROVEDINVISIBILITY:
|
|
{
|
|
// Remove all invisibilities
|
|
RemoveEffect(oTarget, eCheck);
|
|
}
|
|
break;
|
|
// Other spells
|
|
default:
|
|
{
|
|
switch(GetEffectSpellId(eCheck))
|
|
{
|
|
case PHS_SPELL_BLUR:
|
|
case PHS_SPELL_FAERIE_FIRE: // No overlap of -10
|
|
case PHS_SPELL_DISPLACEMENT:
|
|
{
|
|
// Remove all displacement and blurs
|
|
RemoveEffect(oTarget, eCheck);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
// Get next effect
|
|
eCheck = GetNextEffect(oTarget);
|
|
}
|
|
// Apply effects
|
|
PHS_ApplyDuration(oTarget, eLink, fDuration);
|
|
}
|
|
}
|
|
// Get Next Target
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 1.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|