What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
Excellent post! I almost posted a similar response to this thread as yours early today but restrained myself as I thought it wouldn't be very well received. I have basically the same gear and paragons as you and I experience the same problems at the same level 75. Your theories about why the bot is capping out at this level all make perfect sense and are also inline with what i have seen. I found the DMO Wizard, while nice to watch is a bit boring and have returned to a Flash Fire Wizard with Furnace to farm sub 4 minute Grift 65's. Thanks again for the post!

I just wanted to make people understand cause I saw this post blowing up. A lot of people don't bother looking into the coding of the bot so they automatically assume if someone does 78 GR they should be able to replicate the results. In order for that to happen on a consistent basis you'd most likely need the following to happen:

*paragon 1500+
*open field map (no floors with narrow lanes like sewers, it's because the way the mobs are spawned on these types of maps, also one wrong move by the bot and you waste time running because the navigation back tracks when it shouldn't)
*conduit shrine, power shrine, and speed shrine at least once every GR.

With all that being said I've tuned mine to clear 70-72 between 8-13min range, really depends on the way the rift spawns mobs. It still equates to more XP/hr than my flashfire setup at GR 60-65. I suggest DMO for exp if you're looking for higher paragon. Otherwise flashfire farming at 60's is great for gear/shards and quick gem leveling.
 
With all that being said I've tuned mine to clear 70-72 between 8-13min range, really depends on the way the rift spawns mobs. It still equates to more XP/hr than my flashfire setup at GR 60-65. I suggest DMO for exp if you're looking for higher paragon. Otherwise flashfire farming at 60's is great for gear/shards and quick gem leveling.
What differences do you make in the gr 65 flash fire build/db setup vs the TX one?

Would like to try it myself to see how it performs vs DMO... :-)
 
Has anyone managed to get Teleport: Safe Passage to work with this? It just wants to kite away when I use this rune. I've been using Calamity in the mean time but would really like the 25% dmg reduction.
 
What differences do you make in the gr 65 flash fire build/db setup vs the TX one?

Would like to try it myself to see how it performs vs DMO... :-)

second this, would be interested to see a flashfire setup that farmed 60s efficiently and fast. btw just curious, when people say they farm/speed farm grift for exp/drops/shards etc. no one really mentions times. For me personally, I like to finish a grift if im 'speed farming' for exp/gear/shards with atleast 10 mins left at MOST, usually 11 mins left on average. Now, I can bump up like 15-20 grift levels and farm and finish with maybe 5 minutes, 6 mins left remaining each clear but as far as speed grifting goes. I don't really know whats better, higher grift when you can do a lower one 3x in the time a higher takes or etc.
 
second this, would be interested to see a flashfire setup that farmed 60s efficiently and fast. btw just curious, when people say they farm/speed farm grift for exp/drops/shards etc. no one really mentions times. For me personally, I like to finish a grift if im 'speed farming' for exp/gear/shards with atleast 10 mins left at MOST, usually 11 mins left on average. Now, I can bump up like 15-20 grift levels and farm and finish with maybe 5 minutes, 6 mins left remaining each clear but as far as speed grifting goes. I don't really know whats better, higher grift when you can do a lower one 3x in the time a higher takes or etc.

Im farming GR60 in 2-3mins using http://www.diablofans.com/builds/71856-s5-gr65-firerasha-gem-upgrades but change the following

In-geom in cube
Energy Armor - Force Armor
Diamond Skin - Prism
Trapped / Stricken / Esoteric (Can use powerful if you wish)
 
конченый профиль камней 30 слил изза того что бот тупо встанет и стоит ничего не делает!
 
This build will add 4-5 G-Rift Levels to the standard Flash Fire Wiz Gem/G-Rift farming level: http://www.diablofans.com/builds/71856-s5-gr65-firerasha-gem-upgrades
Don't worry about not having In-Geom in the cube, you get a much more consistent clear with Furnace and increased survivability from the Aquila. There is no Explosive Blast multi-casting over the top of each other for increased damage, but The Furnace goes a long way to compensate. Keep your Minimum Trash Mobs setting very high (12-15) in a small area (10-20) to keep moving and avoid getting hit - burn down the elites as fast as possible - move on. You should tick "Ignore Minions" because you don't need the In-Geom buff. Bane of Powerful, Bane of Trapped, Wreath Lightning (you shouldn't be having a problem killing the rift boss anyway so no need for Stricken).


What differences do you make in the gr 65 flash fire build/db setup vs the TX one?

Would like to try it myself to see how it performs vs DMO... :-)
 
