PRC8/nwn/nwnprc/trunk/newspellbook/bnd_vest_paidnc.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

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
}