PRC8/nwn/nwnprc/trunk/epicspellscripts/ss_ep_achilles.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

80 lines
2.7 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Achille's Heel
//:: tm_s0_epachilles.nss
//:://////////////////////////////////////////////
/*
Grants the caster immunity to all spells level 9 and lower
at the price of CON: dropping to 3.
*/
//:://////////////////////////////////////////////
//:: Created By: Nron Ksr
//:: Created On: March 9, 2004
//:://////////////////////////////////////////////
/*
March 17, 2004- Boneshank - added RunHeel() func to keep CON penalty
*/
#include "prc_alterations"
#include "inc_epicspells"
#include "inc_dispel"
//#include "x2_inc_spellhook"
void RunHeel(object oTarget, int nDuration);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ACHHEEL))
{
//Declare major variables
object oPC = OBJECT_SELF;
effect eVis = EffectVisualEffect( VFX_DUR_SPELLTURNING );
effect eVis2 = EffectVisualEffect( VFX_DUR_GLOBE_INVULNERABILITY );
effect eDur = EffectVisualEffect( VFX_DUR_CESSATE_NEGATIVE );
int nDuration = 20;
//Link Effects
// effect eAbsorb = EffectSpellLevelAbsortption( 9, 0, SPELL_SCHOOL_GENERAL );
effect eAbsorb = EffectSpellImmunity( SPELL_ALL_SPELLS );
effect eLink = EffectLinkEffects( eVis, eAbsorb );
eLink = EffectLinkEffects( eLink, eVis2 );
eLink = EffectLinkEffects( eLink, eDur );
//Fire cast spell at event for the specified target
// SignalEvent( oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellID(), FALSE) );
SignalEvent(oPC,
EventSpellCastAt(OBJECT_SELF, SPELL_GREATER_SPELL_MANTLE, FALSE));
//Apply the VFX impact and effects
// * Can not be dispelled
eLink = ExtraordinaryEffect(eLink);
SPApplyEffectToObject( DURATION_TYPE_TEMPORARY, eLink,
oPC, RoundsToSeconds(nDuration), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF) );
RunHeel(oPC, nDuration);
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void RunHeel(object oTarget, int nDuration)
{
int nPen = GetAbilityScore(oTarget, ABILITY_CONSTITUTION) - 3;
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, nPen);
if (nDuration > 0)
{
UnequipAnyImmunityItems(oTarget, IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN);
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
eCon, oTarget, 6.0, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
nDuration -= 1;
DelayCommand(6.0, RunHeel(oTarget, nDuration));
}
}