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

[Plugin] Giles Combat Replacer

Giles has posted in the dev forums asking devs about DB treating portals as barricades which causes some issues with following them I believe.
 
You need to dump the SNOs and add them to the ignore list within the plugin
 
Hey, I tweaked my settings again and it seems to be working slightly better. I modified Rend again - it should use it a LOT more than even my last modified version. Demon Mines are still sketchy, but everything else seems to be considerably better (at least for me) for act 3 purposes.

Now in a more serious coding sense, I've been messing around with fixing Siegebreaker - I'll have more time to actually read through his code later and I'll try to make a fix on that.

EDIT: I done messed up something bad, so I removed that horrible attachment.
 
Last edited:
Hey, I tweaked my settings again and it seems to be working slightly better. I modified Rend again - it should use it a LOT more than even my last modified version. Demon Mines are still sketchy, but everything else seems to be considerably better (at least for me) for act 3 purposes.

Now in a more serious coding sense, I've been messing around with fixing Siegebreaker - I'll have more time to actually read through his code later and I'll try to make a fix on that.

Thank you!
 
Hey, I tweaked my settings again and it seems to be working slightly better. I modified Rend again - it should use it a LOT more than even my last modified version. Demon Mines are still sketchy, but everything else seems to be considerably better (at least for me) for act 3 purposes.

Now in a more serious coding sense, I've been messing around with fixing Siegebreaker - I'll have more time to actually read through his code later and I'll try to make a fix on that.
My bot doesnt use frenzy anymore after replacing plugin with this update, had to return to original plugin
 
Weird, what rune are you using? It's been working fine for me, but I've been using the Maniac rune. I don't really see any reason why that would matter, but it's the only thing I can think of.
 
I can confirm that it does not attack as well,

Frenzy - Maniac


Can you post the code where you updated it again instead?
 
Last edited:
Oddly enough, downloading it from there it also didn't work, so I decided to simply redo all of my changes from scratch. I just tested it, everything seems to be working, provided voodoo magic doesn't blow everything up.

Here is everything that I've changed in this one:

This simply adds the actor SNO 185391 for those breathing heads in Tower/Core, a fix pulled from the Act 3 champion post.
Code:
private static readonly List<int> listActorSNOIgnoreBlacklist = new List<int> { 
            5840, 111456, 5013, 5014, 205756, 205746, 4182, 4183, 4644, 4062, 4538, 52693, 162575, 2928, 51291, 51292, 
            96132, 90958, 90959, 80980, 51292, 51291, 2928, 3546, 129345, 81857, 138428, 81857, 60583, 170038, 174854, 190390, 
            194263, 5482, 174900, 219702, 221225, 87189, 90072, 107031, 106584, 186130, 187265, 201426, 201242, 200969, 201423, 
            201438, 201464, 201454, 108012, 103279, 89578, 74004, 84531, 84538, 89579, 190492, 209133, 6318, 107705, 105681, 89934, 
            89933, 182276, 117574, 182271, 182283, 182278, 128895, 81980, 82111, 81226, 81227, 107067, 103217, 105763, 110959, 106749,
            107107, 107112, 106731, 107752, 107829, 90321, 107828, 121327, 3865, 150825, 185391
         };

Adding things to avoid + tweaks to avoidance "range" of ice balls and molten core
Code:
private static readonly List<int> listAvoidanceSNODefaults = new List<int>
            {
                // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail  Plague Cloud  Ice Balls     Belial 1      Belial 2      Bees-Wasps    Demon Mine    Arm Pools
                219702,           84608,        5482,         4803,         95868,        108869,       223675,       161822,       161833,       5212,         150825,       3865	
            };
        private static List<int> listAvoidanceSNO = new List<int>(listAvoidanceSNODefaults);
        // How much health to look for and avoid each AOE (1 = 100% health, 0.5 = 50% health etc.)
        private static readonly Dictionary<int, double> dictAvoidanceHealthDefaults = new Dictionary<int, double>
            {
                // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail   Plague Cloud    Ice Balls    Belial 1     Belial 2     Bees-Wasps   Demon Mine   Arm Pools
                { 219702, 1 },   {84608, 1},   {5482, 0.55},   {4803, 1},  {95868, 0.7}, {108869, 0.5}, {223675, 1}, {161822, 1}, {161833, 1},   {5212, 0.4},   {150825, 1},  {3865, 1}
                //{ 219702, 1 }, {84608, 1}, {5482, 1}, {4803, 1},    {95868, 1}, {108869, 1}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}
            };
        private static Dictionary<int, double> dictAvoidanceHealth = new Dictionary<int, double>(dictAvoidanceHealthDefaults);
        // The rough radius of each avoidance thing (from centre to edge!) in feet
        private static readonly Dictionary<int, double> dictAvoidanceRadius = new Dictionary<int, double>
            {
                // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail  Plague Cloud  Ice Balls     Belial 1      Belial 2      Bees-Wasps   Demon Mine   Arm Pools
                { 219702, 15 },   {84608, 8},   {5482, 13},   {4803, 20},   {95868, 8},   {108869, 13}, {223675, 20}, {161822, 14}, {161833, 14}, {5212, 16},  {150825, 10},  {3865, 14}
            };

