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.
99 lines
2.8 KiB
Plaintext
99 lines
2.8 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name Brilliant Energy Arrow
|
|
//:: FileName sp_brill_enarr.nss
|
|
//:://////////////////////////////////////////////
|
|
/** @file Brilliant Energy Arrow
|
|
Transmutation
|
|
Level: Assassin 2, ranger 2, justice of weald and woe 2
|
|
Components: V, M
|
|
Casting Time: 1 swift action
|
|
Range: Self
|
|
Target: One magical or masterwork arrow or bolt
|
|
Duration: Instantaneous
|
|
Saving Throw: None
|
|
Spell Resistance: Yes
|
|
|
|
When this spell is cast, a masterwork arrow or bolt, its head transforms
|
|
into brilliant energy. A brilliant energy missile ignores nonliving matter.
|
|
Armor bonuses to AC (including any enhancement bonuses to that
|
|
armor) do not count against it because the missile passes through
|
|
armor. It deals normal damage and has no effect on constructs,
|
|
undead, and objects.
|
|
|
|
Material Component: Magical or masterwork arrow or bolt.
|
|
|
|
|
|
Author: Tenjac
|
|
Created: 8/14/08
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_spells"
|
|
#include "prc_craft_inc"
|
|
#include "prc_inc_combat"
|
|
|
|
void main()
|
|
{
|
|
if(!X2PreSpellCastCode()) return;
|
|
|
|
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
|
|
|
object oPC = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
int nType = GetBaseItemType(oWeap);
|
|
object oAmmo;
|
|
effect eVis;
|
|
|
|
//Has to be a bow of some sort
|
|
if(nType != BASE_ITEM_LONGBOW &&
|
|
nType != BASE_ITEM_SHORTBOW &&
|
|
nType != BASE_ITEM_LIGHTCROSSBOW &&
|
|
nType != BASE_ITEM_HEAVYCROSSBOW)
|
|
{
|
|
PRCSetSchool();
|
|
return;
|
|
}
|
|
|
|
//Doesn't work on non-living
|
|
if(!PRCGetIsAliveCreature(oTarget))
|
|
{
|
|
SendMessageToPC(oPC, "Invalid target type; target is not living.");
|
|
return;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
//Check for Masterwork or magical
|
|
string sMaterial = GetStringLeft(GetTag(oAmmo), 3);
|
|
|
|
if((!(GetMaterialString(StringToInt(sMaterial)) == sMaterial && sMaterial != "000") && !GetIsMagicItem(oAmmo)))
|
|
{
|
|
PRCSetSchool();
|
|
SendMessageToPC(oPC, "Invalid ammo type.");
|
|
return;
|
|
}
|
|
|
|
//Get armor bonuses - Armor
|
|
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
|
|
int nBonus = GetAC(oArmor);
|
|
|
|
//Helm
|
|
object oHelm = GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget);
|
|
nBonus += GetItemACValue(oHelm);
|
|
|
|
//Perform the attack with specified bonus
|
|
PerformAttack(oTarget, oPC, eVis, 0.0, nBonus);
|
|
|
|
PRCSetSchool();
|
|
} |