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.
59 lines
2.0 KiB
Plaintext
59 lines
2.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name Cocoon of Refuse
|
|
//:: FileName inv_cocoonrefuse.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
|
|
Least Invocation
|
|
1st Level Spell
|
|
|
|
You cause various bits of trash and junk in an area
|
|
- rotting garbage, old clothes, even dead animals
|
|
- to fly about and latch onto a target. The target
|
|
is entangled for 1 round per invoker level, or
|
|
until he makes a DC 20 strength check to escape.
|
|
Because this uses urban remains, it cannot be used
|
|
in wilderness areas.
|
|
|
|
*/
|
|
//::///////////////////////////////////////////////
|
|
|
|
#include "inv_inc_invfunc"
|
|
#include "inv_invokehook"
|
|
|
|
void DoRefuseEscapeCheck(object oTarget, int nDurationRemaining, object oCaster)
|
|
{
|
|
int nStrChk = d20() + GetAbilityModifier(ABILITY_STRENGTH, oTarget);
|
|
if(nStrChk > 20)
|
|
{
|
|
PRCRemoveSpellEffects(INVOKE_COCOON_OF_REFUSE, oCaster, oTarget);
|
|
FloatingTextStringOnCreature("*Strength check successful!*", oTarget, FALSE);
|
|
}
|
|
else if(nDurationRemaining > 0)
|
|
DelayCommand(RoundsToSeconds(1), DoRefuseEscapeCheck(oTarget, nDurationRemaining - 1, oCaster));
|
|
}
|
|
|
|
void main()
|
|
{
|
|
if(!PreInvocationCastCode()) return;
|
|
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
object oArea = GetArea(oCaster);
|
|
int nCasterLvl = GetInvokerLevel(oCaster, GetInvokingClass());
|
|
int nDC = GetInvocationSaveDC(oTarget, oCaster);
|
|
effect eVis = EffectVisualEffect(VFX_DUR_ENTANGLE);
|
|
effect eEntangle = EffectEntangle();
|
|
effect eLink = EffectLinkEffects(eEntangle, eVis);
|
|
|
|
if(GetIsAreaNatural(oArea) != AREA_NATURAL
|
|
&& GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND)
|
|
{
|
|
if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_SPELL))
|
|
{
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCasterLvl),TRUE,-1,nCasterLvl);
|
|
DelayCommand(RoundsToSeconds(1), DoRefuseEscapeCheck(oTarget, nCasterLvl, oCaster));
|
|
}
|
|
}
|
|
}
|