Further file organization
Further file organization
This commit is contained in:
101
nwn/nwnprc/trunk/scripts/prc_ef_arcfis.nss
Normal file
101
nwn/nwnprc/trunk/scripts/prc_ef_arcfis.nss
Normal file
@@ -0,0 +1,101 @@
|
||||
#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));
|
||||
}
|
Reference in New Issue
Block a user