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.
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
| 12/12/19 by Stratovarius
 | |
| 
 | |
| Menagerie of Darkness
 | |
| 
 | |
| Master, Shadowscape
 | |
| Level/School: 8th/Transmutation
 | |
| Range: 30 ft.
 | |
| Area: 30-ft.-radius emanation centered on you
 | |
| Duration: 10 minutes/level
 | |
| Saving Throw: Will negates
 | |
| Spell Resistance: Yes
 | |
| 
 | |
| Nearby animals and vermin abruptly shudder. Their mouths and eyes gape wide as a torrent of blackness flows into them from the surrounding gloom.
 | |
| 
 | |
| Any animals or vermin within the emanation, or who enter it, must make a Will save or immediately take on the aspects of their shadow selves, temporarily gaining the dark creature template. 
 | |
| You gain control over these animals, as per the spell dominate animal. Menagerie of darkness does not affect animals or vermin with Hit Dice higher than your caster level.
 | |
| */
 | |
| 
 | |
| #include "shd_inc_shdfunc"
 | |
| #include "shd_mysthook"
 | |
| #include "prc_inc_template"
 | |
| 
 | |
| void DoMenagerie(object oShadow, float fDur, int nDC, int nShadowcasterLevel);
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if(!ShadPreMystCastCode()) return;
 | |
| 
 | |
|     object oShadow      = OBJECT_SELF;
 | |
|     object oTarget      = PRCGetSpellTargetObject();
 | |
|     struct mystery myst = EvaluateMystery(oShadow, oTarget, METASHADOW_EXTEND);
 | |
| 
 | |
|     if(myst.bCanMyst)
 | |
|     {
 | |
|         myst.fDur = 600.0 * myst.nShadowcasterLevel;
 | |
|         if(myst.bExtend) myst.fDur *= 2;   
 | |
|         int nDC = GetShadowcasterDC(oShadow);
 | |
|         
 | |
| 		DoMenagerie(oShadow, myst.fDur, nDC, myst.nShadowcasterLevel);           
 | |
|     }
 | |
| }
 | |
| 
 | |
| void DoMenagerie(object oShadow, float fDur, int nDC, int nShadowcasterLevel)  
 | |
| {
 | |
| 	location lTarget = GetLocation(oShadow);
 | |
| 	// Loop the allies to get the bonus
 | |
|     object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
 | |
|     while(GetIsObjectValid(oTarget))
 | |
|     {
 | |
|     	int nRacialType = MyPRCGetRacialType(oTarget);
 | |
| 
 | |
| 		// Must be a vermin or animal and not already have the dark template and have HD less than or equal to caster level
 | |
|     	if((nRacialType == RACIAL_TYPE_VERMIN || nRacialType == RACIAL_TYPE_ANIMAL) && !GetHasTemplate(TEMPLATE_DARK, oTarget) && nShadowcasterLevel >= GetHitDice(oTarget))
 | |
|         {
 | |
|             if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SPELL))
 | |
|             {
 | |
|                 effect eLink = EffectCutsceneDominated();
 | |
|                 SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur, TRUE, MYST_MENAGERIE_OF_DARKNESS, nShadowcasterLevel);  
 | |
|                 ApplyTemplateToObject(TEMPLATE_DARK, oTarget);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //Select the next target within the spell shape.
 | |
|         oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
 | |
|     }
 | |
|     
 | |
|     if (fDur > 0.0) DelayCommand(3.0, DoMenagerie(oShadow, fDur-3.0, nDC, nShadowcasterLevel));
 | |
| }       	 |