What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

[IDEA] New Quest Bot

jim87

New Member
Joined
Aug 26, 2011
Messages
445
Reaction score
7
Hello!

I don't have either the time nor the C# knowledge (even if I know some OO programming languages) to do this alone, nor I think it's something a single person can do alone.

FIRST OF ALL: do we need a new quest bot?
My answer is yes: I've played around the current one bundled with HB and I don't feel it's *human-like*, it does several things "the wrong way", and I think it's because several people worked on patching it rather than building it from grounds up.

I'd enumerate several bugs, from the "wait random seconds to select what to do" (i.e. bad scripting - several CPU cycles to take the choice) to the "do this quest but not the other one in the same area" to the "leave that quest alone and complete it 10 levels beyond". While part of these bugs are profile-related, I come with an idea that could revolution the entire concept of the behavior.

SO, WHAT DO YOU HAVE IN MIND?
My idea is a quest bot which basically COMPLETES QUESTS ONLY. What I mean is: I have X quests in my quest log, complete them. How? Take the hotspots of every quest, mix them all and then do the tasks. Where to find the data? From an external repository (could be HB website itself).

Some data concept
Code:
[item id='57677' droppedByNPC='45654' /]
[npc id='45654']
    [hotSpot x="-110.9" y="4567.0" z="0" radius="50.0" /]
    [hotSpot x="-160.9" y="4167.0" z="0" radius="20.0" /]
[/npc]

[!-- objective: use item 57677 near NPCs 7894 and 7895
      who don't have aura ID 4567 --]
[quest id="1234" startFrom="npc" npcFromID="4321" endTo="npc" npcEndID="4321"]
    [objective type="useItem" itemID='57677' times='2' nearNPC='7894, 7895' withAura='!4567' /]
[/quest]

This is just an example on how the DATA part should be filled. All the things a profiler should do would be to include the quest in their profile:
Code:
[quest id="1234" /]
The bot should take care of the rest of the things.

Another more articulated quest "manifest":
Code:
[quest id="xyz" startFrom="item" itemFromID="987654" endTo="overlay"]
    [objective type="explore" exploreID="6549874" priority="0" /]
    [objective type="killNPC" npcID="556789" priority="1" /]
[/quest]

This quest is as follows: first you need to explore a zone, then you have to kill a mob. Priority list should take care of this, avoiding killing the NPC before having discovered the place. The quest ends to the "overlay" question mark.

Other quest attributes may be "beforeQuestInChain" which should say which quest you need to complete before unlocking this one, so that the quest profiler could just fill his profile with the last-in-chain quest, leaving the bot the work of finding the best "quest path", maybe saving the state of previously-done quests (or searching for a "complete quests" array in the game, which I wouldn't be surprised to see in its memory).

It's not an easy task, I know, but it should be more "human intelligent". I've seen too many times the bot accepting only some quests leaving others behind, just to take them after 2-3 completed quests. In this way, proximity is the main rule: I've just got a quest, what is the nearest hotspot (note: hotspots are also quest givers)? Go there.

What do you think about?
 
That actually sounds like an awesome idea, it would also increase the speed of questing, the problem is mixing hot spots could lead to problems, for example running in circles and getting stuck.
The idea does sound very promising though!
Perhaps add the quest data into an svn which can then be downloaded and updated, would be easier than to keep grabbing data from the site all the time :)
 
I dont think it needs changing that much , once I have done all the quests in a zone and I am rolling a new toon , I do look at some quests and think I cant be bothered to do that so skip it .

Also players will not do everything in order , especially new players . Unless they are following a guide . I can remember when I first started playing , there was no questhelper , I could pick up multiple quests in the same area and would only complete 1 and go turn it in before realising I had to return to the same area again .

I dont think the questing bot needs as much changing as you imply

Sent from my R800i using Tapatalk
 
That actually sounds like an awesome idea, it would also increase the speed of questing, the problem is mixing hot spots could lead to problems, for example running in circles and getting stuck.
The idea does sound very promising though!
Perhaps add the quest data into an svn which can then be downloaded and updated, would be easier than to keep grabbing data from the site all the time :)

Mixing hotspots may lead to have one single array of "active hotspots", then the bot should go to the nearest one and, in case of multiple hotspots in the field, do ALL the quests at the same time. It's easy enought in 4.2 (back in later WotLK) where quest mobs have the nameplate visible even when not selected and shining things on ground loots.

