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.
91 lines
3.2 KiB
Plaintext
91 lines
3.2 KiB
Plaintext
/*
|
|
----------------
|
|
Tornado Throw
|
|
|
|
tob_stsn_trnthr.nss
|
|
----------------
|
|
|
|
10/10/18 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Tornado Throw
|
|
|
|
Setting Sun (Strike)
|
|
Level: Swordsage 9
|
|
Prerequisite: Five Setting Sun maneuvers
|
|
Initiation Action: 1 Standard Action
|
|
Range: Melee Attack.
|
|
Target: One Creature.
|
|
|
|
Like a whirlwind, you twist and spin across the battlefield, tossing foes away left and right.
|
|
|
|
Make a trip attempt against your target. You cannot be tripped if you fail on this attempt, and use Dexterity or Strength, whichever is better.
|
|
If you succeed on the check, your enemy is thrown 10 feet away plus 5 feet for every 5 you succeed on the trip check by. The target takes 2d6 damage plus 1d6 for every extra five feet thrown.
|
|
You gain a +2 bonus on the trip check for every 5 feet moved after the first throw.
|
|
|
|
Repeat until you have moved sixty feet or there are no more enemies within range.
|
|
*/
|
|
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
#include "prc_inc_combmove"
|
|
|
|
void TornadoThrow(object oInitiator, object oTarget, int nBonus)
|
|
{
|
|
// Trip attempt
|
|
int nSucceed = DoTrip(oInitiator, oTarget, nBonus, FALSE, FALSE);
|
|
// If you succeed, toss em away 10 feet and knock em down
|
|
if (nSucceed)
|
|
{
|
|
int nSkill = GetLocalInt(oInitiator, "TripDifference")/5;
|
|
// Another five feet of distance for every 5 you succeed the check by
|
|
float fDist = 10.0 + (nSkill * 5.0);
|
|
int nDam = FloatToInt(fDist) / 5;
|
|
|
|
// Knock em down
|
|
_DoBullRushKnockBack(oTarget, oInitiator, fDist);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(nDam)), oTarget);
|
|
}
|
|
}
|
|
|
|
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)
|
|
{
|
|
int nBonus = 0;
|
|
TornadoThrow(oInitiator, oTarget, nBonus);
|
|
|
|
// Find the next target
|
|
location lTarget;
|
|
float fDist;
|
|
object oAreaTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oInitiator);
|
|
while(GetIsObjectValid(oAreaTarget) && 60.0 > fDist) //Farthest Initiator can move in a round
|
|
{
|
|
// No hitting yourself or your friends
|
|
if(GetIsEnemy(oAreaTarget, oInitiator))
|
|
{
|
|
fDist += MetersToFeet(GetDistanceBetween(oInitiator, oAreaTarget));
|
|
AssignCommand(oInitiator, ClearAllActions(TRUE));
|
|
AssignCommand(oInitiator, JumpToLocation(GetLocation(oAreaTarget)));
|
|
nBonus = (FloatToInt(fDist) / 5) * 2; // Bonus is +2 for every 5 feet moved
|
|
TornadoThrow(oInitiator, oAreaTarget, nBonus);
|
|
}// end if - Target validity check
|
|
|
|
// Get next target
|
|
oAreaTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oInitiator);
|
|
}// end while - Target loop
|
|
}
|
|
} |