Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
| 13/02/19 by Stratovarius
 | |
| 
 | |
| Killing Shadows
 | |
| 
 | |
| Apprentice, Eyes of Darkness 
 | |
| Level/School: 3rd/Transmutation 
 | |
| Range: 30 ft. 
 | |
| Effect: Cone 
 | |
| Duration: Instantaneous 
 | |
| Saving Throw: Will half 
 | |
| Spell Resistance: Yes
 | |
| 
 | |
| Your eyes turn black and shoot forth a shadowy cone of punishment.
 | |
| 
 | |
| Creatures within a cone of killing shadows take 1d8 points of damage per caster level (maximum 10d8), or half that amount on a successful Will save.
 | |
| */
 | |
| 
 | |
| #include "shd_inc_shdfunc"
 | |
| #include "shd_mysthook"
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if(!ShadPreMystCastCode()) return;
 | |
| 
 | |
|     object oShadow      = OBJECT_SELF;
 | |
|     object oTarget      = PRCGetSpellTargetObject();
 | |
|     location lTargetLocation = PRCGetSpellTargetLocation();
 | |
|     struct mystery myst = EvaluateMystery(oShadow, oTarget, (METASHADOW_EMPOWER | METASHADOW_MAXIMIZE));
 | |
| 
 | |
|     if(myst.bCanMyst)
 | |
|     {
 | |
|         int nDie = min(myst.nShadowcasterLevel, 10); 
 | |
|     
 | |
|         //Declare the spell shape, size and the location.  Capture the first target object in the shape.
 | |
|         object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), lTargetLocation, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
 | |
|         //Cycle through the targets within the spell shape until an invalid object is captured.
 | |
|         while(GetIsObjectValid(oTarget))
 | |
|         {
 | |
|             if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oShadow))
 | |
|             {
 | |
|                 SignalEvent(oTarget, EventSpellCastAt(oShadow, myst.nMystId));
 | |
|                 //Get the distance between the target and caster to delay the application of effects
 | |
|                 float fDelay = GetDistanceBetween(oShadow, oTarget)/20.0;
 | |
|                 //Make SR check, and appropriate saving throw(s).
 | |
|                 if((!PRCDoResistSpell(oShadow, oTarget, myst.nPen) && (oTarget != oShadow)) || myst.bIgnoreSR)
 | |
|                 {
 | |
|                     int nDamage = MetashadowsDamage(myst, 8, nDie);
 | |
|                     
 | |
|                     // Cut it in half on success
 | |
|                     if (PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetShadowcasterDC(oShadow), SAVING_THROW_TYPE_SPELL))
 | |
|                         nDamage /= 2;                    
 | |
| 
 | |
|                     //Apply delayed effects
 | |
|                     DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M_PURPLE), oTarget));
 | |
|                     DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_MAGICAL), oTarget));
 | |
|                 }
 | |
|             }
 | |
|         
 | |
|         //Select the next target within the spell shape.
 | |
|         oTarget = MyNextObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), lTargetLocation, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);   
 | |
|         }
 | |
|     }
 | |
| } |