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

83 lines
3.4 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Dark Discorporation
//:: FileName inv_darkdiscorp.nss
//::///////////////////////////////////////////////
/*
Dark Invocation
8th Level Spell
You can abandon your body and become a swarm of
batlike shadows for up to 24 hours. In this form
you cannot attack or cast, but you are immune to
normal weapon damage and critical hits as a swarm
is. Your dexterity increases by 6, and you get a
deflection bonus to AC equal to your charisma
modifier. You also gain a swarm attack that does
4d6 damage to anyone in a square your swarm
occupies.
*/
//::///////////////////////////////////////////////
#include "inv_inc_invfunc"
#include "inv_invokehook"
void main()
{
object oCaster = OBJECT_SELF;
if(GetLocalInt(oCaster, "DarkDiscorporation"))
{
PRCRemoveSpellEffects(INVOKE_DARK_DISCORPORATION, oCaster, oCaster);
DeleteLocalInt(oCaster, "DarkDiscorporation");
object oNoAtk = GetItemPossessedBy(oCaster, "prc_eldrtch_glv");
DestroyObject(oNoAtk);
RemoveEventScript(oCaster, EVENT_ONPLAYERUNEQUIPITEM, "inv_discorpnoatk", TRUE, FALSE);
RemoveEventScript(oCaster, EVENT_ONUNAQUIREITEM, "inv_discorpnoatk", TRUE, FALSE);
DeleteLocalInt(oCaster, "IgnoreSwarmDmg");
DeleteLocalInt(oCaster, "SwarmDmgType");
return;
}
if(!PreInvocationCastCode()) return;
//Declare major variables
int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass());
int nChaMod = GetAbilityModifier(ABILITY_CHARISMA, oCaster);
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 6);
effect eCritImmune = EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT);
effect eWeaponImm1 = EffectDamageImmunityIncrease(DAMAGE_TYPE_BLUDGEONING, 100);
effect eWeaponImm2 = EffectDamageImmunityIncrease(DAMAGE_TYPE_PIERCING, 100);
effect eWeaponImm3 = EffectDamageImmunityIncrease(DAMAGE_TYPE_SLASHING, 100);
effect eAOE = EffectAreaOfEffect(INVOKE_VFX_DARK_DISCORPORATION);
effect eArmor = EffectACIncrease(nChaMod, AC_DEFLECTION_BONUS);
effect eLink = EffectLinkEffects(eCritImmune, eDex);
eLink = EffectLinkEffects(eLink, eWeaponImm1);
eLink = EffectLinkEffects(eLink, eWeaponImm2);
eLink = EffectLinkEffects(eLink, eWeaponImm3);
eLink = EffectLinkEffects(eLink, eAOE);
eLink = EffectLinkEffects(eLink, eArmor);
eLink = EffectLinkEffects(eLink, eArmor);
eLink = EffectLinkEffects(eLink, EffectAttackDecrease(20));
eLink = EffectLinkEffects(eLink, EffectAbilityDecrease(ABILITY_STRENGTH, 20));
//Fire cast spell at event for the specified target
SignalEvent(oCaster, EventSpellCastAt(oCaster, INVOKE_DARK_DISCORPORATION, FALSE));
//Apply the VFX impact and effects
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCaster);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oCaster, HoursToSeconds(24), TRUE, -1, CasterLvl);
SetLocalInt(oCaster, "DarkDiscorporation", TRUE);
object oNoAtk = CreateItemOnObject("prc_eldrtch_glv", oCaster);
SetDroppableFlag(oNoAtk, FALSE);
SetItemCursedFlag(oNoAtk, TRUE);
AssignCommand(oCaster, ActionEquipItem(oNoAtk, INVENTORY_SLOT_RIGHTHAND));
SetLocalInt(oCaster, "IgnoreSwarmDmg", TRUE);
SetLocalInt(oCaster, "SwarmDmgType", INVOKE_DARK_DISCORPORATION);
ExecuteScript("inv_discorpnoatk", oCaster);
}