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.
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
|
|
}
|
|
} |