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.
71 lines
2.7 KiB
Plaintext
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);
|
|
}
|
|
} |