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

A big thumbs up for the new 2.55.243 Trinity guys ;)

hatral

Member
Joined
Jan 13, 2013
Messages
56
Reaction score
0
I just wanna say that the new trinity works like a charm for LTK monk and Gen monk.
You don't need to change the MonkCombat.cs file anymore :)

Currently doing Grift 80
I'll post some stats later.

I'm still trying to find the option to skip minions..
The bot lost a lot of time on those minions.
 
Last edited:
Hatral can you please share the Gen monk settings pls.
There is no Gen monk setting, it's all optimized in the new Trinity 2.55.243

EDIT:

I've found this setting in the Trinity.xml
Line 284 : <IgnoreMinions>false</IgnoreMinions>

changed to
Line 284 : <IgnoreMinions>true</IgnoreMinions>

I'll try this :)
 
Last edited:
There is no Gen monk setting, it's all optimized in the new Trinity 2.55.243

EDIT:

I've found this setting in the Trinity.xml
Line 284 : <IgnoreMinions>false</IgnoreMinions>

changed to
Line 284 : <IgnoreMinions>true</IgnoreMinions>

I'll try this :)

Sure, the optimization is better, but removing all options to configure the bot is just plain bad.
 
Sure, the optimization is better, but removing all options to configure the bot is just plain bad.

Can't See the Forest for the Trees

I understand the want and need to tinker. Unfortunately, you could really only tinker so much whether you realized it or not.

This due to the method in which Trinity would handle builds and settings:
Inside of the MonkCombat.cs, there were numerous gear and skill checks. If you were using certain gear and/or skills, you might fulfill a special build. Special builds contain specific settings that were considered the most efficient way for that build to be used. Trinity would then use the settings from that specific build to override any other settings since they were "hard coded" and thus took priority.

Since specific gear and skills were used for specific meta builds, often the most important skills were being handled outside of your control. Thus the exact skills you might want to modify might not actually be modifiable by changing settings in the Trinity menus. Sure, the slider moves, but does it actually change something?

In short, if there was a special build that your gear/skills fulfilled, whether you like it or not, Trinity would default to the behavior set by that build in the MonkCombat.cs.

IE:
Let's say that you're using the latest META build and it typically uses Cyclone Strike with the Soothing Breeze rune to keep a party alive.

The combat.cs file might just be checking the minimums:
Sunwuko set? Check.
Lashing Tailkick on skill bar? Check.
Cyclone Strike? Check.

Since the Meta build uses Cyclone Strike, the combat.cs might be overriding settings in the Trinity menus. More specifically, it might be tailoring the usage of Cyclone Strike with the idea that it will always use the Soothing Breeze rune.

  • Maybe it sets the bot to only cyclone strike when all party members are within 24 yards without considering enemies in the area.
  • Perhaps it tells the bot to move to within 24 yards of all friendly units even if it moves out of a mob cluster.
  • It might tell the bot to only use it when a party member within 24 yards is missing 31036+(1.17 * your health globe bonus) life.
  • It could also be set to search for the best mob cluster within 24 yards only.
Hell, it could even combine all of those and add a condition to cast it when more than 5 enemies are further than 10 yards away but within 24 yards.

That might seem all well and good for people using that specific rune for that specific purpose.

What if you want to use Implosion (34 yards range)? Too bad. Once the specific build is controlling the way a skill is used, the settings in the Trinity menu don't necessarily matter. You could set it to 1 mob in 1000 yards and it still might not cast if the hard coded settings only care about healing party members.

The MonkCombat.cs takes precedence. That's a good thing. You want for the bot to know what it's supposed to be doing and not let you break it.

Unfortunately, it's impossible to test every permutation of every setting that was made available. There were many settings that you could change which would have contradicted what the bot was trying to do. Even worse than the example of DB ignoring your setting was when it would allow your setting to break it.

You might want to spend endless hours testing ranges and mob settings while most people want to hit start and walk away. They don't even want to be bothered with 20 minutes to setup their own ItemList.

For the rest of us: If changing a setting in the menu doesn't actually change anything, then why have access to it? It only adds to the confusion of the user. They might waste hours trying to get something to work only to find out that the bot just won't do what they are asking it. It isn't designed to.

Take that a step further. There are a number of settings that you can change which contradict or interrupt the bot's instructions. Changing a particular setting might make sense to you... But the bot gets instructed to have a muppet seizure while you're in the middle of a dream Grift. Why give people access to that? It's counter intuitive.

Let's take another leap. If there are settings that don't change, and settings that break the bot, are there settings that just aren't intelligent based on bot design? Of course! So let's boil the settings down to what should and can actually be modified!

It's like Diablo itself. There is a meta build that capitalizes on the synergy of items, skills, rune and playstyle. You can change a rune and be okay. Change some gear, a skill and some runes... Now it sucks. The fact that you tried such a thing makes you realize how limited your understanding is compared to the people who designed the build.

The bot works in much the same way.

...And that is what you see with .243
. Based on bot design and testing, the most efficient settings.



And this is going to be a big win for the community!

Having everyone using the same settings will lead to better diagnosis across a wider user base. Issues can be quickly identified, tested and confirmed. Effective solutions can be found and put into action. This will create more efficient builds. For everyone.

Easier for developers, easier for users. It's really a win-win scenario.


I don't think most people realize how difficult it can be to look into everything that is posted. You practically need to post every setting, item and skill you are using along with an explanation of what you installed, along with a log. Then you need to explain what the bot is doing and what you want it to do. Then you need to explain how and where it is doing something wrong. Then someone has find the time to set everything exactly how you had it. Then try to get into the exact scenario to repeat the issue to see if it's "just you." Often times this is a waste because it was "just you."

Everyone using the same build will drastically help with this.


If you're still with me after 6000 characters, I applaud you. If you skipped the above message, maybe that's why your bot isn't working right.

Either way, I will leave you with this final note:

Just because you don't have access to 500 settings doesn't mean things won't be changed or improved. It's most likely the opposite. You're going to see more people using the same thing and reporting how it needs to be fine tuned and we will all reap the rewards.
 
I agree on everything in the previous post, but settings like "Cluster size" where the minimum amount is 1 and not 0, is kinda odd to me. There's no possible way of ignoring trash? Some LON crusaders want this feature. I know that this is the first version of the simplified UI, and I like it, but some of the core features for some builds got removed. The only things I'm really missing are "always ignore trash" and kite configuration, otherwise I'm all set. The bot is working almost perfectly for a casual user. Press start and push greater rifts without a problem.

And I'm sorry for rustling jimmies, I know that being a developer is hard when a lot of people want different things. And for that, I applaud you.
 
Last edited:
I agree on everything in the previous post, but settings like "Cluster size" where the minimum amount is 1 and not 0, is kinda odd to me. There's no possible way of ignoring trash? Some LON crusaders want this feature. I know that this is the first version of the simplified UI, and I like it, but some of the core features for some builds got removed. The only things I'm really missing are "always ignore trash" and kite configuration, otherwise I'm all set. The bot is working almost perfectly for a casual user. Press start and push greater rifts without a problem.

And I'm sorry for rustling jimmies, I know that being a developer is hard when a lot of people want different things. And for that, I applaud you.

You didn't rustle any jimmies :) [I am going to say that IRL now, BTW]

I spent many hours at xzjv's ear on Discord asking a million questions. I was really trying to learn how to alter builds for testing, but really learned a lot about how the bot works. I actually came up with some decent crap but I felt sorry for xz and stopped asking so much.

My post was a compilation of all the things I have learned from xzjv about what the bot limitations were and why it functions in certain ways. Also, it hints at how many of the problems posted were a result of the massive options.

Wasn't meant to be a "rustled jimmy" response :) Just trying to pay forward the knowledge which was bestowed upon me.



If you would like to do some testing and report back your findings, I am sure it would be greatly appreciated.

Take a look for yourself, it's really easy to figure out now. Go to this folder:
DB > Plugins > Trinity > Routines > Monk

The .cs files relate to the specific build that they are named after:

  • MonkDefault is the base routine if there is no build detected.
  • MonkRaimentShenlong is the R6 Generator build
  • MonkSunwukoLTK is the Lashing Tailkick Monk
  • MonkUliana is a seven sided strike / palm build.
    • Any of the *.xaml files that you see in there with the name "Settings" at the end are actually the settings available in Trinity on the Combat screen when you are using the named build.

I would recommend downloading and using Notepad++ When you open the .xaml or .cs files. It's much easier to read!


If you want to change the Kite settings, you can mess around with that:
Open the MonkBase.cs
Scroll down to lines 40-58 (Or search the word Kite)
You will find this:
Code:
        #region IRoutine Defaults

        public virtual ActorClass Class => ActorClass.Monk;
        public virtual int PrimaryEnergyReserve => 50;
        public virtual int SecondaryEnergyReserve => 0;
        public virtual [B][COLOR=#008000]Kite[/COLOR][/B]Mode [B][COLOR=#008000]Kite[/COLOR][/B]Mode => [B][COLOR=#008000]Kite[/COLOR][/B]Mode.Never;
        public virtual float [B][COLOR=#008000]Kite[/COLOR][/B]Distance => 0;
        public virtual int [B][COLOR=#008000]Kite[/COLOR][/B]StutterDuration => 500;
        public virtual int [B][COLOR=#008000]Kite[/COLOR][/B]StutterDelay => 1000;
        public virtual int [B][COLOR=#008000]Kite[/COLOR][/B]HealthPct => 100;
        public virtual float TrashRange => 80f;
        public virtual float EliteRange => 80f;
        public virtual float HealthGlobeRange => 60f;
        public virtual float ShrineRange => 80f;
        public virtual Func<bool> ShouldIgnoreNonUnits { get; } = () => false;
        public virtual Func<bool> ShouldIgnorePackSize { get; } = () => false;
        public virtual Func<bool> ShouldIgnoreAvoidance { get; } = () => false;
        public virtual Func<bool> ShouldIgnoreKiting { get; } = () => false;
        public virtual Func<bool> ShouldIgnoreFollowing { get; } = () => false;


And to mess with combat settings, If you open up the MonkSunwukoLTK.cs file it's actually not hard to understand what is going on.

Here is an example that basically is saying:

If you're wearing a Kyoshiro belt and your sweeping wind stacks are less then 3 and your spirit is less than or equal to 75%, then walk away from your current target. But, if your resource is above 75%, attack the best cluster until the prior condition happens again.

Code:
            if (IsNoPrimary)            {
                // Stay away from units for belt to build stacks.
                if (Legendary.KyoshirosSoul.IsEquipped && Skills.Monk.SweepingWind.BuffStacks < 3 && Player.PrimaryResourcePct <= 0.75f)
                {
                    Logger.Log(LogCategory.Routine, "Moving away to build stacks");
                    return Walk(TargetUtil.GetLoiterPosition(CurrentTarget, 40f));
                }


                var clusterUnit = TargetUtil.GetBestClusterUnit(50f) ?? CurrentTarget;
                if (clusterUnit != null)
                {
                    // Allow stacks to drop if resource is high enough.
                    if (Skills.Monk.LashingTailKick.CanCast() && Player.PrimaryResourcePct > 0.75f)
                    {
                        return LashingTailKick(clusterUnit);
                    }
                }

You could very easily change the .75f to .60f [xzjv doesn't follow the imperial system, the "f" doesn't mean "feet" LoL]. Just make sure to change it in both places. This would change the walk away resource from 75% to 60%. You could also change the stack count if you like.


Take a look through the whole file and you will get an idea of what it's doing and why.

Anything that is Green in NotePad++ is a comment. Those are things that aren't part of the active code but are notes about what's going on, or features that are not being used currently.

Edit: As I read through it, I am interested in this FireballTracker code :) Seems to be some sort of delay based on when the fireballs are being shot out. Hmmmz....
 
Last edited:
First of all i want to say Great work xzjv :)

I have been running a 4-man team with the new .245 2 wd´s , monk Zdps and barb Zdps.

The barb is using this ZBarb 4p 100+ - Barbarian - Diablo III Builds - Diablo Fans
and Trinity is obviously choosing the BarbarianDefault routine and here comes the problems.

I am pretty new to programming but i am eager to learn :) The BarbarianDefault.cs relies on
BarbarianBase.cs (i guess) to handle IgnorePain Buff and only uses this on some emergency scenarios.

The group relies on barb to use IgnorePain on cooldown (~10 sec) so i took a shortcut and changed that
in BarbarianBase.cs just to make it work as needed.

Same goes for WarCry since Zdpsbarbs uses Chilanik's Chain to give the group 30% runspeed for 10 sec
so i changed that to in BarbarianBase.cs so it's being cast at cooldown.

I know this isn't the right way to do it since it affects all BarbarianRoutines , but is it possible to copy the code from
BarbarianDefault.cs and make BarbarianZdps.cs and maybe ad some override tags for IgnorePain and WarCry or is it better
to make the code from scratch ?

After some some hours of testing it works like a charm :) only one thing , if the shrine clicker isn't leader (using latest zautofollow)
it only uses the shrines if it stumble upon them (maybe Weighting problem)

And once again thx for a great plugin and all your hard work .
 
I would love to help code/optimize anything really. I'm sitting here constantly trying out different things. Right now I'm trying to implement the move-to-oculus function to my LON crusader, but when I did i realized that the bot does a way better job by just avoiding while steed charging. I'm quite experienced with coding, some c++,c#,java. Gotta gear up a monk to test the new optimized generator. Cheers!
 
Edit: As I read through it, I am interested in this FireballTracker code :) Seems to be some sort of delay based on when the fireballs are being shot out. Hmmmz....

I was trying something out with that but it ended up being worse. Often the bot was turning to face the other direction to move away. The fireballs take anywhere from 750ms to 1250ms after the LTK before they appear. And so they are often shooting in the wrong direction. So i was detecting the fireballs and trying to keep it facing the right direction until the fireball appears. That build is super weird not having a generator, so it ended up just standing there doing nothing too much.

I know this isn't the right way to do it since it affects all BarbarianRoutines , but is it possible to copy the code from
BarbarianDefault.cs and make BarbarianZdps.cs and maybe ad some override tags for IgnorePain and WarCry or is it better
to make the code from scratch ?

I did exactly that for the current routines, copy-pasted the default files, renamed the files, changed the name/description etc. Trinity finds all the IRoutine classes so the files just need to be in the solution somewhere and it will show up in interface.

Technically you just need to implement IRoutine so you could roll your own from scratch but i would inherit from the class base to leverage all the work already done for defaults, then you can focus on what matters for the build without having to duplicate the basic stuff.

Then its best to override the methods like 'ShouldCleave()'. that way when the base method TryPrimaryPower() calls ShouldCleave(out target) it uses your overridden version of the method.

From your overridden method you can either replace it all, or just add a check and then use the base version.

Code:
        protected override bool ShouldMantraOfConviction()
        {
            if (Player.PrimaryResourcePct < 0.3f && Player.CurrentHealthPct > 0.3f)
                return false;


            return base.ShouldMantraOfConviction();
        }

Code:
        protected override bool ShouldEpiphany()
        {
            if (!AllowedToUse(Settings.Epiphany, Skills.Monk.Epiphany))
                return false;


            return base.ShouldEpiphany();
        }

it only uses the shrines if it stumble upon them (maybe Weighting problem)
Yeah, shrine and progression globe weighting needs to be tweaked, something's not right with it at the moment. [/QUOTE]
 
Cool, but where can i download this version? Cause the oficial version here is 2.50.237...
 
Sorry, but after 2.50.239 there's 2.55.246. Any direct link? Thanks in advance, bro.


He literally said where to go to get the latest beta builds, you could've done that in the time u took typing this message...
 
He literally said where to go to get the latest beta builds, you could've done that in the time u took typing this message...

I already did that, man! Can you read my msg again? I DIDN'T find this specific version, cause after 2.50.239 comes 2.55.246, NOT 2.55.243! The good guy said nothing about the latest version because i didn't ask about it (and i know its 2.55.664)!

noUbUUs.jpg
 
Last edited:
I already did that, man! Can you read my msg again? I DIDN'T find this specific version, cause after 2.50.239 comes 2.55.246, NOT 2.55.243! The good guy said nothing about the latest version because i didn't ask about it (and i know its 2.55.664)!

noUbUUs.jpg
Personally I use the SVN to get trinity, it will not only allow you to get the latest version whenever you want, but it will also allow you to get any specific version of trinity, in this case .243. You can get the link for the SVN from the first page of the trinity thread, but here's the link. In order to get a specific version from the SVN, just check the Revision radio button, you can either type in the revision number or select it after opening the revision log, well at least that's how I do it using TortoiseSVN.
 
Last edited:
I already did that, man! Can you read my msg again? I DIDN'T find this specific version, cause after 2.50.239 comes 2.55.246, NOT 2.55.243! The good guy said nothing about the latest version because i didn't ask about it (and i know its 2.55.664)!

noUbUUs.jpg

It's quite obvious that he means the latest version. Doesn't matter if it's 2.55.246, if it's implemented it stays in later versions also. Download latest and be a happy botter.
 
Back
Top