PRC8/nwn/nwnprc/trunk/smp/smp_inc_ability.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

119 lines
4.3 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Name (Monster) Ability Include file
//:: FileName SMP_INC_ABILITY
//:://////////////////////////////////////////////
//:: Notes
//:://////////////////////////////////////////////
This includes some handy things for abilties.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
// Immunities (Includes constants)
#include "SMP_INC_RESIST"
// SMP_INC_ABILITY. This returns a DC based on 2 factors:
// 1. Half the levels provided by nClass
// 2. The modifier for the ability nAbility
// So, it'll return 10 + Half of nClass level's + Ability modifier of nAbility
int SMP_GetAbilitySaveDC(int nClass, int nAbility);
// SMP_INC_ABILITY. This sets oTarget to be immune to this spells effect from
// oCreature forever.
// Sets a local int retrievable by SMP_GetIsImmuneToAbility().
void SMP_SetIsImmuneToAbility(object oTarget, int nId, object oCreature = OBJECT_SELF);
// SMP_INC_ABILITY. This will return TRUE if oTarget is immune to futher uses of
// nId ability used by oCreature.
int SMP_GetIsImmuneToAbility(object oTarget, int nId, object oCreature = OBJECT_SELF);
// SMP_INC_ABILITY. Monster non-spell ability save.
// - Uses SAVING_THROW_WILL, SAVING_THROW_REFLEX, SAVING_THROW_FORT.
// functions: WillSave ReflexSave FortitudeSave.
int SMP_SavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType = SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF, float fDelay = 0.0);
// This returns a DC based on 2 factors:
// 1. Half the levels provided by nClass
// 2. The modifier for the ability nAbility
// So, it'll return 10 + Half of nClass level's + Ability modifier of nAbility
int SMP_GetAbilitySaveDC(int nClass, int nAbility)
{
// Start DC at 10...
// * Add half the levels of nClass
// * Add the nAbility modifer
return 10 + (GetLevelByClass(nClass)/2) + GetAbilityModifier(nAbility);
}
// This sets oTarget to be immune to this spells effect from oCreature forever.
// Sets a local int retrievable by SMP_GetIsImmuneToAbility().
void SMP_SetIsImmuneToAbility(object oTarget, int nId, object oCreature = OBJECT_SELF)
{
SetLocalInt(oCreature, "SMP_IMMMUNE_TO_ABILITY" + IntToString(nId) + ObjectToString(oTarget), TRUE);
}
// This will return TRUE if oTarget is immune to futher uses of nId ability
// used by oCreature.
int SMP_GetIsImmuneToAbility(object oTarget, int nId, object oCreature = OBJECT_SELF)
{
return GetLocalInt(oCreature, "SMP_IMMMUNE_TO_ABILITY" + IntToString(nId) + ObjectToString(oTarget));
}
// Monster non-spell ability save.
// - Uses SAVING_THROW_WILL, SAVING_THROW_REFLEX, SAVING_THROW_FORT.
// functions: WillSave ReflexSave FortitudeSave.
int SMP_SavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType = SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF, float fDelay = 0.0)
{
// This does not decrease the save if there are things like Protection from
// Spells.
// Declare things
effect eVis;
int bValid = FALSE;
// Fortitude saving throw
if(nSavingThrow == SAVING_THROW_FORT)
{
bValid = FortitudeSave(oTarget, nDC, nSaveType, oSaveVersus);
if(bValid == 1)
{
eVis = EffectVisualEffect(VFX_IMP_FORTITUDE_SAVING_THROW_USE);
}
}
// Reflex saving throw
else if(nSavingThrow == SAVING_THROW_REFLEX)
{
bValid = ReflexSave(oTarget, nDC, nSaveType, oSaveVersus);
if(bValid == 1)
{
eVis = EffectVisualEffect(VFX_IMP_REFLEX_SAVE_THROW_USE);
}
}
// Will saving throw
else if(nSavingThrow == SAVING_THROW_WILL)
{
bValid = WillSave(oTarget, nDC, nSaveType, oSaveVersus);
if(bValid == 1)
{
eVis = EffectVisualEffect(VFX_IMP_WILL_SAVING_THROW_USE);
}
}
/* No error checking (keeps it fast) we'd know anyway of errors!
Finally:
return 0 = FAILED SAVE
return 1 = SAVE SUCCESSFUL
return 2 = IMMUNE TO WHAT WAS BEING SAVED AGAINST
We ignore 2, and say it is 0.
*/
// If 2, ignore
if(bValid == 2)
{
bValid = 0;
}
// If we save, apply save effect.
else if(bValid == 1)
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
return bValid;
}