Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
79 lines
2.8 KiB
Plaintext
79 lines
2.8 KiB
Plaintext
/*
|
|
----------------
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
} |