PoA_PRC8/_haks/poa_exp_abilities/x1_s2_hailarrow.nss
Jaysyn904 7dd83ad168 Spell & Ability Upgrade
Reorganized hak files & removed duplicates.  Added @rafhot's PRC spell & ability level scaling expansion.  Further script integration.  Full compile.
2023-08-19 21:08:35 -04:00

66 lines
2.0 KiB
Plaintext

//::///////////////////////////////////////////////
//:: 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 +10, DAMAGE_TYPE_PIERCING, IPGetDamagePowerConstantFromNumber(nBonus));
effect eMagic = EffectDamage(nBonus +10, DAMAGE_TYPE_MAGICAL);
ApplyEffectToObject(DURATION_TYPE_INSTANT, ePhysical, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eMagic, oTarget);
}
}
}
void main()
{
object oTarget;
int nLevel = GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, OBJECT_SELF);
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));
}
}
}