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
|
|
}
|