// Wave of light
if (!bOOCBuff && !bCurrentlyAvoiding && !playerStatus.bIsIncapacitated &&
(iElitesWithinRange[RANGE_25] > 0 || ((targetCurrent.bThisEliteRareUnique || targetCurrent.bThisBoss) && targetCurrent.fRadiusDistance <= 14f) || iAnythingWithinRange[RANGE_15] > 2) &&
hashPowerHotbarAbilities.Contains(SNOPower.Monk_WaveOfLight) &&
// Check if either we don't have sweeping winds, or we do and it's ready to cast in a moment
(!hashPowerHotbarAbilities.Contains(SNOPower.Monk_SweepingWind) ||
(hashPowerHotbarAbilities.Contains(SNOPower.Monk_SweepingWind) && playerStatus.dCurrentEnergy >= 85 && GilesUseTimer(SNOPower.Monk_SweepingWind))) &&
GilesUseTimer(SNOPower.Monk_WaveOfLight) &&
(playerStatus.dCurrentEnergy >= 60 || playerStatus.dCurrentEnergyPct >= 0.85))
{
return new GilesPower(SNOPower.Monk_WaveOfLight, 16f, vNullLocation, -1, targetCurrent.iThisACDGUID, 0, 0, USE_SLOWLY);
}
---
// Furious Charge movement for a barb
if (!bFoundSpecialMovement && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) &&
DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_FuriousCharge] &&
PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge))
{
WaitWhileAnimating(3, true);
ZetaDia.Me.UsePower(SNOPower.Barbarian_FuriousCharge, vCurrentDestination, iCurrentWorldID, -1);
dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge] = DateTime.Now;
bFoundSpecialMovement = true;
}
---
// Furious charge
if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) && !playerStatus.bIsRooted && !playerStatus.bIsIncapacitated &&
(iElitesWithinRange[RANGE_25] > 0 || iAnythingWithinRange[RANGE_7] >= 3 || playerStatus.dCurrentHealthPct <= 0.7 || targetCurrent.fCentreDistance >= 7f || targetCurrent.bThisEliteRareUnique || targetCurrent.bThisTreasureGoblin || targetCurrent.bThisBoss) &&
GilesUseTimer(SNOPower.Barbarian_FuriousCharge) &&
//GilesCanRecastAfterFailure(SNOPower.Barbarian_FuriousCharge) &&
PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge))
{
float fExtraDistance;
if (targetCurrent.fCentreDistance <= 15)
fExtraDistance = 10;
else
fExtraDistance = (25 - targetCurrent.fCentreDistance);
if (fExtraDistance < 5f)
fExtraDistance = 5f;
Vector3 vNewTarget = MathEx.CalculatePointFrom(targetCurrent.vThisPosition, playerStatus.vCurrentPosition, targetCurrent.fCentreDistance + fExtraDistance);
return new GilesPower(SNOPower.Barbarian_FuriousCharge, 32f, vNewTarget, iCurrentWorldID, -1, 1, 1, USE_SLOWLY);
}
---
// Furious Charge movement for a barb
if (GilesTrinity.hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) && !bTooMuchZChange &&
DateTime.Now.Subtract(GilesTrinity.dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge]).TotalMilliseconds >= GilesTrinity.dictAbilityRepeatDelay[SNOPower.Barbarian_FuriousCharge] &&
fDistanceFromTarget >= 12f &&
PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge) && !ShrinesInArea(vMoveToTarget))
{
Vector3 vThisTarget = vMoveToTarget;
if (fDistanceFromTarget > 35f)
vThisTarget = MathEx.CalculatePointFrom(vMoveToTarget, vMyCurrentPosition, 35f);
ZetaDia.Me.UsePower(SNOPower.Barbarian_FuriousCharge, vThisTarget, GilesTrinity.iCurrentWorldID, -1);
GilesTrinity.dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge] = DateTime.Now;
return;
}
---
{SNOPower.Barbarian_FuriousCharge, 500}, // Need to be able to check skill-rune for the dynamic cooldown - set to 10 always except for the skill rune :(
Hi Beardi, sorry to be bothering you again with another question: How do I edit Seismic Slam to make it as spammable and accurate as Hammer of the Ancients?
Seismic Slam doesn't seem to activate even at full fury and on the rare occasions that it's actually used, it actually casts the spell in the wrong direction![]()
{SNOPower.Barbarian_SeismicSlam, 2500},
{SNOPower.Barbarian_SeismicSlam, 150},
// Seismic slam enemies within close range if (!bOOCBuff && !bCurrentlyAvoiding && !bWaitingForSpecial && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_SeismicSlam) && !playerStatus.bIsIncapacitated &&
playerStatus.dCurrentEnergy >= 20 &&
(
// More than 75 energy... *OR* 55 energy and target is high on health...
playerStatus.dCurrentEnergy >= 75 || (playerStatus.dCurrentEnergy >= 55 && targetCurrent.iThisHitPoints >= 0.50) ||
// OR... target is elite/goblin/boss...
targetCurrent.bThisEliteRareUnique || targetCurrent.bThisTreasureGoblin || targetCurrent.bThisBoss ||
// OR... player WOTB is active... OR player is low on health...
GilesHasBuff(SNOPower.Barbarian_SeismicSlam) || playerStatus.dCurrentHealthPct <= 0.38
) &&
GilesUseTimer(SNOPower.Barbarian_SeismicSlam))
Ah ok now i know what you mean. Jes i pickup magic/yellow items 61+ potition/gems to.
Is there an easy way to remove ALL monster priorities (except goblins) and just let the bot attack the closest monster?
// A list of ranged mobs that should be attacked even if they are outside of the routines current kill radius
I edited the Wave of Light config so it can be cast fast at elites or a group of few mobs. With the Empowered Wave rune, the spirit cost is just 40 and it giver a pretty good damage and clear my way with a short knockback. I also want to check if sweeping winds is active.
Correct me if i'm wrong. The code is below.
Code:// Wave of light if (!bOOCBuff && !bCurrentlyAvoiding && !playerStatus.bIsIncapacitated && (iElitesWithinRange[RANGE_25] > 0 || ((targetCurrent.bThisEliteRareUnique || targetCurrent.bThisBoss) && targetCurrent.fRadiusDistance <= 14f) || iAnythingWithinRange[RANGE_15] > 2) && hashPowerHotbarAbilities.Contains(SNOPower.Monk_WaveOfLight) && // Check if either we don't have sweeping winds, or we do and it's ready to cast in a moment (!hashPowerHotbarAbilities.Contains(SNOPower.Monk_SweepingWind) || (hashPowerHotbarAbilities.Contains(SNOPower.Monk_SweepingWind) && playerStatus.dCurrentEnergy >= 85 && GilesUseTimer(SNOPower.Monk_SweepingWind))) && GilesUseTimer(SNOPower.Monk_WaveOfLight) && (playerStatus.dCurrentEnergy >= 60 || playerStatus.dCurrentEnergyPct >= 0.85)) { return new GilesPower(SNOPower.Monk_WaveOfLight, 16f, vNullLocation, -1, targetCurrent.iThisACDGUID, 0, 0, USE_SLOWLY); }
Anyway to prevent the bot from attempting to "Rend" the following?:
-Desecrator Pools
-Frozen Bombs
-Arcane Sentries
-Poison Pools
-Molten Bombs
-Molten Trails
-Act3 Flame Cannons
I'm having Trouble with Furious Charge.
I just started reading though the .cs and this thread and I don't see how to change it's settings.
What I'm seeing, when the bot starts, he shouts, then he charges, 2 secs later, he's fighting, but he can't charge because the timer isn't up.
Then he charges again every time the timer is up. I tried to turn off Out of combat movement, but then he doesn't sprint.
Once he gets into combat, it seems to be working ok, but if it worked as desired, combat would be over that much quicker.
My goal is to tell him not to charge unless there are >=3 monsters in range.
Then I want him to use it as often as possible until there are none.
The cooldown is about 10 seconds, Normal combat for 10 trash mobs is about 7-8 seconds, so unless it's a big pack or elite, he doesn't even get to use the skill.
Below are all the lines I could find that might be edited. I have changed most of them one at a time to see if anything changed but so far no luck.
Code:--- // Furious Charge movement for a barb if (!bFoundSpecialMovement && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_FuriousCharge] && PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge)) { WaitWhileAnimating(3, true); ZetaDia.Me.UsePower(SNOPower.Barbarian_FuriousCharge, vCurrentDestination, iCurrentWorldID, -1); dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge] = DateTime.Now; bFoundSpecialMovement = true; } --- // Furious charge if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) && !playerStatus.bIsRooted && !playerStatus.bIsIncapacitated && (iElitesWithinRange[RANGE_25] > 0 || iAnythingWithinRange[RANGE_7] >= 3 || playerStatus.dCurrentHealthPct <= 0.7 || targetCurrent.fCentreDistance >= 7f || targetCurrent.bThisEliteRareUnique || targetCurrent.bThisTreasureGoblin || targetCurrent.bThisBoss) && GilesUseTimer(SNOPower.Barbarian_FuriousCharge) && //GilesCanRecastAfterFailure(SNOPower.Barbarian_FuriousCharge) && PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge)) { float fExtraDistance; if (targetCurrent.fCentreDistance <= 15) fExtraDistance = 10; else fExtraDistance = (25 - targetCurrent.fCentreDistance); if (fExtraDistance < 5f) fExtraDistance = 5f; Vector3 vNewTarget = MathEx.CalculatePointFrom(targetCurrent.vThisPosition, playerStatus.vCurrentPosition, targetCurrent.fCentreDistance + fExtraDistance); return new GilesPower(SNOPower.Barbarian_FuriousCharge, 32f, vNewTarget, iCurrentWorldID, -1, 1, 1, USE_SLOWLY); } --- // Furious Charge movement for a barb if (GilesTrinity.hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) && !bTooMuchZChange && DateTime.Now.Subtract(GilesTrinity.dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge]).TotalMilliseconds >= GilesTrinity.dictAbilityRepeatDelay[SNOPower.Barbarian_FuriousCharge] && fDistanceFromTarget >= 12f && PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge) && !ShrinesInArea(vMoveToTarget)) { Vector3 vThisTarget = vMoveToTarget; if (fDistanceFromTarget > 35f) vThisTarget = MathEx.CalculatePointFrom(vMoveToTarget, vMyCurrentPosition, 35f); ZetaDia.Me.UsePower(SNOPower.Barbarian_FuriousCharge, vThisTarget, GilesTrinity.iCurrentWorldID, -1); GilesTrinity.dictAbilityLastUse[SNOPower.Barbarian_FuriousCharge] = DateTime.Now; return; } --- {SNOPower.Barbarian_FuriousCharge, 500}, // Need to be able to check skill-rune for the dynamic cooldown - set to 10 always except for the skill rune :(
The issue I have with what you're trying to do is regarding "My goal is to tell him not to charge unless there are >=3 monsters in range.". The problem here is that the bot only registers mobs in range at a specific time, it doesn't cache it so that it knows there was a pack of 10 that is now down to one mob.
Because of this changing the code to >=3 will be fine, but it will stop using it to finish them off.
Unfortunately I'm not too comfortable editing the code that deals with movement either, so I guess just post on the Barb Thread to see if Giles can look at it for you![]()
---
// Furious charge
if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_FuriousCharge) && !playerStatus.bIsRooted && !playerStatus.bIsIncapacitated &&
(iElitesWithinRange[RANGE_25] > 0 || iAnythingWithinRange[RANGE_7] >= 3 || iAnythingWithinRange[RANGE_12] <= 3 ||playerStatus.dCurrentHealthPct <= 0.7 || targetCurrent.fCentreDistance >= 7f || targetCurrent.bThisEliteRareUnique || targetCurrent.bThisTreasureGoblin || targetCurrent.bThisBoss) &&
PowerManager.CanCast(SNOPower.Barbarian_FuriousCharge))
{
float fExtraDistance;
if (targetCurrent.fCentreDistance <= 15)
fExtraDistance = 10;
else
fExtraDistance = (25 - targetCurrent.fCentreDistance);
if (fExtraDistance < 5f)
fExtraDistance = 5f;
Vector3 vNewTarget = MathEx.CalculatePointFrom(targetCurrent.vThisPosition, playerStatus.vCurrentPosition, targetCurrent.fCentreDistance + fExtraDistance);
return new GilesPower(SNOPower.Barbarian_FuriousCharge, 32f, vNewTarget, iCurrentWorldID, -1, 1, 1, USE_SLOWLY);
}
Anyway to prevent the bot from attempting to "Rend" the following?:
-Desecrator Pools
-Frozen Bombs
-Arcane Sentries
-Poison Pools
-Molten Bombs
-Molten Trails
-Act3 Flame Cannons
Great guide, I have stickied this!
But, muhahahaha, I shall leave you at the whim of the wrath of the userbase and you can maintain this guide completely how you wish! It saves me having to do it!
Thanks for sharing, and it's very well written![]()
Sounds like the same issue that Archon Disintegrate has, the bot cannot hold a button down unless the window is focussed, which is a damn pain. Test that out though, should stop it doing that.
Sounds like the same issue that Archon Disintegrate has, the bot cannot hold a button down unless the window is focussed, which is a damn pain. Test that out though, should stop it doing that.
And to everyone else, I'll be away till monday so don't expect any responses![]()
// Rend spam
if (!bOOCBuff && !playerStatus.bIsIncapacitated && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
(!bCurrentlyAvoiding || iAnythingWithinRange[RANGE_12] >= 1) &&
// Doesn't need CURRENT target to be in range, just needs ANYTHING to be within 9 foot, since it's an AOE!
(iAnythingWithinRange[RANGE_6] > 0 || targetCurrent.fRadiusDistance <= 6f) &&
// Either off full 4 second or so cooldown...
GilesUseTimer(SNOPower.Barbarian_Rend) ||
// ... or ability to spam rend every 0.4 seconds if more enemies in range than when last used rend...
(iAnythingWithinRange[RANGE_6] > iWithinRangeLastRend && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1000) ||
// ... or ability to spam rend every 1.1 seconds if current primary target changes...
(targetCurrent.iThisACDGUID != iACDGUIDLastRend && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1800) ||
// ... or ability to spam rend every 1.5 seconds with almost full fury
(playerStatus.dCurrentEnergyPct >= 0.85 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 2500) ||
// ... or ability to spam rend every 2 seconds with a lot of fury
(playerStatus.dCurrentEnergyPct >= 0.65 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 3500)
)
My HOTA spends 11 Fury, i need a modification to use this skill more times, my Fury always is full.