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.
139 lines
5.1 KiB
Plaintext
139 lines
5.1 KiB
Plaintext
/*
|
|
----------------
|
|
Wolf Pack Tactics
|
|
|
|
tob_tgcw_wlfpck.nss
|
|
----------------
|
|
|
|
11/12/07 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Wolf Pack Tactics
|
|
|
|
Tiger Claw (Stance)
|
|
Level: Swordsage 8, Warblade 8
|
|
Prerequisite: Two Tiger Claw maneuvers
|
|
Initiation Action: 1 Swift Action
|
|
Range: Personal
|
|
Target: You
|
|
Duration: Stance
|
|
|
|
With each stinging attach that connects against a foe, you slip around him, using the
|
|
distraction provided by your attacks to prevent him from hindering your movement.
|
|
|
|
While you are in this stance, you gain a 5 foot bonus to movement for every succesful attack,
|
|
up to a maximum of 30 feet. This bonus applies the round after the hits strike.
|
|
*/
|
|
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
//#include "prc_alterations"
|
|
|
|
void WolfPackTactics()
|
|
{
|
|
if (!PreManeuverCastCode())
|
|
{
|
|
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
|
|
// End of Spell Cast Hook
|
|
|
|
object oInitiator = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
|
|
|
if(move.bCanManeuver)
|
|
{
|
|
object oItem = IPGetTargetedOrEquippedMeleeWeapon();
|
|
// Add the OnHit
|
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
effect eDur = ExtraordinaryEffect(EffectVisualEffect(PSI_DUR_BURST));
|
|
if (GetLevelByClass(CLASS_TYPE_BLOODCLAW_MASTER, oInitiator) >= 2)
|
|
{
|
|
eDur = EffectLinkEffects(eDur, EffectMovementSpeedIncrease(33));
|
|
eDur = EffectLinkEffects(eDur, EffectACIncrease(1));
|
|
}
|
|
if (GetLocalInt(oInitiator, "TigerFangSharpClaw")) eDur = EffectLinkEffects(eDur, EffectDamageIncrease(DAMAGE_BONUS_1, DAMAGE_TYPE_BASE_WEAPON));
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oTarget);
|
|
AddEventScript(oInitiator, EVENT_ONHEARTBEAT, "tob_tgcw_wlfpck", TRUE, FALSE);
|
|
AddEventScript(oItem, EVENT_ONHIT, "tob_tgcw_wlfpck", TRUE, FALSE);
|
|
SetLocalObject(oInitiator, "WolfPackWeapon", oItem);
|
|
}
|
|
}
|
|
|
|
void WolfPackOnHit()
|
|
{
|
|
object oInitiator = OBJECT_SELF;
|
|
object oItem = GetSpellCastItem();
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
if(DEBUG) DoDebug("tob_tgcw_wlfpck: OnHit:\n"
|
|
+ "oPC = " + DebugObject2Str(oInitiator) + "\n"
|
|
+ "oItem = " + DebugObject2Str(oItem) + "\n"
|
|
+ "oTarget = " + DebugObject2Str(oTarget) + "\n"
|
|
);
|
|
|
|
// Only applies to weapons
|
|
if(GetBaseItemType(oItem) != BASE_ITEM_ARMOR && GetHasSpellEffect(MOVE_TC_WOLF_PACK_TACTICS, oInitiator))
|
|
{
|
|
// Get the number of completed attacks this round and increment
|
|
int nCount = GetLocalInt(oInitiator, "WolfPackTactics");
|
|
SetLocalInt(oInitiator, "WolfPackTactics", nCount + 1);
|
|
}
|
|
// Target has no spell effect, so clean up.
|
|
else if (!GetHasSpellEffect(MOVE_TC_WOLF_PACK_TACTICS, oInitiator))
|
|
{
|
|
// Clean up the scripts
|
|
object oWeap = GetLocalObject(oInitiator, "WolfPackWeapon");
|
|
RemoveEventScript(oWeap, EVENT_ITEM_ONHIT, "tob_tgcw_wlfpck", TRUE, TRUE);
|
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_tgcw_wlfpck", TRUE, TRUE);
|
|
RemoveEventScript(oInitiator, EVENT_ONHEARTBEAT, "tob_tgcw_wlfpck", TRUE, TRUE);
|
|
DeleteLocalObject(oInitiator, "WolfPackWeapon");
|
|
}
|
|
}
|
|
|
|
void WolfPackOnHB()
|
|
{
|
|
object oInitiator = OBJECT_SELF;
|
|
object oItem = GetLocalObject(oInitiator, "WolfPackWeapon");
|
|
|
|
if(GetHasSpellEffect(MOVE_TC_WOLF_PACK_TACTICS, oInitiator))
|
|
{
|
|
// Get the number of completed attacks this round and then reset
|
|
int nCount = GetLocalInt(oInitiator, "WolfPackTactics");
|
|
DeleteLocalInt(oInitiator, "WolfPackTactics");
|
|
|
|
// Max of +30 feet a round/6 attacks
|
|
if (nCount > 6) nCount = 6;
|
|
// Uses a percent bonus, hence the multiplier
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(17*nCount), oInitiator, 6.0);
|
|
}
|
|
// Target has no spell effect, so clean up.
|
|
else if (!GetHasSpellEffect(MOVE_TC_WOLF_PACK_TACTICS, oInitiator))
|
|
{
|
|
// Clean up the scripts
|
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_tgcw_wlfpck", TRUE, TRUE);
|
|
RemoveEventScript(oInitiator, EVENT_ONHEARTBEAT, "tob_tgcw_wlfpck", TRUE, TRUE);
|
|
DeleteLocalObject(oInitiator, "WolfPackWeapon");
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
int nEvent = GetRunningEvent();
|
|
if(DEBUG) DoDebug("tob_tgcw_wlfpck running, event: " + IntToString(nEvent));
|
|
|
|
// We aren't being called from any event, instead from the maneuver being activated
|
|
if(nEvent == FALSE)
|
|
{
|
|
WolfPackTactics();
|
|
}
|
|
else if(nEvent == EVENT_ITEM_ONHIT)
|
|
{
|
|
WolfPackOnHit();
|
|
}
|
|
else if(nEvent == EVENT_ONHEARTBEAT)
|
|
{
|
|
WolfPackOnHB();
|
|
}
|
|
} |