PRC8/nwn/nwnprc/trunk/newspellbook/bnd_tnb_desempud.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

89 lines
3.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Tenebrous Apostate - Destroy/Empower Undead
At 3rd level, you gain additional power over mindless undead. You can use two turn or rebuke attempts as a
single standard action, each dealing (or healing) damage as per the Tenebrouss rebuke ability, except that
the damage applies only to mindless undead. Neutral characters use the turn effect, evil characters the rebuke.
Strat 05/03/21
*/
#include "bnd_inc_bndfunc"
#include "prc_inc_turning"
void DestroyEmpower(object oBinder)
{
int nTurnLevel = GetTurningClassLevel(oBinder, SPELL_TURN_UNDEAD);
location lTarget = GetLocation(oBinder);
float fRange = FeetToMeters(30.0);
int nDC = 10 + nTurnLevel + GetAbilityModifier(ABILITY_CHARISMA, oBinder);
if (GetAlignmentGoodEvil(oBinder) == ALIGNMENT_EVIL)
{
//ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_HORRID_WILTING), lTarget);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_VAMPIRIC_DRAIN_PRC), lTarget);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(oTarget != oBinder && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD && 10 >= GetAbilityScore(oTarget, ABILITY_INTELLIGENCE, TRUE) && !GetIsPC(oTarget))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGBLAST_ENERGY), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(d6(nTurnLevel*2)), oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE);
}
}
else
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_VAMPIRIC_DRAIN_PRC), lTarget);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(oTarget != oBinder && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD && 10 >= GetAbilityScore(oTarget, ABILITY_INTELLIGENCE, TRUE) && !GetIsPC(oTarget))
{
int nDamage = d6(nTurnLevel*2);
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
nDamage /= 2;
if (GetHasMettle(oTarget, SAVING_THROW_WILL)) // Ignores partial effects
{
nDamage = 0;
}
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REGENERATE_IMPACT), oTarget);
if (nDamage) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_DIVINE), oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE);
}
}
}
void main()
{
object oBinder = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
//make sure there's TU uses left
if (!GetHasFeat(FEAT_TURN_UNDEAD, oBinder))
{
FloatingTextStringOnCreature("You are out of Turn Undead uses for the day.", oBinder, FALSE);
return;
}
DecrementRemainingFeatUses(oBinder, FEAT_TURN_UNDEAD); // Burn one
// Burn the tenebrous turn undead
if (BindAbilCooldown(oBinder, VESTIGE_TENEBROUS_TURN, VESTIGE_TENEBROUS))
DestroyEmpower(oBinder);
else if (GetHasFeat(FEAT_TURN_UNDEAD, oBinder))
{
DestroyEmpower(oBinder);
DecrementRemainingFeatUses(oBinder, FEAT_TURN_UNDEAD); // Burn two
}
else
{
FloatingTextStringOnCreature("You do not have enough Turn Undead uses.", oBinder, FALSE);
IncrementRemainingFeatUses(oBinder, FEAT_TURN_UNDEAD);
return;
}
}