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.
143 lines
5.1 KiB
Plaintext
143 lines
5.1 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Natures Balance
|
|
//:: NW_S0_NatureBal.nss
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Reduces the SR of all enemies by 1d4 per 5 caster
|
|
levels for 1 round per 3 caster levels. Also heals
|
|
all friends for 3d8 + Caster Level
|
|
Radius is 15 feet from the caster.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: June 22, 2001
|
|
//:://////////////////////////////////////////////
|
|
//:: VFX Pass By: Preston W, On: June 22, 2001
|
|
|
|
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
|
|
#include "prc_inc_spells"
|
|
#include "prc_add_spell_dc"
|
|
|
|
|
|
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
|
|
|
|
/*
|
|
Spellcast Hook Code
|
|
Added 2003-06-20 by Georg
|
|
If you want to make changes to all spells,
|
|
check x2_inc_spellhook.nss to find out more
|
|
|
|
*/
|
|
|
|
if (!X2PreSpellCastCode())
|
|
{
|
|
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
|
|
// End of Spell Cast Hook
|
|
|
|
|
|
//Declare major variables
|
|
effect eHeal;
|
|
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_L);
|
|
effect eSR;
|
|
effect eVis2 = EffectVisualEffect(VFX_IMP_BREACH);
|
|
effect eNature = EffectVisualEffect(VFX_FNF_NATURES_BALANCE);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
|
|
int nRand, nNumDice;
|
|
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
|
int nCasterLevel = CasterLvl;
|
|
//Determine spell duration as an integer for later conversion to Rounds, Turns or Hours.
|
|
int nDuration = nCasterLevel/3;
|
|
|
|
|
|
|
|
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|
float fDelay;
|
|
//Set off fire and forget visual
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eNature, GetLocation(OBJECT_SELF));
|
|
//Declare the spell shape, size and the location. Capture the first target object in the shape.
|
|
if ((nMetaMagic & METAMAGIC_EXTEND))
|
|
{
|
|
nDuration = nDuration *2; //Duration is +100%
|
|
}
|
|
nNumDice = nCasterLevel / 5;
|
|
if(nNumDice == 0)
|
|
{
|
|
nNumDice = 1;
|
|
}
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), FALSE);
|
|
//Cycle through the targets within the spell shape until an invalid object is captured.
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
fDelay = PRCGetRandomDelay();
|
|
//Check to see how the caster feels about the targeted object
|
|
if(GetIsFriend(oTarget))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NATURES_BALANCE, FALSE));
|
|
nRand = d8(3) + nCasterLevel;
|
|
//Enter Metamagic conditions
|
|
if ((nMetaMagic & METAMAGIC_MAXIMIZE))
|
|
{
|
|
nRand = 24 + nCasterLevel;//Damage is at max
|
|
}
|
|
if ((nMetaMagic & METAMAGIC_EMPOWER))
|
|
{
|
|
nRand = nRand + nRand/2; //Damage/Healing is +50%
|
|
}
|
|
eHeal = PRCEffectHeal(nRand, oTarget);
|
|
//Apply heal effects
|
|
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget));
|
|
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
}
|
|
else
|
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NATURES_BALANCE));
|
|
if(!GetIsReactionTypeFriendly(oTarget))
|
|
{
|
|
int nDC = PRCGetSaveDC(oTarget,OBJECT_SELF);
|
|
//Check for saving throw
|
|
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (nDC)))
|
|
{
|
|
nRand = d4(nNumDice);
|
|
//Enter Metamagic conditions
|
|
if ((nMetaMagic & METAMAGIC_MAXIMIZE))
|
|
{
|
|
nRand = 4 * nNumDice;//Damage is at max
|
|
}
|
|
if ((nMetaMagic & METAMAGIC_EMPOWER))
|
|
{
|
|
nRand = nRand + (nRand/2); //Damage/Healing is +50%
|
|
}
|
|
eSR = EffectSpellResistanceDecrease(nRand);
|
|
effect eLink = EffectLinkEffects(eSR, eDur);
|
|
//Apply reduce SR effects
|
|
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration),TRUE,-1,CasterLvl));
|
|
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
|
|
}
|
|
}
|
|
}
|
|
//Select the next target within the spell shape.
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), FALSE);
|
|
}
|
|
|
|
|
|
|
|
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
// Getting rid of the integer used to hold the spells spell school
|
|
}
|
|
|