PRC8/nwn/nwnprc/trunk/scripts/prc_sp_event.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

71 lines
2.7 KiB
Plaintext

/*
prc_sp_event
Script for implementing holding the charge
touch attacks
By: Flaming_Sword
Created: February 2, 2006
Modified: February 12, 2006
*/
#include "prc_sp_func"
void main()
{
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nID = GetSpellId();
int nEvent = GetRunningEvent();
if (nEvent == EVENT_ITEM_ONHIT) {
int nCharges = GetLocalInt(oPC, PRC_SPELL_CHARGE_COUNT);
int nSpellID = GetLocalInt(oPC, PRC_SPELL_CHARGE_SPELLID);
if(nCharges > 0)
{
SetLocalInt(oPC, "AttackHasHit", 1); // maybe do crit in 1/20 chance?
SetLocalInt(oPC, "NoSpellSneak", TRUE);
SetLocalInt(oPC, PRC_CASTERLEVEL_OVERRIDE, GetLocalInt(oPC, PRC_SPELL_CHARGE_LEVEL));
RunImpactScript(oPC, nSpellID, PRC_SPELL_EVENT_ATTACK);
DeleteLocalInt(oPC, "AttackHasHit");
DeleteLocalInt(oPC, "NoSpellSneak");
DeleteLocalInt(oPC, PRC_CASTERLEVEL_OVERRIDE);
}
}
else if(nID == SPELLS_SPELLS_TOUCH_ATTACK || nID == SPELLS_SPELLS_RANGED_ATTACK)
{
int nCharges = GetLocalInt(oPC, PRC_SPELL_CHARGE_COUNT);
if(nCharges > 0)//sanity check
{
int nSpellID = GetLocalInt(oPC, PRC_SPELL_CHARGE_SPELLID);
SetLocalInt(oPC, PRC_CASTERLEVEL_OVERRIDE, GetLocalInt(oPC, PRC_SPELL_CHARGE_LEVEL));
if (nID == SPELLS_SPELLS_TOUCH_ATTACK && !IsTouchSpell(nSpellID) && !GetHasFeat(FEAT_EF_HOLD_RAY, oPC))
SendMessageToPC(oPC, "This is not a touch spell"); //sanity check
else if (nID == SPELLS_SPELLS_TOUCH_ATTACK && !IsTouchSpell(nSpellID) && !IsRaySpell(nSpellID) && GetHasFeat(FEAT_EF_HOLD_RAY, oPC))
SendMessageToPC(oPC, "This is not a touch or ray spell"); //sanity check
else if(IsTouchSpell(nSpellID) && nID == SPELLS_SPELLS_RANGED_ATTACK)
SendMessageToPC(oPC, "This is not a ranged spell"); //sanity check
else
RunSpellScript(oPC, nSpellID, PRC_SPELL_EVENT_ATTACK);
DelayCommand(1.0, DeleteLocalInt(oPC, PRC_CASTERLEVEL_OVERRIDE));
}
else
SendMessageToPC(oPC, "You have no charges remaining");
}
else if(nID == SPELLS_SPELLS_CONCENTRATION_TARGET)
{
SetLocalObject(oPC, PRC_SPELL_CONC_TARGET, oTarget);
FloatingTextStringOnCreature("*Target Selected*", oPC);
}
else if (nID == SPELLS_SPELLS_HOLD_CHARGE_TOGGLE)
{
int nState = GetLocalInt(oPC, PRC_SPELL_HOLD);
if(nState)
FloatingTextStringOnCreature("*Normal Casting*", oPC);
else
FloatingTextStringOnCreature("*Holding the Charge*", oPC);
SetLocalInt(oPC, PRC_SPELL_HOLD, !nState);
}
}