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.
78 lines
2.8 KiB
Plaintext
78 lines
2.8 KiB
Plaintext
#include "prc_sp_func"
|
|
////#include "prc_alterations"
|
|
#include "inc_addragebonus"
|
|
|
|
void main()
|
|
{
|
|
int nEvent = GetRunningEvent();
|
|
object oInitiator = OBJECT_SELF;
|
|
object oItem;
|
|
|
|
// We aren't being called from any event, perform setup
|
|
if(nEvent == FALSE)
|
|
{
|
|
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
|
|
|
// Has to be a melee weapon
|
|
if(GetWeaponRanged(oItem))
|
|
{
|
|
FloatingTextStringOnCreature("You must use a melee weapon for this ability", oInitiator, FALSE);
|
|
return;
|
|
}
|
|
|
|
if(!TakeSwiftAction(oInitiator))
|
|
return;
|
|
|
|
int nSpellID = GetLocalInt(oInitiator, "JPM_SPELL_CURRENT");
|
|
int nLevel = GetLocalInt(oInitiator, "JPM_SPELL_CURRENT_LVL");
|
|
string sArray = GetLocalString(oInitiator, "JPM_SPELL_CURRENT");
|
|
|
|
int nUses = sArray == "" ? GetHasSpell(nSpellID, oInitiator) :
|
|
persistant_array_get_int(oInitiator, sArray, nSpellID);
|
|
|
|
if(!nUses)
|
|
{
|
|
FloatingTextStringOnCreature("You have no more uses of the chosen spell", oInitiator, FALSE);
|
|
return;
|
|
}
|
|
|
|
// if we're here, they can cast
|
|
SetLocalInt(oInitiator, "ArcaneWrath", nLevel);
|
|
|
|
if(sArray == "")
|
|
{
|
|
DecrementRemainingSpellUses(oInitiator, nSpellID);
|
|
}
|
|
else
|
|
{
|
|
nUses--;
|
|
persistant_array_set_int(oInitiator, sArray, nSpellID, nUses);
|
|
}
|
|
|
|
if(GetLocalInt(oInitiator, "ReserveFeatsRunning"))
|
|
DelayCommand(0.1f, ExecuteScript("prc_reservefeat", oInitiator));
|
|
|
|
// Attack bonus for one round
|
|
effect eAtk = EffectAttackIncrease(4);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAtk, oInitiator, 6.0);
|
|
|
|
// The OnHit
|
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "tob_jpm_awrath", TRUE, FALSE);
|
|
}
|
|
// We're being called from the OnHit eventhook, so deal the damage
|
|
else if(nEvent == EVENT_ITEM_ONHIT)
|
|
{
|
|
oItem = GetSpellCastItem();
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nDamageType = GetDamageTypeOfWeapon(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
|
effect eDam = EffectDamage(d10(GetLocalInt(oInitiator, "ArcaneWrath")), nDamageType);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
|
|
|
// Cleaning
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
DeleteLocalInt(oInitiator, "ArcaneWrath");
|
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_jpm_awrath", TRUE, FALSE);
|
|
PRCRemoveEffectsFromSpell(oInitiator, JPM_SPELL_ARCANE_WRATH);
|
|
}
|
|
} |