Avoidance percentages for each class for an A3 run
Code:
dictAvoidanceHealth = new Dictionary<int, double> {
                                    // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail   Plague Cloud    Ice Balls    Belial 1     Belial 2      Bees-Wasps    Mines        Arm Pools
                                    { 219702, 1 },    {84608, 1},   {5482, 0.55}, {4803, 1},    {95868, 0.75}, {108869, 0.55}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 0.5},  {150825, 1},  {3865, 1}
                                };
                            break;
                        case ActorClass.Monk:
                            iEmergencyHealthLimit = 0.46;
                            iHealthGlobeHealthLimit = 0.6;
                            dictAvoidanceHealth = new Dictionary<int, double> {
                                    // Arcane          Desecrator    Poison Tree    Molten Core   Molten Trail   Plague Cloud    Ice Balls    Belial 1     Belial 2     Bees-Wasps  Mines         Arm Pools
                                    { 219702, 1 },    {84608, 1},    {5482, 0.55},  {4803, 1},   {95868, 0.75}, {108869, 0.55}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 0.5}, {150825, 1},  {3865, 1}
                                };
                            break;
                        case ActorClass.Wizard:
                            iEmergencyHealthLimit = 0.70;
                            iHealthGlobeHealthLimit = 0.8;
                            dictAvoidanceHealth = new Dictionary<int, double> {
                                    // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail   Plague Cloud    Ice Balls    Belial 1     Belial 2     Bees-Wasps  Mines        Arm Pools
                                    { 219702, 1 },    {84608, 1},   {5482, 1},    {4803, 1},    {95868, 0.95}, {108869, 0.85}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}, {150825, 1},  {3865, 1}
                                };
                            break;
                        case ActorClass.WitchDoctor:
                            iEmergencyHealthLimit = 0.70;
                            iHealthGlobeHealthLimit = 0.8;
                            dictAvoidanceHealth = new Dictionary<int, double> {
                                    // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail   Plague Cloud    Ice Balls    Belial 1     Belial 2     Bees-Wasps  Mines        Arm Pools
                                    { 219702, 1 },    {84608, 1},   {5482, 1},    {4803, 1},    {95868, 0.95}, {108869, 0.85}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}, {150825, 1},  {3865, 1}
                                };
                            break;
                        case ActorClass.DemonHunter:
                            iEmergencyHealthLimit = 0.70;
                            iHealthGlobeHealthLimit = 0.8;
                            dictAvoidanceHealth = new Dictionary<int, double> {
                                    // Arcane         Desecrator    Poison Tree   Molten Core   Molten Trail   Plague Cloud    Ice Balls    Belial 1     Belial 2     Bees-Wasps  Mines        Arm Pools
                                    { 219702, 1 },    {84608, 1},   {5482, 1},    {4803, 1},    {95868, 0.95}, {108869, 0.85}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}, {150825, 1},  {3865, 1}
                                };
                            break;

Changed Rend code slightly, to fix the activation range (it was 16f) and also to allow it to be used as an "emergency," the heal is pretty ridiculous after all.

