No offense, but there is a definite reason I and a friend discontinued using eq2bot and it wasn't because it was written in LavishScript. It just wasn't suited to our style of boxing, which consisted of a lead character (usually MT) with casters on autofollow. And we had countless issues with healers refusing to heal, casters refusing to participate at non-melee ranges, and on and on that we couldn't seem to configure ourselves out of. When a second friend started to have these issues, I knew it was time to take my own path.
My bot always assumes there is a live player who is controlling the lead character; I'm not looking to copy eq2bot's total automation features. Casters don't care about melee positioning and won't waste precious time on it; they care about pristine spell order. If melee is important, the lead character can pull the casters into position with autofollow and that's that. This major design principle has made a world of difference in dps and survivability. If you're looking to bot scouts or fighters (with the eventual exception of troubador), this is not the bot for you.
To enter offensive combat it doesn't try to detect combat but waits for an "assist me" chat line, the kind many raid guilds have used with real players for years. The beauty of this is that you can start combat at will. And you can train through zones. Actually it isn't just beauty, it's a necessity. I'm also working on a "stay here" configurable chat line that briefly turns off autofollow to keep them at range and at that coordinate. If chat is too dangerous, I'll move to network commands/keyboard hotkeys/voice commands down the road.
There is no UI but I don't need one either, they get in my way anyway. It uses INI files, and prebuilds one per character if none exists. Right now I key off a subtle chat substring to reload it but down the road I'll just create a thread that monitors the directory for changes.
Two mage classes and a mystic are already raid-functional and have been thoroughly tested and debugged in T7 zones and VP. There is a TODO list before I'm ready to publish what I've got so far but I am 150% assured this path is the right one. It is a tremendous help to draw on past .NET experience and be able to bring in any old .NET code as needed.
The one missing thing that would make this absolutely killer is to know the max health of the mob being fought, because you don't use the same casting orders on trash that you do with named. Hell, not even all trash is created equal. I know the EQ2 client gives a percentage instead of a flat value (or at least I assume at this point), so the long-term idea I had was to create a hitpoint database using a .NET interface to MS-SQL CE and cache ACT-estimated values in the bot per mob/zone.
As far as recovery time, my provisional plan is to wait out the time provided by the Ability class, unless an error message (too far, etc) pops up before it ends. This should be very helpful in cutting down the Ability.Use spam I cause when Me.CastingSpell is false but Ability.IsReady is true. Or something to that effect, I don't have the code with me right now.
Even if I'm the only one who ever uses this, I'm getting my time's worth out of it regardless. Good Luck to you too sir.