forked from Jaysyn/PRC8
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.
106 lines
2.8 KiB
Plaintext
106 lines
2.8 KiB
Plaintext
//:://////////////////////////////////////////////
|
|
//:: Created By: Solowing
|
|
//:: Created On: September 2, 2004
|
|
//:://////////////////////////////////////////////
|
|
#include "prc_alterations"
|
|
#include "x2_inc_switches"
|
|
#include "nw_o0_itemmaker"
|
|
#include "x2_inc_spellhook"
|
|
|
|
const int FEAT_ARCANE_STRIKE = 5172;
|
|
|
|
void StoreSpells (int nSpell, int nClevel, object oWeapon, object oPC)
|
|
{
|
|
|
|
//This is the number of the already stored spells
|
|
int temp = GetLocalInt(oPC,"charges");
|
|
|
|
if(temp<10)
|
|
{
|
|
SetLocalInt(oPC,"doarcstrike",TRUE);
|
|
if(temp<1)
|
|
{
|
|
temp = 1;
|
|
}
|
|
else
|
|
{
|
|
temp++;
|
|
}
|
|
int nLevel = StringToInt(Get2DACache("spells","Wiz_Sorc",nSpell));
|
|
if(nLevel > 0)
|
|
{
|
|
array_create(oPC, "arcstrike"); // This is used here and in prc_arc_feat2
|
|
array_set_int(oPC,"arcstrike",temp,nLevel);
|
|
FloatingTextStringOnCreature("You can store "+IntToString(10-temp)+" more spells into your weapon",OBJECT_SELF);
|
|
itemproperty ipTest = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,nClevel);
|
|
IPSafeAddItemProperty(oWeapon, ipTest, 9999.0);
|
|
SetLocalInt(oPC,"charges",temp);
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("Arcane Strike only stores arcane spells of 1st level or higher",OBJECT_SELF);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("You have already stored the maximum allowed number of spells",OBJECT_SELF);
|
|
}
|
|
}
|
|
|
|
|
|
//This function runs whenever the arcane strike feat is activated
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
|
|
|
|
//If the caster does not have arcane strike or arcane strike isnt selected do nothing.
|
|
if(!GetHasFeat(FEAT_ARCANE_STRIKE))
|
|
{
|
|
return;
|
|
}
|
|
if(!GetLocalInt(oPC,"arcstrikeactive"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
//we check the target of the spell
|
|
object oWeapon = PRCGetSpellTargetObject();
|
|
|
|
|
|
if (oWeapon == GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))
|
|
{
|
|
|
|
//If the target is not a melee weapon or the ranged weapons ammo we inform the
|
|
//caster and cancel the storing
|
|
if(IPGetIsMeleeWeapon(oWeapon)
|
|
|| GetBaseItemType(oWeapon)== BASE_ITEM_ARROW
|
|
|| GetBaseItemType(oWeapon)== BASE_ITEM_BOLT
|
|
|| GetBaseItemType(oWeapon)== BASE_ITEM_BULLET)
|
|
{
|
|
|
|
|
|
|
|
//If the target is an equiped melee weapon, we get the spell ID of the casted
|
|
//spell the caster level of the spellsword and the metamagic feat.
|
|
int nSpell = GetSpellId();
|
|
int nClevel =PRCGetCasterLevel(OBJECT_SELF);
|
|
|
|
|
|
//This stops the original spellscript (and all craft item code)
|
|
// from being executed.
|
|
PRCSetUserSpecificSpellScriptFinished();
|
|
|
|
|
|
StoreSpells (nSpell ,nClevel ,oWeapon , oPC);
|
|
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("Arcane Strike only works with melee weapons or ammo",oPC);
|
|
PRCSetUserSpecificSpellScriptFinished();
|
|
return;
|
|
}
|
|
}
|
|
}
|