home *** CD-ROM | disk | FTP | other *** search
/ PC Zone 125 / DPPCZ0203B.7z / DPPCZ0203B.ISO / Demos / Neverwinter / data1.cab / override / nw_s0_horrwilt.nss < prev    next >
Text File  |  2002-09-10  |  4KB  |  81 lines

  1. //::///////////////////////////////////////////////
  2. //:: Horrid Wilting
  3. //:: NW_S0_HorrWilt
  4. //:: Copyright (c) 2001 Bioware Corp.
  5. //:://////////////////////////////////////////////
  6. /*
  7.     All living creatures (not undead or constructs)
  8.     suffer 1d8 damage per caster level to a maximum
  9.     of 25d8 damage.
  10. */
  11. //:://////////////////////////////////////////////
  12. //:: Created By: Preston Watamaniuk
  13. //:: Created On: Sept 12 , 2001
  14. //:://////////////////////////////////////////////
  15.  
  16. #include "NW_I0_SPELLS"    
  17. void main()
  18. {
  19.     //Declare major variables
  20.     object oCaster = OBJECT_SELF;
  21.     int nCasterLvl = GetCasterLevel(oCaster);
  22.     int nMetaMagic = GetMetaMagicFeat();
  23.     int nDamage;
  24.     float fDelay;
  25.     effect eExplode = EffectVisualEffect(VFX_FNF_HORRID_WILTING);
  26.     effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
  27.     effect eDam;
  28.     //Get the spell target location as opposed to the spell target.
  29.     location lTarget = GetSpellTargetLocation();
  30.     //Limit Caster level for the purposes of damage
  31.     if (nCasterLvl > 25)
  32.     {
  33.         nCasterLvl = 25;
  34.     }
  35.     //Apply the horrid wilting explosion at the location captured above.
  36.     ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
  37.     //Declare the spell shape, size and the location.  Capture the first target object in the shape.
  38.     object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget);
  39.     //Cycle through the targets within the spell shape until an invalid object is captured.
  40.     while (GetIsObjectValid(oTarget))
  41.     {
  42.         if(!GetIsFriend(oTarget))
  43.         {
  44.             //Fire cast spell at event for the specified target
  45.             SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HORRID_WILTING));
  46.             //Get the distance between the explosion and the target to calculate delay
  47.             fDelay = GetRandomDelay(1.5, 2.5);
  48.             if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
  49.             {
  50.                 if(GetRacialType(oTarget) != RACIAL_TYPE_CONSTRUCT && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
  51.                 {
  52.                     //Roll damage for each target
  53.                     nDamage = d8(nCasterLvl);
  54.                     //Resolve metamagic
  55.                     if (nMetaMagic == METAMAGIC_MAXIMIZE)
  56.                     {
  57.                         nDamage = 8 * nCasterLvl;
  58.                     }
  59.                     else if (nMetaMagic == METAMAGIC_EMPOWER)
  60.                     {
  61.                        nDamage = nDamage + nDamage / 2;
  62.                     }
  63.                     if(/*Fort Save*/ MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
  64.                     {
  65.                         nDamage = nDamage/2;
  66.                     }
  67.                     //Set the damage effect
  68.                     eDam = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
  69.                     // Apply effects to the currently selected target.
  70.                     DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
  71.                     //This visual effect is applied to the target object not the location as above.  This visual effect
  72.                     //represents the flame that erupts on the target not on the ground.
  73.                     DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
  74.                 }
  75.              }
  76.         }
  77.        //Select the next target within the spell shape.
  78.        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget);
  79.     }
  80. }
  81.