#include "prc_inc_spells" void SoldierOfLight() { if (!GetHasFeat(FEAT_TURN_UNDEAD,OBJECT_SELF)) return; if (!GetHasFeat(FEAT_SUP_POSITIVE_ENERGY_BURST,OBJECT_SELF)) { DecrementRemainingFeatUses(OBJECT_SELF,FEAT_TURN_UNDEAD); if (!GetHasFeat(FEAT_TURN_UNDEAD,OBJECT_SELF)) { IncrementRemainingFeatUses(OBJECT_SELF,FEAT_TURN_UNDEAD); FloatingTextStringOnCreature("Not Enough Turn Undead Uses", OBJECT_SELF, FALSE); return; } } DecrementRemainingFeatUses(OBJECT_SELF,FEAT_TURN_UNDEAD); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_LOS_HOLY_30), GetLocation(OBJECT_SELF)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH_WARD), GetLocation(OBJECT_SELF)); location lTarget = GetSpellTargetLocation(); int CasterLvl = GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT); effect eDeath ; effect eVis = EffectVisualEffect(VFX_IMP_DEATH); int nDamage; object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 100.0, lTarget, TRUE, OBJECT_TYPE_CREATURE ); //Cycle through the targets within the spell shape until an invalid object is captured. while (GetIsObjectValid(oTarget)) { if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD)) { nDamage = PRCGetReflexAdjustedDamage(d6(CasterLvl), oTarget, (10+CasterLvl), SAVING_THROW_TYPE_POSITIVE); eDeath = EffectDamage(nDamage,DAMAGE_TYPE_POSITIVE,DAMAGE_POWER_ENERGY); effect eLink = EffectLinkEffects(eDeath, eVis); DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT,eLink,oTarget)); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_STUN), oTarget); } //Select the next target within the spell shape. oTarget = GetNextObjectInShape(SHAPE_SPHERE, 100.0, lTarget, TRUE, OBJECT_TYPE_CREATURE ); } } void SacredPurifier() { object oPC = OBJECT_SELF; if (!GetHasFeat(FEAT_TURN_UNDEAD,oPC)) return; DecrementRemainingFeatUses(oPC,FEAT_TURN_UNDEAD); if (!GetHasFeat(FEAT_TURN_UNDEAD,oPC)) { IncrementRemainingFeatUses(oPC,FEAT_TURN_UNDEAD); FloatingTextStringOnCreature("Not Enough Turn Undead Uses", oPC, FALSE); return; } DecrementRemainingFeatUses(oPC,FEAT_TURN_UNDEAD); location lTarget = GetLocation(oPC); int nClass = GetLevelByClass(CLASS_TYPE_SACREDPURIFIER); int nCha = GetAbilityModifier(ABILITY_CHARISMA, oPC); int nDC = 10 + nCha + nClass; ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_LOS_HOLY_30), lTarget); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH_WARD), lTarget); effect eVis = EffectVisualEffect(VFX_IMP_DEATH); int nDamage; object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 30.0, lTarget, TRUE, OBJECT_TYPE_CREATURE ); //Cycle through the targets within the spell shape until an invalid object is captured. while (GetIsObjectValid(oTarget)) { if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD)) { nDamage = PRCGetReflexAdjustedDamage(d6(10), oTarget, nDC, SAVING_THROW_TYPE_POSITIVE); effect eDeath = EffectDamage(nDamage,DAMAGE_TYPE_POSITIVE,DAMAGE_POWER_ENERGY); effect eLink = EffectLinkEffects(eDeath, eVis); DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT,eLink,oTarget)); } //Select the next target within the spell shape. oTarget = GetNextObjectInShape(SHAPE_SPHERE, 30.0, lTarget, TRUE, OBJECT_TYPE_CREATURE ); } } void main() { if (GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT) > GetLevelByClass(CLASS_TYPE_SACREDPURIFIER)) SoldierOfLight(); else SacredPurifier(); }