Bot Discussion
Since there has been some bot interest lately and I actually have a bit more time (I started a new job and am still working part time at my old job, and I have an 8-week old baby :D ), I wanted to try and organize some discussion regarding bots and some of the work being done. I was given commit access to the svn a few months ago, which was right before all of my changes, but was able to post some of my work with bot spells, healing, etc.
I would like to maintain a wishlist of enhancements for bots, with discussion, comments, and code, if anyone has any (or at least a link to a thread that contains it). This would be easier if I was a forum admin for the bots section so I could just continue to edit and maintain one post, but we'll do with what we have. I want to have opinions on some of the things we're working on and any ideas that may make bots even better than one person may envision. Criimson has a good starting list here. From my own experiences and some of the recent discussion, I think one of the biggest improvements that can be made is handling how bots cast spells ( or not cast them ). After reviewing the work done by Pfyon and Criimson, here , here and here, I would suggest a few changes that would be more generic, but more powerful. First, Bot roles were partially implemented, and the archetype system partially duplicates what was currently there (but not functional). I would suggest combining the 2 to eliminate redundancy. I believe Bot roles would provide more flexibility, as I stated in the pfyon thread where he introduced his archetypes. Possible roles include MT, secondary tank, main healer, secondary healer, puller, slower, etc. This would allow both buffs tailored to roles (rune on puller, Voice of Thule (agro+)on MT, etc.) and different AI based on roles (secondary healers cast other spells more than just heals, MTs taunting, beastlord without slower role would not slow, etc) Second, I would try to remove hardcoded spells, spelltypes, or percentages as much as possible. I think loading generic spell preferences from the database with the ability change them on a class/individual basis would be preferable, as I do want my clerics or enchanters nuking; for me, they rarely run out of mana, and would prefer them to be productive instead of standing there. I move quickly, so I rarely allow my bots to get back to 100% mana when raiding. Others may be more passive, and not want their clerics to nuke no matter what, or have an enchanter that doubles as their only DD nuke source. Some of the new percentages don't really fit my play style, so I will change them back on my private server. I also like my hybrids healing, as they tend to heal themselves (they check themselves first to see if they need healing, which offloads some healing from my cleric, which especially helpful against rampagers or mobs with area affects). The change also almost eliminates the Paladin's ability to group heal, which can be a lifesaver. Regardless, something flexible would be best so everyone could tailor their bots' AI how they would want. Also, I definitely want to be able to add new spells to the bots' spell lists such as Voice of Thule and other agro management spells. After some brainstorming on the issue of roles, buffs, and AI changes, I had a few ideas that I wanted to post to gather some comments and thoughts on what might be best.
I look forward to starting a discussion on bots and what others are interested in with regards to improvements that should be made. I use bots exlusively on my private server and am always looking for ways to better use them to move through PoP progression and beyond, including disciplines. The previously mentioned change to bot spells would allow melee-only disciplines be added, some of which I already have coded (I use #bot defensive), healing rotations (working on a rewrite), and if possible, battle rezs for bots.. Please feel free to post comments or thoughts. I used to be in #bots, but I don't have that option now, and so it's better to keep my discussion here (also so others can see who don't visit the irc chat). |
I am all for this.
Quote:
What I envisioned was a set of helps for each bot class that would list commands that relate to that class. Such as percentages and roles. My coding is still at a learning stage so was taking it relatively slow. Quote:
Quote:
----------------------- My origianl plan was this: Work on class AI that I am familiar with and small tweaks to fluffy type things. Once I had the AI basically behaving properly. I would focus on adding the ability of players to alter the bot AI to fit their gaming needs. Realistically, I could have percentages of AI already coded finished in a day. I just thought that there were only a few of us interested in bots to be honest and so wasnt a priority. If you'd like I can have some class settings done by tomorrow night. What I'd like to see in this thread and discussed is what the players who use bots would like to see or think is coded wrong. I don't use every class in my group so some bots could be behaving really incorrectly and I'd never know. For instance, I'd like to code in a ranger ai that checks for distance to mob engaged and chooses melee/ranged based on that. I know the code has bots stop dead when I engage so I'd be annoyed if the range just stood there, but I don't know. I don't group with a ranger. I'll post more later. Criimson EDIT: As to priorities. I assume you are thinking more raids. I wasn't even trying to think of raid AI until group AI was working the way I wanted. So for instance priorities are basically in the code. If a shaman and an enchanter are grouped: Enchanter hastes - shaman slows unless the MoB is DR resistant. That code is in there. I would like to see healing priority worked on, but I never played a healer so was putting it off. I don't even know if a druid heals better than a shaman. I have decided to work on adding percentage code in next. Allowing players to choose at what percentage to heal, for instance. It will be on a per bot basis (adding a healing percentage column to bots) and then gauge server load during combats. I'd assume there is a way to read that data and keep it in memory but again I am not sure if that would cause more load than just reading it each time, especially since some servers use bots and have large player populations. Although, I have tinkered a bit player side with Angelox's DB and he has some good code. (Like I'd love to know how he has his bots stand in a spaced way behind the player using his #bot move command) I think that if we get a few coders to work on bots then we can break tasks up. I would love to see raid working for bots before I get to that point :) I am not keen on the idea of just having a bunch of bot groups when it doesn't seem that hard to be able to raidinvite the bot group leader. Havent looked at the code for this though. |
Before I begin on anything else I am going to wait a bit for replies to this thread. In the mean time I am going to work on something for my bots. Unsure if I'll submit it for main code though as I am not sure if it will mess with large server communities. Basically allowing my chanter to enchant my metals for me. Have been meaning to do this as I'd like to jewelcraft on my warrior.
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
I do not want to disuade you from working on any one area and certainly appreciate your enthusiasm for bots, but I would suggest doing some more work such as the armor tinting (great job BTW), etc. until you get a better understanding of the spell code, before making such large changes on something that is so integral into bots and their worth to users. I am not saying I can do this better or anything, or anyone else, but I would ask that we get feedback from other bot users on what they would like to see before a lot of work is put into these kinds of significant changes. |
Bah, you beat me...
Anyway, as a short summary, I want to know if bot owners would rather enter percentages to control how and when a bot begins/stops casting a specific type of spell, or if they would rather have presets that would increase / decrease when and how often bots cast their spells. I vote presets, as I think it would be easy enough for anyone to use, but would still allow changes in AI based on players' wants and needs. |
Quote:
This does bring to mind though that roles should be a cornerstone of the AI. Especially since grouping and raiding are vastly different. In raids there are more than one of any given class and so the idea of roles grows stronger. I am primarily going to stick with group AI at the moment for two reasons. 1) I mainly group and as you say I won't be extensively testing and tweaking the code if I am not utilizing it. 2) If a bot can't act correctly in a small setting than it will almost certainly fail in a larger setting. Most of my code thus far has come from playing and noting issues that I am having. For instance enchanter AI. One of my main characters was a chanter and so it is driving me crazy that it isnt playing like I would. That is when I noticed that the priority column in the DB is a waste on them. I keep getting distracted to other things but I have mez at highest priority and even have a simple check that it should run before casting anything but it seems to cast mezzes at random times. Sometimes Im proud of it and other times I want to just kick it from the group. EDIT: Also the code for healers is good to have in the code because it helps the people that can't code. With no check in place clerics were DDing till oom. Perhaps I set the % too high for some, but most of the threads I read on clerics and mana were complaining about oom issues. FOr those that have been around and can compile their own code they can change it easily and until we add a #bot commands for in game settings I think it helps. |
Quote:
Quote:
Regardless, I just wanted to point out that you have to extra careful when making any DB schema changes, as some are reluctant to approve code that does so. I found out the hard way when I spend a month working on pet code allowing them to equip all equipment slots, as well as pet focus code that preequipped equipment on pets summoned with a pet focus. Since these changes required changes to the player profile in the database, they were never implemented. I'm still waiting for the required changed to the player profile for proper pet focus handling (and saving when zoning/suspending). I just wanted to point it out and help you be aware of some of the potential issues you may encounter. Plus, I just wanted feedback on my thoughts and get your (and everyone else's) view of what priorities should be. |
Quote:
|
Quote:
A possible example of healing/nuking presets: A cleric on Normal Nuking would only nuke when mana > 50%, Aggressive when mana > 25%, passive when mana > 75%. Hybrid healing: normal- heal when bot/player HP <25%, passive self heals only, aggressive- HP < 50%. (I would rather my hybrids heal than nuke- almost all hybrid nukes except those with stuns are horrible and terribly inefficient...). |
Quote:
So what kind of variable is loaded from the DB and kept in memory? My C++ isn't as developed as most of you. I think using your presets is a great idea. Add columns to the bots table. Healing, DD, Slow, Debuff, Stun, Mez and then we can use a system similar to the slots (ie HEALING_AGGRESSIVE = 0) and use switch and case in the botspellsai. This would actually help in the long run for bot ai as I have begun to accept that the bots with a range of options don't seem to follow a set way of casting during combat. The casting order seems almost random at times. There also need to be a place in the DB to store roles. Add columns to bots for MT, MA, etc : 0/1 and to avoid two MTs being loaded into a group have these settings reset to 0 when the bots camp. This will prevent any AI goofiness by accidentaly having two MTs in a group/raid. Just some thoughts (pre coffee). Criimson EDIT: AS I was outside drinking coffee and having a smoke it came to mind that this system could help add a CH rotation as well. For raids/groups with more than one healer you could set them as CH1 CH2 and add into the casting of CH a send that sets a timer of however many seconds for the next healer in the roation to begin casting. Example cleric CH1 begins casting send a signal to cleric CH2 that tells them to start then they send a signal to CH3, etc |
Another setting we need to add. AoE. I created a necro and had it grouped and mezzes kept breaking. I was like wtf are these pets going apesh*t or what? Then I looked at the log and saw my necro was AoEing a disease spell. I can see that sometimes AoE is nice, but it wasnt welcome at the time :)
I am liking the way mez is at now. Eventually when we work in a system for spell AI on a by bot basis we can have a switch for automez. As it stands now though the chanter is doing nicely...she bugged me before. |
I agree that roles are probably the next step, but disagree that they need to be infinitely customizable. I think for the average user, it would be sufficient to provide some basic roles (eg melee dps, ranged dps, healing, etc) with secondary roles (which could be the same as the list of primary roles).
Primary/secondary roles would just define the expected behaviour of the bot. I think, if people want to be able to finely customize their bots' behaviour, it would be easier to just write a text only client which would run on the player's computer and allow people to write scripts for their own bots. We already have all the opcodes and knowledge of how the client communicates with the server, so it shouldn't be hard to write a client like this. |
Quote:
|
Quote:
|
Quote:
This would also allow for a personal connection with the bots and encapsulate an individual players style in a given situation. EDIT: Oh yea since we are discussing :) I had an idea that I am going to work on but want to know if you all would like to see it in the main code or as custom code WHen grouped with a live ranger/druid or bard and they track something they say like its to the left or right or whatever. I was thinking of altering the bot tracking window to function like the find function. That goofy gold trail. Its like someone say go left. It kind of points you in the right direction but its AI is so goofy that its more like getting directions from someone. It isnt live like just knowing a mob is up somewhere imo. What do you guys think? |
I am all for improved bot AI as it would help make raiding easier on servers with low populations.
As soon as I started reading this thread the thought of AI driven bots trying to slow a raid mob with any sort of efficiency made my skin crawl. As it has already been stated the speed at which a raid mob is slowed can be the difference between winning and losing. Obviously shamans have the strongest slows but it doesn’t matter one bit when the raid target mitigates the slow to a much lower percentage which happens more often than not. One shaman and one enchanter should always be on resist debuff duty and the rest of the classes that are able to cast slow should cast and keep on casting slow till it lands. That is the easy part…now how are the bots going to know when to cast a magic based slow or a disease based slow(Emperor Ssraeshza)? How will the bots know when a belly cast(Sontalak) is required versus just melee range? How will the bots know when to use single target slow or aoe slow? Grant it AOE slow is mostly used when you have a suicidal shaman in the mix but sometimes it is used in the Corinav event to help slow the damage the aoe stunners and aoe damage casters might take. Another issue I can see from live is some mobs are highly resistant to slow or even magic based spells but they are not flagged as immune….Gaukr Sandstorm is a good example of this…while not immune to magic he is so highly resistant most never bothered trying to slow him. It raises the question as to when will be bots stop trying to cast debuffs or will they just keep casting till they are out of mana. Seems like some tricky AI is headed someone’s way. To answer a question about slow spells on live the spell with the strongest effect had priority and would overwrite the lower powered spells. |
Quote:
Quote:
Quote:
Using your last question as an example: Code could be implimented that checked a certain amount of casts before giving up on that spell and as resist checks are pretty easy to code there could be a range in which it is basically seen as immune. To me bot AI isn't very difficult to break down. A thought process is basically a tree and the branches are far from infinite. |
A thought before I hit the hay.
bad_captain mentioned that raidbots were removed because some servers didnt like it/want it. I personally would like it and I know that there are others. I suggest a variable in the rule_values table to allow or disallow it. It could be checked when a player does a raid invite and checks that the person getting invited is a player or a bot. DOesn't seem too hard to impliment. Anyway Night all |
Quote:
The real reason is probably a combination of time and desire. I had raids working in the bot system at one time but the code was all in #ifdefs and scattered throughout the source files. See svn 772-4 and before for that version of the bots. The "Repository owner and principal project developer" organized all the #ifdefs into proper classes and then vanished pretty much leaving the bots in a crippled state without completing the bot raid parts. Back then I was the only one working on them and the bots are a complex beast, so the ai was something I didn't focus a lot of time on. I'm happy that you and others are interested enought to do some serious fixing and maybe raids will be coded again using the actual raid UI instead of what I had slapped together. |
Quote:
I did notice raid in some of the code for bots and figured it had been in there at some point. Like in the shrink command I noticed raid casting was commented out. |
As to the Necro AoE.
I didn't scan the entire DB for aoes, but I did remove the AoE 365 and here is the sql: DELETE FROM `npc_spells_entries` WHERE `id`=6838 LIMIT 1; In case anyone wanted it Criimson |
Quote:
|
Quote:
|
Quote:
I see preventing in the first place as better than tracking how many times a certain spell fails to land. Less to keep track of and more efficient. |
Quote:
This is a very good thing to hear. I'll definitely be looking into this. |
Quote:
I was pondering this: Quote:
|
Quote:
|
Quote:
|
Quote:
|
Quote:
I think the next thing I am going to work on is more investigative anyway. I have noticed that the chanter's pet (and only chanter's pet) seems to be grabbing strange agro and I have no clue on what or why. It keeps giving messages about invalid target and the chanter begins trying to mez her pet. Its odd. I added a string to the invalid target message so later I'll see what it is trying to attack. |
Quote:
If there is a way to do a resist check for all npc's in close proximity to your target then it would give a more realistic view of what spell needs to be used. |
I do not run bots but all your talking lately has me wondering. What purpose are bots going to service once the merc code starts coming in? Will some / all of the bot code be useful for that?
|
Merc code is a hard guess at this point, if and when they're implemented. I (believe) Congdar was in charge of the mercs - Which after coding the bots and having people change/modify his code and run away, leaving him to pick up the pieces, is a tricky mess at best. I'd say don't worry about Mercs for now. Be happy these people have come together to discuss/implement changes to better the bots. Roll with it and be happy.
I've been watching EQEmu from its' inception WAY back, I'm honestly shocked how far it's come - from 4.4DR-1 TCSMyworld's DB releases (with MOVING(!?!) NPC's, to 5.7DR6 on the Scorp2k Server, and forward to working LDONs and countless other things. Things will happen in time, just help where you can. |
Quote:
|
Quote:
Quote:
If anyone wants to take a look, there's a branch in the svn that he created for mercs and bots, but I'm not sure what if anything was done on it. If we have any opcodes and such for some of the merc functions, I would be willing to try and get a working merc (but I'm sure it would take a while, as I don't have the most time in the world now). I'm just not sure I want to take the time to figure out how to do opcodes at the moment. EDIT: I checked out the code, and it appears as if he just added a header file with constructor and destructor declarations.. lol |
Quote:
Quote:
Quote:
|
There is a bot rule in place to activate a quest that makes acquiring bots tougher. Maybe he didn't know about this and thought you could just make 71 bots and go.
|
RULE_BOOL ( Bots, BotQuest, false ) // Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl
|
The reason the convienence methods were made was due to the fact that making macros to spawn an entire raid almost used up all your available macro slots and you hardly had any left for #bot group attack commands etc. Either way you would still be able to get a bot raid force up with or without the newer macro.
|
Quote:
I didn't mess with mercs much after they went live as by this time I mainly played my necro because of time constraints. However, I think that a player only can hire one at a time which is why bots will still be useful. Now I am mainly thinking of players like myself that play solo, but I know I'd like to raid and such and from the merc page classes like enchanters aren't an option with the merc system. This leaves room for bots in the future. ------------------------------------------------------------ Anyone know of a page that lists raids and what size raid force is required? I would like the challenge of gearing up a 3 group raid force and tackling raids and only use 4+ group raids when neccessary. I definately don't like the idea of filling 7 groups with wizards and monks to zerg something and would rather slowly take on smaller raids for gear as I work my way towards larger scale raids. -------------------------------------------------------------- I was wondering if someone with more experience in engine/spatial coding could look at the movement/spacing code for bots. I love the way angelox has hits bots spaced behind the player and x,y,z code is something I have no experience with. |
All times are GMT -4. The time now is 01:52 PM. |
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.