PRC8/trunk/scripts/prc_wallbreatha.nss
Jaysyn904 1662218bb4 Initial upload.
Adding base PRC 4.19a files to repository.
2022-10-07 13:51:24 -04:00

95 lines
3.1 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Exhaled Barrier: On Enter
//:: prc_wallbreatha.nss
//:://////////////////////////////////////////////
/*
Person within the AoE take breath damage
per round.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: May 17, 2001
//:://////////////////////////////////////////////
//:: modified by mr_bumpkin Dec 4, 2003
//:: Modified for Exhaled Barrier by Fox on Jan 23, 2008
#include "prc_inc_spells"
void main()
{
//Declare major variables
int nDamage = 0;
effect eDam;
object oTarget;
int nSaveDamageType;
int nVisualType;
object oDragon = GetAreaOfEffectCreator();
int nDamageType = GetLocalInt(oDragon, "BarrierDamageType");
int nDiceType = GetLocalInt(oDragon, "BarrierDiceType");
int nDiceNumber = GetLocalInt(oDragon, "BarrierDiceNumber");
int nSaveDC = 10 + GetHitDice(oDragon) / 2 + max(GetAbilityModifier(ABILITY_CONSTITUTION, oDragon), 0);
//Declare and assign personal impact visual effect.
switch(nDamageType)
{
case DAMAGE_TYPE_ACID:
nSaveDamageType = SAVING_THROW_TYPE_ACID;
nVisualType = VFX_IMP_ACID_S; break;
case DAMAGE_TYPE_COLD:
nSaveDamageType = SAVING_THROW_TYPE_COLD;
nVisualType = VFX_IMP_FROST_S; break;
case DAMAGE_TYPE_ELECTRICAL:
nSaveDamageType = SAVING_THROW_TYPE_ELECTRICITY;
nVisualType = VFX_IMP_LIGHTNING_S; break;
case DAMAGE_TYPE_FIRE:
nSaveDamageType = SAVING_THROW_TYPE_FIRE;
nVisualType = VFX_IMP_FLAME_M; break;
case DAMAGE_TYPE_NEGATIVE:
nSaveDamageType = SAVING_THROW_TYPE_NEGATIVE;
nVisualType = VFX_IMP_NEGATIVE_ENERGY; break;
case DAMAGE_TYPE_POSITIVE:
nSaveDamageType = SAVING_THROW_TYPE_POSITIVE;
nVisualType = VFX_IMP_HOLY_AID; break;
case DAMAGE_TYPE_SONIC:
nSaveDamageType = SAVING_THROW_TYPE_SONIC;
nVisualType = VFX_IMP_SILENCE; break;
}
effect eVis = EffectVisualEffect(nVisualType);
//Capture the first target object in the shape.
oTarget = GetEnteringObject();
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oDragon))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
//Roll damage.
switch(nDiceType)
{
case 4:
nDamage = d4(nDiceNumber); break;
case 6:
nDamage = d6(nDiceNumber); break;
case 8:
nDamage = d8(nDiceNumber); break;
case 10:
nDamage = d10(nDiceNumber); break;
}
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nSaveDC, nSaveDamageType);
if(nDamage > 0)
{
// Apply effects to the currently selected target.
eDam = EffectDamage(nDamage, nDamageType);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
}