PRC8/nwn/nwnprc/trunk/newspellbook/inv_fiend_resil.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

76 lines
2.2 KiB
Plaintext

/*
Warlock Fiendish Resilience
Fast Healing x for 2 minutes(5 minutes if epic)
*/
#include "prc_inc_spells"
#include "inv_inc_invfunc"
#include "inv_invokehook"
void main()
{
// Ugly hack to tell PreInvocationCastCode() that we are casting as warlock
SetLocalInt(OBJECT_SELF, PRC_INVOKING_CLASS, CLASS_TYPE_WARLOCK + 1);
DelayCommand(0.0f, DeleteLocalInt(OBJECT_SELF, PRC_INVOKING_CLASS));
if(!PreInvocationCastCode()) return;
//Declare major variables
int nDuration = 2;
int nWarlock = GetLevelByClass(CLASS_TYPE_WARLOCK);
int nLevel;
if(nWarlock > 37) nLevel = 7;
else if(nWarlock > 27) nLevel = 6;
else if(nWarlock > 32) nLevel = 5;
else if(nWarlock > 22) nLevel = 4;
else if(nWarlock > 17) nLevel = 3;
else if(nWarlock > 12) nLevel = 2;
else if(nWarlock > 7) nLevel = 1;
nLevel += (GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE) + 5) / 7;
int nHealAmt;
switch(nLevel)
{
case 1: nHealAmt = 1; break;
case 2: nHealAmt = 2; break;
case 3: nHealAmt = 5; break;
case 4: nHealAmt = 7; break;
case 5: nHealAmt = 9; break;
case 6: nHealAmt = 12; break;
case 7: nHealAmt = 15; break;
}
//check for the epic feats
if(GetHasFeat(FEAT_EPIC_FIENDISH_RESILIENCE_I))
{
nHealAmt = 25;
nDuration = 5;
int nFeatAmt = 0;
int bDone = FALSE;
while(!bDone)
{
if(nFeatAmt >= 9)
bDone = TRUE;
else if(GetHasFeat(FEAT_EPIC_FIENDISH_RESILIENCE_II + nFeatAmt))
nFeatAmt++;
else
bDone = TRUE;
}
nHealAmt += 5 * nFeatAmt;
}
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eFastHeal = EffectRegenerate(nHealAmt, RoundsToSeconds(1));
effect eLink = EffectLinkEffects(eFastHeal, eDur);
//Fire cast spell at event for the specified target
SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, INVOKE_FIENDISH_RESILIENCE, FALSE));
//Apply the VFX impact and effect
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, TurnsToSeconds(nDuration));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_NATURE), OBJECT_SELF);
}