PRC8/nwn/nwnprc/trunk/include/spinc_lessorb.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

55 lines
2.1 KiB
Plaintext

#include "prc_inc_sp_tch"
//#include "prc_inc_combat"
//#include "prc_inc_spells"
void DoLesserOrb(effect eVis, int nDamageType, int nSpellID = -1)
{
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oCaster = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = PRCGetCasterLevel(oCaster);
int nMetaMagic = PRCGetMetaMagicFeat();
int nDice = (nCasterLvl + 1)/2;
if (nDice > 5) nDice = 5;
// Get the spell ID if it was not given.
if(-1 == nSpellID) nSpellID = PRCGetSpellId();
// Adjust the damage type of necessary.
nDamageType = PRCGetElementalDamageType(nDamageType, oCaster);
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster))
{
// Fire cast spell at event for the specified target
PRCSignalSpellEvent(oTarget, TRUE, nSpellID);
// Note that this spell has no spell resistance intentionally in the WotC Miniatures
// Handbook, bit powerful but that's how it is in the PnP book.
// Make touch attack, saving result for possible critical
int nTouchAttack = PRCDoRangedTouchAttack(oTarget);
if (nTouchAttack > 0)
{
// Roll the damage, doing double damage on a crit.
int nDamage = PRCGetMetaMagicDamage(nDamageType, 1 == nTouchAttack ? nDice : (nDice * 2), 8);
nDamage += SpellSneakAttackDamage(OBJECT_SELF, oTarget);
// Acid Sheath adds +1 damage per die to acid descriptor spells
if (GetHasDescriptor(GetSpellId(), DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF))
nDamage += nDice;
nDamage += SpellDamagePerDice(OBJECT_SELF, nDice);
// Apply the damage and the damage visible effect to the target.
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, nDamageType), oTarget);
PRCBonusDamage(oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
PRCSetSchool();
}
// Test main
//void main(){}