PRC8/nwn/nwnprc/trunk/newspellbook/tob_dw_lpngflm.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

65 lines
2.1 KiB
Plaintext

/*
----------------
Leaping Flame
tob_dw_lpngflm.nss
----------------
31/08/07 by Stratovarius
*/ /** @file
Leaping Flame
Desert Wind (Counter) [Teleport]
Level: Swordsage 5
Prerequisite: Two Desert Wind Maneuvers
Initiation Action: 1 Swift Action
Range: Personal.
Target: You
Duration: Instantaneous
As your foe attacks you, you disappear in a burst of flame and smoke,
only to reappear as if out of thin air next to him.
You teleport up to a 100ft to the person who last attacked you.
This is a supernatural maneuver.
*/
#include "tob_inc_move"
#include "tob_movehook"
////#include "prc_alterations"
#include "prc_inc_teleport"
void main()
{
if (!PreManeuverCastCode())
{
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oInitiator = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
if(move.bCanManeuver)
{
location lTarget = GetLocation(oTarget);
// Check if the caster can teleport and inform if they can't
// There's also a range component here
if(GetCanTeleport(oInitiator, lTarget, TRUE, TRUE) && FeetToMeters(100.0) >= GetDistanceBetween(oInitiator, oTarget))
{
// Assign jump command with delay to prevent the damn infinite action loop
DelayCommand(1.0f, AssignCommand(oInitiator, JumpToLocation(lTarget)));
// Do some VFX
DelayCommand(0.5f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oInitiator, 0.55));
DrawLineFromVectorToVector(DURATION_TYPE_INSTANT, VFX_IMP_WIND, GetArea(oInitiator), GetPosition(oInitiator), GetPositionFromLocation(lTarget), 0.0,
FloatToInt(GetDistanceBetweenLocations(GetLocation(oInitiator), lTarget)), // One VFX every meter
0.5
);
}
}
}