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

[@Developers] Need your input, or help

Apoc

Well-Known Member
Joined
Jan 16, 2010
Messages
2,790
Reaction score
94
Alright, our initial tests of the random dungeon support, have made me smile. Quite a bit. It's fully capable of clearing the entire A3 Keep Depths areas without me helping it (much). There are a few bugs left to fix (such as breaking down doors), but I think we're at a point where testing can be started with the general public to find any other bugs we haven't caught.

Within the next day or so we'll be sending some test builds to people, to test the exploration functionality (only the exploration!). In the meantime, I need some input from developers (please, just developers, user input is fine, but it'll most likely be a feature request that's not feasible within any decent timeframe).

Basically; we currently expose the API to tell what kind of affixes a monster has (elites), so figuring out a logic system to use based on those affixes is something I've been thinking about lately. What I'd like to know, is if you guys want some form of wrapper API to help make the logic to avoid things on the ground (or ignore them), or if I should just leave this up to the routine developers (and soon, script developers) and let you guys handle it all on your own. The current state of routines is quite... stupid. In a literal sense. There isn't much logic being used to avoid things, and I'd like to change that. If DB is ever to do inferno runs on champions, we'll need some better logic systems in place to help kill things, and not take massive repair costs.

So again, should I begin writing some helper API to make coping with elite abilities easier, or leave it to developers to handle for themselves (this would allow a lot more flexibility in how things are handled). If you think I should start on it, then let me know what kind of API you'd want. I have a few ideas, but I want to get a feel of what the general developer community is looking for.

Thanks folks!
 
I think it would be nice to be able to check if they're in poison, in range of mortar, on top of a molten area, if the mob is reflecting damage, and deal with each differently. Right now it handles them all the same way, which is basically nonsense for any melee character. It would only really work a touch for the ranged until they get up to the mortar mobs.

Thanks for your contributions,
Austin
 
I think it would be nice to be able to check if they're in poison, in range of mortar, on top of a molten area, if the mob is reflecting damage, and deal with each differently. Right now it handles them all the same way, which is basically nonsense for any melee character. It would only really work a touch for the ranged until they get up to the mortar mobs.

Thanks for your contributions,
Austin

Well, the general idea would be to expose something like "Stay away from mortar" which the routine developer would need to "use". I won't be forcing the bot to do things that not every developer wants. (Eg; I don't want my Wizard running away from mobs, I want it diving in and spamming until things die)
 
Could you not just have a few bools to over ride the default logic and allow devs to create their own.

Ex.(the santax might not be correct but i think you'll get the point.)

//Top of routine main file.

EnableDefaultEliteLogic = True;

If false Then the Dev can make his own logic.

Void MoltenElite()
{
bla bla move out of stuff
}
Ect ect

And these logic profiles will over ride the default logic and give devs freedom to do what the want but at the same time give a solid default logic profile that works
 
It would at the very least be great to have properties on the player object

Me.isStandingInFire
Me.isNearBeam
etc

At least as a starting point

or a single bool

Me.isInDanger with another property that descibes which situation it is.
 
It would at the very least be great to have properties on the player object

Me.isStandingInFire
Me.isNearBeam
etc

At least as a starting point

or a single bool

Me.isInDanger with another property that descibes which situation it is.

Nothing like that will appear on the "Me" object. That is literally an interface into D3, not any abstracted API. If I were to do something like that, it'd be elsewhere (such as in CommonBot)
 
It would at the very least be great to have properties on the player object

Me.isStandingInFire
Me.isNearBeam
etc

At least as a starting point

or a single bool

Me.isInDanger with another property that descibes which situation it is.

I actually agree with this, it would allow developers to simply check the situation and respond according in a way that the developer decides. This would be especially useful in the development of CC's since different classes and builds would respond differently. Also, pardon my reasoning if this is incorrect for C# (I come from a Java background), but couldn't you use an Enumeration or the C# equivalent of a Class that describes the monster (molten, poison, arcane, etc.) and you could have the monster return a "description" array of the monster. (Again I apologize if that didn't make sense, but if you'd like I could supply an example in Java :p)
 
Nothing like that will appear on the "Me" object. That is literally an interface into D3, not any abstracted API. If I were to do something like that, it'd be elsewhere (such as in CommonBot)

Wherever it might be doesn't matter as much, but it would be nice to have something of that sort anyways, on an object somewhere
 
Well, the general idea would be to expose something like "Stay away from mortar" which the routine developer would need to "use". I won't be forcing the bot to do things that not every developer wants. (Eg; I don't want my Wizard running away from mobs, I want it diving in and spamming until things die)

