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.
83 lines
3.4 KiB
Plaintext
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);
|
|
}
|
|
|