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

[Plugin] KeyRun - dynamically chooses acts/profiles based on key count

I did yes, I actually fixed it on the latest version. Was doing a lot of pasting to change the DB loadprofile tags to a Trinity loadprofile....for some reason the trinity death tag didn't play nicely with DB loading profiles, it preferred Trinity to load em. I just missed this particular one :)

Good good. Like I said. I didn't actually get a chance to test yours. Happy to hear you found it and was able to fix that issue. :D

That being said. I'm running them now. Lol.
 
I'd be glad to have it integrated into your profiles. Saves me a bit of work.

I plan on adding some better KeyWarden death detection as DB's built in tags seem to be lacking in that area. Would that be useful and how would you like that to work? I was considering starting choose_act.xml automatically on death but I'm worried about missing the drops in the event of inventory full or player death. The other thought I've had is a WhileKeyWardenAlive tag.

Cool, yeah I'll start messing with getting incorporated tonight.

Keywarden detection could definitely be improved. Right now it only checks on each MoveTo point...and I imagine a WW barb flying all over the place could stumble upon the warden before the check could even be performed. For my botting monk, he finds the warden pretty much everytime without issue, but that can be a problem.

If we can get it to constantly check rather than check on each xml tag, that would be great. That way you could actually set a smaller radius for locating him, and it would eliminate any stuck points trying to chase down the warden from far away (happens occasionally in Act3).

I haven't managed to die and kill the warden at the same time, but some people have which would probably pose a problem. Not sure how to deal with it unless you take note of the position of death and have the bot backtrack its way there to verify warden is dead, and key hasn't been missed.
 
Cool, yeah I'll start messing with getting incorporated tonight.

Keywarden detection could definitely be improved. Right now it only checks on each MoveTo point...and I imagine a WW barb flying all over the place could stumble upon the warden before the check could even be performed. For my botting monk, he finds the warden pretty much everytime without issue, but that can be a problem.

If we can get it to constantly check rather than check on each xml tag, that would be great. That way you could actually set a smaller radius for locating him, and it would eliminate any stuck points trying to chase down the warden from far away (happens occasionally in Act3).

I haven't managed to die and kill the warden at the same time, but some people have which would probably pose a problem. Not sure how to deal with it unless you take note of the position of death and have the bot backtrack its way there to verify warden is dead, and key hasn't been missed.

I'll work on the check some time this weekend. Tracking deaths seems like a pretty low priority at this point so I'll hold off on that.
 
yeah it isn't a huge deal for me personally, I've died to the keywarden and had no issues going back and finishing him off. But after starting up a Barb, I can see detection being an issue for the WW build especially. Going to work in your key detection now and give it a try! Looking forward to it.
 
I'll work on the check some time this weekend. Tracking deaths seems like a pretty low priority at this point so I'll hold off on that.

Well. With the ability to check deaths people will be allowed to farm on higher MP levels much faster. How hard would it be to throw into memory the last known position of the keywarden? IE: When within "a" yards of x,y,z check to see if warden is present. If not. Leave game.

Edit: I'm playing Devils advocate with these "ifs". I farm on MP5 with NPs what so ever. But there are some who post about "I have problems on MP2+".
 
If we could keep track of a keywarden encounter this could open up some possibilities. At the moment, if you die to the warden, the profile resets and for all it knows it never saw the warden. If we could check that a warden encounter did happen and last known position of the encounter, should be able to address most issues.

As a side note, already got your plugin at work. Simple implementation and working as intended. Loving it :cool:
 
Well. With the ability to check deaths people will be allowed to farm on higher MP levels much faster. How hard would it be to throw into memory the last known position of the keywarden? IE: When within "a" yards of x,y,z check to see if warden is present. If not. Leave game.

Edit: I'm playing Devils advocate with these "ifs". I farm on MP5 with NPs what so ever. But there are some who post about "I have problems on MP2+".
I'm one of those people that have trouble with MP2 :(
If we could keep track of a keywarden encounter this could open up some possibilities. At the moment, if you die to the warden, the profile resets and for all it knows it never saw the warden. If we could check that a warden encounter did happen and last known position of the encounter, should be able to address most issues.

