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

64 lines
3.0 KiB
Plaintext

#include "inv_inc_invfunc"
void main()
{
SetAllAoEInts(GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType"),OBJECT_SELF, GetSpellSaveDC());
int nCasterLevel = GetInvokerLevel(GetAreaOfEffectCreator(), CLASS_TYPE_WARLOCK);
object oTarget = GetFirstInPersistentObject();
while(GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE , GetAreaOfEffectCreator())
&& !GetLocalInt(oTarget, "IgnoreSwarmDmg")
&& oTarget != GetAreaOfEffectCreator()
&& GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL) != TRUE)
{
//Fire cast spell at event for the target
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(),
GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType")));
effect eDamage = EffectDamage(d6(), DAMAGE_TYPE_PIERCING);
if(GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType") == INVOKE_TENACIOUS_PLAGUE)
eDamage = EffectDamage(d6(2), DAMAGE_TYPE_PIERCING, DAMAGE_POWER_PLUS_ONE);
if(GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType") == INVOKE_DARK_DISCORPORATION)
eDamage = EffectDamage(d6(4), DAMAGE_TYPE_PIERCING, DAMAGE_POWER_PLUS_FOUR);
eDamage = EffectLinkEffects(eDamage, EffectVisualEffect(VFX_IMP_MAGBLUE));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget);
effect eAddlEffect;
effect eVis;
if(GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType") == INVOKE_SUMMON_SWARM_BAT
&& !GetLocalInt(oTarget, "SwarmBleeding"))
{
ApplyOnHitAbilities(oTarget, GetAreaOfEffectCreator(), GetLocalObject(GetAreaOfEffectCreator(), "SwarmWeapon"));
eVis = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SetLocalInt(oTarget, "SwarmBleeding", TRUE);
}
if(GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType") == INVOKE_SUMMON_SWARM_RAT
&& !GetHasSpellEffect(INVOKE_SUMMON_SWARM_RAT, oTarget))
{
eAddlEffect = EffectDisease(DISEASE_FILTH_FEVER);
eVis = EffectVisualEffect(VFX_IMP_DISEASE_S);
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eAddlEffect, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
int nNauseaDC = 12;
if(GetLocalInt(GetAreaOfEffectCreator(), "SwarmDmgType") == INVOKE_TENACIOUS_PLAGUE)
nNauseaDC += GetAbilityModifier(ABILITY_CHARISMA, GetAreaOfEffectCreator());
//save or be nauseated
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nNauseaDC, SAVING_THROW_TYPE_NONE))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oTarget, 6.0), oTarget, RoundsToSeconds(1));
}
}
oTarget = GetNextInPersistentObject();
}
}