Last edited:
75 is my Highest with a min to spare but its not efficient to run this for anything but climbing the ladder and for that matter bots will never be on the top of the ladder so i just run 70-72 farm in 10-12 min each depending on density . But at paragon 1200 i can definitely see some one at 2400+ doing 78 or even 80.
which trinity version are you using? Seems the newest .25 dont works that good with DMO :O

This build will add 4-5 G-Rift Levels to your current Flash Fire Wiz Gem/G-Rift farming level: http://www.diablofans.com/builds/71856-s5-gr65-firerasha-gem-upgrades
Don't worry about not having In-Geom in the cube, you get a much more consistent clear with Furnace and increased survivability from the Aquila. There is no Explosive Blast multi-casting over the top of each other for increased damage, but The Furnace goes a long way to compensate. Keep your Minimum Trash Mobs setting very high (12-15) in a small area (10-20) to keep moving and avoid getting hit - burn down the elites as fast as possible - move on. You should tick "Ignore Minions" because you don't need the In-Geom buff. Bane of Powerful, Bane of Trapped, Wreath Lightning (you shouldn't be having a problem killing the rift boss anyway so no need for Stricken).

which grift lvl are you running with that build? Did 61 easy in 4min with geom/aquilla...botted it over days for 80-85b exp/h
 
Last edited:
What differences do you make in the gr 65 flash fire build/db setup vs the TX one?

Would like to try it myself to see how it performs vs DMO... :-)

I use this build here exactly the same. DMO Solor GR Build

The only area I'm lacking is Crit % mainly because I've had poor luck with jewelry. Every other item is optimized. I run full ancient gear and 7 pieces augmented with lvl 70+ gems. Paragon is currently at 920.

I list a wide time range because really the variance is high. I've gotten as fast as 7min and sometimes right down to the wire. It really depends on the map layout you get. The bots combat logic isn't good enough to deal with narrow lane maze style maps like sewers or the one with skeleton bones all over. You spend a lot of time running around. In order to do higher GR's you need to set the min Cluster value to higher than 9. Remember time is your enemy on anything GR 70. You can't waste your time fighting white mob clusters of 6 or less. It's really about finding a balance with the combat logic and variance of maps you may get. Normally I set mine to 9, anything higher I notice the bot gets stuck in choke points like stairs because it's found a cluster at a distance and it's trying to get to it but there are like 3 mobs blocking it and it just stands there trying to go through it. Can't run illusionary boots because you need other items in that slot or cube.

I would list my trinity settings but I think it's not going to help. It really takes trial and error and unless you have the exact items I do I can't say for sure you'll get the same results. It took me about 80 GR's to get to where I wanted my bot to be.

I made some slight modifications to the code to deal with some problems I was having below:

To deal with progression globes not being picked up.

Location: Trinity\Cache\Weighting.cs

