PRC8/nwn/nwnprc/trunk/smp/phs_s_haste.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

85 lines
2.9 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Haste
//:: Spell FileName PHS_S_Haste
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
1 creature/level in 5M area. 8M range. 1 extra attack, +1 attack rolls,
+1 dodge AC, +1 reflex saves, +50% movement increase.
Counters/dispells slow.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Haste
- 5M (15Ft, large) all allies affected
- Removes any slow OR
- Applies haste.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell Hook Check.
if(!PHS_SpellHookCheck(PHS_SPELL_HASTE)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
object oTarget;
location lTarget = GetSpellTargetLocation();
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
float fDelay;
// 1 creature a level
int nTagetsDone;
// Duration - rounds
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
// Declare effects
effect eHaste = PHS_CreateHasteEffect();
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eVis = EffectVisualEffect(VFX_IMP_HASTE);
effect eRemoveVis = EffectVisualEffect(VFX_IMP_DISPEL);
// Link
effect eLink = EffectLinkEffects(eHaste, eCessate);
// Just loops those in the AOE (large, 5M)
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget, TRUE);
while(GetIsObjectValid(oTarget) && nTagetsDone < nCasterLevel)
{
// Check faction/friendly or not
if(GetIsFriend(oTarget) || GetFactionEqual(oTarget))
{
// Add one to targets done.
nTagetsDone++;
// Get delay
fDelay = GetDistanceBetweenLocations(GetLocation(oTarget), lTarget)/20;
// Check for haste
if(PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_SLOW, oTarget, fDelay))
{
// Removed
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eRemoveVis));
}
else
{
// Apply haste, no slow
// - Remove all magical speed increases
PHS_RemoveSpecificEffect(EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, oTarget);
// Remove previous spell castings
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_HASTE, oTarget);
// Apply haste
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eVis));
PHS_ApplyDuration(oTarget, eLink, fDuration);
}
}
// Get next target
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget, TRUE);
}
}