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.
		
			
				
	
	
		
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|     Dirgesinger's Song of Horror
 | |
| */
 | |
| 
 | |
| #include "prc_inc_spells"
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if (!GetHasFeat(FEAT_BARD_SONGS, OBJECT_SELF))
 | |
|     {
 | |
|         FloatingTextStrRefOnCreature(85587,OBJECT_SELF); // no more bardsong uses left
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     DecrementRemainingFeatUses(OBJECT_SELF, FEAT_BARD_SONGS);
 | |
| 
 | |
|     if (PRCGetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
 | |
|     {
 | |
|         FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     //Declare major variables
 | |
|     object oPC = OBJECT_SELF;
 | |
|     int nDuration = 10;
 | |
|     int nDC = 10 + GetSkillRank(SKILL_PERFORM, oPC);
 | |
| 
 | |
|     effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
 | |
|     effect eFNF = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
 | |
|     ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));
 | |
| 
 | |
|     object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
 | |
| 
 | |
|     while(GetIsObjectValid(oTarget))
 | |
|     {
 | |
|         // * GZ Oct 2003: If we are silenced, we can not benefit from bard song
 | |
|         if (!PRCGetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !PRCGetHasEffect(EFFECT_TYPE_DEAF,oTarget))
 | |
|         {
 | |
|             if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
 | |
|             {
 | |
|                 //Fire cast spell at event for the specified target
 | |
|                 SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
 | |
| 
 | |
|                 if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
 | |
|                 {
 | |
|                 //Apply the VFX impact and effects
 | |
|                     ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
 | |
|                     ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, d6(), DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
 | |
|                     ApplyAbilityDamage(oTarget, ABILITY_DEXTERITY, d6(), DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|         }
 | |
|         oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
 | |
|     }
 | |
| }
 |