I dont think it needs changing that much , once I have done all the quests in a zone and I am rolling a new toon , I do look at some quests and think I cant be bothered to do that so skip it .

Also players will not do everything in order , especially new players . Unless they are following a guide . I can remember when I first started playing , there was no questhelper , I could pick up multiple quests in the same area and would only complete 1 and go turn it in before realising I had to return to the same area again .

I dont think the questing bot needs as much changing as you imply

Sent from my R800i using Tapatalk

retrofetus:
- as for the "ignore quests": just don't put them in the quest profile :)
- "bot" players are actually doing one quest per time, *real* players smash all the shining objects and highlighted mobs. Now that there is the built-in quest helper, following the map is easy as following the 1-85 guides in 5 days.

This is why I think the quest bot should be rebuilt with these ideas in mind.
 
Mixing hotspots may lead to have one single array of "active hotspots", then the bot should go to the nearest one and, in case of multiple hotspots in the field, do ALL the quests at the same time. It's easy enought in 4.2 (back in later WotLK) where quest mobs have the nameplate visible even when not selected and shining things on ground loots.

retrofetus:
- as for the "ignore quests": just don't put them in the quest profile :)
- "bot" players are actually doing one quest per time, *real* players smash all the shining objects and highlighted mobs. Now that there is the built-in quest helper, following the map is easy as following the 1-85 guides in 5 days.

This is why I think the quest bot should be rebuilt with these ideas in mind.


If you make the profile right quest bot do more then one quest at a time, you just have to know what quest to do when, and where.
Also most stuff could be fixed with new or improved CB?s , for example the collect item CB could be altered so you could collect 2 or more items at the same time.

Also the HB devs do have a new quest bot out on testing, i don?t know how far they are with it, but i guess random quest might be possible.
Yes todays quest bot do every quest unless leveling to fast hiting a nev level making it switch to another area, but this really does not matter, there is no one that are going to spend the time looking at 100.000 players quest behaviors, what quests they do and don?t, some level by hand as we bot.
 
If you make the profile right quest bot do more then one quest at a time, you just have to know what quest to do when, and where.
Also most stuff could be fixed with new or improved CB?s , for example the collect item CB could be altered so you could collect 2 or more items at the same time.

Also the HB devs do have a new quest bot out on testing, i don?t know how far they are with it, but i guess random quest might be possible.
Yes todays quest bot do every quest unless leveling to fast hiting a nev level making it switch to another area, but this really does not matter, there is no one that are going to spend the time looking at 100.000 players quest behaviors, what quests they do and don?t, some level by hand as we bot.

I wouldn't mind a quest bot that can do 2 (or more) things at once...I always watch the bot run by items it needs to collect for quest b on the way to kill the mobs for quest a...then it finishes killing x number of mobs, runs back and starts collecting the items.
Would be much faster, and less bot-like, if it were collecting the items along the way...
 
If you make the profile right quest bot do more then one quest at a time, you just have to know what quest to do when, and where.
Also most stuff could be fixed with new or improved CB?s , for example the collect item CB could be altered so you could collect 2 or more items at the same time.

Also the HB devs do have a new quest bot out on testing, i don?t know how far they are with it, but i guess random quest might be possible.
Yes todays quest bot do every quest unless leveling to fast hiting a nev level making it switch to another area, but this really does not matter, there is no one that are going to spend the time looking at 100.000 players quest behaviors, what quests they do and don?t, some level by hand as we bot.

Wait wait, what facts do you have who supports that?
 
Wait wait, what facts do you have who supports that?

Do i really need that? is this a court house? well it was mentioned in a thred and it is not like i bookmarked it. Might have been in one of kicks profile threads.

Well don?t remember who, Apoc or someone talking about a new quest bot that would be easier to implement changes to as the one they have now is hard to change or something.
 
Do i really need that? is this a court house? well it was mentioned in a thred and it is not like i bookmarked it. Might have been in one of kicks profile threads.

Well don?t remember who, Apoc or someone talking about a new quest bot that would be easier to implement changes to as the one they have now is hard to change or something.
Yes, if you're going to say something as blatant as the then you should at least reference it.
 
