PDA

View Full Version : Bot Discussion


bad_captain
07-19-2011, 04:59 PM
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. (http://www.eqemulator.org/forums/showthread.php?t=33789)

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 (http://www.eqemulator.org/forums/showthread.php?t=33868) , here (http://www.eqemulator.org/forums/showthread.php?t=33827) and here (http://www.eqemulator.org/forums/showthread.php?t=33354), 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.


First, I thought of server rules to determine how the various classes would act that could be adjusted, but I'm sure players would like to make their own to a basic system to tailor it to their needs. I don't think this would be a good approach, as it's not much better than just going in and changing it in code, and it's server-wide.
Second, I thought of making changes to the npc_spells_entries table to be able to store some information on who the spell should be cast on (target type), but it doesn't make much sense to change the whole table structure that will only affect bots, not all other npc types. I think for this to work, the best option may be to pull bot spells from the npc_spells and npc_spells_entries table into their own tables, and add a bitmask column for bot roles that the spell can be cast on. This may also need to be implemented for my next thought..
A third option would be to have presets that can be selected for the various spell types a bot can use. This would be secondary to bot roles- a beastlord must have the role slower to slow, then the aggressiveness setting would determine how often they would cast it. For example, for spelltype Heal, the bot could have Default, Passive, or Aggressive (which I believe somewhat mirrors mercs). A Cleric with Default would act as before, with Passive being more mana efficient, and aggressive less mana efficient, but faster healing (trying to keep healing target at max HP). Same for Nukes, Debuffs, Slows, etc. For spells such as slows, instead of saying one class automatically being ahead of another class, an aggressive slower may try to slow every mob, wheres as passive slower would only try to slow named-type mobs, or act the same, just with a lower priority.


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).

Criimson
07-19-2011, 09:05 PM
I am all for this.

Second, I would try to remove hardcoded spells, spelltypes, or percentages as much as possible.

I had actually started planning for this. I was trying to get code in that showed itself working before I started doing changes to the DB structure. I think I mentioned it in one of my posts.
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.

as I do want my clerics or enchanters nuking; for me, they rarely run out of mana,
Is a prime example of why bot by bot settings would be preferable. I have my exp turned to 0.1%, I have no defiant gear and gear up by fighting and questing so my bots are always OOM. Its been over a week playing this character and I am only level 15 :-) Good times though.

Second, I thought of making changes to the npc_spells_entries table to be able to store some information on who the spell should be cast on (target type), but it doesn't make much sense to change the whole table structure that will only affect bots, not all other npc types. I think for this to work, the best option may be to pull bot spells from the npc_spells and npc_spells_entries table into their own tables, and add a bitmask column for bot roles that the spell can be cast on. This may also need to be implemented for my next thought..

I am not sure that this would be neccessary. I would need an example. With archetypes, bot roles, and class settings I think that the rest would be handled by AI thorugh the code. Reading too much from the DB, especially during large scale combat, seems like it would just slow the server down.

-----------------------
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.

Criimson
07-19-2011, 11:29 PM
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.

bad_captain
07-19-2011, 11:31 PM
I am not sure that this would be neccessary. I would need an example. With archetypes, bot roles, and class settings I think that the rest would be handled by AI thorugh the code. Reading too much from the DB, especially during large scale combat, seems like it would just slow the server down.

Criimson

Spell data is read only once. An example: I want Voice of Thule cast on my Main tank only. This could be put into code, but what if someone is using a custom spell file? Or Sedulous Subversion, necro mana transfer spell. I would think you would only want it cast on Cleric or maybe Enchanter. (main healer or crowd control) Also, I added in the percentage heals for Druids with my healing update a few months ago. As a backup healer, I would prefer that they stay away from them, since they take so long to cast, but if the Druid was the main healer, I would rather them use the percentage heal, since it's more efficient.


-----------------------
My origianl plan was this:

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.


While I appreciate the offer, I suggest running up through level 65, grouping with multiple classes to get a better feel for how the classes interact, and what spells are cast when. You mentioned being level 15. At that level ( and through the 50s probably) you will be OOM a lot, since you have little to no mana regen. For the past year, on and off, I have been going through all spells, trying to get bots to level 75+, as well as add in any spells that can be with the current code, or for ideas as to what can be added in the future. While I know much more about the spells than I did before, until I grouped certain classes together running through Vex Thal or PoFire, I didn't really see how to better manage my groups to be more efficient. I'm not sure a wholesale change of percentages would be best until decisions are made as to future changes, or at least a better understanding of higher level grouping / bot group raiding would be impacted. As I said before, limiting nuking by clerics or enchanters, or healing by hybrids may seem like a great idea, but when my main cleric has 9K mana, 100+ mana regen with spells while sitting, and a 10K HP tank, my cleric would be bored if it only had to cast a complete heal every 30 seconds. Also, as I stated, Paladin group healing is crippled by having the target be less that 20% to be healed. Having the paladin group heal running when being AE Dotted is a lifesaver. Of course, there will be other examples. I just wanted to point out that a good understanding of grouping / raiding is needed before making changes within the spell code. That's why I haven't made many more changes than I have.


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.


This is what I'm looking for. While I use all classes in different ways, other people have different play styles that I would like to learn about. That would definitely help direct how some of these things are coded.






I had actually started planning for this. I was trying to get code in that showed itself working before I started doing changes to the DB structure. I think I mentioned it in one of my posts.
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.


I missed one option I had thought about, which was allowing players to specify the exact mana percentage that a cleric would stop nuking, or a ranger would stop healing, etc. After thinking more on it, I think I like the idea of presets that a player can select from, which would have a certain percentage already attached to it. Not as granular in control over the bot AI, but it would give a good start into the concept of mercs, who use a similar system. This is what I wanted feedback on, as to what other bot owners would prefer.



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)

See my above comments on percentages. If the data is saved within a bot in the database, and loaded when the bot is spawned, it wouldn't have to continuously be loaded from the database.



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.
A decision was made to remove bot raids since some people didn't think a player should be able to run around with 71 bots and run a full raid force at raid targets. If bots were added back into raids, a lot of code would need to be rewritten to take raids into account. Not that it wouldn't be worth it, but it would be a decent effort to do.

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.

