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.
80 lines
2.7 KiB
Plaintext
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));
|
|
}
|
|
}
|