What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

WW Barb zig-zag movement is too short

thampz

Member
Joined
Jan 30, 2012
Messages
78
Reaction score
0
Heya,

I've been monitoring my bot for ages now and all I can say is, DAMN it works good! Thanks for it! But I've come across a little problem which I've been trying to fork around.. The WW barb zig-zag movement over the monsters while using whirlwind and sprint is too short, the distance it travels is too short for sprint to leave out a tornado behind. I've been looking all over the code but I can't seem to find the place to modify this movement distance. If the distance could be doubled or tripled and then an option to enable it to move over stuff on ground, eg molten/plague and such it would work sooo nicely, I reckon I could hit up to 30-40m xp/h on mp5 or so.. Now I'm roughly running between 15-20m xp/h, its nice too, but the efficiency would be better with this modification.. I don't mind it to be official update, just would like to know my self what to modify.. :) Thanks in advance!


br. thampz
 
I was going to raise the same issue but since I haven't seen Giles around for a while...
'
Edit: I believe I found where the change needs to go:

Code:
                        bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1500 ||
                            (vPositionLastZigZagCheck != vNullLocation && playerStatus.vCurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 200) ||
                            Vector3.Distance(playerStatus.vCurrentPosition, vSideToSideTarget) <= 4f ||
                            targetCurrent.iThisACDGUID != iACDGUIDLastWhirlwind);
                        vPositionLastZigZagCheck = playerStatus.vCurrentPosition;
                        if (bGenerateNewZigZag)

Edit 2:
I changed this (now I made a few changes so I'm not sure if this is the one that fixed it, lol.

Code:
                            vSideToSideTarget = FindZigZagTargetLocation(targetCurrent.vThisPosition, targetCurrent.fCentreDistance + 20f);
 
Last edited:
Code:
                        bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 2500 ||
                            (vPositionLastZigZagCheck != vNullLocation && playerStatus.vCurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1200) ||
                            Vector3.Distance(playerStatus.vCurrentPosition, vSideToSideTarget) <= 20f ||
                            targetCurrent.iThisACDGUID != iACDGUIDLastWhirlwind);
                        vPositionLastZigZagCheck = playerStatus.vCurrentPosition;

And

Code:
                            vSideToSideTarget = FindZigZagTargetLocation(targetCurrent.vThisPosition, targetCurrent.fCentreDistance + 25f);

I don't see much difference, but I think its rolling few yards further, leaving tornados more often..

Thanks Hidden, will have to play more with the values again, when and if I find the time for it :P
 
That's weird, I don't feel like this is an issue at all. I mean, I know the more tornadoes the better, but I do leave quite a few and I feel increasing zigzag distance would only make you hit less with WW, thus decreasing overall efficiency.
 
That's weird, I don't feel like this is an issue at all. I mean, I know the more tornadoes the better, but I do leave quite a few and I feel increasing zigzag distance would only make you hit less with WW, thus decreasing overall efficiency.
agree with this
 
I wouldn't consider a bot as being "Pro"........ the further the distance.. the more odds it will bug out on stairs... i'd rather stick with my shorter distance....
 
I've done some experiments to setup ww zigzag things and now it works much better. Not ideal but still.