Code:
// Rend when enough enemies within close range
                    if (!bBuffsOnly && !bMeIncapacitated && fDistanceFromTarget <= 13f && 
                        powerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
                        (DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Rend] ||
                        // Ability to spam rend every 1.7 seconds if you have high fury
                        (iMyCachedPrimaryPercent >= 0.7 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1500)) &&
                        iMyCachedPrimaryResource >= 30)
                    {
                        return new GilesPower(SNOPower.Barbarian_Rend, 13f, new Vector3(vCurrentTargetPosition.X, vCurrentTargetPosition.Y, vCurrentTargetPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
                    }

Commented out the 5 second out of combat code, as suggested here by Bazingaw:

Code:
// Do we need this? Testing...
            //Navigator.PlayerMover.MoveStop();
            bForceNewTargetFind = true;

            // Force avoidance for 5 seconds if out of combat
            //if (bOutOfCombatAvoidance && DateTime.Now.Subtract(lastTimeInCombat).TotalSeconds < 5)
            //{
            //    FindSafeZone(true);
            //    iEmergencyLoops = 0;
            //    return RunStatus.Running;
            //}

And of course, for the lazy, I've included my own file again. Note that I did not include Bazingaw's Azmodan fix - while it does work, it also possibly reintroduces an old bug that can cause Demonbuddy to crash very very rarely, namely if a mob dies as it is being targeted.
 

Attachments

any way to make it spam rend as often as belph routine does with 2 second setting?
 
yea just tested the one you reuploaded, it looks like it still doesnt spam rend as much as it can, i have a full fury bar with multiple and single target mobs 80% of the time.
 
You can lower the Rend timer even more in this line:

Code:
{SNOPower.Barbarian_Rend, 2000}

Just replace 2000 with the number of milliseconds for the internal CD in the combat routine. For what it's worth, he actually sets it to 1.5 seconds anyway when you have a lot of Fury by default. Just be careful to not go too low otherwise you'll never ever use Frenzy.

EDIT: Actually now that I think about it, what's likely happening is that you are getting a ton of Revenge procs, because right now Revenge has higher priority than Rend. If you want to change the priority, then simply move the code for Rend above the code for Revenge. In other words, swap:

Code:
// Revenge used off-cooldown
                    if (!bBuffsOnly && !bMeIncapacitated && powerHotbarAbilities.Contains(SNOPower.Barbarian_Revenge) && fDistanceFromTarget <= 15f &&
                        DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Revenge]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Revenge] && 
                        PowerManager.CanCast(SNOPower.Barbarian_Revenge))
                    {
                        return new GilesPower(SNOPower.Barbarian_Revenge, 15f, vNullLocation, iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
                    }
                    // Rend when enough enemies within close range
                    if (!bBuffsOnly && !bMeIncapacitated && fDistanceFromTarget <= 13f && 
                        powerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
                        (DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Rend] ||
                        // Ability to spam rend every 1.7 seconds if you have high fury
                        (iMyCachedPrimaryPercent >= 0.7 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1500)) &&
                        iMyCachedPrimaryResource >= 30)
                    {
                        return new GilesPower(SNOPower.Barbarian_Rend, 13f, new Vector3(vCurrentTargetPosition.X, vCurrentTargetPosition.Y, vCurrentTargetPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
                    }

with this:

Code:
// Rend when enough enemies within close range
                    if (!bBuffsOnly && !bMeIncapacitated && fDistanceFromTarget <= 13f && 
                        powerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
                        (DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Rend] ||
                        // Ability to spam rend every 1.7 seconds if you have high fury
                        (iMyCachedPrimaryPercent >= 0.7 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1500)) &&
                        iMyCachedPrimaryResource >= 30)
                    {
                        return new GilesPower(SNOPower.Barbarian_Rend, 13f, new Vector3(vCurrentTargetPosition.X, vCurrentTargetPosition.Y, vCurrentTargetPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
                    }

// Revenge used off-cooldown
                    if (!bBuffsOnly && !bMeIncapacitated && powerHotbarAbilities.Contains(SNOPower.Barbarian_Revenge) && fDistanceFromTarget <= 15f &&
                        DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Revenge]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Revenge] && 
                        PowerManager.CanCast(SNOPower.Barbarian_Revenge))
                    {
                        return new GilesPower(SNOPower.Barbarian_Revenge, 15f, vNullLocation, iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
                    }
 
Last edited:
damn i actually prefer revenge, i use life % leech so those revenge crits would fill my hp bar up instantly. i lowered my rend timer to 1.65 and its slighty better, but still have full fury bar.
 
my barb keeps sprinting while trying to teleport back to town?

ww barb build
 
Is it possible to make my barb always keep Battle Rage up, the get some rage with Bash, if there is no and only then use Sprint and Whirlwind? Now he's using Sprint and continue hitting with Bash, even if there are several targets around.Barb shouldn't use Sprint out of combat in order to save rage, cause without rage he hits single target in a group with Bash and the whirling in one place without moving.
And when he's low on health - to try to run away, leaving tornadoes behind, to heal a little up and get some rage.

It seems like it uses Whirlwind as a main dps ability, but main damage goes from Sprint's tornadoes.
 
Last edited:
sincerely apologize if this has been asked but i was wondering if it was possible to make it hit leap whenever the cooldown is up, sometimes it chooses to do other skills during horde/arcane and it dies however if it had been hitting leap for the armor buff that would have fixed the problem
 
have same request about leap, code is bit long and probably i will mess up some other skills if i change priorities around but i yhink u can safely assume that 95% ppl taking leap takes it for 300% armor and wants it up on cd over other things

ive switched from belphegor cause of superb combat but there are also few issues with avoidance that are bit messed, it can actually detect that way out is blocked and cant avoid so it keeps fighting (at belph it was just standing and dying in such case, if it were to hit mobs it would easly survivive 90%) but after initially avoiding something it happily goes back in forgetting its deadly - like getting away from arcane just to get back inside the center to hit mob or move out of ice cluster zone and instantly get back to get frozen
it is very unnecessary to avoid dying mob explosions, it cant you anyway and it just messes loot (ie. ignoring loot and moving on) but this one is easy to be removed from code without consequences (throw out all molten core ids)
 
Back
Top