Code:
#region Progression Globe

                            case TrinityObjectType.ProgressionGlobe:
                            {
                                //Ignore because we are blocked by objects or mobs.
                                if (IsNavBlocked(cacheObject))
                                {
                                    cacheObject.WeightInfo += string.Format("Ignoring {0} - Nav Blocked.",
                                        cacheObject.InternalName);
                                    break;
                                }
                                //Ignore because we are TownPortaling
                                if (TownRun.IsTryingToTownPortal())
                                {
                                    cacheObject.WeightInfo += string.Format("Ignoring {0} - Town Portal.",
                                        cacheObject.InternalName);
                                    break;
                                }

                                if (!Settings.Combat.Misc.CollectHealthGlobe)
                                {
                                    cacheObject.WeightInfo +=
                                        string.Format("Ignoring {0} - Collect Health Globe Setting.",
                                            cacheObject.InternalName);
                                }

                                if (cacheObject.Distance <= [COLOR="#FF0000"][B]150f[/B][/COLOR])
                                {
                                    cacheObject.WeightInfo += string.Format("Maxxing {0} - Progression Globe.",
                                        cacheObject.InternalName);
                                    cacheObject.Weight += MaxWeight;
                                    break;
                                }

Spectral Blade being out of range. This isn't a legit fix, I just shortened the distance a little more to make sure orbs hit more often, still not 100%.

Location: Trinity\Combat\Abilities\WizardCombat.cs

Code:
            // Spectral Blade
            if (CanCast(SNOPower.Wizard_SpectralBlade))
            {
                [COLOR="#FF0000"][B]//[/B][/COLOR]var bladeRange = Runes.Wizard.ArcaneOrbit.IsActive ? 4f : 15f;
                return new TrinityPower(SNOPower.Wizard_SpectralBlade, [COLOR="#FF0000"][B]2f[/B][/COLOR], CurrentTarget.ACDGuid);
            }

I couldn't figure out teleport with safe passage yet, so I switched to calamtiy. What I noticed was when teleport is on cooldown the bot would tele and hop to the next biggest cluster. While in theory this makes sense you end up bouncing between cluster points a lot. It's best to just stay in a specific cluster and let enemies come to you. The only application where this doesn't make sense is if the cluster is more range mobs than melee. I essentially made the bot teleport forward a bit then rotate.

Code:
            // Offensive Teleport: Calamity
            if (CanCast(SNOPower.Wizard_Teleport, CanCastFlags.NoTimer) && Runes.Wizard.Calamity.IsActive &&
                (!Legendary.AetherWalker.IsEquipped || Player.PrimaryResource > 40))
            {
                var bestClusterPoint = TargetUtil.GetBestClusterPoint(5f, 10f);
                // Teleporting exactly on top of targets prevents them from taking damage
                var slightlyForwardPosition = MathEx.GetPointAt(bestClusterPoint, 4f, Player.Rotation);
                return new TrinityPower(SNOPower.Wizard_Teleport, [COLOR="#FF0000"][B]5f, Player.Rotation[/B][/COLOR]);
            }

Slow time was being cast too all over the place for my preference. It didn't allow for good clustering. I changed values to limit the search range so essentially slow time is cast more on top of current fighting area.

Location: Trinity\Combat\Abilities\WizardCombat.cs

Code:
// Slow Time for in combat
            if (!Player.IsIncapacitated && Skills.Wizard.SlowTime.CanCast(CanCastFlags.NoTimer) && TargetUtil.AnyMobsInRange(60))
            {
                
                var bubbles = SpellHistory.History.Where(s => s.Power.SNOPower == SNOPower.Wizard_SlowTime && s.TimeSinceUse.TotalSeconds < 12).ToList();
                var bubblePositions = new HashSet<Vector3>(bubbles.Select(b => b.TargetPosition));
                var clusterPosition = TargetUtil.GetBestClusterPoint();

                // Function to check if bubble is already in (or close enough to) a position
                Func<Vector3, bool> IsValidBubblePosition = pos => !bubblePositions.Any(b => b.Distance2D(pos) <= 14f);
                var isBubbleAtPlayerValid = IsValidBubblePosition(Player.Position);

                TrinityPower bubblePower = null;

                // Always bubble ourselves when cooldown Rune is active.
                if (Runes.Wizard.Exhaustion.IsActive && isBubbleAtPlayerValid)
                {
                    var slightlyForwardPosition = MathEx.GetPointAt(Player.Position, [COLOR="#FF0000"][B]3f[/B][/COLOR], Player.Rotation);
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, slightlyForwardPosition);
                }

                // Defensive Bubble is Priority
                else if (Enemies.Nearby.UnitCount >= 8 && (Runes.Wizard.PointOfNoReturn.IsActive || Runes.Wizard.StretchTime.IsActive) && isBubbleAtPlayerValid)
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Player.Position);
                }                

                // Then casting on elites
                else if (CurrentTarget.IsBossOrEliteRareUnique && CurrentTarget.Distance < 57f && IsValidBubblePosition(CurrentTarget.Position))
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, CurrentTarget.Position);
                }

                // Then big clusters                
                else if (TargetUtil.ClusterExists([COLOR="#FF0000"][B]40f[/B][/COLOR], 5) && clusterPosition.Distance2D(Player.Position) < 57f && IsValidBubblePosition(clusterPosition))
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, clusterPosition);
                }

                // Cooldown isnt an issue with Magnum Opus, so just cast it somewhere.
                else if (Sets.DelseresMagnumOpus.IsEquipped)
                {
                    if (Enemies.BestLargeCluster.Exists && Enemies.BestLargeCluster.Position.Distance2D(Player.Position) < 57f && IsValidBubblePosition(Enemies.BestLargeCluster.Position))
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Enemies.BestLargeCluster.Position);
                    }

                    else if (TargetUtil.AnyMobsInRange([COLOR="#FF0000"][B]30[/B][/COLOR]) && IsValidBubblePosition(Enemies.BestCluster.Position))
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Enemies.BestCluster.Position);
                    }
                    else if (isBubbleAtPlayerValid)
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Player.Position);
                    }
                }

                if (bubblePower != null)
                {
                    return bubblePower;
                }

            }

