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.
93 lines
3.3 KiB
Plaintext
93 lines
3.3 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name Earthen Grasp
|
|
//:: Stony Grasp
|
|
//:: FileName inv_earthengrasp.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
|
|
Least Invocation
|
|
2nd Level Spell
|
|
|
|
You can summon up an immobile hand of dirt and
|
|
grass which grapples any creature nearby. The hand
|
|
lasts for 2 rounds per level, has an AC of 15,
|
|
hardness of 4, and has 3 HP per level.
|
|
|
|
Lesser Invocation
|
|
3rd Level Spell
|
|
|
|
You can summon up an immobile hand of rock and
|
|
stone which grapples any creature nearby. The hand
|
|
lasts for 1 round per level, has an AC of 18,
|
|
hardness of 8, and has 4 HP per level.
|
|
|
|
*/
|
|
//::///////////////////////////////////////////////
|
|
|
|
#include "inv_inc_invfunc"
|
|
#include "inv_invokehook"
|
|
|
|
void BuffSummon(int nDuration, object oCaster, int nSpellID)
|
|
{
|
|
int i = 1;
|
|
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster, i);
|
|
if(DEBUG) DoDebug("inv_tenacplague: First Summon is " + DebugObject2Str(oSummon));
|
|
while(GetIsObjectValid(oSummon))
|
|
{
|
|
i++;
|
|
oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster, i);
|
|
if(DEBUG) DoDebug("inv_tenacplague: Next Summon is " + DebugObject2Str(oSummon));
|
|
}
|
|
oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster, i - 1);
|
|
if(DEBUG) DoDebug("inv_tenacplague: Final Summon is " + DebugObject2Str(oSummon));
|
|
|
|
effect eDR = EffectDamageReduction(4, DAMAGE_POWER_ENERGY);
|
|
effect eHP = EffectTemporaryHitpoints(nDuration * 3 - 3);
|
|
effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND);
|
|
if(nSpellID == INVOKE_STONY_GRASP)
|
|
{
|
|
eDR = EffectDamageReduction(8, DAMAGE_POWER_ENERGY);
|
|
eHP = EffectTemporaryHitpoints(nDuration * 4 - 4);
|
|
}
|
|
effect eAOE = EffectAreaOfEffect(INVOKE_AOE_EARTHEN_GRASP_GRAPPLE);
|
|
SetLocalInt(oSummon, "SourceOfGrapple", TRUE);
|
|
eAOE = EffectLinkEffects(eAOE, EffectCutsceneParalyze());
|
|
effect eLink = EffectLinkEffects(eDR, eHP);
|
|
eLink = EffectLinkEffects(eLink, eHand);
|
|
eLink = EffectLinkEffects(eLink, eAOE);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oSummon);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
if(!PreInvocationCastCode()) return;
|
|
|
|
object oCaster = OBJECT_SELF;
|
|
object oArea = GetArea(OBJECT_SELF);
|
|
int nSpellID = GetSpellId();
|
|
if(nSpellID == INVOKE_EARTHEN_GRASP &&
|
|
GetIsAreaNatural(oArea) != AREA_NATURAL &&
|
|
GetIsAreaAboveGround(oArea) != AREA_ABOVEGROUND)
|
|
{
|
|
FloatingTextStringOnCreature("You can only use this invocation in natural, above-ground areas.", oCaster, FALSE);
|
|
return;
|
|
}
|
|
|
|
//Declare major variables
|
|
location lTarget = PRCGetSpellTargetLocation();
|
|
int nDuration = GetInvokerLevel(oCaster, GetInvokingClass());
|
|
effect eSummon = EffectSummonCreature("inv_earthenhand");
|
|
float fDuration = RoundsToSeconds(nDuration * 2);
|
|
if(nSpellID == INVOKE_STONY_GRASP)
|
|
{
|
|
eSummon = EffectSummonCreature("inv_stonyhand");
|
|
fDuration = RoundsToSeconds(nDuration);
|
|
}
|
|
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_1);
|
|
|
|
//Apply the VFX impact and summon effect
|
|
MultisummonPreSummon();
|
|
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lTarget, fDuration);
|
|
DelayCommand(0.1, BuffSummon(nDuration, oCaster, nSpellID));
|
|
} |