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