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

67 lines
2.8 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Earthen Grasp - OnHeartbeat
//:: Stony Grasp - OnHeartbeat
//:: FileName inv_earthgraspc.nss
//::///////////////////////////////////////////////
#include "prc_inc_combmove"
#include "inv_inc_invfunc"
void main()
{
object oAoE = OBJECT_SELF;
SetAllAoEInts(INVOKE_AOE_EARTHEN_GRASP_GRAPPLE, oAoE, GetSpellSaveDC());
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetFirstInPersistentObject();
int nCasterLevel = GetInvokerLevel(oCaster, CLASS_TYPE_WARLOCK);
int nPenetr = SPGetPenetrAOE(oCaster);
int StrMod = 2 + nCasterLevel / 3;
while(GetIsObjectValid(oTarget))
{
if((spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE , oCaster)
&& GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL) != TRUE
&& !GetLocalInt(oAoE, "AlreadyGrappling")
&& !GetLocalInt(oTarget, "SourceOfGrapple"))
|| GetLocalObject(oAoE, "CurrentlyGrappling") == oTarget)
{
//Fire cast spell at event for the target
SignalEvent(oTarget, EventSpellCastAt(oCaster, INVOKE_EARTHEN_GRASP));
//now do grappling and stuff
int nGrappleSucessful = FALSE;
//this spell doesnt need to make a touch attack
//as defined in the spell
int nAttackerGrappleMod = nCasterLevel + StrMod;
nGrappleSucessful = _DoGrappleCheck(OBJECT_INVALID, oTarget, nAttackerGrappleMod);
if(nGrappleSucessful)
{
//if already being grappled, apply damage
if(GetLocalObject(oAoE, "CurrentlyGrappling") == oTarget)
{
//apply the damage
int nDamage = d6();
nDamage += StrMod;
effect eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_NORMAL);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
//now being grappled
AssignCommand(oTarget, ClearAllActions());
effect eHold = EffectCutsceneImmobilize();
effect eEntangle = EffectVisualEffect(VFX_DUR_SPELLTURNING_R);
effect eLink = EffectLinkEffects(eHold, eEntangle);
//eLink = EffectKnockdown();
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
SetLocalInt(oAoE, "AlreadyGrappling", TRUE);
SetLocalObject(oAoE, "CurrentlyGrappling", oTarget);
}
else
{
DeleteLocalInt(oAoE, "AlreadyGrappling");
DeleteLocalObject(oAoE, "CurrentlyGrappling");
}
}
oTarget = GetNextInPersistentObject();
}
}