A concept I will probably build the new AI around is what I am calling "role-based decisions". What this means is I would added a property to a Bot object called "GroupRole" and it could be one of the following:
- TANK
- HEALER
- HEALER-ONLY
- DPS
- CROWD CONTROL
- CROWD CONTROL-ONLY
- DEBUFFER
The idea being that instead of developing the AI decisions around what class a bot is, the first decision the AI makes is based on what job the bot is required to do. This is the bot's "GroupRole". For example, if a Bot has a GroupRole = TANK then if its a Warrior class then it taunts to get aggro. If its a shadowknight and has GroupRole of tank, then the SK will taunt AND it will cast it's snare spells to get aggro.
If a Bot has a GroupRole of HEALER then it is looking to heal ahead of anything else, obviously. But if its a HEALER-ONLY then it never wastes mana or does anything else except heal and meditate.
Of course, we can mix these roles up so a Bot can have a primary role and also a secondary role. I was thinking of a role pattern like the following as I think it replicates the classic eq group pattern:
- TANK
- HEALER, DPS or HEALER-ONLY
- DPS, HEALER
- DEBUFFER, HEALER, DPS
- CROWD CONTROL, DEBUFFER, DPS or CROWD CONTROL-ONLY
For bots with a secondary role, like say a Ranger who has Group Role of DPS and HEALER then the ranger would always look to do DPS first, but if say a party member has fallen to under 20% of health, then it would attempt to perform a ranger healer (laugh if you will, but i recall on live many of a druid, ranger, beastlord or shaman saving a party member when the cleric was taking a nap!)
Of course, I also envision some other AI enhancements like the HEALER role for example. Right now I am seeing my Bot cleric trying to cast a slow complete heal spell when my tank is at 20% health, so of course the heal is too late and the tank gets owned. I plan to refine this AI so the healer can decide that if the health is too low then it picks the fastest heal available and then go to a complete heal when it has the time necessary to perform the cast.
Finally, I think it's not only possible but important for the bot AI to consider WHERE the bot is in relation to the mob it is attacking, when in combat or to the Client it is owned by when not engaged. Right now, bots are pretty stupid about how they move and where they go. I am looking forward to implementing improvements that will allow a bot who is a rogue class to attack its target from behind when it can and for a bot a bot who is has a role of HEALER to stay out of melee range.