bad_captain
07-19-2011, 11:35 PM
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.

Criimson
07-19-2011, 11:55 PM
Originally Posted by Criimson
-----------------------
My origianl plan was this:

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.

While I appreciate the offer, I suggest running up through level 65, grouping with multiple classes to get a better feel for how the classes interact, and what spells are cast when. You mentioned being level 15. At that level ( and through the 50s probably) you will be OOM a lot, since you have little to no mana regen. For the past year, on and off, I have been going through all spells, trying to get bots to level 75+, as well as add in any spells that can be with the current code, or for ideas as to what can be added in the future. While I know much more about the spells than I did before, until I grouped certain classes together running through Vex Thal or PoFire, I didn't really see how to better manage my groups to be more efficient.

I played live to 80. The only classes I didn't play were healers because they felt boring.

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.

bad_captain
07-20-2011, 01:06 AM
I played live to 80. The only classes I didn't play were healers because they felt boring.


I didn't mean to question our EQ acumen, just that as you have noticed, bots behave differently than a player would, and their interaction at different levels are something you need to experience before you can truly understand how changing code can affect their behavior. Fixing something at one level may significantly impact another level in a completely different way.


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.

The only one I remember seeing having OOM issues since I made the healing changes was from pfyon, but I may have missed others. I think a 50% baseline would be appropriate, with the ability to adjust from there would be ideal.

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.

Criimson
07-20-2011, 01:50 AM
The only one I remember seeing having OOM issues since I made the healing changes was from pfyon, but I may have missed others. I think a 50% baseline would be appropriate, with the ability to adjust from there would be ideal.

Yea I read the AXClassic forums as well and I think it was mentioned there the most. Seems that people that use bots prefer his repack because it has bots at a more functional level and repacks make a new persons life so much eaiser.

bad_captain
07-20-2011, 10:09 AM
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 just wanted to add this for my reference more than anything. Since I do raid with bots and take on tough mobs with sometimes just one group, I don't have a problem with both enchanters and shaman slowing (or beastlords, or any of the specialty slows), and here's why: Oftentimes, the difference between winning and losing is how quickly a slow lands. Shaman have Malo, Enchanters have tash, which sometimes is almost required before a slow will land. I know the logic could be tweaked from what it was, but it allowed the Shaman to cast the debuff, and the enchanter could cast the slow. (The enchanter could tash as well, but you get the point) If a slow was resisted, you would have to wait until the Shaman was finished casting, then cast again. I don't care who gets the slow first, just as long as the mob is slowed. I would even take a beastlord slow to help get the mob under control. The AI could also allow the slow to be overwritten if a bot has a better slow than what's currently on the mob (I assume this is how things work on live- I don't believe the second slow doesn't land because there's already a slow on.)


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...).

Criimson
07-20-2011, 02:16 PM
I just wanted to add this for my reference more than anything. Since I do raid with bots and take on tough mobs with sometimes just one group, I don't have a problem with both enchanters and shaman slowing (or beastlords, or any of the specialty slows), and here's why: Oftentimes, the difference between winning and losing is how quickly a slow lands. Shaman have Malo, Enchanters have tash, which sometimes is almost required before a slow will land. I know the logic could be tweaked from what it was, but it allowed the Shaman to cast the debuff, and the enchanter could cast the slow. (The enchanter could tash as well, but you get the point) If a slow was resisted, you would have to wait until the Shaman was finished casting, then cast again. I don't care who gets the slow first, just as long as the mob is slowed. I would even take a beastlord slow to help get the mob under control. The AI could also allow the slow to be overwritten if a bot has a better slow than what's currently on the mob (I assume this is how things work on live- I don't believe the second slow doesn't land because there's already a slow on.)


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...).

I totally agree. That is the problem that I saw even when grouping. The current setup I think was added for simplicity and wide reaching needs.
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

Criimson
07-20-2011, 07:23 PM
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.

pfyon
07-20-2011, 09:01 PM
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.

bad_captain
07-21-2011, 12:25 AM
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.

Do you know which spell it was? There shouldn't be any AOE spells in there, since there's no code to account for it. I had that issue once, but realized I gave my bot an AOE proc weapon. I was trying to figure out why I had a Thall Va Xekra coming through the wall at me and killing everyone..

Criimson
07-21-2011, 12:42 AM
Do you know which spell it was? There shouldn't be any AOE spells in there, since there's no code to account for it. I had that issue once, but realized I gave my bot an AOE proc weapon. I was trying to figure out why I had a Thall Va Xekra coming through the wall at me and killing everyone..

It is spell 365 Infectious Cloud and it is in the Necro bots spell lineup

Criimson
07-21-2011, 12:46 AM
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.

