PRC8/nwn/nwnprc/trunk/newspellbook/tob_jpm_awrath.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

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);
}
}