forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
62 lines
2.5 KiB
Plaintext
62 lines
2.5 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Soul Eater: Soul Blast
|
|
//:: prc_sleat_sblast
|
|
//:://////////////////////////////////////////////
|
|
/** @file
|
|
Soul Blast (Su): A 3rd-level may project a 100-foot ray of force that deals
|
|
1d6 points of damage per soul eater level against one target. The target is
|
|
allowed a Reflex saving throw to avoid the damage (DC 10 + class level
|
|
+ Cha bonus). This supernatural ability can be used once per day, and only
|
|
on a day when the soul eater has drained levels.
|
|
|
|
@date Modified - 04.12.2006
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_spells"
|
|
|
|
void main()
|
|
{
|
|
object oEater = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nClassLevel = GetLevelByClass(CLASS_TYPE_SOUL_EATER, oEater);
|
|
int nDC = 10 + nClassLevel + GetAbilityModifier(ABILITY_CHARISMA, oEater);
|
|
nDC += nClassLevel >= 10 ? 2 : 0; // Soul Power. We don't need to check whether the SE has drained today here, since if it hasn't, the Soul Blast won't happen anyway
|
|
|
|
// PvP targeting limitations
|
|
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oEater))
|
|
{
|
|
// Make sure the SE has drained today
|
|
if(GetLocalInt(oEater, "PRC_SoulEater_HasDrained"))
|
|
{
|
|
// Let AI know about hostilities
|
|
SignalEvent(oTarget, EventSpellCastAt(oEater, GetSpellId(), TRUE));
|
|
|
|
// Fire the ray
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_EVIL, oEater, BODY_NODE_HAND), oTarget, 3.0f);
|
|
|
|
// Roll damage and do Reflex save
|
|
int nDamage = d6(nClassLevel);
|
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_NONE);
|
|
|
|
if(nDamage > 0) // Didn't evade
|
|
{
|
|
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
|
effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
|
|
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectLinkEffects(eDamage, eImpact), oTarget);
|
|
}
|
|
}
|
|
// Refund unused feat use, whine
|
|
else
|
|
{
|
|
FloatingTextStrRefOnCreature(16832114, oEater, FALSE); // "Target is immune to negative levels"
|
|
IncrementRemainingFeatUses(oEater, FEAT_SLEAT_SBLAST);
|
|
}
|
|
}
|
|
// Refund unused feat use
|
|
else
|
|
IncrementRemainingFeatUses(oEater, FEAT_SLEAT_SBLAST);
|
|
}
|