I actually like bad_captains ideas about having presets. It allows customization (and keep in mind I would like to give some options to those that couldn't code Hello World in a GUI) without making it over complicated. After thinking about the "aggressive/passive/balanced/off" idea I began to see it as a nice way of allowing freedom and control without undue complexity for the average user.
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?

blackdragonsdg
07-21-2011, 02:02 AM
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.

Criimson
07-21-2011, 03:25 AM
now how are the bots going to know when to cast a magic based slow or a disease based slow(Emperor Ssraeshza)?

There is already code that can be used to check a mobs resists and cast based on that. It is used atm in DDs and in slows.

How will the bots know when to use single target slow or aoe slow

Now this code is not in atm as far as I can tell. I did notice a mob count function that was related to fear. If I am corect it checks how many mobs are in close proximity and not agroing and if its a certain number then fear isnt cast. I was looking at it thinking I might alter it to to start an agro check for aoe spells like aoe mez.

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.


IMO this is exactly what this thread is about. Each of us probably has a different way of thining about this. As the contributers to this thread we all have a love of bots and we can come to some agreement about a structure that suits the needs/desires of each of us and then start a-codin'.
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.

Criimson
07-21-2011, 04:45 AM
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

Congdar
07-21-2011, 05:21 AM
...because some servers didnt like it/want it.

That's not why. DB rules for how many bots you can spawn are already in place, so if a server has enabled the bots they can also control how many you can spawn.

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.

Criimson
07-21-2011, 01:08 PM
That's not why. DB rules for how many bots you can spawn are already in place, so if a server has enabled the bots they can also control how many you can spawn.

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.

Ah well that is good then. The last thing I want is start creating things that others would be upset about.

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.

Criimson
07-21-2011, 03:00 PM
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

bad_captain
07-21-2011, 06:32 PM
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 think that would be categorized as custom, but I think the current tracking code could be tweaked to at least give the direction, as it's fairly worthless as is. It basically only tells you if a mob has spawned or not (and the common spawn filter is pretty bad)..

bad_captain
07-21-2011, 07:04 PM
Now this code is not in atm as far as I can tell. I did notice a mob count function that was related to fear. If I am corect it checks how many mobs are in close proximity and not agroing and if its a certain number then fear isnt cast. I was looking at it thinking I might alter it to to start an agro check for aoe spells like aoe mez.



AOE spells definitely need to be thought out and added in. AOE nukes would most likely need to be togglable, since I can see the usefulness on AEing for faction or questing, but think the AI would be difficult to get right so it doesn't break mez, root, or otherwise affect mobs you wouldn't want it to.

bad_captain
07-21-2011, 07:10 PM
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.

Wizard nuke code already does somethign similar. It compares the mob's resists, and determines which is lower, but must be a certain amount lower to coose one group of nukes over another. We would just have to determine at which point it's pointless to continue casting a magic or fire based spell. But we would also have to factor in lure type spells, just in case there are custom spells, or spells added later that use them.

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.

bad_captain
07-21-2011, 07:14 PM
That's not why. DB rules for how many bots you can spawn are already in place, so if a server has enabled the bots they can also control how many you can spawn.

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.

Hmm.. I thought someone said he took it out because it was decided we shouldn't be able to have bot raids. Maybe I'm going crazy.. lol

This is a very good thing to hear. I'll definitely be looking into this.

Criimson
07-21-2011, 07:30 PM
AOE spells definitely need to be thought out and added in. AOE nukes would most likely need to be togglable, since I can see the usefulness on AEing for faction or questing, but think the AI would be difficult to get right so it doesn't break mez, root, or otherwise affect mobs you wouldn't want it to.

I was thinking about something related to this and it fits well into this idea.
I was pondering this:
How will the bots know when a belly cast(Sontalak) is required versus just melee range?

I am assuming that certain functions will simply have to be added as bot commands. Belly cast and AoE allowed being two of them. Bot AI could be added for MoBs like bosses but at times it will fail. For instance, I remember AoEing for exp in Seb, but a bot isnt able to determine if we are on an AoE exping trip to seb or a slow going mez stuff trip. Having commands to turn off mez and turn on AoE would be neccessary.

bad_captain
07-21-2011, 08:18 PM
I was thinking about something related to this and it fits well into this idea.
I was pondering this:


I am assuming that certain functions will simply have to be added as bot commands. Belly cast and AoE allowed being two of them. Bot AI could be added for MoBs like bosses but at times it will fail. For instance, I remember AoEing for exp in Seb, but a bot isnt able to determine if we are on an AoE exping trip to seb or a slow going mez stuff trip. Having commands to turn off mez and turn on AoE would be neccessary.

I'm not sure belly casting is required for bots. I remember taking some of the dragons out, but not having to be under them for bot spells to land. I may be wrong, but I think it's only checking for clients. I'd have to look to be sure, though.

Criimson
07-21-2011, 08:37 PM
I'm not sure belly casting is required for bots. I remember taking some of the dragons out, but not having to be under them for bot spells to land. I may be wrong, but I think it's only checking for clients. I'd have to look to be sure, though.

That makes sense since bots arent restricted by regeants and can bypass other things as well according to comments in the code.

pfyon
07-21-2011, 08:54 PM
I think that would be categorized as custom, but I think the current tracking code could be tweaked to at least give the direction, as it's fairly worthless as is. It basically only tells you if a mob has spawned or not (and the common spawn filter is pretty bad)..

I think it would be easier/more live-like to just call whatever functions are required to track on the client so the player would get the tracking messages like they would if they were a ranger/druid doing the tracking themselves.

Criimson
07-21-2011, 10:04 PM
I think it would be easier/more live-like to just call whatever functions are required to track on the client so the player would get the tracking messages like they would if they were a ranger/druid doing the tracking themselves.

Sounds good to me. I was looking for input on this before I started.

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.

blackdragonsdg
07-21-2011, 10:06 PM
Wizard nuke code already does somethign similar. It compares the mob's resists, and determines which is lower, but must be a certain amount lower to coose one group of nukes over another. We would just have to determine at which point it's pointless to continue casting a magic or fire based spell. But we would also have to factor in lure type spells, just in case there are custom spells, or spells added later that use them.

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.

This raises another issue with AOE's....if you are checking your targets stats then you are only checking one target so what about the others? Your target could be more resistant to one specific resist type but the rest of the npc's could be getting hit by that spell. I bring this up because a common tactic for the Corinav event is to pull 20+ mobs into a small space then aoe nuke them to death.
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.

sorvani
07-22-2011, 04:09 AM
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?

Burningsoul
07-22-2011, 05:48 AM
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.

bad_captain
07-22-2011, 09:00 AM
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.

Check IsBotAttackAllowed(). I know it needs work, as I had a report of a bot's dire charmed pet attacking itself. I never got around to trying to figure it out. I made a couple changes in there before to allow bots to cast spells and bot pets to attack in the arena (I was trying to parse some stuff and they wouldn't attack the test dummies correctly).

bad_captain
07-22-2011, 09:06 AM
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?

Wildcard had begun work on mercs, but has been missing sicne.

Okay so now that the SoD client is getting supported, it seems now is the time to implement the merc system as the SoD client implements it anyway. Instead of doing a Bot 2.0 upgrade, I am going to rewrite the system again as I believe it is best for the code base in general if mercs are implemented and then bots inherit their functionality from mercs. So yes we will support mercs as consistent with eq live (I still maintain Sony stole the idea of mercs from this community...) and there will still be a bot system, but that bot system will be an optional system, as it is today and it will be built on top of mercs, instead of mercs built on top of bots and then dummied down some.

