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.
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));
|
|
}
|
|
}
|
|
}
|