|
umdbandit Wanderer
Joined: 31 Oct 2004 Posts: 94
|
Posted: Thu Nov 09, 2006 6:35 pm
Feedback for new bot |
So i've made many bots in the past, but i guess i am just kind of bored of them. Most walk along a static path, and do a pretty static list of things. So I want to make a new one, and I am trying to make its behavior much more dynamic than ones I have made in the past.
So i've been writing up pseudocode for it, and I wanted to just get some more eyes on it, so I could have feedback and suggestions.
For starters i'm going along this kind of heirarchy. I want an "object" which decides what the next thing to do is, and after every task, i will run this object.
So something like this
1. Decision heirarchy
-if under attack, will flee
-if low, will heal
-if loaded with loot, will sell
-if none of above, will do a quest or kill a mob
-will quest or kill based on a priority variable which is basically how lucrative the thing is
So it would keep questing/killing until one of the above happened, and when it recovered, it would go back to questing/killing
In greater detail-
First, a class that will be used for adding mobs as potential targets
It creates aliases to add/remove the mob from the target list, and creates two triggers. One which is used to mark the location of the mob, and add it to the string list of locations, and the other would activate a kill 'object' which had specific instructions on how to fight that npc.
When the npc was dead, provided the bot didnt need to run/heal/sell, it would select what mob/quest was the next most lucrative, and then, assuming there were many of them, would calculate all the paths to them, and go to the closest one.
Anyways, thats about what i'm looking at. I would plan on adding as many situational choices as i could to the decision 'object' and using that as a mechanism to make its behavior more and more complex.
So what i'd love, is if you guys would give me some feedback whether this is the best way going about accomplishing what i want to accomplish.
thanks like aways!
-umdbandit |
|
_________________ Rufus- Winner of Stuff |
|
|
|
chris-74269 Magician
Joined: 23 Nov 2004 Posts: 364
|
Posted: Mon Nov 13, 2006 7:37 pm |
what i would recommend doing is making your triggers based on variables, for example i have ({@botmobs}) and something that triggers off the room that will see if there is a mob, a mob & player, items, or neither. the path is stored in @botpath, and i use this to walk. this way i can use 2 triggers that will move me and kill in every area in the game, all i need to make new is an alias. so my feedback is to make it the most dynamic is to make use of variables in your trigger since they are so much easier to change.
|
|
|
|
umdbandit Wanderer
Joined: 31 Oct 2004 Posts: 94
|
Posted: Wed Nov 29, 2006 6:07 am |
Sorry to bump this... Didnt realize someone had responded until now...
Anyways, Chris, I think what you said is pretty much what i have been doing in the past. The difference that I am trying to add now, is to have some kind of priority for each thing to kill, and how strong/healthy/high of a level i have to be to attack said mob.
So i dont want to go into much code discussion right now, but I am curious how far any of you have gone into making a bot AI that uses some decision making process to emulate the behavior of a player. I am familiar with using alice via a COM object, but i am looking for AI in terms of playing, rather than socializing. Well anyways, its late, and i can barely see straight, but post some feedback, as I would like food for thought. |
|
_________________ Rufus- Winner of Stuff |
|
|
|
Iceclaw Apprentice
Joined: 11 Sep 2005 Posts: 124
|
Posted: Thu Nov 30, 2006 6:24 pm |
I wrote something that sort of like this that had a decision making process for the non-social elements it worked pretty well, but I'd like to do some more work to make it a little more generic, and aware of what's 'safe' to attack at any given level based on what I know about the mob's stats.
|
|
|
|
umdbandit Wanderer
Joined: 31 Oct 2004 Posts: 94
|
Posted: Mon Dec 04, 2006 4:31 pm wanna work with me? |
Iceclaw (and anyone else out there)
Wanna join forces with me, and make this somewhat of a public works project? I think we could probably come up with a decision making object that could easily be customized to various muds. I believe it could be an interesting, and worthwhile addition to the zmud community. |
|
_________________ Rufus- Winner of Stuff |
|
|
|
chris-74269 Magician
Joined: 23 Nov 2004 Posts: 364
|
Posted: Mon Dec 04, 2006 9:11 pm |
i'd like to give this a go, i might find something interesting to add to my existing bots. my current setup i pretty much just enter whatever area i want and type botarea and it auto-recognizes mobs/objects/ect. and is pretty dynamic imo
|
|
|
|
umdbandit Wanderer
Joined: 31 Oct 2004 Posts: 94
|
Posted: Tue Dec 05, 2006 4:49 am |
Chris,
Do you think you could explain a little more about how it is auto-recognizing mobs and objects and the likes? All the bots I have made have had pre-defined stuff in that regard. |
|
_________________ Rufus- Winner of Stuff |
|
|
|
megamog75 Enchanter
Joined: 20 Nov 2002 Posts: 627 Location: USA
|
Posted: Fri Dec 08, 2006 3:27 am |
I have this war bot I made up that does pretty much that.
you could nest the if statements so that conditions are met before anything is done and you could also give creatures and events a numerical order. This way you could see if 1 >6 the do this but if 1 > 3 do this. it made since in my head rreally. My bot was working for the better part of 5 years till I deactavated it. |
|
_________________ megamog75
I will do this.Nothing in my life matters except this.No moment in my life exists except this moment.I am born in this moment, and if I fail, I will die in this moment. Raistlin Majere |
|
|
|
chris-74269 Magician
Joined: 23 Nov 2004 Posts: 364
|
Posted: Fri Dec 08, 2006 4:57 am |
well just use ansi to capture the name of the mob/objects. the most important part of a mob's name is usually at the end, so you can use something like #tr {%e[5m&mob.name%e[0m~.} {#var botkill %lower(%word(@mob.name,%numwords(@mob.name)))...ect} that will register the last word of a mob. it just depends on the conventions of your mud.
|
|
|
|
|
|