forked from Jaysyn/PRC8
90 lines
3.1 KiB
Plaintext
90 lines
3.1 KiB
Plaintext
|
//::///////////////////////////////////////////////
|
|||
|
//:: Name Heart Ripper
|
|||
|
//:: FileName sp_heart_ripr
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
/**@file Heart Ripper
|
|||
|
Necromancy [Death]
|
|||
|
Level: Assassin 4
|
|||
|
Components: V, S
|
|||
|
Casting Time: 1 standard action
|
|||
|
Range: Close (25 ft. + 5 ft./2 levels)
|
|||
|
Target: One living creature
|
|||
|
Duration: Instantaneous
|
|||
|
Saving Throw: Fortitude negates
|
|||
|
Spell Resistance: Yes
|
|||
|
|
|||
|
Invisible bolts of force instantly slay
|
|||
|
the target you designate by driving its
|
|||
|
heart from its body unless it succeeds
|
|||
|
on a Fortitude save. If the target has
|
|||
|
HD higher than your caster level, it
|
|||
|
does not die on a failed saving throw,
|
|||
|
but instead is stunned for 1d4 rounds.
|
|||
|
Creatures that don<6F>t depend on their
|
|||
|
hearts for survival, creatures with no
|
|||
|
anatomy, and creatures immune to
|
|||
|
extra damage from critical hits are
|
|||
|
unaffected by the spell.
|
|||
|
|
|||
|
Author: Tenjac
|
|||
|
Created: 6/28/07
|
|||
|
*/
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
|
|||
|
#include "prc_inc_spells"
|
|||
|
#include "prc_add_spell_dc"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
if(!X2PreSpellCastCode()) return;
|
|||
|
|
|||
|
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
|
|||
|
|
|||
|
object oPC = OBJECT_SELF;
|
|||
|
object oTarget = PRCGetSpellTargetObject();
|
|||
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|||
|
|
|||
|
int nType = MyPRCGetRacialType(oTarget);
|
|||
|
|
|||
|
if(nType == RACIAL_TYPE_UNDEAD ||
|
|||
|
nType == RACIAL_TYPE_ELEMENTAL ||
|
|||
|
nType == RACIAL_TYPE_CONSTRUCT ||
|
|||
|
GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
|
|||
|
|
|||
|
{
|
|||
|
SendMessageToPC(oPC, "Target creature is immune to the effects of this spell.");
|
|||
|
PRCSetSchool();
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//SR check
|
|||
|
if(!PRCDoResistSpell(oPC, oTarget, (nCasterLvl + SPGetPenetr())))
|
|||
|
{
|
|||
|
//Save
|
|||
|
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oPC), SAVING_THROW_TYPE_DEATH))
|
|||
|
{
|
|||
|
//Check HD
|
|||
|
int nHD = GetHitDice(oTarget);
|
|||
|
|
|||
|
if(nHD > nCasterLvl)
|
|||
|
{
|
|||
|
int nStun = d4(1);
|
|||
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(nStun), TRUE, SPELL_HEART_RIPPER, nCasterLvl);
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
//Kill it. Chunkaliciously.
|
|||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_RED_MEDIUM), oTarget);
|
|||
|
|
|||
|
effect eDeath = EffectDeath();
|
|||
|
SupernaturalEffect(eDeath);
|
|||
|
|
|||
|
DeathlessFrenzyCheck(oTarget);
|
|||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
PRCSetSchool();
|
|||
|
}
|