159 lines
3.2 KiB
Plaintext
159 lines
3.2 KiB
Plaintext
|
//::///////////////////////////////////////////////
|
|||
|
//:: Name Bone Blade
|
|||
|
//:: FileName sp_bone_blade.nss
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
/**@file Boneblade
|
|||
|
Necromancy [Evil]
|
|||
|
Level: Blk 2, Clr 3
|
|||
|
Components: V, S, F, Undead
|
|||
|
Casting Time: 1 action
|
|||
|
Range: Touch
|
|||
|
Effect: One bone that becomes a blade
|
|||
|
Duration: 10 minutes/level
|
|||
|
|
|||
|
The caster changes a bone at least 6 inches long into
|
|||
|
a longsword, short sword, or greatsword (caster's choice).
|
|||
|
This weapon has a +1 enhancement bonus on attacks and
|
|||
|
damage for every five caster levels (at least +1,
|
|||
|
maximum +4). Furthermore, this blade deals an extra +1d6
|
|||
|
points of damage to living targets and an additional +1d6
|
|||
|
points of damage to good<6F>aligned targets.
|
|||
|
|
|||
|
This spell confers no proficiency with the blade, but the
|
|||
|
caster doesn't need to be the one wielding the blade for
|
|||
|
it to be effective.
|
|||
|
|
|||
|
Focus: A 6-inch-long bone.
|
|||
|
|
|||
|
Author: Tenjac
|
|||
|
Created: 3/9/2006
|
|||
|
*/
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
|
|||
|
#include "prc_inc_spells"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
//define vars
|
|||
|
object oPC = OBJECT_SELF;
|
|||
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|||
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|||
|
int nType = MyPRCGetRacialType(oPC);
|
|||
|
int nEnhance = 1;
|
|||
|
int nSpell = GetSpellId();
|
|||
|
float fDuration = (600.0f * nCasterLvl);
|
|||
|
string sSword;
|
|||
|
int nRandom = d3(1);
|
|||
|
|
|||
|
//Spellhook
|
|||
|
if(!X2PreSpellCastCode()) return;
|
|||
|
|
|||
|
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
|
|||
|
|
|||
|
//Check for undeath
|
|||
|
if(nType == RACIAL_TYPE_UNDEAD)
|
|||
|
{
|
|||
|
//Summon blade
|
|||
|
if(nSpell == SPELL_BONEBLADE_GREATSWORD)
|
|||
|
{
|
|||
|
if(nRandom == 1)
|
|||
|
{
|
|||
|
sSword = "wswgs071";
|
|||
|
}
|
|||
|
|
|||
|
if(nRandom == 2)
|
|||
|
{
|
|||
|
sSword = "wswgs072";
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
sSword = "wswgs073";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(nSpell == SPELL_BONEBLADE_LONGSWORD)
|
|||
|
{
|
|||
|
if(nRandom == 1)
|
|||
|
{
|
|||
|
sSword = "wswls091";
|
|||
|
}
|
|||
|
|
|||
|
if(nRandom == 2)
|
|||
|
{
|
|||
|
sSword = "wswls092";
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
sSword = "wswls093";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(nSpell == SPELL_BONEBLADE_SHORTSWORD)
|
|||
|
{
|
|||
|
if(nRandom == 1)
|
|||
|
{
|
|||
|
sSword = "wswss071";
|
|||
|
}
|
|||
|
|
|||
|
if(nRandom == 2)
|
|||
|
{
|
|||
|
sSword = "wswss072";
|
|||
|
}
|
|||
|
|
|||
|
else
|
|||
|
{
|
|||
|
sSword = "wswss073";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//Create sword
|
|||
|
object oSword = CreateItemOnObject(sSword, oPC, 1);
|
|||
|
|
|||
|
//+1 per 5 levels
|
|||
|
if(nCasterLvl > 9)
|
|||
|
{
|
|||
|
nEnhance = 2;
|
|||
|
}
|
|||
|
|
|||
|
if(nCasterLvl > 14)
|
|||
|
{
|
|||
|
nEnhance = 3;
|
|||
|
}
|
|||
|
|
|||
|
if(nCasterLvl > 19)
|
|||
|
{
|
|||
|
nEnhance = 4;
|
|||
|
}
|
|||
|
|
|||
|
IPSetWeaponEnhancementBonus(oSword, nEnhance);
|
|||
|
|
|||
|
//+1d6 good
|
|||
|
itemproperty ipProp = ItemPropertyEnhancementBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD, d6(1));
|
|||
|
|
|||
|
IPSafeAddItemProperty(oSword, ipProp, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|||
|
|
|||
|
//+1d6 living, use onHit Unique Power
|
|||
|
itemproperty ipBlade = (ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1));
|
|||
|
IPSafeAddItemProperty(oSword, ipBlade, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|||
|
|
|||
|
AddEventScript(oSword, EVENT_ITEM_ONHIT, "prc_evnt_bonebld", TRUE, FALSE);
|
|||
|
|
|||
|
//Check metamagic
|
|||
|
if (nMetaMagic & METAMAGIC_EXTEND)
|
|||
|
{
|
|||
|
fDuration = (fDuration * 2);
|
|||
|
}
|
|||
|
|
|||
|
//Schedule deletion of item
|
|||
|
DelayCommand(fDuration, DestroyObject(oSword));
|
|||
|
|
|||
|
}
|
|||
|
//SPEvilShift(oPC);
|
|||
|
PRCSetSchool();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|