Code:
                    // Whirlwind spam as long as necessary pre-buffs are up
                    if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Whirlwind) && !playerStatus.bIsIncapacitated && !playerStatus.bIsRooted &&
                        // Don't WW against goblins, units in the special SNO list
                        (!settings.bSelectiveWhirlwind || bAnyNonWWIgnoreMobsInRange || !hashActorSNOWhirlwindIgnore.Contains(targetCurrent.iThisActorSNO)) &&
                        // Only if within 15 foot of main target
                        ((targetCurrent.fRadiusDistance <= 25f || iAnythingWithinRange[RANGE_25] >= 1) &&
                        (iAnythingWithinRange[RANGE_50] >= 3 || targetCurrent.iThisHitPoints >= 0.30 || targetCurrent.bThisBoss || targetCurrent.bThisEliteRareUnique || playerStatus.dCurrentHealthPct <= 0.60)) &&
                        // Check for energy reservation amounts
                        //((playerStatus.dCurrentEnergy >= 50 && !playerStatus.bWaitingForReserveEnergy) || playerStatus.dCurrentEnergy >= iWaitingReservedAmount) &&
                        playerStatus.dCurrentEnergy >= 40 &&
                        // If they have battle-rage, make sure it's up
                        (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) && GilesHasBuff(SNOPower.Barbarian_BattleRage))))
                        // If they have sprint, make sure it's up
                        // (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) && GilesHasBuff(SNOPower.Barbarian_Sprint)))
                    {
                        bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 2500 ||
                            (vPositionLastZigZagCheck != vNullLocation && playerStatus.vCurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1200) ||
                            Vector3.Distance(playerStatus.vCurrentPosition, vSideToSideTarget) <= 20f ||
                            targetCurrent.iThisACDGUID != iACDGUIDLastWhirlwind);
                        vPositionLastZigZagCheck = playerStatus.vCurrentPosition;
                        if (bGenerateNewZigZag)
                        {
                            //float fExtraDistance = targetCurrent.fCentreDistance <= 16f ? 16f : 8f;
                            vSideToSideTarget = FindZigZagTargetLocation(targetCurrent.vThisPosition, targetCurrent.fCentreDistance + 30f);
                            // Resetting this to ensure the "no-spam" is reset since we changed our target location
                            powerLastSnoPowerUsed = SNOPower.None;
                            iACDGUIDLastWhirlwind = targetCurrent.iThisACDGUID;
                            lastChangedZigZag = DateTime.Now;
                        }
                        return new GilesPower(SNOPower.Barbarian_Whirlwind, 20f, vSideToSideTarget, iCurrentWorldID, -1, 0, 0, USE_SLOWLY);
                    }
 
I've done some experiments to setup ww zigzag things and now it works much better. Not ideal but still.

Code:
                    // Whirlwind spam as long as necessary pre-buffs are up
                    if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Whirlwind) && !playerStatus.bIsIncapacitated && !playerStatus.bIsRooted &&
                        // Don't WW against goblins, units in the special SNO list
                        (!settings.bSelectiveWhirlwind || bAnyNonWWIgnoreMobsInRange || !hashActorSNOWhirlwindIgnore.Contains(targetCurrent.iThisActorSNO)) &&
                        // Only if within 15 foot of main target
                        ((targetCurrent.fRadiusDistance <= 25f || iAnythingWithinRange[RANGE_25] >= 1) &&
                        (iAnythingWithinRange[RANGE_50] >= 3 || targetCurrent.iThisHitPoints >= 0.30 || targetCurrent.bThisBoss || targetCurrent.bThisEliteRareUnique || playerStatus.dCurrentHealthPct <= 0.60)) &&
                        // Check for energy reservation amounts
                        //((playerStatus.dCurrentEnergy >= 50 && !playerStatus.bWaitingForReserveEnergy) || playerStatus.dCurrentEnergy >= iWaitingReservedAmount) &&
                        playerStatus.dCurrentEnergy >= 40 &&
                        // If they have battle-rage, make sure it's up
                        (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) && GilesHasBuff(SNOPower.Barbarian_BattleRage))))
                        // If they have sprint, make sure it's up
                        // (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) && GilesHasBuff(SNOPower.Barbarian_Sprint)))
                    {
                        bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 2500 ||
                            (vPositionLastZigZagCheck != vNullLocation && playerStatus.vCurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1200) ||
                            Vector3.Distance(playerStatus.vCurrentPosition, vSideToSideTarget) <= 20f ||
                            targetCurrent.iThisACDGUID != iACDGUIDLastWhirlwind);
                        vPositionLastZigZagCheck = playerStatus.vCurrentPosition;
                        if (bGenerateNewZigZag)
                        {
                            //float fExtraDistance = targetCurrent.fCentreDistance <= 16f ? 16f : 8f;
                            vSideToSideTarget = FindZigZagTargetLocation(targetCurrent.vThisPosition, targetCurrent.fCentreDistance + 30f);
                            // Resetting this to ensure the "no-spam" is reset since we changed our target location
                            powerLastSnoPowerUsed = SNOPower.None;
                            iACDGUIDLastWhirlwind = targetCurrent.iThisACDGUID;
                            lastChangedZigZag = DateTime.Now;
                        }
                        return new GilesPower(SNOPower.Barbarian_Whirlwind, 20f, vSideToSideTarget, iCurrentWorldID, -1, 0, 0, USE_SLOWLY);
                    }