This. I am not a developer, but I would like this if it is possible: Add the ability to detect and act certain ways on different affixes. Also allow based on different other variables ie: Health %, X mobs around, etc. I would NOT want this a PERMANENT part of DB. I would like it to be a USER choice, hence being a proper plugin. I think having DB read everything properly is what DB should be. It should be the grounds to reading the game and navigating the game, with some logic. ultimately the way the toons handle and what they do, should ultimately be up to the particular profile and plugins to suit the players need/gear/end outcome. Just my .02
 
Personally, i'd like the option. If your writing profiles/plugins/whatever it shouldn't be to write your own custom logic.
 
I am a little fuzzy on the intention of the OP. Are you asking if you should add in API support for plugins, profiles, or routines?

If it were me, I would program the bot to allow this to be controlled via combat routine. There should not have to be a plugin to do this kind of logic, nor should it be addressed in the profile.

A lot of features, like this, should be done in the routine because it is part of the logic behind combat. This is just my opinion, however. ;)

As an example, the combat routine could have:

Code:
if (inGroundAOE) // let's get out of the area effect damage
{
    // move
}
else // nothing to worry about, keep killing
{
    // do combat
}
 
Last edited:
It would be nice if there were more custom combat routines for certain builds ie WW for Barbs or Critical Mass for Wizards. The only affixes they really have to worry about is arcane
 
I would like to see the option to handle it in the CC, supplemented by some core API and pathing functionality.

For example if the pathing would never stand in bad things by default that is a huge step towards managing that. The idea of being able to override or disable the behavior in the CC would be great.

For example an additional "event" for CCs such as BattleFieldManagement that had a default and could be replaced. This selector could have a higher priority than combat and do nothing if all is well in the world. I just can see the combat selector getting very complicated if there is not a division of these dif. types actions... much like AGB had leg,frontal lobe etc

My other idea was an event system I.e. StepedIntoGroundEffect, MonsterCastSpell, etc that could receive info about what is taking place and give the chane to react separate from firing off our skills, but I am not sure you guys can work that; to me AI is event driven, but that may not be realistic here. I want player events for going through portals etc too

Also, is it going to be possible to tell which way an arcane enchanted spinner is spinning and path a clear path through them? That is where the API really needs to help us, some of us may know enough to try to handle that pathing but it would still need heavy support from the bot core length, rotation direction, started rotation from, remaining duration etc etc


I am going to link this it is a wall of text and I have not read it in a good while but it is more than somewhat related

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.160.5490&rep=rep1&type=pdf

just remember I am pushing my 2nd grade education to the limit by sharing and reading (again) said wall of text
 
Last edited:
An API is fine aslong as there is a way to handle the stuff without the API.

The most usefull thing in an API for avoiding those AoE's would be something that generates the coord's for safe spots.
Maybe include the ability to set a distance to the nearest mob. So you can start making a kiting CC without much math involved for the movement logic.

But IMHO it's more important to fix the minor issues first like the not resetting if tag :)
 
add a Targeting provider for stuffs to escape and give us something like get a safe movable node in this scene.
where nodes/scenes that have already been explored have higher Weight.
Also priority selecting in avoiding / combat is important, bot should not perma escape from stuffs.
 
Last edited:
I think you guys are missing the point here.

DB itself will not be responsible for moving your character out of ground effects and the like (inside of combat at least). When you're in combat, the bot hands over all logic to the combat routine. This is where I'm asking for help. Plugins, etc, will not be handling this type of logic (nor profiles). I'm not asking for input from plugin/profile devs as this doesn't concern them.

