Skip to content

Step Processing Theory

Ludovicus Maior edited this page Jan 1, 2021 · 9 revisions

Preamble

Guide Types

There are five guide types that are handled slightly differently

  1. Achievements: Guides for getting Achievements
  2. Dailies: Guides for Daily quests
  3. Leveling: Guides for leveling through zones
  4. Profession: Guides for advancing skills in professions
  5. WorldEvents: Guides for various reoccurring events

Achievement Guides

First, lets start by dissecting an achievement in World of Warcraft, like Explore Argus. It has an achievement id associated with it, 12069. It may have a faction associated with it. This one is neutral. It may have criteria, and this one has 13. Note that they are numbered by first walking across each row, before moving onto the next row.

Each step in the guide is likely to have an |ACH| tag.

Daily Guides

Daily guides are quest oriented, but the quests are expected to reset on a daily basis.
Every quest in this guide type has an implicit NOCACHE tag, forcing the quest completed tests to never assume the quest remain completed once done. They are structured much like leveling guides, but their repeatable nature usually results in reputation gain with some faction or gains in profession skills.

Leveling Guides

Leveling guides are quest oriented, but unlike the Daily Guides, the quests are not repeatable and are oriented around some story line for a given zone. They will usually have a set of lead-in quests from other zones or a quest from the Adventures Guide or the Warboard or some NPC that will direct you to the starting quest hub for the zone. Quests in a zone generally fall into 4 categories:

  1. Core Quests: Quests that you have to do in a fixed order to get to the final quest in the zone that usually has some juicy item as a reward.
  2. Side Quests: Quests that are not essential to get the core quest line, but give you added experience points and gold and extra item rewards. They can usually be completed at the same time as the core quests.
  3. Zone Quests: Quests that just happen to available in the zone.
  4. Hidden Quests: Some quests in a zone are hidden or tracking quests. Some kills of rares or looting of treasures are tracked by Blizzard using a hidden quest id so you can only the get special loot or whatever award only once.

Leveling guide quest also have a rank associated with them. Ranks are:

  1. The quests needed for the zone achievement. For most zones this might be something like Putting the Gore in Gorgrond.
  2. The rest of the side quests not needed for #1.
  3. The zone quests and all the zone rares and treasures.

Profession Guides

These guides help you level up your professions. There are two kinds of guides here. One set of guides help you buy items for professions that can sometimes also be sold on the Auction House, i.e. purchase guides. The rest of the guides tell you what to train for, what to buy and what to make to level up your profession skills. If you decide to not follow the guide and make something else, that is just fine, the guide just adapts to your current skill level and makes the next recommendation. Nearly every step in these guides are M or N steps with P tags.

World Event Guides

These are special quest guides oriented around yearly (Midsummer) or monthly (Darkmoon Faire) events.

Guide Structure

Every guide has two parts, the guide reference (in Guides.xml in some directory) and the guide file itself (say Ludo_Anglers.lua).

Guide Reference (aka Guides.xml).

In every guide directory, there is a Guides.xml file that controls the loading of the guide files. For example, in WoWPro_Dailies/Neutral/Guides.xml we find:

<Ui xmlns="http://www.blizzard.com/wow/ui/">
  ...
  <Script file="Ludo_ArgDawn.lua"/>
  <Script file="Ludo_Anglers.lua"/>
  ...
</Ui>

By convention, these are in alphabetical order. The Script XML element tells the addon loader to load that script.

Guide File

Every guide has the same rough shape. It is a stylized Lua script that registers the guide, adds meta-information about the guide and then provides all the steps to the guide. This is a truncated view of Ludo_Anglers.lua to get you started:

local guide = WoWPro:RegisterGuide("LudoAnglers",'Dailies', "Krasarang Wilds", "Ludovicus", "Neutral")
WoWPro:GuideLevels(guide,90,90,90)
WoWPro.Dailies:GuideFaction(guide,1302) --  "The Anglers Reputation"
WoWPro:GuideSteps(guide, function()
return [[
...
]]
end)

Guide Registration

The guide registration is one of the two mandatory lines in a guide file. Lets take this one apart:

local guide = WoWPro:RegisterGuide("LudoAnglers",'Dailies', "Krasarang Wilds", "Ludovicus", "Neutral")

