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? |
All times are GMT -4. The time now is 11:59 AM. |
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.