I pretty much decided I'll be providing a wrapper class around the various "get out of the bad stuff" abilities, including whether we're standing in them, where elites are, and if possible, some safe spots. This will take some time, as I need to do some more reversing on the ground effects (I already know how to tell where they are, and what type they are), but providing safe spots to move to isn't quite as simple.
 
Apoc - I think we're fine letting the developers handle it themselves. I think a wrapper API you add in to provide checks and methods to call depending on affixes/"things on the ground" is still never going to be smart enough to handle act 2/3/4 inferno champions well enough for it to be worth your time, particularly because people will want to handle things in completely different ways for different routines, different character classes, even different gear & skill setups.

Atm we can even do it with target providers - eg my monster priority changer, with a little work I could make it return an empty target list if it detects an arcane orb on the floor and instead send a move command which I can make as simple or as complex as I like, so DB doesn't call the combat routine and instead focuses on moving out of stuff on the ground until it's out of range. It's not something I plan to do or want to do (I think the combat routines should control this stuff completely, and a targeting provider should only provide targets), but it's another possibility.

But on the vague subject - do we have some advanced methods already available for more intelligent randomized movement? Eg if a character is within X range of an arcane orb, can we do anything more complicated than pick a random direction and range to move to (which could end up just trying to move into a wall)? This might all already be easily possible, advanced movement isn't something I've looked at within DB yet. I suppose a decent wrapper would provide for this if it can provide "safe spots"... Hmmm. Now I'm in two minds. Probably is best if we have a nice new wrapper for it afterall, if only just for safe spots and quick & dirty "is there an orb/desecrator/molten on the floor" check ;)
 
Last edited:
Apoc - I think we're fine letting the developers handle it themselves. I think a wrapper API you add in to provide checks and methods to call depending on affixes/"things on the ground" is still never going to be smart enough to handle act 2/3/4 inferno champions well enough for it to be worth your time, particularly because people will want to handle things in completely different ways for different routines, different character classes, even different gear & skill setups.

Atm we can even do it with target providers - eg my monster priority changer, with a little work I could make it return an empty target list if it detects an arcane orb on the floor and instead send a move command which I can make as simple or as complex as I like, so DB doesn't call the combat routine and instead focuses on moving out of stuff on the ground until it's out of range. It's not something I plan to do or want to do (I think the combat routines should control this stuff completely, and a targeting provider should only provide targets), but it's another possibility.

But on the vague subject - do we have some advanced methods already available for more intelligent randomized movement? Eg if a character is within X range of an arcane orb, can we do anything more complicated than pick a random direction and range to move to (which could end up just trying to move into a wall)? This might all already be easily possible, advanced movement isn't something I've looked at within DB yet. I suppose a decent wrapper would provide for this if it can provide "safe spots"... Hmmm. Now I'm in two minds. Probably is best if we have a nice new wrapper for it afterall ;)

At the most, I'll provide some "quick" wrapper API for things like "IsJailed" "IsStandingInGroundEffect" and likely a "GetSafeSpot" type function for developers. You guys will ultimately be responsible for implementing the logic on when to move, etc. But I'll be providing API to make it easier to tell what's going on.

Do *not* use Target providers to do something like this. Avoidance has absolutely nothing to do with targeting, and should not be mixed together. It's simply a priority system, "Are we standing in shit? Move. If not? Kill". There's no reason to start changing the fundamental structure of how things work, to achieve something completely unrelated.

Again, this isn't something that would be meant for plugins, or profiles. It's specifically for combat routines. (Plugins should be providing tiny enhancements, or functionality such as monitoring, etc, not full blown avoidance, etc)

The idea is to ensure that handling those A2-4 elites is actually feasible with DB. (Random dungeons in A1 will only get you so far, we need full support on the entire game)

Keep in mind though, anything beyond A2 requires gear on your toon, which DB obviously can't overcome. If you're trying to bot A3 with fresh 60 gear, then you're going to be disappointed. (Even manually playing its impossible)
 
I think you actually discovered a good point. There aren't many developers left to answer your question.
 
Back
Top