In a lot of ways, merc logic is very similar to bot logic as it is really a group only ai system.

Basically, mercs would be built in on top of the mob objects, created live-like, then bots on top of mercs (taking out merc only stuff such as upkeep and stuff, but adding in bot specific code, such as class specific code, raid support, etc.)

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

bad_captain
07-22-2011, 09:43 AM
Hmm.. I thought someone said he took it out because it was decided we shouldn't be able to have bot raids. Maybe I'm going crazy.. lol

This is a very good thing to hear. I'll definitely be looking into this.

Greets,

I just updated to the new BOT system. I understand and support the direction, but I'm already missing the:

#bot spawnraid
#bot groupraid

commands. Prior to the first revamp I had like 20 macros that setup my raid. That got streamlined to the #bot groupraid command.

Will I need to issue a stream of #bot botgroup macros to formulate a raid?

I'm also looking forward to guild'ing.

Will we have the ability to use Guild Favor with our Bots?

Thanks for the hard work.

Lax.

So I thought about this feature long and hard. I really did. The way I see it, if you make a bot enabled server and give the players a feature that allows them to one click spawn an entire raid force of buff and bot ready bots and all strctured in their groups and a raid, didn't you just make a server of zerg-style raids? That was my principle thinking in not providing similiar commands.

I do get it though. The convenience of having similar commands. Perhaps in the future, maybe I or someone else can add it but include another BOT rule to regulate this feature..

I found it.. lol I'm not going completely crazy..

Congdar
07-22-2011, 10:01 AM
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.

Congdar
07-22-2011, 10:04 AM
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

Congdar
07-22-2011, 10:22 AM
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.

Criimson
07-22-2011, 11:11 AM
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?