I haven't had the time to study the bot code to rewrite the slow time routine altogether but it definitely needs to be redone, no offense to the person who wrote it but the logic is counter intuitive to the way the build should be played.
 
.25 is very broken at the moment - .24 Grift 65 - solid 4 mins - not really map dependent 85b/hour. Furnace with Magic Weapon = more survivability than In-Geom with Diamond Shell Prism.

.
which trinity version are you using? Seems the newest .25 dont works that good with DMO :O



which grift lvl are you running with that build? Did 61 easy in 4min with geom/aquilla...botted it over days for 80-85b exp/h
 
Last edited:
second this, would be interested to see a flashfire setup that farmed 60s efficiently and fast. btw just curious, when people say they farm/speed farm grift for exp/drops/shards etc. no one really mentions times. For me personally, I like to finish a grift if im 'speed farming' for exp/gear/shards with atleast 10 mins left at MOST, usually 11 mins left on average. Now, I can bump up like 15-20 grift levels and farm and finish with maybe 5 minutes, 6 mins left remaining each clear but as far as speed grifting goes. I don't really know whats better, higher grift when you can do a lower one 3x in the time a higher takes or etc.

See above post.
 
everything is well said thanks for your input. To be fair he said his paragon 2,000+ , look at his intelligence, its insane. Thats the only thing that will take you from GR71 in 7min, to GR78 in 13min.

and you really nailed the main issue "Be realistic about your bot and character". in other threads people are cycling between Grift and normal (out of no choice for most, others will hide keys on purpose), which means you get Pool of reflection...25% xp. Don't post your xp an hour if you got pools on. not very helpful towards which build is working most efficiently this season, just boasting on forums. only people above para 1000 are getting serious, consistent xp per hour.
mm. I bot 72's in 7-9 min at the moment, 100-110b+ xp per hour (not using pools). Started this around 900 paragon, currently 1k.

My D3 Planner (edited a bit): http://www.d3planner.com/825239033

Note* nearly every slot is enchanted with a 70-80+ gem, so I have over 14k int.

Proof of Exp/hr is 100b+:
http://i.imgur.com/ZW0LeDb.png


http://i.imgur.com/ij9prPq.png is my settings

AoE settings: All default, besides attempt to avoid AoE.

Stricken: Default.
 
Last edited:
great guide but was wondering if you are going to be making a Trinity guide on the guide page of your set up
 
mm. I bot 72's in 7-9 min at the moment, 100-110b+ xp per hour (not using pools). Started this around 900 paragon, currently 1k.

My D3 Planner (edited a bit): http://www.d3planner.com/825239033

Note* nearly every slot is enchanted with a 70-80+ gem, so I have over 14k int.

Proof of Exp/hr is 100b+:
http://i.imgur.com/ZW0LeDb.png


http://i.imgur.com/ij9prPq.png is my settings

AoE settings: All default, besides attempt to avoid AoE.

Stricken: Default.

I love it.
 
I use this build here exactly the same. DMO Solor GR Build

The only area I'm lacking is Crit % mainly because I've had poor luck with jewelry. Every other item is optimized. I run full ancient gear and 7 pieces augmented with lvl 70+ gems. Paragon is currently at 920.

I list a wide time range because really the variance is high. I've gotten as fast as 7min and sometimes right down to the wire. It really depends on the map layout you get. The bots combat logic isn't good enough to deal with narrow lane maze style maps like sewers or the one with skeleton bones all over. You spend a lot of time running around. In order to do higher GR's you need to set the min Cluster value to higher than 9. Remember time is your enemy on anything GR 70. You can't waste your time fighting white mob clusters of 6 or less. It's really about finding a balance with the combat logic and variance of maps you may get. Normally I set mine to 9, anything higher I notice the bot gets stuck in choke points like stairs because it's found a cluster at a distance and it's trying to get to it but there are like 3 mobs blocking it and it just stands there trying to go through it. Can't run illusionary boots because you need other items in that slot or cube.