So... lemme boil this down to something simpler.

Lets just take the current quest bot as the starting point.


If there are any quest gatherables - pick them up if you see them.
If there are any quest mobs to kill/collect from - kill them on the way to the current objective.




... thats basically it... right?


If so, thats already on my list of "new features" for the bot. However that list won't get worked on until I have some more major bugs fixed first. (I'd rather roll out bug fixes, than new features right now)
 
Other ideas:

1. Gather hotspots directly from the game (i.e. from the map) instead of bloating useless ones in the quests profile (can be overridden in any case if only you put one or more in it)

2. Use nodes when possible (actually this works 1/10 of the times (no idea why) and the bot turns back after 1 second or two, i.e. non-responsive (un-optimized behavior tree actions?))

3. Avoid aggroing lots of mobs just to fall when one of them knock you out of the mount => death when dense-populated, also the "flee" behavior is plugin-dull, this means that the bot will run untill out of combat, preventing any plugin to override this action.

4. Support for quest scripts way slimmer and easy in form of simple TreeSharp Action, parameters passed as a single string, i.e.
PHP:
<CustomBehavior Name="MyCustomBehaviorAction" Params="My arg one|My arg 2|3|true" />
Eventually parsed, making scripts trivial
PHP:
namespace QuestBotNamespace {
    public class MyCustomBehaviorAction : Action {
        protected override RunStatus Run(object context) {
            List<string> paramList = QuestBotObjectAwsomeHandler.GetParameters();
            ...
            return RunStatus.Success;
        }
    }
}

I know specially the script part would be a major lifting of the bot, this is why I doubt it will be done that way, but it'd be interesting to do it though ^^

By the way, I've started building it (and no, not for better botting, but for learning :) )... for now it fights using the CC, it does the corpse run, it rests and it's even able to send items via mail and repair :)
 
Last edited:
Ok, now I have to ask. Have you actually tried making a quest profile yet?

You just listed a bunch of features HB's quest bot has had for a very long time. We already pull the hotspots dynamically from the map data, with support for overriding them (Blizzard has a few bogus blobs on some quests).


... custom behaviors work fine as is. And your implementation would only lead to pointless limitations.
 
Which kind of limitations?

BTW I looked at the Kickazz's 1-60 profile where there is a very imperative way to pickup and complete quests (i.e. there may be 3 quests near each other, but it'll pick one per time because the profile is "badly" written).
 
So... lemme boil this down to something simpler.

Lets just take the current quest bot as the starting point.


If there are any quest gatherables - pick them up if you see them.
If there are any quest mobs to kill/collect from - kill them on the way to the current objective.




... thats basically it... right?


If so, thats already on my list of "new features" for the bot. However that list won't get worked on until I have some more major bugs fixed first. (I'd rather roll out bug fixes, than new features right now)



jim87; read the above. You're asking us to rewrite the entire bot, when you only want 2 basic features. (Technically, 1)
 
Well, another idea of mines: quest chains and separate infos about them and delete quest pickup "actions", something like this:

PHP:
<questchain>
    <quest id="xxxxx" {Pickup details such as item, npcs etc} />
    <quest id="xxxxx" {Pickup details such as item, npcs etc} />
    <quest id="xxxxx" {Pickup details such as item, npcs etc} />
    <quest id="xxxxx" {Pickup details such as item, npcs etc} />
    <quest id="xxxxx" {Pickup details such as item, npcs etc} />
</questchain>

<quest id="xxxxx" MinimumLevel=56>
    <!-- quest details here -->
</quest>

This way the bot will always be able to pickup quests in the most optimized way

EDIT: btw the quest POIs are not used correctly. ATM the bot will stay only on one of the spots, if there are multiple ones, instead of temporarly blacklisting the current one(s) if no objectives are visible... Same goes for the "only one spot" quests: the bot will hang and wait untill mobs respawn instead of temporarly blacklisting the quest and moving to the next one.
 
Last edited:
Yeah, but from a "client" POV, if you take an existing profile like kickazz' ones, even if checkpoints are in there, you'll run green quests all the way up if you use hairlooms and for example gather materials too. If you put the minimum level on the quests directly, the bot may be able to skip some of them if they are green, or worse gray, in order to pick up yellow ones and exp faster.
 
Back
Top