// Anti-stuck variables
private static bool bCanChannelTR = false;
// Tempest rush for a monk
if (GilesTrinity.hashPowerHotbarAbilities.Contains(SNOPower.Monk_TempestRush) && !bTooMuchZChange)
{
if (ZetaDia.Me.CurrentPrimaryResource >= 60 && fDistanceFromTarget > 15f)
bCanChannelTR = true;
else if (bCanChannelTR && ZetaDia.Me.CurrentPrimaryResource <= 20)
bCanChannelTR = false;
if (bCanChannelTR)
{
Vector3 vTargetAimPoint = MathEx.CalculatePointFrom(vMoveToTarget, vMyCurrentPosition, 10f);
ZetaDia.Me.UsePower(SNOPower.Monk_TempestRush, vTargetAimPoint, GilesTrinity.iCurrentWorldID, -1);
return;
}
}
You are my hero of the weekHere's a quick way to get rid of the stutter step using Tempest Rush.
In GilesTrinity\DbProvider\GilesPlayerMover.cs:
Above this line:
ADD:Code:// Anti-stuck variables
Code:private static bool bCanChannelTR = false;
And then REPLACE the entire code block for Tempest Rush with this:
Code:// Tempest rush for a monk if (GilesTrinity.hashPowerHotbarAbilities.Contains(SNOPower.Monk_TempestRush) && !bTooMuchZChange) { if (ZetaDia.Me.CurrentPrimaryResource >= 60 && fDistanceFromTarget > 15f) bCanChannelTR = true; else if (bCanChannelTR && ZetaDia.Me.CurrentPrimaryResource <= 20) bCanChannelTR = false; if (bCanChannelTR) { Vector3 vTargetAimPoint = MathEx.CalculatePointFrom(vMoveToTarget, vMyCurrentPosition, 10f); ZetaDia.Me.UsePower(SNOPower.Monk_TempestRush, vTargetAimPoint, GilesTrinity.iCurrentWorldID, -1); return; } }
In the above code block - the following line has configurable values:
if (ZetaDia.Me.CurrentPrimaryResource >= 60 && fDistanceFromTarget > 15f)
The "60" represents the minimum spirit required to fire up TR. If you have below 60 spirit in this case, Trinity will walk until you regenerate enough spirit to reach this value.
The "15f" in the above line represents the minimum distance a target must be from you for TR to be used. If closer than this value, Trinity will walk.
The above values will likely need adjustment based on your particular build and spirit regeneration rate.
Additionally, I highly recommend disabling the constant re-casting of mantras for the 3-second buff when using TR. You can simply delete the corresponding block of code in the \GilesTrinity\Abilities\Monk.cs file.
Once the latest version of trinity stabilizes I will be wrapping several of these mods up with some check boxes in the UI and submitting them for integration into the main line.
Enjoy.
REP bro!!!Here's a quick way to get rid of the stutter step using Tempest Rush.
In GilesTrinity\DbProvider\GilesPlayerMover.cs:
Above this line:
ADD:Code:// Anti-stuck variables
Code:private static bool bCanChannelTR = false;
And then REPLACE the entire code block for Tempest Rush with this:
Code:// Tempest rush for a monk if (GilesTrinity.hashPowerHotbarAbilities.Contains(SNOPower.Monk_TempestRush) && !bTooMuchZChange) { if (ZetaDia.Me.CurrentPrimaryResource >= 60 && fDistanceFromTarget > 15f) bCanChannelTR = true; else if (bCanChannelTR && ZetaDia.Me.CurrentPrimaryResource <= 20) bCanChannelTR = false; if (bCanChannelTR) { Vector3 vTargetAimPoint = MathEx.CalculatePointFrom(vMoveToTarget, vMyCurrentPosition, 10f); ZetaDia.Me.UsePower(SNOPower.Monk_TempestRush, vTargetAimPoint, GilesTrinity.iCurrentWorldID, -1); return; } }
In the above code block - the following line has configurable values:
if (ZetaDia.Me.CurrentPrimaryResource >= 60 && fDistanceFromTarget > 15f)
The "60" represents the minimum spirit required to fire up TR. If you have below 60 spirit in this case, Trinity will walk until you regenerate enough spirit to reach this value.
The "15f" in the above line represents the minimum distance a target must be from you for TR to be used. If closer than this value, Trinity will walk.
The above values will likely need adjustment based on your particular build and spirit regeneration rate.
Additionally, I highly recommend disabling the constant re-casting of mantras for the 3-second buff when using TR. You can simply delete the corresponding block of code in the \GilesTrinity\Abilities\Monk.cs file.
Once the latest version of trinity stabilizes I will be wrapping several of these mods up with some check boxes in the UI and submitting them for integration into the main line.
Enjoy.
SDK,
I put in your code but my monk still seems to be using TR when he is in the middle of mobs instead of just attacking and saving TR for quick movement. It is your intent to just use it for travel right?
// Tempest rush at elites or groups of mobs
if (!bOOCBuff && !bCurrentlyAvoiding && !playerStatus.IsIncapacitated && !playerStatus.IsRooted &&
(iElitesWithinRange[RANGE_25] > 0 || (CurrentTarget.IsBossOrEliteRareUnique && CurrentTarget.RadiusDistance <= 14f) || iAnythingWithinRange[RANGE_15] > 2) &&
hashPowerHotbarAbilities.Contains(SNOPower.Monk_TempestRush) && ((playerStatus.CurrentEnergy >= 20 && !playerStatus.WaitingForReserveEnergy) || playerStatus.CurrentEnergy >= iWaitingReservedAmount) &&
PowerManager.CanCast(SNOPower.Monk_TempestRush))
{
bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1500 ||
(vPositionLastZigZagCheck != vNullLocation && playerStatus.CurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 200) ||
Vector3.Distance(playerStatus.CurrentPosition, vSideToSideTarget) <= 4f ||
CurrentTarget.ACDGuid != iACDGUIDLastWhirlwind);
vPositionLastZigZagCheck = playerStatus.CurrentPosition;
if (bGenerateNewZigZag)
{
float fExtraDistance = CurrentTarget.CentreDistance <= 20f ? 15f : 5f;
vSideToSideTarget = FindZigZagTargetLocation(CurrentTarget.Position, CurrentTarget.CentreDistance + fExtraDistance);
// Resetting this to ensure the "no-spam" is reset since we changed our target location
powerLastSnoPowerUsed = SNOPower.None;
iACDGUIDLastWhirlwind = CurrentTarget.ACDGuid;
lastChangedZigZag = DateTime.Now;
}
return new GilesPower(SNOPower.Monk_TempestRush, 23f, vSideToSideTarget, iCurrentWorldID, -1, 0, 0, USE_SLOWLY);
}
What portion of the code do you delete from Monk.cs to stop the spamming of mantras?
// 4 Mantra spam for the 4 second buff
if (!bOOCBuff && (!hashPowerHotbarAbilities.Contains(SNOPower.Monk_TempestRush) || playerStatus.CurrentEnergy >= 98 ||
(playerStatus.CurrentHealthPct <= 0.55 && playerStatus.CurrentEnergy >= 75) || CurrentTarget.IsBoss) &&
(playerStatus.CurrentEnergy >= 135 ||
(GilesHasBuff(SNOPower.Monk_SweepingWind) && (playerStatus.CurrentEnergy >= 60 && !Settings.Combat.Monk.SweepingWindWeaponSwap ||
playerStatus.CurrentEnergy >= 110 || (playerStatus.CurrentEnergy >= 100 && playerStatus.CurrentHealthPct >= 0.6) ||
(playerStatus.CurrentEnergy >= 50 && playerStatus.CurrentHealthPct >= 0.6 && !Settings.Combat.Monk.SweepingWindWeaponSwap)) &&
// Checking we have no expensive finishers
!hashPowerHotbarAbilities.Contains(SNOPower.Monk_SevenSidedStrike) && !hashPowerHotbarAbilities.Contains(SNOPower.Monk_LashingTailKick) &&
!hashPowerHotbarAbilities.Contains(SNOPower.Monk_WaveOfLight) && !hashPowerHotbarAbilities.Contains(SNOPower.Monk_CycloneStrike) &&
!hashPowerHotbarAbilities.Contains(SNOPower.Monk_ExplodingPalm))) &&
(iElitesWithinRange[RANGE_15] >= 1 || iAnythingWithinRange[RANGE_15] >= 3 ||
(iAnythingWithinRange[RANGE_15] >= 1 && (Settings.Combat.Monk.HasInnaSet && playerStatus.CurrentEnergy >= 70)))) //intell -- inna
{
if (hashPowerHotbarAbilities.Contains(SNOPower.Monk_MantraOfEvasion) && GilesUseTimer(SNOPower.Monk_MantraOfEvasion))
{
return new GilesPower(SNOPower.Monk_MantraOfEvasion, 0f, vNullLocation, iCurrentWorldID, -1, 1, 1, USE_SLOWLY);
}
if (hashPowerHotbarAbilities.Contains(SNOPower.Monk_MantraOfConviction) && GilesUseTimer(SNOPower.Monk_MantraOfConviction))
{
return new GilesPower(SNOPower.Monk_MantraOfConviction, 0f, vNullLocation, iCurrentWorldID, -1, 1, 1, USE_SLOWLY);
}
if (hashPowerHotbarAbilities.Contains(SNOPower.Monk_MantraOfRetribution) && GilesUseTimer(SNOPower.Monk_MantraOfRetribution))
{
return new GilesPower(SNOPower.Monk_MantraOfRetribution, 0f, vNullLocation, iCurrentWorldID, -1, 1, 1, USE_SLOWLY);
}
if (hashPowerHotbarAbilities.Contains(SNOPower.Monk_MantraOfHealing) && GilesUseTimer(SNOPower.Monk_MantraOfHealing))
{
return new GilesPower(SNOPower.Monk_MantraOfHealing, 0f, vNullLocation, iCurrentWorldID, -1, 1, 1, USE_SLOWLY);
}
}