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

77 lines
2.5 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Darkness
//:: FileName inv_dra_darkness.nss
//::///////////////////////////////////////////////
/*
Least Invocation
2nd Level Spell
You can create magical darkness in a 20' radius.
All creatures within the darkness can only see in
it using Ultravision, True Seeing, blindsense, or
blindsight.
*/
//::///////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_inc_sp_tch"
#include "inv_inc_invfunc"
#include "inv_invokehook"
void main()
{
if(!PreInvocationCastCode()) return;
object oCaster = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
object oItemTarget = oTarget;
int nCasterLevel = GetInvokerLevel(oCaster, GetInvokingClass());
int iAttackRoll = 1;
effect eAOE = EffectAreaOfEffect(AOE_PER_DARKNESS);
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{ //touch attack roll if target creature is not an ally
if(!spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, oCaster))
iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
if(iAttackRoll > 0)
{
oItemTarget = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
if(!GetIsObjectValid(oTarget))
{
//no armor, check other slots
int i;
for(i=0;i<14;i++)
{
oItemTarget = GetItemInSlot(i, oTarget);
if(GetIsObjectValid(oTarget))
break;//end for loop
}
}
}
}
int nCasterLvl = nCasterLevel;
int nDuration = nCasterLvl;//10min/level for PnP
//Create an instance of the AOE Object using the Apply Effect function
//placeables get an effect
//or if no equipment
if(!GetPRCSwitch(PRC_PNP_DARKNESS))
{
if (iAttackRoll > 0)
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, GetLocation(oTarget), RoundsToSeconds(nDuration));
}
else if(GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE
|| !GetIsObjectValid(oItemTarget))
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, oTarget, RoundsToSeconds(nDuration),TRUE,-1,nCasterLvl);
else
{
//otherwise items get an IP
itemproperty ipDarkness = ItemPropertyAreaOfEffect(IP_CONST_AOE_DARKNESS, nCasterLvl);
IPSafeAddItemProperty(oItemTarget, ipDarkness, TurnsToSeconds(nDuration*10));
//this applies the effects relating to it
DelayCommand(0.1, VoidCheckPRCLimitations(oItemTarget, OBJECT_INVALID));
}
}