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.
87 lines
2.4 KiB
Plaintext
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();
|
|
} |