forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
80 lines
3.0 KiB
Plaintext
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));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|