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

[Necromancer] Rathma Faceroll Glass Cannon GR 100+

i hope not, for my sake :(

I wanna get my GR 85 farm thing happening too, but I might wait if I have to, until I know that won't make the leaderboard. If there was a priority for Blizzard watching what was going on in a particular account, I imagine being on the leaderboard might be one of the triggers ;)
 
Last edited:
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:
  • 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
Using this routine with this build changes made my bot able to do 5 lvl higher GR than before dieing less than before.

This routine can be loaded in DB with original in the same time.

Hope Bantou will fix other targeting issues.

Updated to the working version.
Remember that you have to be equipped with certain skills as the build said, the only exception is Army Of The Dead instead of Simulacrum.
 

Attachments

Last edited:
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 :)
 
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 :)
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.
 
Last edited:
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:
  • 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
Using this routine with this build changes made my bot able to do 5 lvl higher GR than before dieing less than before.

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 :)
 
Last edited:
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?
 
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?

Thank you, I think you might have helped me out quite a lot. And I think I did work out early on that GetMovementPower can't return null, but then somewhere along the line I forgot that GetOffensivePower could return null and so might cause GetMovementPower to. That is still perhaps something that I can fix, I have an idea. You've given me a bit to think about :)

Cheers ;)
 
I run this with a hellfire amulet (blood is power), obsidian ring of the zodiac and a razor strop. Working nicely :)
 
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
 
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:
  • 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
Using this routine with this build changes made my bot able to do 5 lvl higher GR than before dieing less than before.

This routine can be loaded in DB with original in the same time.

Hope Bantou will fix other targeting issues.

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 :)

Function GetMovementPower:

replace
Code:
return GetOffensivePower();
with
Code:
if (CurrentTarget != null)
    {
        if (IsValidTarget(CurrentTarget))
        {
            return GetOffensivePower();
        }
        else
        {
            return Walk(CurrentTarget.Position);
        }
    }
return Walk(destination);

This should fix attacking nonvalid objects. Ofc it should be upgraded to include more valid targets.
Next thing you should do after u fix undefined objects in moving funcs is to check whether Shrine,Globe,Profession globe etc IsInLineOfSight because on maps like prison (map has a lot of walls and small area of combat due to geodata) objects like shrines and globes can be found over the wall then bot stucks tring to get through the wall this is not acceptable.
 
Last edited:
I wonder why do you need shrines be a priority? I use Nemesis bracers and I'm really interested not to miss any shrine, but in the original build there is Reapers wraps so why do u want bot leave combat and use shrine while he is dong great behind skeletons?

Btw this fix i've posted above made routine much more responsive.
 
Last edited:
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?
 
Last edited:
My bot with this combat routine seems to want to be at 0 distance from the mobs its trying to kill. What am I missing and/or where can i edit the attack distance?
 
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?


if you are updating the files, be sure to delete the old files and copy in the new ones: demonbuddy-->plugins-->trinity-->routines-->necromancer
 
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

The backtracking is not your fault or mine. Give the devs some time to improve Trinity function ;)
 
New version has been uploaded to OP, v1.1.0

It's even more awesome now :P

And thanks community for tips and suggestions, it's much appreciated ;)
 
Back
Top