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.
65 lines
2.7 KiB
Plaintext
65 lines
2.7 KiB
Plaintext
/*
|
|
Activates Wand Strike
|
|
*/
|
|
|
|
#include "prc_inc_sp_tch"
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
object oWand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
int nType = GetBaseItemType(oWand);
|
|
|
|
if(nType != BASE_ITEM_MAGICWAND && nType != BASE_ITEM_ENCHANTED_WAND)
|
|
{
|
|
oWand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
|
|
nType = GetBaseItemType(oWand);
|
|
|
|
if(nType != BASE_ITEM_MAGICWAND && nType != BASE_ITEM_ENCHANTED_WAND)
|
|
return; // Not wielding a wand anywhere
|
|
}
|
|
|
|
if(PRCDoMeleeTouchAttack(oTarget)) // Got to hit
|
|
{
|
|
SetLocalInt(oPC, "AttackHasHit", TRUE); // Touch attacks don't have to reroll if the spell requires one
|
|
DelayCommand(0.5, DeleteLocalInt(oPC, "AttackHasHit"));
|
|
int nCharges = GetItemCharges(oWand);
|
|
|
|
if (nCharges > 1) // Need to have enough charges for this
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(), DAMAGE_TYPE_MAGICAL), oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SPARKS), oTarget);
|
|
//code for getting new ip type
|
|
int nCasterLevel;
|
|
int nSpell;
|
|
itemproperty ipTest = GetFirstItemProperty(oWand);
|
|
while(GetIsItemPropertyValid(ipTest))
|
|
{
|
|
if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL)
|
|
{
|
|
nCasterLevel = GetItemPropertyCostTableValue(ipTest);
|
|
if (DEBUG) DoDebug("Wandstrike: caster level from item = "+IntToString(nCasterLevel));
|
|
}
|
|
if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL)
|
|
{
|
|
nSpell = GetItemPropertySubType(ipTest);
|
|
if (DEBUG) DoDebug("Wandstrike: iprop subtype = "+IntToString(nSpell));
|
|
nSpell = StringToInt(Get2DACache("iprp_spells", "SpellIndex", nSpell));
|
|
if (DEBUG) DoDebug("Wandstrike: spell from item = "+IntToString(nSpell));
|
|
}
|
|
ipTest = GetNextItemProperty(oWand);
|
|
}
|
|
// if we didn't find a caster level on the item, it must be Bioware item casting
|
|
if(!nCasterLevel)
|
|
{
|
|
nCasterLevel = GetCasterLevel(oPC);
|
|
if (DEBUG) DoDebug("Wandstrike: bioware item casting with caster level = "+IntToString(nCasterLevel));
|
|
}
|
|
|
|
ActionCastSpell(nSpell, nCasterLevel, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, oTarget, TRUE);
|
|
SetItemCharges(oWand, nCharges - 2); // One for the damage, one for the spell
|
|
}
|
|
}
|
|
} |