Further file organization
Further file organization
This commit is contained in:
79
nwn/nwnprc/trunk/newspellbook/tob_stsn_sftdef.nss
Normal file
79
nwn/nwnprc/trunk/newspellbook/tob_stsn_sftdef.nss
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
----------------
|
||||
Shifting Defense
|
||||
|
||||
tob_stsn_sftdef.nss
|
||||
----------------
|
||||
|
||||
Sept 7 2018 by Stratovarius
|
||||
|
||||
Shifting Defense
|
||||
|
||||
Setting Sun (Stance)
|
||||
Level: Swordsage 5
|
||||
Initiation Action: 1 Swift Action
|
||||
Range: Personal.
|
||||
Target: You.
|
||||
Duration: Stance.
|
||||
|
||||
The first time per round when an opponent hits you, you reset your position ten feet away from that opponent.
|
||||
*/
|
||||
|
||||
#include "tob_inc_move"
|
||||
#include "tob_movehook"
|
||||
#include "prc_inc_combmove"
|
||||
|
||||
void main()
|
||||
{
|
||||
int nEvent = GetRunningEvent();
|
||||
object oInitiator = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oInitiator);
|
||||
|
||||
// We're being called from the OnHit eventhook
|
||||
if(nEvent == EVENT_ITEM_ONHIT)
|
||||
{
|
||||
oItem = GetSpellCastItem();
|
||||
if(!GetHasSpellEffect(MOVE_SS_SHIFTING_DEFENSE, oInitiator)) // Clean up
|
||||
{
|
||||
// Clean Up - user needs to reactivate stance
|
||||
oItem = GetLocalObject(oInitiator, "ShiftDefArm");
|
||||
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_stsn_sftdef", TRUE, FALSE);
|
||||
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
||||
return;
|
||||
}
|
||||
|
||||
// find the target, if not already given
|
||||
if (oTarget == OBJECT_INVALID)
|
||||
oTarget = PRCGetSpellTargetObject(oInitiator);
|
||||
|
||||
if(DEBUG) DoDebug("tob_stsn_sftdef: OnHit:\n" + "oInitiator = " + DebugObject2Str(oInitiator) + "\n" + "oItem = " + DebugObject2Str(oItem) + "\n" + "oTarget = " + DebugObject2Str(oTarget) + "\n");
|
||||
if (!GetLocalInt(oInitiator, "ShiftDefDelay"))
|
||||
{
|
||||
AssignCommand(oTarget, ClearAllActions(TRUE));
|
||||
_DoBullRushKnockBack(oInitiator, oTarget, 10.0);
|
||||
SetLocalInt(oInitiator, "ShiftDefDelay", TRUE);
|
||||
DelayCommand(6.0f, DeleteLocalInt(oInitiator, "ShiftDefDelay")); // Once a round
|
||||
}
|
||||
}// end if - Running OnHit event
|
||||
else if (!PreManeuverCastCode())
|
||||
{
|
||||
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
||||
if (move.bCanManeuver)
|
||||
{
|
||||
if (GetIsObjectValid(oItem)) // Legal items only
|
||||
{
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR);
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oInitiator);
|
||||
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_stsn_sftdef", TRUE, FALSE);
|
||||
SetLocalObject(oInitiator, "ShiftDefArm", oItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user