Further file organization
Further file organization
This commit is contained in:
104
nwn/nwnprc/trunk/spells/sp_energy_ebb.nss
Normal file
104
nwn/nwnprc/trunk/spells/sp_energy_ebb.nss
Normal file
@@ -0,0 +1,104 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Name Energy Ebb
|
||||
//:: FileName sp_energy_ebb.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
Energy Ebb
|
||||
Necromancy (Evil)
|
||||
Cleric 7, Sorc/Wiz 7
|
||||
Duration 1 round/level
|
||||
Saving throw: Fortitude negates
|
||||
|
||||
This spell functions like enervation except that
|
||||
the creature struck gains negative levels over an
|
||||
extended period. You point your finger and utter
|
||||
the incantation, releasing a black needle of
|
||||
crackling negative energy that suppresses the life
|
||||
force of any living creature it strikes. You must
|
||||
make a ranged touch attack to hit. If the attack
|
||||
succeeds, the subject immediately gains one negative
|
||||
level, then continues to gain another each round
|
||||
thereafter as her life force slowly bleeds away. The
|
||||
drain can only be stopped by a successful Heal check
|
||||
(DC 23) or the application of a heal, restoration, or
|
||||
greater restoration spell.
|
||||
|
||||
If the black needle strikes an undead creature, that
|
||||
creature gains 4d4 * 5 temporary hp that last for up
|
||||
to 1 hour.
|
||||
|
||||
|
||||
Author: Tenjac
|
||||
Created: 12/07/05
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void Ebb(object oTarget, int nRounds)
|
||||
{
|
||||
if(GetHasSpellEffect(SPELL_ENERGY_EBB, oTarget))
|
||||
{
|
||||
effect eLink = EffectLinkEffects(EffectNegativeLevel(1), EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE));
|
||||
|
||||
//apply
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
|
||||
//decrement duration
|
||||
nRounds--;
|
||||
|
||||
//check duration
|
||||
if(nRounds)
|
||||
//Reapply after 1 round
|
||||
DelayCommand(6.0f, Ebb(oTarget, nRounds));
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
|
||||
|
||||
//Spellhook
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
//if undead
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
PRCSignalSpellEvent(oTarget, FALSE, SPELL_ENERGY_EBB, OBJECT_SELF);
|
||||
|
||||
//roll temp hp
|
||||
int nHP = (d4(4) * 5);
|
||||
|
||||
//give temp hp
|
||||
effect eHP = EffectTemporaryHitpoints(nHP);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, 3600.00);
|
||||
}
|
||||
//not undead
|
||||
else
|
||||
{
|
||||
PRCSignalSpellEvent(oTarget, TRUE, SPELL_ENERGY_EBB, OBJECT_SELF);
|
||||
int nDC = PRCGetSaveDC(oTarget, OBJECT_SELF);
|
||||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_NEGATIVE_LEVEL) && !PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE))
|
||||
{
|
||||
//Get duration
|
||||
int nLevel = PRCGetCasterLevel();
|
||||
int nRounds = nLevel;
|
||||
|
||||
if(PRCGetMetaMagicFeat() & METAMAGIC_EXTEND)
|
||||
nRounds *= 2;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE)), oTarget, RoundsToSeconds(nRounds), TRUE, SPELL_ENERGY_EBB, nLevel);
|
||||
|
||||
Ebb(oTarget, nRounds);
|
||||
}
|
||||
}
|
||||
|
||||
//SPEvilShift(oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
Reference in New Issue
Block a user