The call to WoWPro:RegisterGuide takes 5 mandatory arguments and one optional argument:

  1. The Guide ID, the internal unique name for the guide. If the guide it faction specific, it can share the same guide id as it faction twin. This used to not be the case when we were using the wow-pro website as the primary store for the guides, so you will see faction dependent guide ids for some of the older guides.
  2. The Guide Type, one of Achievements, Dailies, Leveling, Profession, or WorldEvents. Each guide type may need additional meta-data in order to work.
  3. The Zone Name,
  4. The Author Name,
  5. The Faction,
  6. The Release

The Guide Steps

The guide steps is the other mandatory part of guide file. Lets take this apart:

WoWPro:GuideSteps(guide, function()
return [[
A Quest(s) from John "Big Hook" Marsock|QID|30754^30753|M|71.7,40.1|N|From John "Big Hook" Marsock, if he is offering|
C Bright Bait|QID|30754|M|66.50,34.08;59.67,39.42;62.08,37.11;61.45,33.88;59.40,33.70;64.41,36.00;59.51,37.07;64.05,31.48|CN|N|Go north into the forest and look for them on the roots of trees. Careful with the tigers.|
C Frenzied Reef Shark|QID|30753|M|68.2,42.2|QO|1|N|Jump on the shark. Hit all three buttons on cooldown, 123. If you get thrown, ask John for another shark.|
T Bright Bait|QID|30754|M|71.7,40.1|N|From John "Big Hook" Marsock|
T Jumping the Shark|QID|30753|M|71.7,40.1|N|From John "Big Hook" Marsock|
N All done today!|
]]
end)

In this case, we are calling the WoWPro:GuideSteps function and providing it with two parameters, the guide from the earlier call to WoWPro:RegisterGuide and a function (function()) which returns a long multi-line string, i.e. return [[ and ]]; end).

Each line in the guide is an instruction to the guide parser, which lays out the sequence of steps to be presented to the user.'

In this case, we need to talk to John "Big Hook" Marsock" and he may offer one of two quests. The QID tag lists out the two quests he can offer by quest id, the M tag tells the addon where to point the TomTom arrow to help you find John, and the N tag contains the text to present to the user. The step type A tells you this is a quest accept step and the step name, Quest(s) from John "Big Hook" Marsock gets displayed in a bigger font.

The next pair of C steps directs you to what you need to do to fulfill the criteria of the quest you got. Only one of them will show depending on which quest you got. The other one turns itself off.

The next pair of T steps directs you to turn-in the quests when you are done.

Step Structure

The Grammar of a Step Line

<Action> <Step>|<Tags>| or <Action> <Step>|<Tags>|; comment or ; comment There are three possible step lines.

  1. Empty lines consisting on whitespace, which are ignored,
  2. Comment lines, which start with a ; which are largely ignored
  3. Action lines, which start with a single character specifying the action, followed by whitespace, followed by a step name, followed by a bunch of tags and an optional comment after a ;

Actions

Laundry list of actions

Step Text

Tags

  1. Tags with no argument (boolean tags)
  2. Tags with an argument
  3. Tags with multiple arguments
    • The top level separator for most tags is a ; marking off an ordered list of items. Some items may be composites and use , for the second level of separator
    • Some quest id tags use operator separators, i.e. either ^ or &. This is used to indicate that any one of the quest ids may evaluate true (^) or that all must evaluate true (&).
    • Quest/Scenario objective tags can optionally use operator separators to specify partial completion conditions: <, =, >.

Step Processing

Action Classes

Mandatory Quest ID Actions

Optional Quest ID Actions

Tag Classes

Flavor Tags

These tags just change the appearance of a step. Chat, No Combat

Context Tags

These tags provide information about the step. Note tag, Map tag.

Activation Tags

These tags will prevent a step from activating unless their condition is met. However, they will not complete a step if their condition is not met. PRE, ACTIVE,

Some activation tags work at the parsing process, because their conditions are immutable. Sex, race, class, and faction (mostly). The panda problem.

Completion Tags

These tags will complete a step if their condition is met. LEAD

Combination Tags

These tags will prevent a step from activating until their activating condition is met. Once their completion condition is met, they will complete the step.

Reputation, Profession