Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
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");
|
|
}
|
|
}
|
|
}
|
|
} |