I like this, its definitely better than the original! Thanks for sharing! :)
 
I've done some experiments to setup ww zigzag things and now it works much better. Not ideal but still.

Code:
                    // Whirlwind spam as long as necessary pre-buffs are up
                    if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Whirlwind) && !playerStatus.bIsIncapacitated && !playerStatus.bIsRooted &&
                        // Don't WW against goblins, units in the special SNO list
                        (!settings.bSelectiveWhirlwind || bAnyNonWWIgnoreMobsInRange || !hashActorSNOWhirlwindIgnore.Contains(targetCurrent.iThisActorSNO)) &&
                        // Only if within 15 foot of main target
                        ((targetCurrent.fRadiusDistance <= 25f || iAnythingWithinRange[RANGE_25] >= 1) &&
                        (iAnythingWithinRange[RANGE_50] >= 3 || targetCurrent.iThisHitPoints >= 0.30 || targetCurrent.bThisBoss || targetCurrent.bThisEliteRareUnique || playerStatus.dCurrentHealthPct <= 0.60)) &&
                        // Check for energy reservation amounts
                        //((playerStatus.dCurrentEnergy >= 50 && !playerStatus.bWaitingForReserveEnergy) || playerStatus.dCurrentEnergy >= iWaitingReservedAmount) &&
                        playerStatus.dCurrentEnergy >= 40 &&
                        // If they have battle-rage, make sure it's up
                        (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) && GilesHasBuff(SNOPower.Barbarian_BattleRage))))
                        // If they have sprint, make sure it's up
                        // (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) && GilesHasBuff(SNOPower.Barbarian_Sprint)))
                    {
                        bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 2500 ||
                            (vPositionLastZigZagCheck != vNullLocation && playerStatus.vCurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1200) ||
                            Vector3.Distance(playerStatus.vCurrentPosition, vSideToSideTarget) <= 20f ||
                            targetCurrent.iThisACDGUID != iACDGUIDLastWhirlwind);
                        vPositionLastZigZagCheck = playerStatus.vCurrentPosition;
                        if (bGenerateNewZigZag)
                        {
                            //float fExtraDistance = targetCurrent.fCentreDistance <= 16f ? 16f : 8f;
                            vSideToSideTarget = FindZigZagTargetLocation(targetCurrent.vThisPosition, targetCurrent.fCentreDistance + 30f);
                            // Resetting this to ensure the "no-spam" is reset since we changed our target location
                            powerLastSnoPowerUsed = SNOPower.None;
                            iACDGUIDLastWhirlwind = targetCurrent.iThisACDGUID;
                            lastChangedZigZag = DateTime.Now;
                        }
                        return new GilesPower(SNOPower.Barbarian_Whirlwind, 20f, vSideToSideTarget, iCurrentWorldID, -1, 0, 0, USE_SLOWLY);
                    }

I switched to this as well and is does seem to be putting out a lot more and seems to generate fury better to be honest. Also seems to make my lifesteal more effective
 
download 1.5.3.1 and watch the wider zig zag... less problems on stairs as well. Problem is that version is missing a lot of the newer stuff. If someone could just rip the zig zag code out of that one it would be cool.
 
download 1.5.3.1 and watch the wider zig zag... less problems on stairs as well. Problem is that version is missing a lot of the newer stuff. If someone could just rip the zig zag code out of that one it would be cool.
That should be easy enough. But tell me, was 1.5.3.1's zigzag visibly better?

As for the changes made to the code in this threa: So far I don't see any difference at all, in terms of productivity. Not for better nor worse.
I'll let the bot run for the rest of the day and see if there's any visible difference in productivity
 
Last edited:
so do we discuss it here?
is it better to run longer along a path or change it frequently?
Longer path will keep you away from enemies, especially there is only one elite.
I don't know whether change it around a small region frequently will bring the same number of tornadoes as long path?
 
Also, cause I switch bash to ThreateningShout, and I don't like it when it uses normal attack.
I think using WW all along is better if your CC is high enough.
 