I would list my trinity settings but I think it's not going to help. It really takes trial and error and unless you have the exact items I do I can't say for sure you'll get the same results. It took me about 80 GR's to get to where I wanted my bot to be.

I made some slight modifications to the code to deal with some problems I was having below:

To deal with progression globes not being picked up.

Location: Trinity\Cache\Weighting.cs

Code:
#region Progression Globe

                            case TrinityObjectType.ProgressionGlobe:
                            {
                                //Ignore because we are blocked by objects or mobs.
                                if (IsNavBlocked(cacheObject))
                                {
                                    cacheObject.WeightInfo += string.Format("Ignoring {0} - Nav Blocked.",
                                        cacheObject.InternalName);
                                    break;
                                }
                                //Ignore because we are TownPortaling
                                if (TownRun.IsTryingToTownPortal())
                                {
                                    cacheObject.WeightInfo += string.Format("Ignoring {0} - Town Portal.",
                                        cacheObject.InternalName);
                                    break;
                                }

                                if (!Settings.Combat.Misc.CollectHealthGlobe)
                                {
                                    cacheObject.WeightInfo +=
                                        string.Format("Ignoring {0} - Collect Health Globe Setting.",
                                            cacheObject.InternalName);
                                }

                                if (cacheObject.Distance <= [COLOR="#FF0000"][B]150f[/B][/COLOR])
                                {
                                    cacheObject.WeightInfo += string.Format("Maxxing {0} - Progression Globe.",
                                        cacheObject.InternalName);
                                    cacheObject.Weight += MaxWeight;
                                    break;
                                }

Spectral Blade being out of range. This isn't a legit fix, I just shortened the distance a little more to make sure orbs hit more often, still not 100%.

Location: Trinity\Combat\Abilities\WizardCombat.cs

Code:
            // Spectral Blade
            if (CanCast(SNOPower.Wizard_SpectralBlade))
            {
                [COLOR="#FF0000"][B]//[/B][/COLOR]var bladeRange = Runes.Wizard.ArcaneOrbit.IsActive ? 4f : 15f;
                return new TrinityPower(SNOPower.Wizard_SpectralBlade, [COLOR="#FF0000"][B]2f[/B][/COLOR], CurrentTarget.ACDGuid);
            }

I couldn't figure out teleport with safe passage yet, so I switched to calamtiy. What I noticed was when teleport is on cooldown the bot would tele and hop to the next biggest cluster. While in theory this makes sense you end up bouncing between cluster points a lot. It's best to just stay in a specific cluster and let enemies come to you. The only application where this doesn't make sense is if the cluster is more range mobs than melee. I essentially made the bot teleport forward a bit then rotate.

Code:
            // Offensive Teleport: Calamity
            if (CanCast(SNOPower.Wizard_Teleport, CanCastFlags.NoTimer) && Runes.Wizard.Calamity.IsActive &&
                (!Legendary.AetherWalker.IsEquipped || Player.PrimaryResource > 40))
            {
                var bestClusterPoint = TargetUtil.GetBestClusterPoint(5f, 10f);
                // Teleporting exactly on top of targets prevents them from taking damage
                var slightlyForwardPosition = MathEx.GetPointAt(bestClusterPoint, 4f, Player.Rotation);
                return new TrinityPower(SNOPower.Wizard_Teleport, [COLOR="#FF0000"][B]5f, Player.Rotation[/B][/COLOR]);
            }

Slow time was being cast too all over the place for my preference. It didn't allow for good clustering. I changed values to limit the search range so essentially slow time is cast more on top of current fighting area.

Location: Trinity\Combat\Abilities\WizardCombat.cs

Code:
// Slow Time for in combat
            if (!Player.IsIncapacitated && Skills.Wizard.SlowTime.CanCast(CanCastFlags.NoTimer) && TargetUtil.AnyMobsInRange(60))
            {
                
                var bubbles = SpellHistory.History.Where(s => s.Power.SNOPower == SNOPower.Wizard_SlowTime && s.TimeSinceUse.TotalSeconds < 12).ToList();
                var bubblePositions = new HashSet<Vector3>(bubbles.Select(b => b.TargetPosition));
                var clusterPosition = TargetUtil.GetBestClusterPoint();

                // Function to check if bubble is already in (or close enough to) a position
                Func<Vector3, bool> IsValidBubblePosition = pos => !bubblePositions.Any(b => b.Distance2D(pos) <= 14f);
                var isBubbleAtPlayerValid = IsValidBubblePosition(Player.Position);

                TrinityPower bubblePower = null;

                // Always bubble ourselves when cooldown Rune is active.
                if (Runes.Wizard.Exhaustion.IsActive && isBubbleAtPlayerValid)
                {
                    var slightlyForwardPosition = MathEx.GetPointAt(Player.Position, [COLOR="#FF0000"][B]3f[/B][/COLOR], Player.Rotation);
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, slightlyForwardPosition);
                }

                // Defensive Bubble is Priority
                else if (Enemies.Nearby.UnitCount >= 8 && (Runes.Wizard.PointOfNoReturn.IsActive || Runes.Wizard.StretchTime.IsActive) && isBubbleAtPlayerValid)
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Player.Position);
                }                

                // Then casting on elites
                else if (CurrentTarget.IsBossOrEliteRareUnique && CurrentTarget.Distance < 57f && IsValidBubblePosition(CurrentTarget.Position))
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, CurrentTarget.Position);
                }

                // Then big clusters                
                else if (TargetUtil.ClusterExists([COLOR="#FF0000"][B]40f[/B][/COLOR], 5) && clusterPosition.Distance2D(Player.Position) < 57f && IsValidBubblePosition(clusterPosition))
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, clusterPosition);
                }

                // Cooldown isnt an issue with Magnum Opus, so just cast it somewhere.
                else if (Sets.DelseresMagnumOpus.IsEquipped)
                {
                    if (Enemies.BestLargeCluster.Exists && Enemies.BestLargeCluster.Position.Distance2D(Player.Position) < 57f && IsValidBubblePosition(Enemies.BestLargeCluster.Position))
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Enemies.BestLargeCluster.Position);
                    }

                    else if (TargetUtil.AnyMobsInRange([COLOR="#FF0000"][B]30[/B][/COLOR]) && IsValidBubblePosition(Enemies.BestCluster.Position))
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Enemies.BestCluster.Position);
                    }
                    else if (isBubbleAtPlayerValid)
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Player.Position);
                    }
                }

                if (bubblePower != null)
                {
                    return bubblePower;
                }

            }