As a side note, already got your plugin at work. Simple implementation and working as intended. Loving it :cool:


It wouldn't be hard to store the location and return to the same place but I'm not sure how the profile would have to handle it. It will take a bit of thinking to figure out how exactly it will have to be implemented. I think having the previously mentioned WhileKeyWardenAlive tag would work as it could replace the contents with a direct MoveTo command. That'd probably work great for a1 and maybe a2 but I'm not sure how effective that will be in a3. I've never tried pathing from one end of the map to the other with a single MoveTo in an area with a lot of obstacles.

Lucky I have an hour long commute to think about it.
 
oh snap, I didn't realize this actually checked for keywarden as well. It actually found the warden before my XML did in Act 3....very interesting. Of course after killing him my profile didn't realize it and kept going. Going to see if I can put an XML hook in to your plugin just to check if warden is dead or not and use that in the profiles to verify if warden is dead or not. I've just modified trinity as well to treat the wardens as virgins on prom night now so there should be no way to miss them!
 
oh snap, I didn't realize this actually checked for keywarden as well. It actually found the warden before my XML did in Act 3....very interesting. Of course after killing him it my profile didn't realize it and kept going. Going to see if I can put an XML hook in to your plugin just to check if warden is dead or not and use that in the profiles to verify if warden is dead or not. I've just modified trinity as well to treat the wardens as virgins on prom night now so there should be no way to miss them!

That detection is actually very rudimentary and I don't think it's usable at this point. I haven't even tested it at all. I wrote it before I had the SNOs of the KeyWardens and haven't tested it since I added them in.

I wasn't aware that you could read Plugin from the Profiles. I assume you'd need a property for that? Did the plugin also give you the message that it died?
 
yup...reported found and dead. Yeah I'd need to set a property that the XML can read from...of course battlenet just went down for me ugh.
 
Well! I'm glad you're working it out. Happy to have planted the seed!

On that note: Storing the data into short memory while "appending" the closest "MoveTo" tag would prob make it easier wouldn't it? IE:

<MoveTo x,y,z>
> ### Insert Data x,y,z ###
 
OK been working on a few things after noticing a keywarden detection script started...what I've done is tweaked a few things as far as how it handles the detection and death of the keywarden. Basically, this plugin will allow me to not only pick an Act based on the key, but deal with the keywarden as well. I've included a new XML function which serves as a profile variable to be called when the keywarden is killed. You set the profile you'd like to run after killing the warden (in my case, it loads the Act choosing profile).

I've added some additional functionality to the plugin so that if you find the warden but die, it resets properly. I did finally die immediately after killing the warden while doing some testing, and yes this is still a problem. Since I know that I have encountered the Warden and legitimately killed it, I think we can justly say that if you die after killing the warden, you likely didn't pick up anything and need to go back. Then likely restart the profile but take note of where you died...when you within range of that area, continue to next appropriate act.

In any case, here is what I've got so far. It's working quite well now, but going to let it run its course tonight and see how it does. I'll do some more testing with handling vanquished wardens and dying before collecting tomorrow.
 

Attachments

There is an issue with the Act III keywarden.

