![Uber Geek :ugeek:](./images/smilies/icon_e_ugeek.gif)
SOLO is a script for runes of magic, including specialized waypoints, profiles, functions, and probably its own addon eventually. I just started this yesterday, after scouring the internet for leveling waypoint files, and the very few I found were dissatisfactory to me in their inefficiency. I realize this is not a flaw on behalf of the waypoint developers, but on the general lack of leveling information available for the game (unlike World of Warcraft, which has specialized guides that number crunch every quest and mob for the absolute most optimal path). So this project is more complex than the average waypoint system as there's a lot of experimentation to be done.
My first waypoint pack I threw together over about 6 hours last night. It can take a new character from fresh out of the tutorial to level 10 and in the class hall at Varanas in 26 minutes (this time was achieved using a rogue, a druid took about 40 minutes). So far, I only have the elf side of the 1-10, and there's still more fine tuning to do. While developing this piece, however, I determined several challenges I would have to overcome for a true 0-70/70/70 bot to be a possibility. (Disclaimer: I am not stating this project will reach 0-triple70 status, but I intend to continue developing it for the foreseeable future in that direction.)
I realize that several of the challenges in the following list are already doable, I simply have to experiment a bit and learn the best way to do them. I would love any feedback from the community regarding these objectives, or the project as a whole, which is why I am posting this here pre-release. Once I have the 1-20 pack ready, there will be a release so that the community can begin testing (and using) it.
The challenges so far:
The Leveling Path:
A decent bot, even vanilla RoM Bot, fights far superior to the average player, and can therefore handle fights at a higher level than the average player could manually process. By leveraging this capability (carefully), a bot should be able to level MUCH faster than a human could. Additionally, a bot can take every shortcut, and never stops to rest (unless its to regain HP/MP, haha.) or get distracted. The hard part is that there is a blatant lack of quality analytics on the various quests and mobs and the experience they yield, or the experience algorithms in general. So there is a lot of trial and error and research to be done to create the optimal path, and it will likely need some maintenance over the years as patches come and go making tweaks to the system we aim to master. In addition to a numbers game, its also a race against the clock. It's not worth a 15 minute trek to save 5 minutes of grinding. So there will be a lot of calculations into what is at least damn close to the fastest path. The leveling path is the heart and soul of this project, so to speak.
Proper, Careful Return Paths:
I seem to find that this is where a lot of waypoint scripts fall short - the bot can often get stuck, or run through an inappropriate pack of mobs, either wasting time, aborting the bot, or worse, repeated deaths that were unneccessary. In addition to quality, careful return paths and AI management, it should also provide alternatives. One common issue is that you don't always end up at the graveyard you expect. When creating a return path, we need to either verify our position, or ensure that the entire normal waypoint leads to the same graveyard. In addition, if you die on a return path, take an alternate path next time. If that fails, use a transport or recall and take the long way back, rather than aborting, repeated death and XP debt, etc.
XP Debt Management:
In case the bot does run into issues, it should be able to manage its xp debt. If its more than 10 minutes of work to eliminate the debt, have it attempt to get an atonement from Newbie pet. If there are other repeatable ways to eliminate this debt that don't cost a speciality currency, attempt those too (even if it involves purchasing an item on the AH).
Thorough Testing:
The bot will need to be thoroughly tested and maintained - this is where the community comes in. I'll need reports of any problems, such as sticking, repeated deaths, or any inefficiency, so that I can improve the quality of the bot functionality anywhere possible.
DONE - Dynamic Target Ignore List:
I am still looking for a way to dynamically add/remove mobs from the ignore ("friend") list, for several reasons. I permanently ignored the Oil Lake Whistle Frogs, for example, because the bot likes to chase them out into the lake and pull crabs, which are far less efficient for that neck of leveling. Dynamic support would let me turn off these frogs only while in the area, rather than building a massive friends list to be in memory at all times. In addition, dynamic maintenance would let me ignore passive mobs that are below the desired level (like Burrow Cavys from 9-10), while still hunting them at appropriate levels (7-8).
Race Detection:
I'm sure this is an easy one, but I need a way to tell which race we are, for things that are race specific, such as the level 1-10 bracket, as the starting area is different, or whether or not the airship operator will allow me transport to Elven Island.
DONE - A way to operate the tutorial dialog boxes:
This should be simple, but I need a way to "accept" the tutorial, and manage the dialog boxes therein to complete the tutorial with no human input. This ensures the completeness and efficiency of the bot experience, as well as dynamically making the best choice of gear so the player can simply create a new character, fire up the bot, and walk away.
Auto Equip Best Equipment in Bag:
This is probably the hardest challenge in this list. I need a way to score equipment on a per-class basis (unusable items would automatically score 0). Then, I need to iterate the bag slots, and compare any equipment item scores to the currently equipped item score, equipping it if higher. While I can manually equip quest rewards and common drops, this ensures that any awesome and unexpected items go to use rather than simply being vendored.
Automatic Rune Application:
Need a per-class score of runes - while the bot won't go out of its way to aquire runes, it should take advantage of any rune slots with any runes it might have picked up recently. After all, better stats means faster kills, and faster kills means faster leveling. I assume runes would use a class-aware scoring system, similar to the equipment challenge above, only it would iterate the entire bag before applying as runes can't easily be changed.
Random Path Chaining:
Paths will be broken into "links" and chained together randomly, to emulate human behavior and reduce the "botty" feel. In addition, the paths themselves will be carefully designed to "feel" as human as possible. This should help with detection as well as "viewing pleasure" for the observer.
Mount Management:
If there are no permanent mounts available, the bot should be aware of any temporary mounts, and willing/able to rent a horse to make long runs MUCH faster.
Dynamic Ranged Pull Option:
This is another common fail point of many existing waypoint scripts: When the bot gets into a tight or hilly area, it tries to range pull through an obstacle, and can spent minutes or hours simply waiting for timeouts instead of leveling. In the event a bot needs to enter or pass through these areas, ranged pull should dynamically be turned off to avoid this aggrevating slowdown.
Auction House Management (Rudimentary):
Yes, that's right. The bot should be able to create its own auctions - only for quick selling, mid-value items, such as Magic Hormones, production runes, etc. The bot should underprice these to ensure they sell - after all, its only looking to make funds for basic survival, not trying to nickel and dime its way to billions. This is especially useful for items that are worthless to a vendor but could be a nice source of a little extra income. In addition, the bot needs to be able to retrieve AH money via a mailbox, and should track whether or not money came in while the bot is working (i.e. whether it should route to a mailbox at the next town).
Vendoring:
Equipment, especially at lower levels, is too complicated to sell on the AH for the bot to worry about. It should vendor any unwanted equipments, as well as any other useless items that aren't common enough to sell on the AH. In addition, it should maintain stock of the best potions it can use, selling the inferior potions to avoid buildup. It should also be capable of buying gear from vendors, only if its current gear is significantly dated (or missing). And of course, autorepair.
DONE - Automatic Profile Building:
The average user would have a hard time setting up a profile that is appropriate for this type of script, and the profile would need to change regularly anyway to remain optimal. So the profile will need to be built, and saved automatically as the bot progresses. The profile will also need to be aware of primary and secondary classes, in all possible combinations, as the secondary class skills and the elite skills can be quite useful.
Advance Class Selection:
Some way to specify what your desired second and third class are ahead of time, so that the bot can automatically take the classes for you. Keep in mind that while leveling, the bot will try not to spend many TP, rather just what it needs to remain most efficient at leveling. You should have plenty of TP to invest in specializing once the bot is finished with the character.
Elite Skill Certification:
The script should be able to complete the necessary quests to obtain elite skills automatically, and add these to the profile to be usable. By preparing and being aware of their requirements ahead of time, the bot can be ready to walk up and obtain the skill on the spot when it checks in at the certifying location.
Population Counter and Channel Switching:
Eventually, I'd like the bot to be able to track population of the current zone in the current channel. This way it could "smart" switch channels to the lowest population. In addition, I need a way to let the bot change channels automatically; if it has to spend a significant amount of time in the same place for some reason, semi-regular channel changing reduces the likelihood of a single player noticing a pattern.
DONE - Quest History Determination:
I need a way to determine if the character has previously completed a quest (as opposed to just not accepted, accepted, and ready for turnin, we need the 4th phase, already turned in) used for dynamic quest chaining in scenarios where questing is faster than grinding.
Optional Speed Hack and Suicide Hack:
This would only be an option for those that are interested, allowing the bot to move at 110% of normal speed (1.1), just slightly faster, which should decrease the time it takes to complete by 8% or so, while remaining hard to notice to the untrained eye. This would have to apply to mounted speed as well for optimal effect. The suicide hack would be used as a debt avoidance mechanism, as it is able to "kill" the player without incuring debt. It would fire just before an actual death occurs, to prevent the actual death from imposing debt. Debt avoidance speeds up the process for obvious reasons.