Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
83 lines
2.8 KiB
Plaintext
83 lines
2.8 KiB
Plaintext
//////////////////////////////////////////////////
|
|
// Stalker in the Night
|
|
// tob_sdhd_stalker.nss
|
|
// Stratovarius 30/09/18
|
|
//////////////////////////////////////////////////
|
|
/** @file Stalker in the Night
|
|
Shadow Hand (Strike)
|
|
Level: Swordsage 6
|
|
Prerequisite: None
|
|
Initiation Action: 1 standard action
|
|
Range: Melee attack
|
|
Target: One creature
|
|
|
|
You slide through the dark like a bird of prey, emerging only to strike down your foe before sliding back into shadow's welcoming embrace.
|
|
|
|
Choose a location up a medium distance away. The first enemy along that path is struck by a single melee attack. You automatically hide at the end of the attack.
|
|
*/
|
|
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
#include "x0_i0_modes"
|
|
|
|
void DoSneak(object oInitiator, location lTarget)
|
|
{
|
|
// Move the PC to the location
|
|
AssignCommand(oInitiator, ClearAllActions(TRUE));
|
|
AssignCommand(oInitiator, JumpToLocation(lTarget));
|
|
AssignCommand(oInitiator, ClearAllActions());
|
|
SetActionMode(oInitiator, ACTION_MODE_STEALTH, TRUE);
|
|
UseStealthMode();
|
|
ActionUseSkill(SKILL_HIDE, oInitiator);
|
|
ActionUseSkill(SKILL_MOVE_SILENTLY, oInitiator);
|
|
}
|
|
|
|
void DoAttack(object oTarget, object oInitiator, location lTarget)
|
|
{
|
|
// Move the PC to the location
|
|
AssignCommand(oInitiator, ClearAllActions(TRUE));
|
|
AssignCommand(oInitiator, JumpToLocation(GetLocation(oTarget)));
|
|
effect eNone;
|
|
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Stalker in the Night Hit", "Stalker in the Night Miss");
|
|
DelayCommand(0.1, DoSneak(oInitiator, lTarget));
|
|
}
|
|
|
|
void DoStalker(object oInitiator, location lTarget)
|
|
{
|
|
vector vOrigin = GetPosition(oInitiator);
|
|
int nContinue = TRUE;
|
|
|
|
// Find a target
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, 30.0, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin);
|
|
while(GetIsObjectValid(oTarget) && nContinue) // Find the targets
|
|
{
|
|
if(oTarget != oInitiator && GetIsEnemy(oTarget, oInitiator)) // Don't overrun friends or yourself
|
|
{
|
|
DelayCommand(0.0, DoAttack(oTarget, oInitiator, lTarget));
|
|
}// end if - Target validity check
|
|
// Get next target
|
|
oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, 30.0, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin);
|
|
}// end while - Target loop
|
|
}
|
|
|
|
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();
|
|
location lTarget = PRCGetSpellTargetLocation();
|
|
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
|
|
|
if(move.bCanManeuver)
|
|
{
|
|
DoStalker(oInitiator, lTarget);
|
|
}
|
|
}
|
|
|
|
|