[03:08:52.291 N] [KeyRun] Keywarden killed
[03:08:52.811 N] [KeyRun] Keywarden killed
[03:08:53.317 N] [KeyRun] Keywarden killed
[03:08:53.823 N] [KeyRun] Keywarden killed
[03:08:54.313 N] [KeyRun] Keywarden killed
[03:08:54.794 N] [KeyRun] Keywarden killed
[03:08:55.294 N] [KeyRun] Keywarden killed
[03:08:55.810 N] [KeyRun] Keywarden killed
[03:08:56.294 N] [KeyRun] Keywarden killed
[03:08:56.776 N] [KeyRun] Keywarden killed
[03:08:57.267 N] [KeyRun] Keywarden killed
[03:08:57.812 N] [KeyRun] Keywarden killed
[03:08:58.319 N] [KeyRun] Keywarden killed
[03:08:58.791 N] [KeyRun] Keywarden killed
[03:08:59.283 N] [KeyRun] Keywarden killed
[03:08:59.762 N] [KeyRun] Keywarden killed
[03:09:00.298 N] [KeyRun] Keywarden killed
[03:09:00.781 N] [KeyRun] Keywarden killed
[03:09:01.303 N] [KeyRun] Keywarden killed
[03:09:01.318 N] ========== KEYWARDEN IS WITHIN RANGE!!! ============
[03:09:01.880 N] [KeyRun] Keywarden killed
[03:09:03.503 N] [KeyRun] Keywarden killed
[03:09:04.816 N] [KeyRun] Keywarden killed
[03:09:06.544 N] [KeyRun] Keywarden killed
[03:09:08.479 N] [KeyRun] Keywarden killed
[03:09:09.549 N] [KeyRun] Keywarden killed
[03:09:13.943 N] [KeyRun] Keywarden killed
[03:09:14.590 N] [KeyRun] Keywarden killed
[03:09:15.591 N] [KeyRun] Keywarden killed
[03:09:16.185 N] [KeyRun] Keywarden killed
[03:09:16.727 N] [KeyRun] Keywarden killed
[03:09:17.253 N] [KeyRun] Keywarden killed
[03:09:17.843 N] ========== KEYWARDEN VANQUISHED!!! ============

This is the spam I get every time I get near him. He doesn't enter combat. Just stands outside of aggro range. The "KEYWARDEN VANQUISHED!!!" msg is given when I hit "Stop".

Edit: Oh. Also. The quest id and step were wrong to pick up Tyreal in Act III.

<GameParams quest="101750" step="10" act="A3" difficulty="Inferno" resumeFromSave="False" isPrivate="True" numGames="-1" />

This should be the correct numbers.
 
Last edited:
Did you use the profile I posted? The profile I posted has the correct game params.

Not sure what version of Trinity you're using, but the untouched version 1.6.3.4 v4 has the keywarden kill radius set to 150...which can get you stuck in A3 if it sees the warden in an area it can't get to in a straight line. I think the only possible solution around this is to set a low radius for the warden in Trinity so it only goes after him when he's right on top of him. I'm trying 60 right now which seems to do a decent job. I've also set the priority of the keywarden to be treated like a Boss as you often encounter him with an elite and we want to constantly go after him.

The last issue is his teleport. If you get pulled into a side battle with monsters after finding him, he can sometimes teleport out of range of RActors. Right now, I've tweaked the plugin to interpret if the warden is found, but then disappears from RActors, he is probably dead. I did this because sometimes it doesn't recognize he's dead after killing him because the keywarden check is throttled so it's not using too much CPU. I did drop the throttle from 10 to 5...but I still found it occasionally missed me killing him.

The way I've tweaked it ensures that when we DO kill him, it reacts appropriately. If you get out of range while fighting the warden (which I just did while typing this), it will think he is dead, but should find him again hopefully. Mine did this about 4x in one fight since I found the warden with 2 elites, 1 being shamans who tend to take you all over the place. Eventually I killed all three, had to TP back for a town run, then it did appropriately go back and collect goodies from all 3 elites even though it had loaded the next profile waaay before I even killed the warden.

With all the said, I'm currently testing the throttle at 3 to see if that interval will afford enough time to determine the keywarden is dead in *ALL* instances, this way if a warden does drop out of the RActors, it won't assume he's dead. I could probably remove the throttle entirely as it doesn't seem to be generating any noticeable load but I'm only running one instance. Would prefer to keep some throttle if I can ensure it always detects the warden's HP has reached 0 before he drops off the RActors when you really do kill him.

