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.
110 lines
4.5 KiB
Plaintext
110 lines
4.5 KiB
Plaintext
/////////////////////////////////////////////////
|
|
// Leech Field: On Enter
|
|
// tm_s0_epleech.nss
|
|
//-----------------------------------------------
|
|
// Created By: Nron Ksr
|
|
// Created On: 03/15/2004
|
|
// Description: An AoE that saps the life of those in the
|
|
// field and transfers it to the caster.
|
|
/////////////////////////////////////////////////
|
|
// Last Updated: 03/15/2004, Nron Ksr
|
|
/////////////////////////////////////////////////
|
|
#include "prc_alterations"
|
|
//#include "x2_inc_spellhook"
|
|
#include "inc_epicspells"
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_NECROMANCY);
|
|
|
|
//Declare major variables
|
|
object oCaster = GetAreaOfEffectCreator();
|
|
int nDamage;
|
|
object oTarget;
|
|
float fDelay;
|
|
//Capture the first target object in the shape.
|
|
oTarget = GetEnteringObject();
|
|
|
|
//Declare and assign personal impact visual effect.
|
|
effect eVisHeal = EffectVisualEffect( VFX_IMP_HEALING_M );
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eBad = EffectVisualEffect( VFX_IMP_NEGATIVE_ENERGY );
|
|
effect eDam, eHeal;
|
|
|
|
//Declare major variables
|
|
|
|
|
|
|
|
//Declare the spell shape, size and the location.
|
|
if( spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster) )
|
|
{
|
|
fDelay = PRCGetRandomDelay(0.5, 2.0);
|
|
// Apply effects to the currently selected target.
|
|
|
|
// * any undead should be healed, not just Friendlies
|
|
if( MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD
|
|
|| (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD)
|
|
|| GetLocalInt(oTarget, "AcererakHealing"))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent( oTarget,
|
|
EventSpellCastAt(OBJECT_SELF, SPELL_NEGATIVE_ENERGY_BURST) );
|
|
//Set the heal effect
|
|
eHeal = EffectHeal(d6(4));
|
|
DelayCommand( fDelay,
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget) );
|
|
DelayCommand( fDelay,
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHeal, oTarget) );
|
|
DelayCommand( fDelay,
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eDur, oTarget) );
|
|
}
|
|
else
|
|
{
|
|
if( !PRCDoResistSpell(oCaster, oTarget, GetTotalCastingLevel(oCaster)+SPGetPenetr(oCaster), fDelay) )
|
|
{
|
|
// Debug message.
|
|
SendMessageToPC(oCaster, "Not resisted.");
|
|
//Roll damage.
|
|
nDamage = d6(4);
|
|
//Adjust damage for Save
|
|
if( PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(GetAreaOfEffectCreator(), oTarget),
|
|
SAVING_THROW_TYPE_NEGATIVE, oCaster, fDelay) )
|
|
{
|
|
nDamage /= 2;
|
|
|
|
if (GetHasMettle(oTarget, SAVING_THROW_WILL)) // Ignores partial effects
|
|
{
|
|
nDamage = 0;
|
|
}
|
|
}
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent( oTarget,
|
|
EventSpellCastAt(OBJECT_SELF, SPELL_NEGATIVE_ENERGY_BURST) );
|
|
//Set the damage effect
|
|
eDam = EffectDamage( nDamage, DAMAGE_TYPE_NEGATIVE );
|
|
// Apply effects to the currently selected target.
|
|
DelayCommand( fDelay,
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget) );
|
|
//This visual effect is applied to the target object not the location as above.
|
|
DelayCommand( fDelay,
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eBad, oTarget) );
|
|
|
|
// Heal the caster
|
|
if( GetCurrentHitPoints(oCaster) <= GetMaxHitPoints(oCaster) * 2 )
|
|
{
|
|
eHeal = EffectTemporaryHitpoints(nDamage);
|
|
DelayCommand( 2.1,
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
|
|
eVisHeal, oCaster) );
|
|
DelayCommand( 2.1,
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
|
|
eHeal, oCaster,
|
|
TurnsToSeconds(GetTotalCastingLevel(oCaster)), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
}
|