Summon Undead now uses PRCGetSpellId(). Ectoplasmic Enhancement now doesn't quit after testing a non-undead. Warmage no longer has infinite casts of Disrupt Undead. Crushing Despair now respects Mind Immunity. Incendiary Cloud now uses MyFirstObjectInShape() and MyNextObjectInShape(). Tweaked prc_s_spellb.nss to always pass oPC to GetSlotCount() since the function is OBJECT_INVALID by default. Tweaked prc_prereq.nss to always pass oPC to GetSlotCount() since the function is OBJECT_INVALID by default. Form of Doom's Fear Aura now respects Mind Immunity and Fear Immunity. Dread Necromancer's Fear Aura now respects Mind Immunity. Summon Undead skeletons not how the correct resistances. Enlighted Fist & Dragon Disciple can now qualify for Improved Spell Resistance. Cerebremancer can now take Bane Magic.
106 lines
3.4 KiB
Plaintext
106 lines
3.4 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Darkness: On Enter
|
|
//:: NW_S0_DarknessA.nss
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Creates a globe of darkness around those in the area
|
|
of effect.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: Feb 28, 2002
|
|
//:://////////////////////////////////////////////
|
|
|
|
//:: modified by mr_bumpkin Dec 4, 2003
|
|
#include "prc_inc_spells"
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
|
|
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|
effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_DARKNESS);
|
|
effect eDark = EffectDarkness();
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
|
|
effect eLink = EffectLinkEffects(eDark, eDur);
|
|
eLink = TagEffect(eLink, "BIO_DARKNESS");
|
|
|
|
effect eLink2 = EffectLinkEffects(eInvis, eDur);
|
|
eLink2 = TagEffect(eLink2, "PNP_DARKNESS");
|
|
|
|
effect ePnP = EffectLinkEffects(eDur, EffectDarkness());
|
|
if(GetPRCSwitch(PRC_PNP_DARKNESS_35ED))
|
|
{
|
|
ePnP = EffectLinkEffects(eDur, EffectConcealment(20));
|
|
ePnP = TagEffect(ePnP, "PNP35_DARKNESS");
|
|
}
|
|
|
|
object oTarget = GetEnteringObject();
|
|
int iShadow = GetLevelByClass(CLASS_TYPE_SHADOWLORD,oTarget);
|
|
|
|
if (iShadow)
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectUltravision(), oTarget,0.0f,FALSE);
|
|
if (iShadow>1)
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectConcealment(20), oTarget,0.0f,FALSE);
|
|
|
|
|
|
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
|
|
//Enter Metamagic conditions
|
|
if ((nMetaMagic & METAMAGIC_EXTEND))
|
|
{
|
|
nDuration = nDuration *2; //Duration is +100%
|
|
}
|
|
|
|
|
|
// * July 2003: If has darkness then do not put it on it again
|
|
// Primogenitor: Yes, what about overlapping darkness effects by different casters?
|
|
//if (PRCGetHasEffect(EFFECT_TYPE_DARKNESS, oTarget) == TRUE)
|
|
//{
|
|
// return;
|
|
//}
|
|
|
|
if(GetIsObjectValid(oTarget) && oTarget != GetAreaOfEffectCreator())
|
|
{
|
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, GetAreaOfEffectCreator()))
|
|
{
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
|
|
}
|
|
else
|
|
{
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
|
|
}
|
|
|
|
if (iShadow)
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink2, oTarget,0.0f,FALSE);
|
|
else
|
|
{
|
|
if(GetPRCSwitch(PRC_PNP_DARKNESS))
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ePnP, oTarget,0.0f,FALSE);
|
|
else
|
|
//Fire cast spell at event for the specified target
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget,0.0f,FALSE);
|
|
}
|
|
}
|
|
else if (oTarget == GetAreaOfEffectCreator())
|
|
{
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
|
|
//Fire cast spell at event for the specified target
|
|
if(GetPRCSwitch(PRC_PNP_DARKNESS))
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ePnP, oTarget,0.0f,FALSE);
|
|
else
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink2, oTarget,0.0f,FALSE);
|
|
}
|
|
|
|
|
|
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
// Getting rid of the local integer storing the spellschool name
|
|
|
|
}
|
|
|
|
|
|
|