PRC8/nwn/nwnprc/trunk/users/Tenjac/spells/sp_algnaurdisc.nss
Jaysyn904 e641b42f84 Exalted update
Updated Vow of Poverty. Added Sanctify Ki Strike, Holy Strike, Fist of Heavens, Vow of Abstinence, Vow of Chastity & Gift of Faith.  (@fenac).  Turned off the Taunt & Parry skills.  Re-disabled AC & save bonuses from Tumble & Spellcraft.   Updated min() & max() to PRCmin() & PRCmax() to not conflict with similarly named NUI adjacent functions.  Set Point Blank Shot to 30' per PnP.  Added icon for Chosen of Evil.  Started work on Hidden Talent.  Created Psionics function cheatsheet.  Updated release archive.
2025-01-29 22:46:38 -05:00

116 lines
3.9 KiB
Plaintext

//:://////////////////////////////////////////////
//:: Name Aligned Aura Discarge
//:: FileName sp_algnaurdisc.nss
//:://////////////////////////////////////////////
/** @file
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/25/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nMetaMagic = PRCGetMetaMagicFeat();
location lLoc = GetLocation(oPC);
int nDC;
int nAlign;
int nAlignTarget;
if (GetHasSpellEffect(SPELL_ALIGNED_AURA_LAW,oPC)) nAlign == ALIGNMENT_LAWFUL;
else if(GetHasSpellEffect(SPELL_ALIGNED_AURA_CHAOS,oPC)) nAlign = ALIGNMENT_CHAOTIC;
else if (GetHasSpellEffect(SPELL_ALIGNED_AURA_GOOD,oPC)) nAlign = ALIGNMENT_GOOD;
else if (GetHasSpellEffect(SPELL_ALIGNED_AURA_EVIL,oPC)) nAlign = ALIGNMENT_EVIL;
else SendMessageToPC(oPC, "Invalid alignment passed in script sp_algnaurdisc.nss");
//Get duration left
int nEffectDuration, nEffectDurationRemaining;
effect eEffect = GetFirstEffect(OBJECT_SELF);
while(GetIsEffectValid(eEffect))
{
if(GetEffectSpellId(eEffect) == SPELL_ALIGNED_AURA_LAW)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_LAWFUL;
}
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_CHAOS)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_CHAOTIC;
}
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_GOOD)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_GOOD;
}
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_EVIL)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_EVIL;
}
eEffect = GetNextEffect(OBJECT_SELF);
}
//GetEffectDurationRemaining returns seconds, need rounds
int nDice = nEffectDurationRemaining / 6;
int nDam = d4(PRCMin(15, nDice));
//Do the AoE
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(60.0), lLoc);
{
while(GetIsObjectValid(oTarget))
{
if(oTarget != oPC)
{
//lawful or chaotic
if(nAlign == ALIGNMENT_LAWFUL || nAlign == ALIGNMENT_CHAOTIC) nAlignTarget = GetAlignmentLawChaos(oTarget);
else if (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_EVIL) nAlignTarget = GetAlignmentGoodEvil(oTarget);
//Same alignment, heal
if(nAlign == nAlignTarget)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nDam, oTarget), oTarget);
}
//Opposing alignment, damage
if(nAlign != nAlignTarget)
{
nDC = PRCGetSaveDC(oTarget, oPC);
//SR
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
{
//Fort Save half
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DIVINE)
{
nDam = nDam/2;
}
effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL);
effect eVis = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
effect eLink = EffectLinkEffects(eDam, eVis);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lLoc);
}
}
PRCSetSchool();
}