PRC8_fork/nwn/nwnprc/trunk/smp/phs_s_magesdisjc.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

126 lines
4.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:://////////////////////////////////////////////
//:: Spell Name Mages Disjunction
//:: Spell FileName PHS_S_MagesDisjc
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Abjuration
Level: Magic 9, Sor/Wiz 9
Components: V
Casting Time: 1 standard action
Range: Close (8M)
Area: All magical effects and magic items within a 13.33-M.-radius burst
Duration: Instantaneous
Saving Throw: Will negates (object)
Spell Resistance: No
All magical effects from spells and magic items within the radius of the
spell, except for those that you carry or touch, are disjoined. That is,
spells and spell-like effects are separated into their individual components
(ending the effect as a dispel magic spell does), and each permanent magic
item which is not an artifact (value of 1000 gold or less) must make a
successful Will save or be turned into a normal item. An item in a
creatures possession uses its own Will save bonus or its possessors Will
save bonus, whichever is higher.
You also have a 1% chance per caster level of destroying an antimagic field.
If the antimagic field survives the disjunction, no items within it are
disjoined.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Target: Always Area:
- It will remove all magical effects from everyone in the area (Using
PHS_DisjoinMagic()).
- For each ongoing area or effect spell whose point of origin is within the
area of the dispel magic spell, it gets destroyed.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check
if(!PHS_SpellHookCheck(PHS_SPELL_MAGES_DISJUNCTION)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
location lTarget = GetSpellTargetLocation();
object oTarget;
int nCasterLevel = PHS_GetCasterLevel();
// Area of effect - apply the visual
effect eImpact = EffectVisualEffect(VFX_IMP_DISPEL_DISJUNCTION);
PHS_ApplyLocationVFX(lTarget, eImpact);
// We first need to make sure that we check antimagic fields
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 13.33, lTarget, TRUE, OBJECT_TYPE_AREA_OF_EFFECT);
while(GetIsObjectValid(oTarget))
{
// First, we make sure it is a Antimagic Field
// if(GetTag(oTarget) == PHS_AOE_TAG_PER_ANITMAGIC_FIELD)
{
// If it is we have a 1% chance/caster level of disjoining it
if(d100() <= nCasterLevel)
{
// Destroy it
DestroyObject(oTarget);
}
else
{
// Else, we set so that all those in it cannot have thier items
// disjoined.
}
}
// Next target
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_40, lTarget, TRUE, OBJECT_TYPE_AREA_OF_EFFECT);
}
// Loop all targets, and AOE's in the AOE.
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_40, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT);
while(GetIsObjectValid(oTarget))
{
// Check object type
if(GetObjectType(oTarget) == OBJECT_TYPE_AREA_OF_EFFECT)
{
// Remove it if it is from a spell
if(PHS_GetAOECasterLevel(oTarget) >= 1)
{
// Check if it is an antimagic field
// if(GetTag(oTarget) != PHS_TAG_AOE_PER_ANITMAGIC_FIELD)
{
SetPlotFlag(oTarget, FALSE);
DestroyObject(oTarget);
}
}
}
else
{
// Dispel anyone - only check no PvP
if(!GetIsReactionTypeFriendly(oTarget))
{
// Dispel the target
// Signal event based on friendly rating.
if(GetIsFriend(oTarget) || GetFactionEqual(oTarget))
{
// Not hostile
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_MAGES_DISJUNCTION, FALSE);
}
else
{
// Hostile
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_MAGES_DISJUNCTION);
}
// Dispel the target!
PHS_DisjoinMagic(oTarget, VFX_IMP_DISPEL_DISJUNCTION);
}
}
// Next target
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 13.33, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT);
}
}