//:://///////////////////////////////////////////// //:: 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)); } }