Updated to PRC8. Further function integration. Fixed NPC onDeath script. Full compile. Updated release archive.
		
			
				
	
	
		
			112 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						|
//:: Dispel Magic
 | 
						|
//:: NW_S0_DisMagic.nss
 | 
						|
//:: Copyright (c) 2001 Bioware Corp.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Attempts to dispel all magic on a targeted
 | 
						|
//:: object, or simply the most powerful that it
 | 
						|
//:: can on every object in an area if no target
 | 
						|
//:: specified.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: Preston Watamaniuk
 | 
						|
//:: Created On: Jan 7, 2002
 | 
						|
//:: Updated On: Oct 20, 2003, Georg Zoeller
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
//:: modified by mr_bumpkin Dec 4, 2003
 | 
						|
#include "inc_dispel"  
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
 | 
						|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
 | 
						|
 | 
						|
    //--------------------------------------------------------------------------
 | 
						|
    /*
 | 
						|
      Spellcast Hook Code
 | 
						|
      Added 2003-06-20 by Georg
 | 
						|
      If you want to make changes to all spells,
 | 
						|
      check x2_inc_spellhook.nss to find out more
 | 
						|
    */
 | 
						|
    //--------------------------------------------------------------------------
 | 
						|
    if (!X2PreSpellCastCode())
 | 
						|
    {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
    // End of Spell Cast Hook
 | 
						|
 | 
						|
    effect    eVis         = EffectVisualEffect(VFX_IMP_BREACH);
 | 
						|
    effect    eImpact      = EffectVisualEffect(VFX_FNF_DISPEL);
 | 
						|
    object    oTarget      = PRCGetSpellTargetObject();
 | 
						|
    location  lLocal       = PRCGetSpellTargetLocation();
 | 
						|
    int       nCasterLevel = PRCGetCasterLevel(OBJECT_SELF);
 | 
						|
    int iTypeDispel = GetLocalInt(GetModule(),"BIODispel");
 | 
						|
 | 
						|
    //--------------------------------------------------------------------------
 | 
						|
    // Dispel Magic is capped at caster level 10
 | 
						|
    //--------------------------------------------------------------------------
 | 
						|
    if(nCasterLevel > 10)
 | 
						|
    {
 | 
						|
        nCasterLevel = 10;
 | 
						|
    }
 | 
						|
    
 | 
						|
    if (GetIsObjectValid(oTarget))
 | 
						|
    {
 | 
						|
        //----------------------------------------------------------------------
 | 
						|
        // Targeted Dispel - Dispel all
 | 
						|
        //----------------------------------------------------------------------
 | 
						|
          if (iTypeDispel)
 | 
						|
             spellsDispelMagic(oTarget, nCasterLevel, eVis, eImpact);
 | 
						|
           else
 | 
						|
             spellsDispelMagicMod(oTarget, nCasterLevel, eVis, eImpact);
 | 
						|
  
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        //----------------------------------------------------------------------
 | 
						|
        // Area of Effect - Only dispel best effect
 | 
						|
        //----------------------------------------------------------------------
 | 
						|
 | 
						|
        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, PRCGetSpellTargetLocation());
 | 
						|
        oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE );
 | 
						|
        while (GetIsObjectValid(oTarget))
 | 
						|
        {
 | 
						|
            if(GetObjectType(oTarget) == OBJECT_TYPE_AREA_OF_EFFECT)
 | 
						|
            {
 | 
						|
                //--------------------------------------------------------------
 | 
						|
                // Handle Area of Effects
 | 
						|
                //--------------------------------------------------------------
 | 
						|
                if (iTypeDispel)
 | 
						|
                   spellsDispelAoE(oTarget, OBJECT_SELF,nCasterLevel);
 | 
						|
                else
 | 
						|
                   spellsDispelAoEMod(oTarget, OBJECT_SELF,nCasterLevel);
 | 
						|
 | 
						|
            }
 | 
						|
            else if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
 | 
						|
            {
 | 
						|
                SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
 | 
						|
                  if (iTypeDispel)
 | 
						|
                     spellsDispelMagic(oTarget, nCasterLevel, eVis, eImpact, FALSE);
 | 
						|
                  else
 | 
						|
                     spellsDispelMagicMod(oTarget, nCasterLevel, eVis, eImpact, FALSE);
 | 
						|
            }
 | 
						|
 | 
						|
           oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE,lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
 | 
						|
// Getting rid of the local integer storing the spellschool name
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |