You're welcome, glad you're enjoying it
You're probably on the leaderboard![]()
i hope not, for my sake

You're welcome, glad you're enjoying it
You're probably on the leaderboard![]()
i hope not, for my sake![]()
if (!TargetUtil.AnyMobsInRange(CloseToRangeMin) || Core.Avoidance.InAvoidance(Player.Position) || Player.IsGhosted || FindShrine() != null)
{
if (!IsInCombat && FindShrineOrGlobe() != null && !Core.Avoidance.InAvoidance(Player.Position))
{
destination = FindShrineOrGlobe().Position;
return Walk(destination);
if ((Legendary.ReapersWraps.IsEquipped || Legendary.ReapersWraps.IsEquippedInCube) && Player.PrimaryResourcePct < 0.9f && !IsInCombat && FindHealthGlobe() != null && !Core.Avoidance.InAvoidance(Player.Position))
destination = FindHealthGlobe().Position;
return Walk(destination);
return GetOffensivePower();
if (FindShrineOrGlobe() != null)
{
if (FindShrineOrGlobe().Position.Distance(target.Position) > CloseToRangeMin && !FindShrineOrGlobe().IsAvoidanceOnPath)
{
destination = FindShrineOrGlobe().Position;
return true;
}
}
if ((((Legendary.ReapersWraps.IsEquipped || Legendary.ReapersWraps.IsEquippedInCube) && Player.PrimaryResourcePct < CastMagesPct) || Player.CurrentHealthPct <= Settings.EmergencyHealthPct) && FindHealthGlobe() != null)
{
if (FindHealthGlobe().Position.Distance(target.Position) > CloseToRangeMin && FindHealthGlobe().Position.Distance(target.Position) < CombatRange && !FindHealthGlobe().IsAvoidanceOnPath)
{
destination = FindHealthGlobe().Position;
return true;
}
}
I use army of the dead with default settings so it casts whenever it is ready and I like it coz set bonus makes cooldown really fast. Land of the dead works as in original routine - only in elite fights. I suggest anything that has listed options or best fits them.Nice work there mate! Thanks for sharing , one question you use army of the dead and land of the dead right? And which ring or amulet you suggest? Thanks again![]()
Here is a fork of the authors routine with some changes:
- combat improvements: straight using equiped skills
- minimum essence setting for casting control skeletons, because they cost more than mages and besides that there is no need to spam it coz they autoattack after first use
- removed required travelers set, coz i dont use it and wonder who uses it with bot standig and attacking behind so always recieving amplified damage
- removed required Simulacrum skill, because i use Army Of The Dead skill, but u can still use Simulacrum if u want
- removed Blood Rush and other not included in the build skill casting support
- fixed some undefined targeting errors
--------
GetMovementPower()
Code:if (!TargetUtil.AnyMobsInRange(CloseToRangeMin) || Core.Avoidance.InAvoidance(Player.Position) || Player.IsGhosted || FindShrine() != null) { if (!IsInCombat && FindShrineOrGlobe() != null && !Core.Avoidance.InAvoidance(Player.Position)) { destination = FindShrineOrGlobe().Position; return Walk(destination);
Do you understand that 1(FindShrine()) - object, 2(FindShrineOrGlobe()) - another object, 3(FindShrineOrGlobe()) - another object and can be null and not checked in the last occurance at all? Every time u call this functions you get different result including null. That situation can make bot stuck.
Code:if ((Legendary.ReapersWraps.IsEquipped || Legendary.ReapersWraps.IsEquippedInCube) && Player.PrimaryResourcePct < 0.9f && !IsInCombat && FindHealthGlobe() != null && !Core.Avoidance.InAvoidance(Player.Position)) destination = FindHealthGlobe().Position; return Walk(destination);
Exactly the same problem. Checking different objects. Object can be null.
Code:return GetOffensivePower();
I'm not trinity or db expert but the default routine after checking movement powers return Walk(dest);
This may be the reason of bot trying to attack globes.
I think you should try ckeck if it is in combat mode or something like there is monster at the destination. I've noticed many times how skeletons were trying to defeat last monster near shrine but character stuck doing nothing or attacking globe.
--------
ShouldMove()
Code:if (FindShrineOrGlobe() != null) { if (FindShrineOrGlobe().Position.Distance(target.Position) > CloseToRangeMin && !FindShrineOrGlobe().IsAvoidanceOnPath) { destination = FindShrineOrGlobe().Position; return true; } }
Checking different objects. Object can be null.
Code:if ((((Legendary.ReapersWraps.IsEquipped || Legendary.ReapersWraps.IsEquippedInCube) && Player.PrimaryResourcePct < CastMagesPct) || Player.CurrentHealthPct <= Settings.EmergencyHealthPct) && FindHealthGlobe() != null) { if (FindHealthGlobe().Position.Distance(target.Position) > CloseToRangeMin && FindHealthGlobe().Position.Distance(target.Position) < CombatRange && !FindHealthGlobe().IsAvoidanceOnPath) { destination = FindHealthGlobe().Position; return true; } }
Same here. That is not right.
So I did changes to bots gear:
Using this routine with this build changes made my bot able to do 5 lvl higher GR than before dieing less than before.
- replaced Travelator pledge and Compas rose with any another jewellery that gives: atack speed, area damage, CHC, CHD
- replaced (Simulacrum) skill with (Army of The Dead, warfare rune) which bot casts very often due to set bonus cooldown
This routine can be loaded in DB with original in the same time.
Hope Bantou will fix other targeting issues.
Thanks for your input, as far as I am aware it did still stuck quite some distance from a shrine twice for me, but that was because I was only checking to a default range of 40 yards, and apparently Trinity was still occasionally locking on to the target from a greater range (in the next update it will be set to 50 yards by default). I want the range to be as close as possible while still avoiding the stuck, and I don't yet know for sure at what max range trinity might acquire the target of the shrine. The reason I think it tries to attack the shrine in that case too, is that while trinity does still let me substitute a spell cast for a call to walk, it won't let me substitute my intended target for it's intended target (being the shrine). Apparently this can happen for Pools of Reflection and rarely, Health Pools too (the next update will have a fix for this too). As far as the null references go, if it returns a valid target in the first call, the same target will still be in range and returned by the second call 0.01 milliseconds later (but you're right, there is still a bees dick chance of returning two different results, so I will fix that for the next update too). As far as the confusing names go, I was originally going to have it collecting the shines as well as the globes itself, and tell people to turn off activating shrines setting in trinity, but I have thus far been unable to work out how the CR can tell Trinity to actually click the shrine, so the naming is in part a legacy to that idea (and now in the next update I will change them so they are more meaningful). FindShrineOrGlobe() only searches for the nearest Progress or Power Globe within a default range of 80 yards (you can pass a different range), and returns any such target found. FindShrine() returns the nearest shrine within the default range of 40 yards currently (but as I said previously I will change that to 50 yards). FindHealthGlobe() returns the nearest Health Globe within a default range of 30 yards. Any range can be passed to these functions, but I'm not sure yet what the limit is on Trinity targeting as far as what the max valid range is, (the largest range I've currently seen others use is 80 yards). And each of these functions returns null if there is no such target within range. Sometimes I'm only calling the function and checking if null, but not actually working with the returned target, because it's just to see if any such target is in range. As far as the skills and items go for the Build property, all this determines is if your skills and gear meet the minimum requirements, and you have it set in Trinity settings to automatically select the combat routine, then this one will be selected. It's really not that important, because most people Force Select the combat routine they want to use anyway. I am still tweaking it to make it perfect. All of this has been in answer to what you said in your post only, but when I have time I will definitely have a look at what changes you made to the code in the version that you posted up. And I do appreciate your efforts and feedback.
Thanks for your contribution![]()
May be try to use public override Func<bool> ShouldIgnoreNonUnits => InCombatState; It is a function allow you to ignore nonunit(like shine). My setting was ignore nonunit target during combat.
For the target part, return GetOffensivePower() from movement function is the reason causing most of stuck, because from my understanding, movement func always get new target from trinity, some times it could be dead body, which causing stuck of course. Even with those issue, I have to admit, I didn't find better way to be more aggressive. Btw have you notice Getmovement func can't return null?? It is weird but null return could causing nullexception, dont know why other class's original routine still using that, or it is just my DB?
Here is a fork of the authors routine with some changes:
- combat improvements: straight using equiped skills
- minimum essence setting for casting control skeletons, because they cost more than mages and besides that there is no need to spam it coz they autoattack after first use
- removed required travelers set, coz i dont use it and wonder who uses it with bot standig and attacking behind so always recieving amplified damage
- removed required Simulacrum skill, because i use Army Of The Dead skill, but u can still use Simulacrum if u want
- removed Blood Rush and other not included in the build skill casting support
- fixed some undefined targeting errors
--------
GetMovementPower()
Code:if (!TargetUtil.AnyMobsInRange(CloseToRangeMin) || Core.Avoidance.InAvoidance(Player.Position) || Player.IsGhosted || FindShrine() != null) { if (!IsInCombat && FindShrineOrGlobe() != null && !Core.Avoidance.InAvoidance(Player.Position)) { destination = FindShrineOrGlobe().Position; return Walk(destination);
Do you understand that 1(FindShrine()) - object, 2(FindShrineOrGlobe()) - another object, 3(FindShrineOrGlobe()) - another object and can be null and not checked in the last occurance at all? Every time u call this functions you get different result including null. That situation can make bot stuck.
Code:if ((Legendary.ReapersWraps.IsEquipped || Legendary.ReapersWraps.IsEquippedInCube) && Player.PrimaryResourcePct < 0.9f && !IsInCombat && FindHealthGlobe() != null && !Core.Avoidance.InAvoidance(Player.Position)) destination = FindHealthGlobe().Position; return Walk(destination);
Exactly the same problem. Checking different objects. Object can be null.
Code:return GetOffensivePower();
I'm not trinity or db expert but the default routine after checking movement powers return Walk(dest);
This may be the reason of bot trying to attack globes.
I think you should try ckeck if it is in combat mode or something like there is monster at the destination. I've noticed many times how skeletons were trying to defeat last monster near shrine but character stuck doing nothing or attacking globe.
--------
ShouldMove()
Code:if (FindShrineOrGlobe() != null) { if (FindShrineOrGlobe().Position.Distance(target.Position) > CloseToRangeMin && !FindShrineOrGlobe().IsAvoidanceOnPath) { destination = FindShrineOrGlobe().Position; return true; } }
Checking different objects. Object can be null.
Code:if ((((Legendary.ReapersWraps.IsEquipped || Legendary.ReapersWraps.IsEquippedInCube) && Player.PrimaryResourcePct < CastMagesPct) || Player.CurrentHealthPct <= Settings.EmergencyHealthPct) && FindHealthGlobe() != null) { if (FindHealthGlobe().Position.Distance(target.Position) > CloseToRangeMin && FindHealthGlobe().Position.Distance(target.Position) < CombatRange && !FindHealthGlobe().IsAvoidanceOnPath) { destination = FindHealthGlobe().Position; return true; } }
Same here. That is not right.
So I did changes to bots gear:
Using this routine with this build changes made my bot able to do 5 lvl higher GR than before dieing less than before.
- replaced Travelator pledge and Compas rose with any another jewellery that gives: atack speed, area damage, CHC, CHD
- replaced (Simulacrum) skill with (Army of The Dead, warfare rune) which bot casts very often due to set bonus cooldown
This routine can be loaded in DB with original in the same time.
Hope Bantou will fix other targeting issues.
Check routine settings. Works fine for me.I cant get this to work,db keeps running around looking for a valid target, any help?
Thanks for your input, as far as I am aware it did still stuck quite some distance from a shrine twice for me, but that was because I was only checking to a default range of 40 yards, and apparently Trinity was still occasionally locking on to the target from a greater range (in the next update it will be set to 50 yards by default). I want the range to be as close as possible while still avoiding the stuck, and I don't yet know for sure at what max range trinity might acquire the target of the shrine. The reason I think it tries to attack the shrine in that case too, is that while trinity does still let me substitute a spell cast for a call to walk, it won't let me substitute my intended target for it's intended target (being the shrine). Apparently this can happen for Pools of Reflection and rarely, Health Pools too (the next update will have a fix for this too). As far as the null references go, if it returns a valid target in the first call, the same target will still be in range and returned by the second call 0.01 milliseconds later (but you're right, there is still a bees dick chance of returning two different results, so I will fix that for the next update too). As far as the confusing names go, I was originally going to have it collecting the shines as well as the globes itself, and tell people to turn off activating shrines setting in trinity, but I have thus far been unable to work out how the CR can tell Trinity to actually click the shrine, so the naming is in part a legacy to that idea (and now in the next update I will change them so they are more meaningful). FindShrineOrGlobe() only searches for the nearest Progress or Power Globe within a default range of 80 yards (you can pass a different range), and returns any such target found. FindShrine() returns the nearest shrine within the default range of 40 yards currently (but as I said previously I will change that to 50 yards). FindHealthGlobe() returns the nearest Health Globe within a default range of 30 yards. Any range can be passed to these functions, but I'm not sure yet what the limit is on Trinity targeting as far as what the max valid range is, (the largest range I've currently seen others use is 80 yards). And each of these functions returns null if there is no such target within range. Sometimes I'm only calling the function and checking if null, but not actually working with the returned target, because it's just to see if any such target is in range. As far as the skills and items go for the Build property, all this determines is if your skills and gear meet the minimum requirements, and you have it set in Trinity settings to automatically select the combat routine, then this one will be selected. It's really not that important, because most people Force Select the combat routine they want to use anyway. I am still tweaking it to make it perfect. All of this has been in answer to what you said in your post only, but when I have time I will definitely have a look at what changes you made to the code in the version that you posted up. And I do appreciate your efforts and feedback.
Thanks for your contribution![]()
return GetOffensivePower();
if (CurrentTarget != null)
{
if (IsValidTarget(CurrentTarget))
{
return GetOffensivePower();
}
else
{
return Walk(CurrentTarget.Position);
}
}
return Walk(destination);
I am not sure what to do, I am still getting a "no valid power selected for target: (x)"
It runs arround without stopping to attack monsters, preventing swarming of Mages and dying as it runs into mobs
I think I have realized my problem, I do not think I am installing it right. Do I simply place it in the same file and still load the origional and not your edits?
Hi Bantou!
Thanks for this awesome routine, i love it and works perfectly. I have a question however: my bot does a TON of back tracking on the maps... is it routine related or i screwed up something in Trinity? By ton i mean every run could be minutes shorter if the bot wouldn't run back half maps just to discover tiny black spots in obvious corners...
Thanks for your answer