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.
102 lines
3.9 KiB
Plaintext
102 lines
3.9 KiB
Plaintext
#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();
|
|
}
|