I haven't had the time to study the bot code to rewrite the slow time routine altogether but it definitely needs to be redone, no offense to the person who wrote it but the logic is counter intuitive to the way the build should be played.


Thanks for the tips:-)

The change for teleport does not work, makes trinity crash. I set mine to "5f, slightlyForwardPosition" instead of "5f, Player.Rotation" and that seemed to work OK.
 
Last edited:
Thanks for the tips:-)

The change for teleport does not work, makes trinity crash. I set mine to "5f, slightlyForwardPosition" instead of "5f, Player.Rotation" and that seemed to work OK.

as long as you guys are trying weighting tweaking. mind giving my weighting.cs a shot?
I think i solved a few more skipping elites/ orb problems by giving them more weight. Just only use this for GR, although has been working fine outside of GR too.

Copy into Plugins/Trinity/Cache/Weighting.cs, also just set your shrines to maximum priority in trinity.

some feedback would be great, cant say for sure orbs are 100% fixed. but i havn't missed an elite pack in a while.
View attachment Weighting.cs

Summary of Changes:
-gave orbs max weight (From calculating its weight, to 50000. also increased range from 40 to 150)
-Gave elites/yellows/bosses/uber second highest weight (From 200,400,500 to 45000 all across) (if shrine and elites have the same weight or elites>shrine, the bot decides to try kill any elites near a shrine first, then pickup the shrine, missing out killing two elites with shrine benefit)
-reduced the range of max weight of doors (From 10 to 4). (kill adira act 5 map would cause alot of elite skipping, cause of close proximity shrines, doors etc. Has been smoother now, at least it seems that way)

NOTE: Weighting, skpping stuff is all being worked by the devs. Its tricky, it is very hard to fit the needs of everyone, priorties weighting etc. dev's are working on it. This is just a small tweak to (maybe) increase your performance in GR!
 
