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

102 lines
3.2 KiB
Plaintext

#include "prc_inc_stunfist"
#include "prc_inc_sp_tch"
#include "prc_sp_func"
void main()
{
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
effect eNone;
// should be in melee range
if(!GetIsInMeleeRange(oTarget, oPC))
{
SendMessageToPC(oPC, "You are not close enough to your target to attack!");
// move into range so we can attack next round
AssignCommand(oPC, ActionAttack(oTarget));
return;
}
if(!GetIsUnarmed(oPC))
{
SendMessageToPC(oPC, "You need to be unarmed for this ability!");
// be nice and have you get a normal full attack round
PerformAttackRound(oTarget, oPC, eNone);
AssignCommand(oPC, ActionAttack(oTarget));
return;
}
int nSpellID = GetLocalInt(oPC, "EF_REAL_SPELL_CURRENT");
int nSpellbookID = GetLocalInt(oPC, "EF_SPELL_CURRENT");
string sArray = GetLocalString(oPC, "EF_SPELL_CURRENT");
int nUses = sArray == "" ? GetHasSpell(nSpellbookID, oPC) :
persistant_array_get_int(oPC, sArray, nSpellbookID);
if(!nUses)
{
SendMessageToPC(oPC, "No uses or preperations left for selected spell!");
// be nice and have you get a normal full attack round
PerformAttackRound(oTarget, oPC, eNone);
AssignCommand(oPC, ActionAttack(oTarget));
return;
}
if(!IsTouchSpell(nSpellID) && !GetHasFeat(FEAT_EF_HOLD_RAY, oPC))
{
SendMessageToPC(oPC, "Selected spell is not a touch spell!");
// be nice and have you get a normal full attack round
PerformAttackRound(oTarget, oPC, eNone);
AssignCommand(oPC, ActionAttack(oTarget));
return;
}
if(!IsTouchSpell(nSpellID) && !IsRaySpell(nSpellID) && GetHasFeat(FEAT_EF_HOLD_RAY, oPC))
{
SendMessageToPC(oPC, "Selected spell is not a touch or ray spell!");
// be nice and have you get a normal full attack round
PerformAttackRound(oTarget, oPC, eNone);
AssignCommand(oPC, ActionAttack(oTarget));
return;
}
// expend stunning fist use
if (!ExpendStunfistUses(oPC, 1))
{
// be nice and have you get a normal full attack round
PerformAttackRound(oTarget, oPC, eNone);
AssignCommand(oPC, ActionAttack(oTarget));
return;
}
// expend spell use
if(sArray == "")
{
DecrementRemainingSpellUses(oPC, nSpellbookID);
}
else
{
nUses--;
persistant_array_set_int(oPC, sArray, nSpellbookID, nUses);
}
// setup for holding the charge
int iOldHold = GetLocalInt(oPC, PRC_SPELL_HOLD);
int iOldHoldRay = GetLocalInt(oPC, "PRC_SPELL_HOLD_RAY");
SetLocalInt(oPC, PRC_SPELL_HOLD, TRUE);
SetLocalInt(oPC, "PRC_EF_ARCANE_FIST", TRUE);
SetLocalInt(oPC, PRC_CASTERCLASS_OVERRIDE, GetPrimaryArcaneClass(oPC));
SendMessageToPC(oPC, "Arcane Fist:" + IntToString(nSpellID));
// run spell script to hold charge
RunImpactScript(oPC, nSpellID, 0);
SetLocalInt(oPC, PRC_SPELL_HOLD, iOldHold);
DeleteLocalInt(oPC, "PRC_EF_ARCANE_FIST");
DeleteLocalInt(oPC, PRC_CASTERCLASS_OVERRIDE);
PerformAttackRound(oTarget, oPC, eNone);
AssignCommand(oPC, ActionAttack(oTarget, TRUE));
}