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.
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
| 02/03/21 by Stratovarius
 | |
| 
 | |
| Paimon, the Dancer
 | |
|   
 | |
| Granted Abilities: 
 | |
| Paimon gives you the ability to dance in and out of combat, and to make whirling attacks against multiple foes.
 | |
| 
 | |
| Dance of Death: When you use this ability as a standard action, you move up to your speed in a line and make a single attack against any creature you move 
 | |
| past, provoking attacks of opportunity normally. Once you have used this ability, you cannot do so again for 5 rounds.
 | |
| */
 | |
| 
 | |
| #include "bnd_inc_bndfunc"
 | |
| #include "prc_inc_combat"
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     //Declare major variables
 | |
|     object oBinder = OBJECT_SELF;
 | |
|     if(!BindAbilCooldown(oBinder, GetSpellId(), VESTIGE_PAIMON)) return;
 | |
|     object oTarget = PRCGetSpellTargetObject();
 | |
|     location lTarget = PRCGetSpellTargetLocation();
 | |
|     effect eDummy;
 | |
| 
 | |
|     effect eCharge = SupernaturalEffect(EffectMovementSpeedIncrease(99)); // Just to speed things up a bit
 | |
|     SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCharge, oBinder, 5.0);
 | |
|     float fLength = GetDistanceBetweenLocations(GetLocation(oBinder), lTarget);
 | |
|     vector vOrigin = GetPosition(oBinder);
 | |
|        
 | |
|     // Step one is check to see if we're using oTarget or not
 | |
|     if (GetIsObjectValid(oTarget))
 | |
|     {
 | |
|         lTarget = GetLocation(oTarget);
 | |
|         fLength = GetDistanceBetweenLocations(GetLocation(oBinder), lTarget);
 | |
|         if (DEBUG) FloatingTextStringOnCreature("Paimon Dance of Death: Valid Target", oBinder, FALSE);
 | |
|     }
 | |
|     else
 | |
|         oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin); // Only change targets if invalid
 | |
| 
 | |
|     // Move the PC to the location
 | |
|     AssignCommand(oBinder, ClearAllActions(TRUE));
 | |
|     AssignCommand(oBinder, ActionForceMoveToLocation(lTarget, TRUE));
 | |
|     if (DEBUG) FloatingTextStringOnCreature("Paimon Dance of Death: Distance: "+FloatToString(fLength), oBinder, FALSE);
 | |
|     
 | |
|     // Loop over targets in the line shape
 | |
|     if (DEBUG) FloatingTextStringOnCreature("Paimon Dance of Death: First Target: "+GetName(oTarget), oBinder, FALSE);
 | |
|     while(GetIsObjectValid(oTarget)) // Find the targets
 | |
|     {
 | |
|         if (DEBUG) FloatingTextStringOnCreature("Paimon Dance of Death: Loop 1, Target: "+GetName(oTarget), oBinder, FALSE);
 | |
|         if(oTarget != oBinder && GetIsEnemy(oTarget, oBinder)) // Don't overrun friends or yourself
 | |
|         {
 | |
|             float fDelay = PRCGetSpellEffectDelay(GetLocation(oBinder), oTarget) * 2.5;
 | |
|             if (DEBUG) FloatingTextStringOnCreature("Paimon Dance of Death: Loop 2, Delay: "+FloatToString(fDelay), oBinder, FALSE);
 | |
|             DelayCommand(fDelay, PerformAttack(oTarget, oBinder, eDummy, 0.0, 0, 0, 0, "Dance of Death Hit", "Dance of Death Miss")); 
 | |
|         }// end if - Target validity check
 | |
|     // Get next target
 | |
|     oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin);
 | |
|     }// end while - Target loop  
 | |
| }
 |