No, Hail of Arrows is active feat.
This is how my x1_s2_hailarrow.nss look like (NWN Diamond, 1.69, SoU, HotU)
//::///////////////////////////////////////////////
//:: x1_s2_hailarrow
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
One arrow per arcane archer level at all targets
GZ SEPTEMBER 2003
Added damage penetration
*/
//:://////////////////////////////////////////////
//:: Created By:
//:: Created On:
//:://////////////////////////////////////////////
#include "x0_i0_spells"
// GZ: 2003-07-23 fixed criticals not being honored
void DoAttack(object oTarget)
{
int nBonus = ArcaneArcherCalculateBonus();
int nDamage;
// * Roll Touch Attack
int nTouch = TouchAttackRanged(oTarget, TRUE);
if (nTouch > 0)
{
nDamage = ArcaneArcherDamageDoneByBow(nTouch ==2);
if (nDamage > 0)
{
// * GZ: Added correct damage power
effect ePhysical = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING, IPGetDamagePowerConstantFromNumber(nBonus));
effect eMagic = EffectDamage(nBonus, DAMAGE_TYPE_MAGICAL);
ApplyEffectToObject(DURATION_TYPE_INSTANT, ePhysical, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eMagic, oTarget);
}
}
}
void main()
{
object oTarget;
[b] [/b][u][b]int nLevel = GetLevelByclass(class_TYPE_ARCANE_ARCHER, OBJECT_SELF);[/b]
[/u] int i = 0;
float fDist = 0.0;
float fDelay = 0.0;
for (i = 1; i <= nLevel; i++)
{
oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, i);
if (GetIsObjectValid(oTarget) == TRUE)
{
fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 603));
effect eArrow = EffectVisualEffect(357);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eArrow, oTarget);
DelayCommand(fDelay, DoAttack(oTarget));
}
}
}
Modifié par Alex Warren, 26 août 2011 - 05:56 .