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.
81 lines
3.6 KiB
Plaintext
81 lines
3.6 KiB
Plaintext
/*
|
|
26/1/21 by Stratovarius
|
|
|
|
Mage Shackles (Su): Beginning at 4th level, as a standard
|
|
action you can shape a set of shackles from incarnum. With
|
|
a successful melee touch attack, you can use these shackles
|
|
to bind a creature capable of arcane spellcasting or using
|
|
spell-like abilities, as long as it is within one size category
|
|
of you. You must overcome any spell resistance the target
|
|
creature might have with a successful caster level check,
|
|
using your meldshaper level as your caster level, or the
|
|
attack fails. Once so bound, the target creature is considered
|
|
entangled by the mage shackles and is also effectively barred
|
|
from planar movement, as if affected by a dimensional anchor spell.
|
|
In addition, the affected creature must succeed on a
|
|
caster level check (DC 10 + your meldshaper level + essentia
|
|
invested in the mage shackles) to cast an arcane spell or use
|
|
any spell-like ability.
|
|
A creature incapable of casting
|
|
arcane spells or using spell-like abilities is unaffected by
|
|
the mage shackles.
|
|
*/
|
|
|
|
#include "moi_inc_moifunc"
|
|
#include "prc_inc_sp_tch"
|
|
#include "prc_inc_teleport"
|
|
|
|
void DispelMonitor(object oMeldshaper, object oTarget, int nMeld, int nBeatsRemaining)
|
|
{
|
|
// Has the power ended since the last beat, or does the duration run out now
|
|
if((--nBeatsRemaining == 0) ||
|
|
PRCGetDelayedSpellEffectsExpired(nMeld, oTarget, oMeldshaper)
|
|
)
|
|
{
|
|
if(DEBUG) DoDebug("moi_wchb_shackle: The anchoring effect has been removed");
|
|
// Reduce the teleport prevention counter
|
|
AllowTeleport(oTarget);
|
|
// Clear the effect presence marker
|
|
DeleteLocalInt(oTarget, "PRC_DimAnch");
|
|
// Clear the caster level check
|
|
DeleteLocalInt(oTarget, "MageShackles");
|
|
DeleteLocalObject(oTarget, "MageShacklesShaper");
|
|
}
|
|
else
|
|
DelayCommand(6.0f, DispelMonitor(oMeldshaper, oTarget, nMeld, nBeatsRemaining));
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oMeldshaper = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_WITCH_SHACKLES);
|
|
int nAttack = PRCDoMeleeTouchAttack(oTarget);
|
|
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, GetPrimaryIncarnumClass(oMeldshaper), MELD_WITCH_SHACKLES);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_BREACH);
|
|
effect eImpact = EffectVisualEffect(VFX_FNF_DISPEL);
|
|
float fDur = 9999.0;
|
|
|
|
if (nAttack > 0)
|
|
{
|
|
// Have to break through SR and be within one size or larger than the target, and be arcane
|
|
if(!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl) && PRCGetCreatureSize(oMeldshaper)+1 > PRCGetCreatureSize(oTarget) && GetPrimaryArcaneClass(oTarget) != CLASS_TYPE_INVALID)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectLinkEffects(EffectEntangle(), EffectVisualEffect(VFX_DUR_ENTANGLE))), oTarget, fDur);
|
|
SetLocalInt(oTarget, "MageShackles", 10+nMeldshaperLvl+nEssentia);
|
|
SetLocalObject(oTarget, "MageShacklesShaper", oMeldshaper);
|
|
// No duplicate dimensional anchor spell effects
|
|
if(!GetLocalInt(oTarget, "PRC_DimAnch"))
|
|
{
|
|
// Increase the teleportation prevention counter
|
|
DisallowTeleport(oTarget);
|
|
// Set a marker so the power won't apply duplicate effects
|
|
SetLocalInt(oTarget, "PRC_DimAnch", TRUE);
|
|
// Start the monitor
|
|
DelayCommand(6.0f, DispelMonitor(oMeldshaper, oTarget, MELD_WITCH_SHACKLES, (FloatToInt(fDur) / 6) - 1));
|
|
|
|
if(DEBUG) DoDebug("moi_wchb_shackle: The anchoring will wear off in " + IntToString(FloatToInt(fDur)) + "s");
|
|
}
|
|
}
|
|
}
|
|
} |