Further file organization
Further file organization
This commit is contained in:
105
nwn/nwnprc/trunk/newspellbook/tob_stsn_cmtthr.nss
Normal file
105
nwn/nwnprc/trunk/newspellbook/tob_stsn_cmtthr.nss
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
----------------
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user