PRC8/nwn/nwnprc/trunk/spells/sp_shad_arrow.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

87 lines
2.4 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Shadow Arrow
//:: FileName sp_shad_arrow.nss
//:://////////////////////////////////////////////
/**@file Shadow Arrow
Necromancy
Level: Assassin 4, ranger 4
Components: V, M
Casting Time: 1 swift action
Range: Long
Target: One creature
Duration: Instantaneous
Saving Throw: None
Spell Resistance: Yes
This spell is cast upon a masterwork arrow or bolt, transforming
it into pure black shadow. Make a ranged touch attack with the
missile instead of a normal ranged attack. Instead of dealing
normal damage, a shadow arrow deals 1d6 points of Strength
damage.
Material Component: Masterwork arrow or bolt.
Author: Tenjac
Created:
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_sp_tch"
#include "prc_craft_inc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
object oAmmo;
int nType = GetBaseItemType(oWeap);
int nCasterLvl = PRCGetCasterLevel(oPC);
//Has to be a bow of some sort
if(nType == BASE_ITEM_LONGBOW || nType == BASE_ITEM_SHORTBOW)
{
oAmmo = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC);
}
else if (nType == BASE_ITEM_LIGHTCROSSBOW || nType == BASE_ITEM_HEAVYCROSSBOW)
{
oAmmo = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC);
}
else
{
PRCSetSchool();
return;
}
//Check for Masterwork or magical
string sMaterial = GetStringLeft(GetTag(oAmmo), 3);
if((!(GetMaterialString(StringToInt(sMaterial)) == sMaterial && sMaterial != "000") && !GetIsMagicItem(oAmmo)))
{
PRCSetSchool();
return;
}
int nStack = GetItemStackSize(oAmmo);
nStack--;
SetItemStackSize(oAmmo, nStack);
int nTouch = PRCDoRangedTouchAttack(oTarget);
if(nTouch)
{
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
{
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, d6(1), DURATION_TYPE_PERMANENT, TRUE, 0.0f, FALSE, oPC);
}
}
PRCSetSchool();
}