Further file organization
Further file organization
This commit is contained in:
59
nwn/nwnprc/trunk/newspellbook/bnd_vest_paidnc.nss
Normal file
59
nwn/nwnprc/trunk/newspellbook/bnd_vest_paidnc.nss
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user