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.
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | ||
| 13/02/19 by Stratovarius
 | ||
| 
 | ||
| Sharp Shadows
 | ||
| 
 | ||
| Apprentice, Cloak of Shadows 
 | ||
| Level/School: 3rd/Abjuration 
 | ||
| Range: Personal 
 | ||
| Target: You 
 | ||
| Duration: 1 minute/level 
 | ||
| 
 | ||
| You cloak yourself in sharp spikes of darkness. Although they are weightless and do nothing to impede you, your foes soon discover that they’re not so lucky.
 | ||
| 
 | ||
| A creature striking you takes 1d6 points of piercing damage +1 point per caster level (maximum +15). Damage from sharp shadows is not considered magical for the purpose of overcoming damage reduction.
 | ||
| */
 | ||
| 
 | ||
| #include "shd_inc_shdfunc"
 | ||
| #include "shd_mysthook"
 | ||
| 
 | ||
| void main()
 | ||
| {    
 | ||
|     int nEvent = GetRunningEvent();
 | ||
| 
 | ||
|     object oShadow      = OBJECT_SELF;
 | ||
|     object oTarget      = PRCGetSpellTargetObject();
 | ||
|     object oItem;
 | ||
|     
 | ||
|     // We aren't being called from any event, instead being cast
 | ||
|     if(nEvent == FALSE)
 | ||
|     {
 | ||
|         if(!ShadPreMystCastCode()) return;
 | ||
|         struct mystery myst = EvaluateMystery(oShadow, oTarget, (METASHADOW_EXTEND | METASHADOW_EMPOWER | METASHADOW_MAXIMIZE));
 | ||
|     
 | ||
|         if(myst.bCanMyst)
 | ||
|         {
 | ||
|             myst.fDur = 60.0 * myst.nShadowcasterLevel;       
 | ||
|             if(myst.bExtend) myst.fDur *= 2;
 | ||
|             // Duration Effects
 | ||
|             SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_CHILL_SHIELD), oTarget, myst.fDur, TRUE, myst.nMystId, myst.nShadowcasterLevel);    
 | ||
|             
 | ||
|             // Add eventhook to the armor
 | ||
|             oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oShadow);
 | ||
|             IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), myst.fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
 | ||
|             AddEventScript(oItem, EVENT_ITEM_ONHIT, "shd_myst_shrpshd", TRUE, FALSE);
 | ||
|             DelayCommand(myst.fDur, RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "shd_myst_shrpshd", TRUE, FALSE));
 | ||
|             if(myst.bEmpower) 
 | ||
|             {
 | ||
|                 SetLocalInt(oShadow, "SharpShadEmp", TRUE);
 | ||
|                 DelayCommand(myst.fDur, DeleteLocalInt(oShadow, "SharpShadEmp"));
 | ||
|             }
 | ||
|             if(myst.bMaximize) 
 | ||
|             {
 | ||
|                 SetLocalInt(oShadow, "SharpShadMax", TRUE);
 | ||
|                 DelayCommand(myst.fDur, DeleteLocalInt(oShadow, "SharpShadMax"));
 | ||
|             }            
 | ||
|         }         
 | ||
|     }
 | ||
|     else if(nEvent == EVENT_ITEM_ONHIT)
 | ||
|     {
 | ||
|     	if(GetIsInMeleeRange(oTarget, oShadow))
 | ||
|     	{
 | ||
|         	int nDam = d6();
 | ||
|         	if (GetLocalInt(oShadow, "SharpShadMax")) nDam = 6;
 | ||
|         	if (GetLocalInt(oShadow, "SharpShadEmp")) nDam += nDam/2;
 | ||
|         	nDam += min(15, GetShadowcasterLevel(oShadow, CLASS_TYPE_SHADOWCASTER));
 | ||
|         	ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGMAG), oTarget);    
 | ||
|         	ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_PIERCING), oTarget);    
 | ||
|         }	
 | ||
|     }
 | ||
| } |