This is a fantastic thread, I'm getting a lot of ideas out of this, thank you in advance for anything I use in my personal projects, at the very least you have inspired me.
It was a joke
He and I were discussing that very topic last night, actually.
So, to call my AI emergent might be a misnomer, because there IS inter-bot communication and decision-making. I believe that you're pointing out that design vs. emergent behavior can be considered a spectrum, and I concur; likely my architecture is simply more towards the "emergent" pole of that spectrum than yours is. I would wager that even your bot has some behaviors that a bot can/does do purely without reference to any other bot, which would of course produce some level of emergent behavior. It's just that my design *relies* upon the "wisdom of crowds" to be effective *most* of the time, and only overrides that in certain cases. I find that this makes the programming much easier for the common cases (not terribly difficult fights, etc.), and only requires me to special case the truly special cases.
WRT injection, what ultimately decided me against being out of process was the time delay on ReadProcessMemory, for movement. I simply couldn't get fine-grained enough behavior to move smoothly out of process. Of course, once I injected, a lot of other possibilities opened up, especially the case you mention -- state-destructive functionality where a simple read/react loop won't work.
Don't believe everything you think.
I think I may have misrepresented my bot as purely emergent (or, to avoid over-use of the word, just a swarm of independent AI's). It's not. I use a messaging channel to make group decisions, and shared code (everyone is running the same code or potentially the same code) to make sure that everyone reacts "correctly" to the shared decisions coming over the messaging channel.
What I DON'T try to do is micromanage every interaction and encounter from a top-down perspective. As you say, some special-case behavior requires coordination, but the truth is that 99% of WoW is just button-mashing, sadly. An independent AI can easily do better than a button-mashing human monkey![]()
Don't believe everything you think.
Incidentally, at the risk of hijacking the thread.. we were discussing that topic in the context of target selection for a grind bot. My proposal was to score nearby potential targets with a ratio of the time required to kill them and the approximate XP we would earn ourselves for it. The required time figure would include travel time, because a lower level mob that is significantly closer may in fact be optimal (it may be overwhelmingly optimal, or it may be very much NOT optimal, I have no idea)
Well, that's not a bad idea, that would make a grind bot a good deal more effective. Once in a while you might come up with a sub-optimal scoring, but who cares if it's only once in a while, right? My bot relies on "mostly right most of the time," not always right
Also, save yourself the hassle if you run into griefers: make sure you don't decide to burn down tagged mobs. I had some asshat following me around tagging everything I wanted to fight for a while, and my bot was (stupidly) earning him a bunch of free XP. Fixed that right quick!
Don't believe everything you think.
Absolutely. In a scenario such a this where we are dealing with an environment meant to challenge actual people, doing it right "most of the time" (and, more specifically, more often than a person would) is let's say 95% perfect. To get that other 5% would be an exponential scale of development time investment. "Good enough" can still be really, really good.
Right, hence I'm interested in creating PvP Bots b/c PvE (to me, I don't want to belittle other people's efforts) is a solved issue primarily because of its scripted nature. And it's not Blizzard's fault, there is no other way to make a game that appeals to a large audience and presents a challenge to the geniuses amongst that crowd. PvE, at least how I see it in Blizzard's eyes, is difficult primarily because of coordination of a large number of people, as well as having good situation awareness and response time. Bots, solve both of these issues because they are software constructs that do what they are told to. A bot will always be faster than a human and more organized. A bot will never be late, never be drunk, never err in what he was told (aka programmed) to do. So as long as the instructions given to a bot are adequate to his mission, there is no way he can fail. Otherwise, there is no hope for humans to beat an encounter that bots cannot.
PvP is a different animal. Mainly because it adds the element of "randomness". Your bots no longer encounter events that are scripted because they are going against humans, whom are unpredictable, and oftentimes irrational. The challenge there is creating a AI construct that is able to handle such things (whether through emergent behavior or complicated micro-managed rulesets). Figuring out that AI construct is what I find "enjoyable" and "fun". I don't particularly care for WoW, but it does provide the largest exposure to human-interaction in any MMO to test my algorithms against. I see this as a learning experience and have no desire to sell the bot or make money of it in any way, but rather to learn from the effort. I would gladly make it an open-source project if not for the fact that most-likely Blizzard would not appreciate my sentiment and reasons for doing it and instead start banning which would annoy me and cause me to have to develop more code to circumvent their detection routines which would take up more of my limited time. It's easier just to keep it private so I don't have to worry about that or others sharing it publicly.
I agree 100%. If I could solve navigation, I might consider running some of my bots in PVP to see how effective scripted behavior is against human opponents, or if they would require some form of machine learning (which is a whole other, fascinating topic...)
Unfortunately, running PVP bots also offers the biggest chance to be banned (NPC's don't petition GM's when you perfectly killshot them every time), so I haven't really had a chance. I suspect my scripting as it stands would fare poorly, but the opportunity to learn from my mistakes would be golden.
It would be nice to have a good (IE as similar to Blizzard's as possible) emulator server to run tests on so that I could take out the ban-fear completely. If it were public, it would be even better, since we could pit bots against each other and run them in groups and so forth.
Hmmm... wonder how much it would cost MMOwned to run a "good" emulator server and maybe have a subscription-based buy-in.
Don't believe everything you think.
A few notes:
a) regarding navigation - I don't think that's very difficult to do in Arenas because they are so small. Instead of parsing ADT and WMO files you could just create regions representing areas. A rectangle for a bridge, same for ramps to it, circles for columns, etc. and label a region as accessible from A,B,C (e.g. to get to the bridge region you need to go through ramp A,B,C or D) or "obstacle sufficiently high to break LOS", etc. You are confined to such a small space that this is feasible.
b) regarding banning - sure, it is, but your bots would be "imperfect" enough probably (in the beginning at least) that I doubt people would notice. You could add variances to their behavior and motion too. Plus, I personally don't really care about being banned too much. I see it as, if blizzard really doesn't want my money for multiple accounts that I'm paying, then who cares. There is a bunch of other projects I want to get around to also.
c) regarding emulation servers - they will never be good enough, way too many shortcuts in code for that. I used to actually be a developer of MaNGOS some time back and while the servers generally work there is a lot of things that don't.