PRC8_fork/trunk/smp/phs_s_touchfatig.nss

63 lines
2.2 KiB
Plaintext
Raw Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Touch of Fatigue
//:: Spell FileName PHS_S_TouchFatig
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Range: Touch Target: Creature touched Duration: 1 round/level
Saving Throw: Fortitude negates Spell Resistance: Yes
You channel negative energy through your touch, fatiguing the target. You must
succeed on a touch attack to strike a target. The subject is immediately
fatigued for the spell<6C>s duration.
This spell has no effect on a creature that is already fatigued. Unlike with
normal fatigue, the effect ends as soon as the spell<6C>s duration expires.
Material Component: A drop of sweat.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Applies the fatigue using the special way.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell Hook Check.
if(!PHS_SpellHookCheck(PHS_SPELL_TOUCH_OF_FATIGUE)) return;
//Declare major variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nMetaMagic = PHS_GetMetaMagicFeat();
int nCasterLevel = PHS_GetCasterLevel();
// 1 round/level
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
// Always fire spell cast at event
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_TOUCH_OF_FATIGUE);
// Apply VFX (hit or not)
PHS_ApplyTouchVisual(oTarget, VFX_IMP_REDUCE_ABILITY_SCORE, nTouch);
// Melee touch attack.
if(PHS_SpellTouchAttack(PHS_TOUCH_MELEE, oTarget, TRUE))
{
// Must check reaction type for PvP
if(!GetIsReactionTypeFriendly(oTarget))
{
// Check spell resistance and immunities.
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
{
// Apply VFX Impact and negative ability effect
PHS_ApplyFatigue(oTarget, FALSE, DURATION_TYPE_TEMPORARY, fDuration);
}
}
}
}