PRC8/nwn/nwnprc/trunk/newspellbook/inv_cocoonrefuse.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

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