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

108 lines
4.1 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 Break Enchantment
//:: Spell FileName PHS_S_BreakEncha
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Abjuration
Level: Brd 4, Clr 5, Luck 5, Pal 4, Sor/Wiz 5
Components: V, S
Casting Time: 1 minute
Range: Close (8M)
Targets: Up to one creature per level, all within a 5M-radius sphere
Duration: Instantaneous
Saving Throw: See text
Spell Resistance: No
This spell frees victims from enchantments, transmutations, and curses. Break
enchantment can reverse even an instantaneous effect. For each such effect,
you make a caster level check (1d20 + caster level, maximum +15) against a DC
of 11 + caster level of the effect. Success means that the creature is free
of the spell, curse, or effect. For a cursed magic item, the DC is 25.
If the spell is one that cannot be dispelled by dispel magic, break
enchantment works only if that spell is 5th level or lower.
If the effect comes from some permanent magic item break enchantment does
not remove the curse from the item, but it does frees the victim from the
items effects.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
As above.
We have special dispelling things now to dispel all the Enchantments,
transmutations and curses and so on.
Also a special one for any 5th level or lower if cannot be dispelled
by dispel magic (IE: Supernautral, Extraodinary).
No item cursing removal yet.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell Hook Check.
if(!PHS_SpellHookCheck()) return;
// Declare Major Variables
object oCaster = OBJECT_SELF;
object oTarget;
location lTarget = GetSpellTargetLocation();
int nCasterLevel = PHS_GetCasterLevel();
int nDone;
float fDelay;
// Make sure they are not immune to spells
if(PHS_TotalSpellImmunity(oTarget)) return;
// Cap caster level at 15 for this spell
int nBonusDispelLevel = PHS_LimitInteger(nCasterLevel, 15);
// Delcare effects
effect eVis = EffectVisualEffect(VFX_IMP_DISPEL);
// Get all cretures (duh) in a 5M sphere
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 5.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
// Limit creatures affected - 1 per level
while(GetIsObjectValid(oTarget) && nDone < nCasterLevel)
{
// We only affect chosen allies as it is meant to stop bad things
// (the spell schools are usually tansforming into bad spells and enchanting
// to do bad things, like domination)
if((GetIsFriend(oTarget) || GetFactionEqual(oTarget)) &&
// Check master!
(GetMaster(oTarget) != oCaster ||
GetAssociateType(oTarget) != ASSOCIATE_TYPE_DOMINATED))
{
// Done by +1.
nDone++;
// Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
// Signal Spell cast at the target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_BREAK_ENCHANTMENT, FALSE);
// We (attempt to) dispel curses, the curse effect
PHS_DispelAllEffectsOfType(oTarget, nBonusDispelLevel, EFFECT_TYPE_CURSE);
// We then (attempt to) dispel all spells from the spell school
// - Enchantments
PHS_DispelAllSpellsFromSpellSchool(oTarget, nBonusDispelLevel, SPELL_SCHOOL_ENCHANTMENT, 5);
// - Transmutations
PHS_DispelAllSpellsFromSpellSchool(oTarget, nBonusDispelLevel, SPELL_SCHOOL_TRANSMUTATION, 5);
// We will apply VFX regardless now.
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eVis));
}
// Get next target
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 5.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}