PRC8/nwn/nwnprc/trunk/spells/sp_mdrown.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

80 lines
3.0 KiB
Plaintext

#include "prc_inc_spells"
#include "prc_add_spell_dc"
void BioWareDrown(int nCasterLevel, object oCaster, object oTarget, float fDelay);
void main()
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
if (!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
// Get the spell target location as opposed to the spell target.
location lTarget = PRCGetSpellTargetLocation();
// Get the effective caster level.
int nCasterLvl = PRCGetCasterLevel();
// Apply a fancy effect for such a high level spell.
//ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUND_BURST), lTarget);
float fDelay;
// Declare the spell shape, size and the location. Capture the first target object in the shape.
// Cycle through the targets within the spell shape until an invalid object is captured.
int nTargets = 0;
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE);
while (GetIsObjectValid(oTarget))
{
fDelay = PRCGetSpellEffectDelay(lTarget, oTarget);
// Run the Bioware drown code.
object oCaster = OBJECT_SELF;
BioWareDrown (nCasterLvl, oCaster, oTarget, fDelay);
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}
//
// BioWare's drown code from x0_s0_drown.nss
//
void BioWareDrown(int nCasterLevel, object oCaster, object oTarget, float fDelay)
{
//Declare major variables
// object oTarget = PRCGetSpellTargetObject();
// int nCasterLevel = GetCasterLevel(OBJECT_SELF);
int nDam = GetCurrentHitPoints(oTarget);
//Set visual effect
effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
effect eDam;
//Check faction of target
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
// if(!GetIsReactionTypeFriendly(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 437));
//Make SR Check
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, nCasterLevel + SPGetPenetr()))
{
// * certain racial types are immune
if ((MyPRCGetRacialType(oTarget) != RACIAL_TYPE_CONSTRUCT)
&&(MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)
&&(MyPRCGetRacialType(oTarget) != RACIAL_TYPE_ELEMENTAL))
{
//Make a fortitude save
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oCaster)))
{
nDam = FloatToInt(nDam * 0.9);
eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_BLUDGEONING);
//Apply the VFX impact and damage effect
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
}
}
}
}
}