I've done some experiments to setup ww zigzag things and now it works much better. Not ideal but still.

Code:
                    // Whirlwind spam as long as necessary pre-buffs are up
                    if (!bOOCBuff && !bCurrentlyAvoiding && hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Whirlwind) && !playerStatus.bIsIncapacitated && !playerStatus.bIsRooted &&
                        // Don't WW against goblins, units in the special SNO list
                        (!settings.bSelectiveWhirlwind || bAnyNonWWIgnoreMobsInRange || !hashActorSNOWhirlwindIgnore.Contains(targetCurrent.iThisActorSNO)) &&
                        // Only if within 15 foot of main target
                        ((targetCurrent.fRadiusDistance <= 25f || iAnythingWithinRange[RANGE_25] >= 1) &&
                        (iAnythingWithinRange[RANGE_50] >= 3 || targetCurrent.iThisHitPoints >= 0.30 || targetCurrent.bThisBoss || targetCurrent.bThisEliteRareUnique || playerStatus.dCurrentHealthPct <= 0.60)) &&
                        // Check for energy reservation amounts
                        //((playerStatus.dCurrentEnergy >= 50 && !playerStatus.bWaitingForReserveEnergy) || playerStatus.dCurrentEnergy >= iWaitingReservedAmount) &&
                        playerStatus.dCurrentEnergy >= 40 &&
                        // If they have battle-rage, make sure it's up
                        (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_BattleRage) && GilesHasBuff(SNOPower.Barbarian_BattleRage))))
                        // If they have sprint, make sure it's up
                        // (!hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) || (hashPowerHotbarAbilities.Contains(SNOPower.Barbarian_Sprint) && GilesHasBuff(SNOPower.Barbarian_Sprint)))
                    {
                        bool bGenerateNewZigZag = (DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 2500 ||
                            (vPositionLastZigZagCheck != vNullLocation && playerStatus.vCurrentPosition == vPositionLastZigZagCheck && DateTime.Now.Subtract(lastChangedZigZag).TotalMilliseconds >= 1200) ||
                            Vector3.Distance(playerStatus.vCurrentPosition, vSideToSideTarget) <= 20f ||
                            targetCurrent.iThisACDGUID != iACDGUIDLastWhirlwind);
                        vPositionLastZigZagCheck = playerStatus.vCurrentPosition;
                        if (bGenerateNewZigZag)
                        {
                            //float fExtraDistance = targetCurrent.fCentreDistance <= 16f ? 16f : 8f;
                            vSideToSideTarget = FindZigZagTargetLocation(targetCurrent.vThisPosition, targetCurrent.fCentreDistance + 30f);
                            // Resetting this to ensure the "no-spam" is reset since we changed our target location
                            powerLastSnoPowerUsed = SNOPower.None;
                            iACDGUIDLastWhirlwind = targetCurrent.iThisACDGUID;
                            lastChangedZigZag = DateTime.Now;
                        }
                        return new GilesPower(SNOPower.Barbarian_Whirlwind, 20f, vSideToSideTarget, iCurrentWorldID, -1, 0, 0, USE_SLOWLY);
                    }

This code causes an issue while fighting azmodan where the bot will often get too far away from him.
Sometimes it actually goes so far that the bot gets stuck.
Any ideas?
 
This code causes an issue while fighting azmodan where the bot will often get too far away from him.
Sometimes it actually goes so far that the bot gets stuck.
Any ideas?
I have the same problem with all types of enemies... the ww zigzig distance is fine but it seems to go off center quite often.
 
I found that movement speed is highly dependent on parameters needed to setup good ww behavior.
So, default ones works better with 24% speed, and the less speed you have the more ZZ ranges you need to have the same effect.
 
I found that movement speed is highly dependent on parameters needed to setup good ww behavior.
So, default ones works better with 24% speed, and the less speed you have the more ZZ ranges you need to have the same effect.
But doesn't everyone have 24% movement speed?
 
All we need is better activity control of WW skill - turn it off when barb goes out of targets and use it within the damaging range: this way we could save some fury. Another thing - zigzag waves length and direction should be adaptive to terrain around.
 
Back
Top