Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
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
|
|
}
|