EDIT - FYI, ran this for about 6-7 hours last night and worked wonderfully. Started with 16 A1, 12 A2, 11 A3 keys...now I'm 19,19,18 (going after that pesky terror key right now). That was running what I originally posted. I'm now testing the throttle at 3 and removed the assumption that warden is dead if it drops out of RActors. First encounter with A3 Warden worked flawlessly. Keep you posted.
 
Last edited:
In any case, here is what I've got so far. It's working quite well now, but going to let it run its course tonight and see how it does. I'll do some more testing with handling vanquished wardens and dying before collecting tomorrow.

Going to test this out! =D
 
Last edited:
Unfortunately not having much luck with the throttle and determining death if HP is at 0. I just don't think OnPulse is triggered as frequently as we need it to be. I removed the throttle entirely and it would still miss killing the keywarden. For now I am going to have to keep the assumption in that if it goes out of range, he's likely dead. I'll continue to look for another interval or event handler. Would be quite nice if there was an event handler for killing elites, I should think there is. Then you can simply check if the elite killed matches SNO of warden.

EDIT: I possibly take that back...was doing something stupid. Testing again.

EDIT2: Nope, OnPulse just doesn't fire frequently enough. Sometimes it really knows he's dead (reaches 0 HP), other times he drops off the RActorList before we can check to make sure his HP is 0. Looking for alternate to OnPulse (I know it exists, just not sure exactly what I have to tie into)

EDIT3: OK so I decided to change the HP check on warden from 0 (DEAD) to 50000 (almost dead) to see if the pulse check would pick up. I tried on MP0 where I can practically one-shot the warden and it fired. Going to up the MP level and mess with it. I figure most keyrun bots are doing at least 50k dps. My monk is doing twice that (3x if it casts blind). The trick will be to get it to fire right before you land the death blow. Keep you posted...
 
Last edited:
Unfortunately not having much luck with the throttle and determining death if HP is at 0. I just don't think OnPulse is triggered as frequently as we need it to be. I removed the throttle entirely and it would still miss killing the keywarden. For now I am going to have to keep the assumption in that if it goes out of range, he's likely dead. I'll continue to look for another interval or event handler. Would be quite nice if there was an event handler for killing elites, I should think there is. Then you can simply check if the elite killed matches SNO of warden.

EDIT: I possibly take that back...was doing something stupid. Testing again.

EDIT2: Nope, OnPulse just doesn't fire frequently enough. Sometimes it really knows he's dead (reaches 0 HP), other times he drops off the RActorList before we can check to make sure his HP is 0. Looking for alternate to OnPulse (I know it exists, just not sure exactly what I have to tie into)

EDIT3: OK so I decided to change the HP check on warden from 0 (DEAD) to 50000 (almost dead) to see if the pulse check would pick up. I tried on MP0 where I can practically one-shot the warden and it fired. Going to up the MP level and mess with it. I figure most keyrun bots are doing at least 50k dps. My monk is doing twice that (3x if it casts blind). The trick will be to get it to fire right before you land the death blow. Keep you posted...

Been a little MIA this weekend and probably won't have more time to work on this for a little while. I was worried about detecting him killed based on SNO because I'm not sure the that dead body has the same SNO. I'd suggest dumping RActors after he's dead and seeing if you can pull something useful from that.

How many ticks/s is your DB running at? Mine typically runs at 12-13. Perhaps yours is lower and it's leading to the missed detection happening more often for you?
 
Mine ticks about the same...not sure if any SNO is left after being killed but will look into it. Increasing the HP seems to do a good job...dropped it to 25000 but it mis-triggered 1/5x and when the actual detect fires, most times the warden is at 0HP, going to find the right balance and see if I can determine a percentage of HP needed to get the trigger just right on any MP level...at least for my monk haha. We'll see, would be even simpler if there was just an event handler for the death of an elite.
 
Last edited:
It seems to have no idea what my NV stack is at, especially in act 2. I sat and watched it kill the keywarden 3 times in a row with only a 3stack.
 
Last edited:
all mine says in ACT 1 after it gets 5 stacks and goes to the field that the key warden vanished and then leaves
 
Back
Top