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.
77 lines
2.5 KiB
Plaintext
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));
|
|
}
|
|
} |