Last edited:
I've noticed a pretty big issue with the bot for the high grifts, when the grift is lets use 97% finished as an example, the large mob count makes the bot run around like a moron for at least 30 seconds, just to find the 3 percent, when the 3 percent is right beside him. (I know this because turbo hud shows the percentage given by the mobs 40 yards away. What I just saw made me shake my head, grift was at 99.8% and the bot just ran across a rather large map for 3 minutes just to get a mob that fit the requirement for it to attack. I had to intervene during the guardian fight because it was going to be a few seconds short of completing the rift on time, this was a 75 grift.
 
Last edited:
I use this build here exactly the same. DMO Solor GR Build

The only area I'm lacking is Crit % mainly because I've had poor luck with jewelry. Every other item is optimized. I run full ancient gear and 7 pieces augmented with lvl 70+ gems. Paragon is currently at 920.

I list a wide time range because really the variance is high. I've gotten as fast as 7min and sometimes right down to the wire. It really depends on the map layout you get. The bots combat logic isn't good enough to deal with narrow lane maze style maps like sewers or the one with skeleton bones all over. You spend a lot of time running around. In order to do higher GR's you need to set the min Cluster value to higher than 9. Remember time is your enemy on anything GR 70. You can't waste your time fighting white mob clusters of 6 or less. It's really about finding a balance with the combat logic and variance of maps you may get. Normally I set mine to 9, anything higher I notice the bot gets stuck in choke points like stairs because it's found a cluster at a distance and it's trying to get to it but there are like 3 mobs blocking it and it just stands there trying to go through it. Can't run illusionary boots because you need other items in that slot or cube.

I would list my trinity settings but I think it's not going to help. It really takes trial and error and unless you have the exact items I do I can't say for sure you'll get the same results. It took me about 80 GR's to get to where I wanted my bot to be.

I made some slight modifications to the code to deal with some problems I was having below:

To deal with progression globes not being picked up.

Location: Trinity\Cache\Weighting.cs