Here is a good page on mercs (http://everquest.allakhazam.com/wiki/eq:Mercenaries)

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.

bad_captain
07-22-2011, 11:12 AM
I didn't realize that quest was put in before those changes were made. He must not have thought about it.

Regardless, I just thought I remembered reading why raid bots were removed. I would like to see them added back in.

bad_captain
07-22-2011, 11:32 AM
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 use this as a reference: http://everquest.allakhazam.com/wiki/eq:raid_progression_guide
Really, just try with however many bots you have and adjust your strategy accordingly.

Try Chardok, Western Wastes Dragons, Kael and see how you do. Look for named mobs in harder areas, such as Grieg's End. You may not be able to take Grieg to begin, but try out any of the named in the zone. Kael isn't great until you can take out Derakor or AoW.

When I really began raiding, I started hitting Akheva Ruins (Itraer.. Shei's DT sucks), Greig's, then Chardok B for Korucust (one of my favorites.. quick to get into and out of and good loot for my Mage). Then I moved to Ssra, then Vex Thal. You may not take out the boss of the zones, but running Ssra, and hitting the Rhags, High Priest, Arch Lich, Creator will get you a lot of loot.

I tried to work through the progression of expansions if I could, so I waited for PoP bosses, where PoI, PoS, PoN could get you decent loot. BoT, PoT, PoNB, and a couple others preEPs.

Just beware some encounters are difficult if not impossible if it's just you with your bots.. Manaetic Behemoth for one.

Criimson
07-22-2011, 11:49 AM
I use this as a reference: http://everquest.allakhazam.com/wiki/eq:raid_progression_guide
Really, just try with however many bots you have and adjust your strategy accordingly.

Try Chardok, Western Wastes Dragons, Kael and see how you do. Look for named mobs in harder areas, such as Grieg's End. You may not be able to take Grieg to begin, but try out any of the named in the zone. Kael isn't great until you can take out Derakor or AoW.

When I really began raiding, I started hitting Akheva Ruins (Itraer.. Shei's DT sucks), Greig's, then Chardok B for Korucust (one of my favorites.. quick to get into and out of and good loot for my Mage). Then I moved to Ssra, then Vex Thal. You may not take out the boss of the zones, but running Ssra, and hitting the Rhags, High Priest, Arch Lich, Creator will get you a lot of loot.

I tried to work through the progression of expansions if I could, so I waited for PoP bosses, where PoI, PoS, PoN could get you decent loot. BoT, PoT, PoNB, and a couple others preEPs.

Just beware some encounters are difficult if not impossible if it's just you with your bots.. Manaetic Behemoth for one.

Nice list. I am actually thinking of removing DT from my server or switching its effect with something else. I was running poFear and getting hit with that DT when its insta raid end was really not fun.

Runnng solo with bots using AXClassic was a blast raiding. I basically hit Kael until I geared myself and main group up and then hit PoGrowth for my other 2 groups and then tried Griegs End...one of those named was a fun fight until it destroyed me. I also like Akheva Ruins. The boss that blinds was so much fun. Trying to post my casters just out of the aoe range and trying to hold agro. The first fight I didnt realize the blind effect was dispellable until about half way through and I was like DOH.

Congdar
07-22-2011, 02:21 PM
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.


There is also another rule which limits the total number of bots you can create.
RULE_INT ( Bots, CreateBotCount, 150 ) // Number of bots that each account can create
That in concert with the other one could be made to make that strategy unworkable. The cost to quest for the extra bots plus the limited number of bots createable would require that you make healers and tanks etc. It may be still doable but could be made such a pain as to not try.

bad_captain
07-22-2011, 03:47 PM
There is also another rule which limits the total number of bots you can create.
RULE_INT ( Bots, CreateBotCount, 150 ) // Number of bots that each account can create
That in concert with the other one could be made to make that strategy unworkable. The cost to quest for the extra bots plus the limited number of bots createable would require that you make healers and tanks etc. It may be still doable but could be made such a pain as to not try.

If I didn't take so much time to name and gear my bots, I would try to make 150 of them to see what it would be like (changing the rule for max spawned at one time). Running with 53 (9 groups) is enough for me..


This reminds me that I had recently thought about how I would like bots being account based, instead of character based.. I made a script to update the botownercharacterid to another of my characters when I want to, since I don't want to gear up multiple characters work of bots. Does anyone see any downside to that? I don't remember it being discussed before. You could still have separate bots for your characters since they may be different levels and with level specific gear, but you would have access to all of your bots.. Saved bot groups would need to be changed to character based, but I think it would be doable..

Congdar
07-22-2011, 03:52 PM
This reminds me that I had recently thought about how I would like bots being account based, instead of character based.. I made a script to update the botownercharacterid to another of my characters when I want to, since I don't want to gear up multiple characters work of bots. Does anyone see any downside to that? I don't remember it being discussed before. You could still have separate bots for your characters since they may be different levels and with level specific gear, but you would have access to all of your bots.. Saved bot groups would need to be changed to character based, but I think it would be doable..

ive done this on my server and it's great if all your toons are the same level. it fails when you spawn a bot on lower level toons and the gear they have is too high level for them to wear so that uber sword has no effect and they fail to hand to hand attacks. I recommend leaving it character based. Likewise, their armor is not counted so it's as if they aren't wearing it if it's level based.

Criimson
07-22-2011, 04:49 PM
Alright, so I am trying to get a feel for where we all stand on how to procede.

Add columns of type int to bots for spell types:
Slow
Healing percentage
DD
AoE \______These two columns simply 0 - Off 1 - On
Mez /

each column a number 0 - 4
0 - Off
1 - Burn (All out) - No restrictions
2 - Aggressive - 75% Mana
3 - Balanced - 50% Mana
4 - Passive - 25% Mana

This look like a good starting point? I realize roles will be implimented and that each level will have additional arguments to account for roles. For instance a Rune being cast even when set to passive will always try to cast it on the puller.

bad_captain
07-22-2011, 10:13 PM
After thinking a bit on this, I think it might be best to combine them all into one column, similar to an npc's special attack. I assume we will be adding more options in the future (think raid). You could either include all spelltypes, in order as listed in spdat.h: SpellType_Nuke, SpellType_Heal, SpellType_Root, SpellType_Buff, SpellType_Escape, SpellType_Pet, SpellType_Lifetap, SpellType_Snare, SpellType_DOT, SpellType_Dispel, SpellType_InCombatBuff, SpellType_Mez, SpellType_Charm, SpellType_Slow, SpellType_Debuff , or just the most important. I could see wanting to turn off an SKs pet or keep a healing shaman from debuffing. An example could be "410111000100004". Just parse it when spawning bot. This keeps us from having to keep adding columns, just add another number at the end.

Also, it seems more intuitive if 0 was off, and the higher the number, the more aggressive.

Criimson
07-22-2011, 10:50 PM
After thinking a bit on this, I think it might be best to combine them all into one column, similar to an npc's special attack. I assume we will be adding more options in the future (think raid). You could either include all spelltypes, in order as listed in spdat.h: SpellType_Nuke, SpellType_Heal, SpellType_Root, SpellType_Buff, SpellType_Escape, SpellType_Pet, SpellType_Lifetap, SpellType_Snare, SpellType_DOT, SpellType_Dispel, SpellType_InCombatBuff, SpellType_Mez, SpellType_Charm, SpellType_Slow, SpellType_Debuff , or just the most important. I could see wanting to turn off an SKs pet or keep a healing shaman from debuffing. An example could be "410111000100004". Just parse it when spawning bot. This keeps us from having to keep adding columns, just add another number at the end.

Also, it seems more intuitive if 0 was off, and the higher the number, the more aggressive.

I'll leave that up to others. Seems like it would be too confusing and apt to errors. I'd prefer seperate columns for clarity. By comparison the bots already have very few columns compared to other tables.

bad_captain
07-22-2011, 11:18 PM
I'll leave that up to others. Seems like it would be too confusing and apt to errors. I'd prefer seperate columns for clarity. By comparison the bots already have very few columns compared to other tables.

Maybe, but it would be handled through code. You most likely wouldn't be doing it by hand. I guess the biggest benefit from doing it this way would be if there were additional types added, you wouldn't need a db update and players could play just fine without making any updates or anything as it would just use default for whatever wasn't in the database.

Working with DBs so much, I just cringe thinking about adding columns like that.. So it's more of a preference kindof thing.

Congdar
07-22-2011, 11:35 PM
Take a look at the archery setting. It's a db setting that gets loaded into the object so no repeated reads to the db or anything like that.
I like the npc special attack idea. Maybe modify the archery field to be like that. Letters vs. numbers though. 0 thru 9 goes pretty fast, A-Z and a-z leaves a lot of room.

Criimson
07-24-2011, 08:54 PM
Maybe, but it would be handled through code. You most likely wouldn't be doing it by hand. I guess the biggest benefit from doing it this way would be if there were additional types added, you wouldn't need a db update and players could play just fine without making any updates or anything as it would just use default for whatever wasn't in the database.

Working with DBs so much, I just cringe thinking about adding columns like that.. So it's more of a preference kindof thing.

Ok I'll defer to your experience. Can you post some code how this will be read and written. I am not sure I have ever worked with a string of numbers in such a way and would like to see how it will work. Once you get a structure down I'll start helping with the various aspects of it.

bad_captain
07-26-2011, 12:24 AM
Check out NPC::NPCSpecialAttacks(). This is called when loading th eNPC from the DB or when the change special attacks command is called. At the end, it writes it to the database. That would be a good place to start.

I'm working on a couple things then I will take a look at this. I want to think about the relationship between these ratings and bot roles / archetypes, as well as how raids will affect the design, before I do anything.

Criimson
07-26-2011, 04:49 PM
I'll look into when I have time. My free time is going to be real scarce for the next few weeks. I have my children staying with me for the next month so my free time will be basically spent with them. Although they are both gamers and I do own a PS3, XBox360 and a Wii so they may just ignore me anyway ;)

louis1016
07-26-2011, 08:29 PM
I must say I absolutely love all the word done on bots lately. Ive been waiting forever for many of these changes to come and im so glad to see them. The enchanter bot problem, the bot stat and ac problems, etc. are things that have been bothering me the bots. The archetypes/roles or whatever you are going to have them as is an answer to the unrealistic bot buffing that has been going on for way too long and its so awesome that its finally been addressed.

While bots are functioning ideally in fights, they are still granted unrealistic and overpowered capabilities that completely makes them everquest superheros compared to the capabilities of any player.

One thing i'd love to see is something along the lines of bots being able to get aggro from wandering mobs. Having bots this way makes them way too powerful in my opinion. Theres are many situations where it creates really unrealistic scenarios. Rogues should not be able to sneak their whole group anywhere they want. A rogue should have to park their bots somewhere safe and make them guard while he sneaks and scouts where he wants his group to go. I know that the main argument against this that I've heard is that a player can just park his bot and level up afk. Perhaps some code should be added with it to have your bots despawn if they arent used for some period of time? (i dont know how hard that would be)

I also would like the option of making it so I have to gather all the spells myself for the bots. I think servers should have the option of having players have to find/buy all of the spells we want our bots to use. It is too overpowered that our bots have spells that a player would generally have to collect on his own.Right now I can use my necro bot to summon my corpse even though it never never looted the spell like I'm supposed to. I know theres some bot::spellquest feature but I havent been able to figure out how to use it. On axclassic it uses anita_thrall but i dont think thats in the code in eqemu. If im wrong someone please tell me how to use it. The same goes for AA's, but I'm sure that would require a whole resturucturing of the AA system which wouldnt be practical, but it still is annoying that all my bots have AA's with no real system to limit them.

It would also be awesome to have an option for servers to have a bot respawn timer that alters the amount of time you must wait in between spawning the same bot. It would at least give some sort of penalty for when one of your bots dies (you cant use him again for another x amount of minutes).

The last major thing id like to see is for the option to not be able to delete bots until maybe after a certain amount of time. The common method I see on bot servers that people use are creating bots, getting buffs, deleting them, and repeat with a different class, therefore gathering buffs from all the classes as well as having ALL benefits from every class like res, port, corpse summon, etc. Bots shouldnt be as overpowered as they are now due to things like these. Say if you give bots a 2 hour delete time then and the server limits you only have acquired 1 bot so far on the server then you can spawn a druid to fight with you, but if you want to get shaman buffs you have to wait two hours before you can delete your druid.

Bots should not have powers and privelages that the normal player doesnt. If I die down in solb do I get to just respawn immediately there with all my gear and everything? No, but my superhero human warrior bot can. I would like to actually feel like the bot I grouping just died, not had an emergency afk. I feel issues like these would make the bot system feel like more of an alternative to grouping on low population servers rather then feel like I'm grouping with someone with GM commands.

bad_captain
07-27-2011, 12:50 AM
One thing i'd love to see is something along the lines of bots being able to get aggro from wandering mobs. Having bots this way makes them way too powerful in my opinion. Theres are many situations where it creates really unrealistic scenarios. Rogues should not be able to sneak their whole group anywhere they want. A rogue should have to park their bots somewhere safe and make them guard while he sneaks and scouts where he wants his group to go. I know that the main argument against this that I've heard is that a player can just park his bot and level up afk. Perhaps some code should be added with it to have your bots despawn if they arent used for some period of time? (i dont know how hard that would be)

Yeah, AFK leveling is an issue that would have to be considered before this could be changed. Another issue is sometimes poor pathing, where a bot can't follow a player as well as another player could and could cause all kinds of unwanted aggro. I often think it's too easy to get my little bot train in and out of areas, but this would require a lot of work to execute correctly (and would still most likely be implemented as a rule with the default being no aggro).

I also would like the option of making it so I have to gather all the spells myself for the bots. I think servers should have the option of having players have to find/buy all of the spells we want our bots to use. It is too overpowered that our bots have spells that a player would generally have to collect on his own.Right now I can use my necro bot to summon my corpse even though it never never looted the spell like I'm supposed to. I know theres some bot::spellquest feature but I havent been able to figure out how to use it. On axclassic it uses anita_thrall but i dont think thats in the code in eqemu. If im wrong someone please tell me how to use it. The same goes for AA's, but I'm sure that would require a whole resturucturing of the AA system which wouldnt be practical, but it still is annoying that all my bots have AA's with no real system to limit them.

I too was interested in being able to control my bots' AAs (I love micromanagement as far as setup, not so much during combat), and believe I posted somewhere.. One thing I am working on is refactoring the bot AAs to match clients, where aabonuses and GetAA() are used within the code instead of the current switch statements or if elses. I had this almost completed months ago, so it may not be too much work, just a lot of comparing diffs. With almost all of the AA code within CalcAABonuses and GetAA(), this would more easily allow for changes as to how bot receive their AAs. Custom code could allow AAs to be quested, bought, earned, whatever.

It would also be awesome to have an option for servers to have a bot respawn timer that alters the amount of time you must wait in between spawning the same bot. It would at least give some sort of penalty for when one of your bots dies (you cant use him again for another x amount of minutes).

I think this is a great idea. I know I'm guilty of respawning my bots to take out one of the Zek brothers (and trying and failing on AHR). I think a field to keep track of when the bot dies would be all that is needed to implement this. Eventually, I would like a bot who leaves a corpse that must be revived and have resurrection effects, just as a client, which would also combat this problem (you couldn't spawn a bot who has an active corpse).

The last major thing id like to see is for the option to not be able to delete bots until maybe after a certain amount of time. The common method I see on bot servers that people use are creating bots, getting buffs, deleting them, and repeat with a different class, therefore gathering buffs from all the classes as well as having ALL benefits from every class like res, port, corpse summon, etc. Bots shouldnt be as overpowered as they are now due to things like these. Say if you give bots a 2 hour delete time then and the server limits you only have acquired 1 bot so far on the server then you can spawn a druid to fight with you, but if you want to get shaman buffs you have to wait two hours before you can delete your druid.

I've never even heard of someone doing this, but it doesn't surprise me. I'm sure checks could be created to eliminate or discourage this practice.

Bots should not have powers and privelages that the normal player doesnt. If I die down in solb do I get to just respawn immediately there with all my gear and everything? No, but my superhero human warrior bot can. I would like to actually feel like the bot I grouping just died, not had an emergency afk. I feel issues like these would make the bot system feel like more of an alternative to grouping on low population servers rather then feel like I'm grouping with someone with GM commands.

While I agree with this statement in general, I think the drawbacks of running with bots at least cancels out the extra features of bots. They still aren't very smart, they all die when I do (or at least when I respawn after dying), lack utility that comes from actual people playing characters (disciplines, problem solving, company, etc..)


I greatly enjoyed and appreciated your comments Louis, some of which I would have never thought of without you mentioning it. I don't play much on other servers, so my interaction with other bot users is basically only on this board.

Criimson
07-27-2011, 02:03 AM
Quote:




Originally Posted by louis1016

The last major thing id like to see is for the option to not be able to delete bots until maybe after a certain amount of time. The common method I see on bot servers that people use are creating bots, getting buffs, deleting them, and repeat with a different class, therefore gathering buffs from all the classes as well as having ALL benefits from every class like res, port, corpse summon, etc. Bots shouldnt be as overpowered as they are now due to things like these. Say if you give bots a 2 hour delete time then and the server limits you only have acquired 1 bot so far on the server then you can spawn a druid to fight with you, but if you want to get shaman buffs you have to wait two hours before you can delete your druid.

I've never even heard of someone doing this, but it doesn't surprise me. I'm sure checks could be created to eliminate or discourage this practice.


Actually, this is something I was thinking about. What I was looking at was if a player despawns a bot that it cant be respawned for X amount of time. I noticed that a player could despawn a class get fully buffed and then respawn/respawn to avoid the medding downtime.

I'll look into this as soon as I am finished with the tracking code for bots.

Criimson
07-27-2011, 02:50 PM
I also would like the option of making it so I have to gather all the spells myself for the bots. I think servers should have the option of having players have to find/buy all of the spells we want our bots to use. It is too overpowered that our bots have spells that a player would generally have to collect on his own.Right now I can use my necro bot to summon my corpse even though it never never looted the spell like I'm supposed to. I know theres some bot::spellquest feature but I havent been able to figure out how to use it. On axclassic it uses anita_thrall but i dont think thats in the code in eqemu. If im wrong someone please tell me how to use it. The same goes for AA's, but I'm sure that would require a whole resturucturing of the AA system which wouldnt be practical, but it still is annoying that all my bots have AA's with no real system to limit them.


There are two values in rule_values for quests to unlock bots and bot quests. I havent tried it but it seems as you have DLed AxClassic you could just copy the anita thrall.pls to your eqemu quests folder and spawn anita where ya want her. Her husband is already in the bazaar quests folder

One thing i'd love to see is something along the lines of bots being able to get aggro from wandering mobs. Having bots this way makes them way too powerful in my opinion. Theres are many situations where it creates really unrealistic scenarios. Rogues should not be able to sneak their whole group anywhere they want. A rogue should have to park their bots somewhere safe and make them guard while he sneaks and scouts where he wants his group to go. I know that the main argument against this that I've heard is that a player can just park his bot and level up afk. Perhaps some code should be added with it to have your bots despawn if they arent used for some period of time? (i dont know how hard that would be)


I think that to avoid this it might be easier to add code that removes exp when a player is not on the hate list of a mob. At first I was thinking about damage, like doesn't do any damage but this wouldn't account for healer players with bots or a chanter that doesnt DoT or dd.
The main issue I would have adding code for this would be agroing through walls in dungeons.

With invis and undead invis a player could get by most things anyway, so it isnt that biased towards rogues. It seems that unless there is a good way of accounting for trains that the code as it is should be kept for the time being.

I too was interested in being able to control my bots' AAs (I love micromanagement as far as setup, not so much during combat), and believe I posted somewhere.. One thing I am working on is refactoring the bot AAs to match clients, where aabonuses and GetAA() are used within the code instead of the current switch statements or if elses. I had this almost completed months ago, so it may not be too much work, just a lot of comparing diffs. With almost all of the AA code within CalcAABonuses and GetAA(), this would more easily allow for changes as to how bot receive their AAs. Custom code could allow AAs to be quested, bought, earned, whatever.

Are you saying your code matches the number of AAs a bot has to the number a player has like levels? And the player buys their AAs? Should make this an option because I am not sure I am so into that idea. I have nver been a RTS type player and that seems like a lot of research unless you are coding in a window like #bot <name> buyAAs - that pops up a window like a players AAs and you can buy from there...that would be cool. But just typing in a command with the name and points bought would be a pain.

The last major thing id like to see is for the option to not be able to delete bots until maybe after a certain amount of time. The common method I see on bot servers that people use are creating bots, getting buffs, deleting them, and repeat with a different class, therefore gathering buffs from all the classes as well as having ALL benefits from every class like res, port, corpse summon, etc. Bots shouldnt be as overpowered as they are now due to things like these. Say if you give bots a 2 hour delete time then and the server limits you only have acquired 1 bot so far on the server then you can spawn a druid to fight with you, but if you want to get shaman buffs you have to wait two hours before you can delete your druid.


This can easily be added after looking at the DB. Just need to place a check in delete command that at least 4 hours has passed since bot creation. (yea Im gunna make it 4 hours as that seems like an average playtime and would be a deterant as most buffs fade by then - unless a player logs in, buffs, logs out and deletes..which seems stupid for buffs)

louis1016
07-27-2011, 04:51 PM
Thank you so much for considering these issues, one thing I forgot to mention is that I feel like bots should med when oom during battles. As of now if a cleric runs oom he just stands there for the rest of the fight unless you issue the #bot group guard command which is no good because obviously it stops the rest of the group from fighting. Maybe it would work if you can individually assign commands to different bots? Like #bot (character name) attack/guard/follow etc. This would also make bot pulling way more functional too (at least if you want a bot to pull without a ranged item).

bad_captain
07-27-2011, 09:27 PM
Are you saying your code matches the number of AAs a bot has to the number a player has like levels? And the player buys their AAs? Should make this an option because I am not sure I am so into that idea. I have nver been a RTS type player and that seems like a lot of research unless you are coding in a window like #bot <name> buyAAs - that pops up a window like a players AAs and you can buy from there...that would be cool. But just typing in a command with the name and points bought would be a pain.



Sorry I didn't explain it very well. The bot AA code is scattered throughout the code, and I had consolidated it into GetAA() and CalcAABonuses(), which is how it is handled for clients. GetAA returnes the level of a specific AA line, such as Natural Durability or Planar Power. Aabonuses is just like itembonuses or spellbonuses and contains any statistical benefits from AAs. Containing all of the code that gives AAs within 2 places CalcAABonuses and GetAA() makes it easier to maintain especially when it is time to add additional AAs for newer expansions.

The addition of managing AAs per bot was something that I had thought about, but I know it would most likely not make it into the stock source code.

bad_captain
03-05-2012, 12:50 PM
Thank you so much for considering these issues, one thing I forgot to mention is that I feel like bots should med when oom during battles. As of now if a cleric runs oom he just stands there for the rest of the fight unless you issue the #bot group guard command which is no good because obviously it stops the rest of the group from fighting. Maybe it would work if you can individually assign commands to different bots? Like #bot (character name) attack/guard/follow etc. This would also make bot pulling way more functional too (at least if you want a bot to pull without a ranged item).

I missed this. I'll be testing a change that allows bots to med during fights.

chrsschb
03-05-2012, 01:05 PM
I missed this. I'll be testing a change that allows bots to med during fights.

:grin:

Any chance we can revisit adding some heal commands / stances?

Still many many times where I've been standing around at 15-20% hp after a fight waiting for a heal that never comes so I can pull again.

bad_captain
03-05-2012, 01:06 PM
As an update: I'm almost finished coding an update I think will make a lot of people happy. I'm not doing it as I discussed in this thread, but looking at mercs had given me the idea. Bots will have stances, which match what mercs have on live. You can select a bot's stance, which will affect that bot's AI, mostly with spell casting. Clerics in Burn stance will nuke much more often than Efficient or Balanced. The stances will also affect which spells are cast: clerics in reactive stance will be more likely to cast regular heal as opposed to complete heal or a wizard in burnAE stance will cast AEs. You should be able to set up hotkeys to toggle bots back and forth between stances, such as turning all bots on to Burn when trying to take down a boss' last 10%. I'm currently adding the stance checks to the AI, then I will have the code available to test on my test server. I will try to get some opinione before committing. The only thing I may not do, which may just be too much work, would be to maintain individual preferences for casting chances or other AI decisions. It's pretty complex as is with 16 classes, 7 stances, 16 spell types. That's too much to maintain per character or per bot. I think the stances will differ enough that people will be able to use their own play style for bots.

bad_captain
03-05-2012, 01:13 PM
:grin:

Any chance we can revisit adding some heal commands / stances?

Still many many times where I've been standing around at 15-20% hp after a fight waiting for a heal that never comes so I can pull again.

Funny you post that as I was typing.

I know in certain circumstances buffs are sometimes missed, and heals just aren't done. I hope to find the issues, as they should always try to heal you. I haven't seen it often, so it's hard to pinpoint the issue. If you could give some more info on your situation, I might be able to determine the issue. Maybe they are just focusing on buffs OOC. Or maybe your bots just don't like you....

I'm hesitant to add heal commands, but maybe with a timer or something, I don't know.

bad_captain
03-07-2012, 11:11 AM
I did a quick test last night and seemed to work pretty well. I'll make some tweaks, and fix the combat medding issue I noticed (they sat, but then stood right back up) and try to get this available sometime this week. Or I may just get it committed so I know more people will test it. It will be more about getting opinions on the different stances as opposed to making sure it works.

In an efficient stance, my cleric only nuked once running through half a wing in BoT, where in a burn stance, the same cleric nuked multiple times per mob and seemed to waste less mana healing my 90% hp+ tank. I'll run my full raid giving different bots of the same class different stances and review their spellcasting and do some parsing. I think my group 8 and 9 non-cleric main healers (or at least their tanks) will be happy.

I currently have all stances available for all classes, as opposed to restricting them like mercs do. This may change, but I like having even more options. Anyone have an opinion? Available stances are: Passive, balanced, reactive, efficient, aggressive, burn, burnAE.

chrsschb
03-07-2012, 11:45 AM
Funny you post that as I was typing.

I know in certain circumstances buffs are sometimes missed, and heals just aren't done. I hope to find the issues, as they should always try to heal you. I haven't seen it often, so it's hard to pinpoint the issue. If you could give some more info on your situation, I might be able to determine the issue. Maybe they are just focusing on buffs OOC. Or maybe your bots just don't like you....

I'm hesitant to add heal commands, but maybe with a timer or something, I don't know.

I'm a wizard :grin:

Most of the time I'm lucky to survive said fight because I never received a single heal that entire fight. The bot will be entirely focused on nuking. No buffs are being thrown. When the fight is over the bot still isn't healing me as I'm standing there with 15-20% hp. A lot of times I'm thankful I'm a SK as that 15-20% of my life that is remaining was likely due to my lifetaps.

bad_captain
03-07-2012, 12:35 PM
I guess your bots don't think it's worth the mana to heal a wizard. I can say I don't blame them. If you were a mage, they wouldn't have to heal you... I have heard of this wiz spell called concussion or something like that. Maybe you should check it out. :)

What heal spells do they have? What level? I've not had a problem being healed whether I'm a SK, monk, or warrior. As I said, sometimes they don't want to heal me out of combat, but that's rare. Either way, this should help.

bad_captain
03-15-2012, 11:11 AM
I'm almost ready to commit stances. I also have combat medding working. I'm tweaking some values for different classes, then I'll be done. I've just been really busy lately with little time to test.

louis1016
03-15-2012, 09:43 PM
awesome, im looking forward to it!

bad_captain
03-16-2012, 12:22 AM
Fixed my last observed bug, so this should definitely go live this weekend. It just needs a little more tweaking. My ranger was tired of casting and my paladin was picking his nose. Shaman and Cleric were pretty good. I'll create a new thread about it when it goes live, because there are some things I still want to implement (AEs, etc.), and I'd like to track them in one place. I just want to get it out as is and make improvements from there with input. Balanced stance should resemble the current spell casting frequencies.