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.
105 lines
4.0 KiB
Plaintext
105 lines
4.0 KiB
Plaintext
/*
|
|
----------------
|
|
Comet Throw
|
|
|
|
tob_stsn_cmtthr.nss
|
|
----------------
|
|
|
|
19/08/07 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Comet Throw
|
|
|
|
Setting Sun (Strike)
|
|
Level: Swordsage 4
|
|
Prerequisite: One Setting Sun maneuver.
|
|
Initiation Action: 1 Standard Action
|
|
Range: Melee Attack.
|
|
Target: One Creature.
|
|
Save: Reflex partial; see text
|
|
|
|
You use your foe's momentum against him, throwing him through the air to crash into a second enemy.
|
|
|
|
Make a trip attempt against your target. You get a +4 bonus on this attempt and cannot be tripped
|
|
if you fail on this attempt. 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 4d6 damage. If there is a second
|
|
foe within the range of the throw, he is struck by the thrown foe and takes 4d6, reflex half.
|
|
*/
|
|
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
#include "prc_inc_combmove"
|
|
|
|
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 = 4;
|
|
if(GetItemPossessedBy(oInitiator, "WOL_Eventide") == GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator) && GetHasManeuver(MOVE_SS_COMET_THROW, CLASS_TYPE_SWORDSAGE, oInitiator)) nBonus += 2;
|
|
// 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);
|
|
|
|
// Find the target to be tossed into
|
|
int nStop = FALSE;
|
|
location lTarget;
|
|
object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(fDist), GetLocation(oInitiator), TRUE, OBJECT_TYPE_CREATURE);
|
|
while(GetIsObjectValid(oAreaTarget) && !nStop)
|
|
{
|
|
// No hitting yourself or your friends, and they need to be within hitting range.
|
|
if(oTarget != oAreaTarget && GetIsEnemy(oAreaTarget, oInitiator))
|
|
{
|
|
lTarget = GetLocation(oAreaTarget);
|
|
// End on the first legal target
|
|
nStop = TRUE;
|
|
AssignCommand(oTarget, ClearAllActions(TRUE));
|
|
AssignCommand(oTarget, JumpToLocation(lTarget));
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(4)), oTarget);
|
|
|
|
// Saving Throw for area target
|
|
int nDamage = d6(4);
|
|
// Adjust damage according to Reflex Save, Evasion or Improved Evasion
|
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE);
|
|
|
|
if(nDamage > 0)
|
|
{
|
|
effect eDam = EffectDamage(nDamage);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oAreaTarget, 6.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oAreaTarget);
|
|
}
|
|
}// end if - Target validity check
|
|
|
|
// Get next target
|
|
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fDist), GetLocation(oInitiator), TRUE, OBJECT_TYPE_CREATURE);
|
|
}// end while - Target loop
|
|
|
|
|
|
// There were no valid targets
|
|
if (!nStop)
|
|
{
|
|
// Knock em down
|
|
_DoBullRushKnockBack(oTarget, oInitiator, fDist);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(4)), oTarget);
|
|
}
|
|
}
|
|
}
|
|
} |