///:://///////////////////////////////////////////// //:: Restoration //:: x2_s0_restother.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Removes all negative effects unless they come from Poison, Disease or Curses. Can only be cast on Others - not on oneself. Caster takes 5 points of damage when this spell is cast. */ //::////////////////////////////////////////////// //:: Created By: Keith Warner //:: Created On: Jan 3/03 //::////////////////////////////////////////////// //:: #include "x2_inc_spellhook" void main() { /* Spellcast Hook Code Added 2003-07-07 by Georg Zoeller If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook SpeakString("I_AM_HEALING", TALKVOLUME_SILENT_TALK); //Declare major variables object oTarget = GetSpellTargetObject(); effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION); int bValid; if (oTarget != OBJECT_SELF) { effect eBad = GetFirstEffect(oTarget); //Search for negative effects while(GetIsEffectValid(eBad)) { if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS || GetEffectType(eBad) == EFFECT_TYPE_DEAF || GetEffectType(eBad) == EFFECT_TYPE_PARALYZE || GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL) { //Remove effect if it is negative. RemoveEffect(oTarget, eBad); } eBad = GetNextEffect(oTarget); } //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oTarget); //Apply Damage Effect to the Caster ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(5), OBJECT_SELF); } }