PRC8/nwn/nwnprc/trunk/newspellbook/tob_irnh_ihsrg.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

103 lines
3.1 KiB
Plaintext

/*
----------------
Iron Heart Surge
tob_irnh_ihsrg.nss
----------------
15/07/07 by Stratovarius
*/ /** @file
Iron Heart Surge
Iron Heart
Level: Warblade 3
Prerequisite: One Iron Heart maneuver.
Initiation Action: 1 Standard Action
Range: Personal
Target: You
Duration: 1 round.
By drawing on your mental strength and physical fortitude, you break free
of a debilitating state that might otherwise defeat you.
You remove one negative status effect on you, and gain a +2 bonus to attacks for one round.
*/
#include "tob_inc_move"
#include "tob_movehook"
int IronHeartCheck(int nSpellId)
{
switch (nSpellId)
{
case SPELL_POWER_ATTACK1:
case SPELL_POWER_ATTACK2:
case SPELL_POWER_ATTACK3:
case SPELL_POWER_ATTACK4:
case SPELL_POWER_ATTACK5:
case SPELL_POWER_ATTACK6:
case SPELL_POWER_ATTACK7:
case SPELL_POWER_ATTACK8:
case SPELL_POWER_ATTACK9:
case SPELL_POWER_ATTACK10:
case SPELL_INTUITIVE_ATK:
case MOVE_IH_PUNISHING_STANCE:
case MOVE_DM_STANCE_OF_CLARITY:
case POWER_EXPANSION:
return FALSE;
break;
}
return TRUE;
}
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)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUL_TRAP), oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAttackIncrease(2), oTarget, 6.0);
int nStop = FALSE;
effect eBad = GetFirstEffect(oTarget);
//Search for negative effects
while(GetIsEffectValid(eBad) && !nStop)
{
int nInt = GetEffectSpellId(eBad);
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
{
//Remove effect if it is negative.
if(IronHeartCheck(nInt))
{
RemoveEffect(oTarget, eBad);
nStop = TRUE; // One effect only
}
}
eBad = GetNextEffect(oTarget);
}
}
}