Code:
#region Progression Globe

                            case TrinityObjectType.ProgressionGlobe:
                            {
                                //Ignore because we are blocked by objects or mobs.
                                if (IsNavBlocked(cacheObject))
                                {
                                    cacheObject.WeightInfo += string.Format("Ignoring {0} - Nav Blocked.",
                                        cacheObject.InternalName);
                                    break;
                                }
                                //Ignore because we are TownPortaling
                                if (TownRun.IsTryingToTownPortal())
                                {
                                    cacheObject.WeightInfo += string.Format("Ignoring {0} - Town Portal.",
                                        cacheObject.InternalName);
                                    break;
                                }

                                if (!Settings.Combat.Misc.CollectHealthGlobe)
                                {
                                    cacheObject.WeightInfo +=
                                        string.Format("Ignoring {0} - Collect Health Globe Setting.",
                                            cacheObject.InternalName);
                                }

                                if (cacheObject.Distance <= [COLOR="#FF0000"][B]150f[/B][/COLOR])
                                {
                                    cacheObject.WeightInfo += string.Format("Maxxing {0} - Progression Globe.",
                                        cacheObject.InternalName);
                                    cacheObject.Weight += MaxWeight;
                                    break;
                                }

Spectral Blade being out of range. This isn't a legit fix, I just shortened the distance a little more to make sure orbs hit more often, still not 100%.

Location: Trinity\Combat\Abilities\WizardCombat.cs

Code:
            // Spectral Blade
            if (CanCast(SNOPower.Wizard_SpectralBlade))
            {
                [COLOR="#FF0000"][B]//[/B][/COLOR]var bladeRange = Runes.Wizard.ArcaneOrbit.IsActive ? 4f : 15f;
                return new TrinityPower(SNOPower.Wizard_SpectralBlade, [COLOR="#FF0000"][B]2f[/B][/COLOR], CurrentTarget.ACDGuid);
            }

I couldn't figure out teleport with safe passage yet, so I switched to calamtiy. What I noticed was when teleport is on cooldown the bot would tele and hop to the next biggest cluster. While in theory this makes sense you end up bouncing between cluster points a lot. It's best to just stay in a specific cluster and let enemies come to you. The only application where this doesn't make sense is if the cluster is more range mobs than melee. I essentially made the bot teleport forward a bit then rotate.

Code:
            // Offensive Teleport: Calamity
            if (CanCast(SNOPower.Wizard_Teleport, CanCastFlags.NoTimer) && Runes.Wizard.Calamity.IsActive &&
                (!Legendary.AetherWalker.IsEquipped || Player.PrimaryResource > 40))
            {
                var bestClusterPoint = TargetUtil.GetBestClusterPoint(5f, 10f);
                // Teleporting exactly on top of targets prevents them from taking damage
                var slightlyForwardPosition = MathEx.GetPointAt(bestClusterPoint, 4f, Player.Rotation);
                return new TrinityPower(SNOPower.Wizard_Teleport, [COLOR="#FF0000"][B]5f, Player.Rotation[/B][/COLOR]);
            }

Slow time was being cast too all over the place for my preference. It didn't allow for good clustering. I changed values to limit the search range so essentially slow time is cast more on top of current fighting area.

Location: Trinity\Combat\Abilities\WizardCombat.cs

Code:
// Slow Time for in combat
            if (!Player.IsIncapacitated && Skills.Wizard.SlowTime.CanCast(CanCastFlags.NoTimer) && TargetUtil.AnyMobsInRange(60))
            {
                
                var bubbles = SpellHistory.History.Where(s => s.Power.SNOPower == SNOPower.Wizard_SlowTime && s.TimeSinceUse.TotalSeconds < 12).ToList();
                var bubblePositions = new HashSet<Vector3>(bubbles.Select(b => b.TargetPosition));
                var clusterPosition = TargetUtil.GetBestClusterPoint();

                // Function to check if bubble is already in (or close enough to) a position
                Func<Vector3, bool> IsValidBubblePosition = pos => !bubblePositions.Any(b => b.Distance2D(pos) <= 14f);
                var isBubbleAtPlayerValid = IsValidBubblePosition(Player.Position);

                TrinityPower bubblePower = null;

                // Always bubble ourselves when cooldown Rune is active.
                if (Runes.Wizard.Exhaustion.IsActive && isBubbleAtPlayerValid)
                {
                    var slightlyForwardPosition = MathEx.GetPointAt(Player.Position, [COLOR="#FF0000"][B]3f[/B][/COLOR], Player.Rotation);
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, slightlyForwardPosition);
                }

                // Defensive Bubble is Priority
                else if (Enemies.Nearby.UnitCount >= 8 && (Runes.Wizard.PointOfNoReturn.IsActive || Runes.Wizard.StretchTime.IsActive) && isBubbleAtPlayerValid)
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Player.Position);
                }                

                // Then casting on elites
                else if (CurrentTarget.IsBossOrEliteRareUnique && CurrentTarget.Distance < 57f && IsValidBubblePosition(CurrentTarget.Position))
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, CurrentTarget.Position);
                }

                // Then big clusters                
                else if (TargetUtil.ClusterExists([COLOR="#FF0000"][B]40f[/B][/COLOR], 5) && clusterPosition.Distance2D(Player.Position) < 57f && IsValidBubblePosition(clusterPosition))
                {
                    bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, clusterPosition);
                }

                // Cooldown isnt an issue with Magnum Opus, so just cast it somewhere.
                else if (Sets.DelseresMagnumOpus.IsEquipped)
                {
                    if (Enemies.BestLargeCluster.Exists && Enemies.BestLargeCluster.Position.Distance2D(Player.Position) < 57f && IsValidBubblePosition(Enemies.BestLargeCluster.Position))
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Enemies.BestLargeCluster.Position);
                    }

                    else if (TargetUtil.AnyMobsInRange([COLOR="#FF0000"][B]30[/B][/COLOR]) && IsValidBubblePosition(Enemies.BestCluster.Position))
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Enemies.BestCluster.Position);
                    }
                    else if (isBubbleAtPlayerValid)
                    {
                        bubblePower = new TrinityPower(SNOPower.Wizard_SlowTime, 0f, Player.Position);
                    }
                }

                if (bubblePower != null)
                {
                    return bubblePower;
                }

            }

I haven't had the time to study the bot code to rewrite the slow time routine altogether but it definitely needs to be redone, no offense to the person who wrote it but the logic is counter intuitive to the way the build should be played.


I've attempted to edit to match your coding but I just receive compiler errors. Is this an older version of trinity by chance?
 
Back
Top