Google Search

WoW-Pro Addon Syntax

Submitted by Jiyambi on Thu, 2010-12-02 00:42

With the WoW-Pro Recorder, you don't really need to know the syntax (the language the guide files are written in) unless you really want to. However, taking a look at this syntax can help you understand how the addon works and can help you do a better job of writing and designing guides for the addon.

Remember, if you have any specific questions about the addon's syntax, feel free to ask in chat!

The leveling guides can be found in Addons\WoWPro_Leveling\Alliance (or Horde). Go ahead and open one up in your favorite simple text editor. Do NOT use Microsoft Word or a similar rich text editor - the formatting used by these programs will break your guide file.

I highly recommend the free program Notepad++, as do most addon authors - it's very powerful yet simple for beginners, with a very user-friendly interface.

The guide registration functions are what tells the addon the overall information about the guide. It contains several important parts, as follows:

The function

The actual name of the function we are calling: WoWPro:RegisterGuide

The Guide ID

The next section, “LudoExpDaS” in the example, is the Guide ID (or GID). This was implemented as a means to give guides a unique ID
since zones and authors and level ranges separately might overlap. The GID consists of:

The first few letters of the author’s name (Ludo for Ludovicus in this case)

The first few letters of the guide zone or type (Exp for Explore in this case and DaS for Darkshore)

For leveling guides, the level range in double digits (0112 for 01-12 for example) is appended.

Guide Type

Which module the guide is for (practically, which tab it shows on). Achievements in the above example.

achievements

leveling

professions

dailies

worldevents

The zone

Pretty self explanatory. “Darkshore” in the example. This does not have to be a valid zone, but if it is not, a|Z| (zone) tag must be used on every line of the guide. It controls which map will be used for mapping (which can be overwritten with a |Z| tag), and also what name the guide have in the menu (ESC>Addons>WoW-Pro>Guide List) as well as the name showing at the top of the active guide pane. A better way of changing the guide name is to use the code WoWPro:GuideName(guide, 'name here') discussed below.

NOTE1: You can provide more information about the guide after a "-" or a "(". For example, a valid zone entry would be Scarlet Enclave (Death Knight) or Durotar - Valley of Trials.

The author

Again pretty simple. “Ludovicus” in the example.

Faction

The faction the guide is intended for. Can be Horde, Alliance, or Neutral.

The return value

The guide object is returned, which you can now feed into some additional functions to more fully describe the guide.

The starting, ending and average level for the quests in the guide.
It is not what level you will end up at by doing the guide, it is the required level to get the quests even if you have XP locked down.
The start_level controls when a guide will be offered to the user. The mean level sets the "color" of the guide to indicate difficulty. The end_level controls a warning to XP locked users that not all quests in the guide can be completed.

WoWPro:NewGuideLevels(guide, start_level, end_level, sort_level)

With Blizzard's implementation of level scaling, guides now have a much larger range. This function is much like the GuideLevels function with one important difference. Instead of mean level, there is sort level, it controls the order several similar leveled guides will sort in the list of guides. [i.e. to keep Suramar, Broken Shore and Argus as the last Legion guides, rather than sorting in Alphabetically with BFA guides, all of which are available at 110]

WoWPro:GuideIcon(guide, icon_type, icon_reference)

The icon to associate with the guide.
With an icon_type of "ACH", the icon_reference is the achievment number (like the "Did ## quests in Tanaris").
With an icon_type of "PRO", the icon_reference is a profession number.
With an icon_type of "ICON", the icon_reference is an icon path.
For Achievement guides, setting the correct icon_reference is doubly important, as it also sets the guide name, class and subclass from the game functions

WoWPro:GuideClassSpecific(guide, class)

Tells the system that this guide is restricted to a particular class. Used for the "DeathKnight" only starting zone.

WoWPro:GuideRaceSpecific(guide, race)

Tells the system that this guide is restricted to a particular race. Used for the "Goblin" or "Worgen" starting zones.

WoWPro:GuideProximitySort(guide)

Tells the system to sort the steps in order of proximity every time you complete a step.

WoWPro:GuideNextGuide(guide,nextGID)

Tells the system which guide to offer as the next guide. For a neutral guide you can use two GIDs separated by a "|" for each faction (Alliance first).

WoWPro:GuideSteps(guide, ...

Register the function which returns the big "[[ ... ]]" quoted string of all the guide steps.

Fancy things:
But this is really LUA code we are running, so we can do fancy things here. Look at this!

This picks an icon for the Dwarf starting zone depending on the gender!

WoWPro:GuideQuestTriggers(guide, 33333,33334,33335)
If you want a guide to autoload when a quest is accepted. Particulaly useful for holiday and other special occasion guides. The numbers are the QID's of the quests that you want to trigger the guide loading. The user will receive a dialog box giving them the options of Switch, Not Switch Now, or Not Switch Ever (for this quest).

WoWPro:GuideAutoSwitch(guide)
Use Auto Switch if you want a guide to autoload when any quest from the guide is accepted. You can put the |NA| tag in to make a particular quest not cause a guide to switch. (such as for a dungeon or raid quest that the user is not likely to be completing immediately). The user will receive a dialog box giving them the options of Switch, Not Switch Now, or Not Switch Ever (for this quest).

WoWPro:GuideName(guide, 'Whatever name you want')
If you want the guide name to be something other than the zone as defined in the guide registration parameters. This is the name that will be at the top of the guide pane and show in the list of guides.

Finally, to the meat of the guide. Each line of code represents one step in the guide. You can have blank lines if you like to help break up the big block of code, but make sure they are COMPLETELY blank. A single space on an otherwise blank line can cause the guide to not load!

For each line, You have several fields of import. The first is the step type, represented by a single case-sensitive character at the front of the line followed by a space. Step types tell the addon what icon to display, and can also tell the addon how to auto-complete the step.

Right after the step type, you'll see the step text. For quests, this will be the quest name. For location-based steps (run to, fly to, hearth to, etc) this will be the zone or sub-zone name. For other steps, it can vary.

After the step text come the tags, and this is where most of the "coding" comes into play. Some tags are required, some are not. These tags help the addon know how to handle the step, whether to display a note, where to map the coordinates, and more.

Instructs the user to set their hearthstone. Make sure to spell the town’s name exactly correctly, or it won’t auto complete correctly.

Example:

h Warsong Hold |QID|11598|N|At the innkeeper.|

Auto-Completion:

Auto-completes on the message “TOWNNAME is now your home.” TOWNNAME is the name of the subzone showing on your minimap when you are standing at this location, sometimes this is the name of the inn or something else more specific than actual townname

None of these steps auto-complete on their own. They all behave exactly the same, and you should supply a tag to help them auto-complete if at all possible. Avoid the N type step as much as possible since it doesn't give the user any visual cue on what to do.

Example:

K Fjord Crows |QID|11227|L|33238 5|N|Until you have 5 Crow meat.|

Auto-Completion:

IMPORTANT: This step has no auto-completion on it's own! You'll need to supply a tag to do that. Commonly used tags include |L| and |QO|. The above example uses a |L| tag.
You can also effectively auto-complete with the use of an |ACTIVE| or |AVAILABLE| tag followed by a QID, note: -QID means when the quest is NOT active. For Note, Fly, or Run steps, using an ACTIVE tag instead of the QID will make sure that step is only active when that quest is active. Similarly, using an AVAILABLE when those steps lead you to an Accept step will complete them once the quest gets in your quest log. The only tricky thing is when an Run or Portal step is part of a quest and it involves a loading screen. Sometimes if you are lucky there is a QO tag that you may be able to use to auto-complete the step or using the zone name as the step name to complete on that basis.

When the parser encounters a comment step, it records the line, but does nothing with it. Empty lines or lines of just whitespace are discarded. Use of comments by guide writers is encouraged, particularly when you do something clever or complicated. A ; after a step also starts a comment, but is discarded by the parser. Hence, the first type of comment is visible when viewing the guide step in game if debug mode is enabled, but the second is not.

Even on a step that has nothing to do with any quest (e.g. Hearth steps) it is still important to have one of these 3 tags there as well. Use the ID of a quest which, if completed, means the user no longer needs to complete that step.

Example:

A Wanted: Dreadtalon |QID|12091|N|From the Wanted Poster just outside the door.|

Auto-Completion:

Regardless of what other tags the step has, if the addon detects that the QID quest has been turned in, this step will complete.

This is used for quests where the NPC will ask you a question and then you need to supply an answer. In the Timeless Isle, for example, Senior Historian Evelyna has a trivia quiz. Here is am excerpt from the quiz:

Example:

A A Timeless Question|QID|33211|M|65,50.6|N|From Senior Historian Evelyna, daily.|
; This first C step "catches" until you GOSSIP with Evelyna and then goes away when it does not match the gossip
C A Timeless Question|QID|33211|QG|Senior Historian Evelyna|N|Chat with Evelyna to get your question. The question will change each time you chat with her, but we have a cheat sheet.|
C A Timeless Question|QID|33211|QG|assault on Icecrown|N|Mord'rethar|
C A Timeless Question|QID|33211|QG|bloodied crown|N|King Terenas Menethil II|
C A Timeless Question|QID|33211|QG|Broken|N|Nobundo|
...
T A Timeless Question|QID|33211|M|65,50.6|N|To Senior Historian Evelyna.|

When you are interacting with an NPC between the GOSSIP_OPEN/_CLOSED states, the addon samples the text and matches it against the text in the QG tag. The match is case insensitive. If it matches, the step is not skipped, if it does not match, the step is skipped. If we are not interacting with an NPC between the GOSSIP_OPEN/_CLOSED states, then the tag has no effect.

Auto-Completion:

It does not do any auto-completion. The quest turnin will take care of it!

This is used for quests where you won’t be completing all objectives at the same time or when the objective locations are very specific and static.

Please note that the addon is smart enough to know that when you use a QO tag, you want it to behave like a QO step, NOT a C step – so you can still use the C step type to get the nice icon for users to see. The quest tracker will only track the correct quest objective, and the step will auto-complete when that objective is complete. Remember also that you can change the step text to be something other than the quest name and it won't hurt anything!

You can also list multiple quest objectives in one step, and the step will complete when all of them are complete. Just separate them with a semicolon ";".

You must use a number instead of text. The number is the ordinal of the quest of objective. The addon will use the localized text to display the goal so people playing on non-English game clients will have a better idea of what to do. (Older guides for older content may use text instead of the ordinal number, but as Blizzard has changed how they display quest objectives, this usage should be discontinued.)

Auto-completes when the addon detects the the QO # or the exact QO text in the QID quest's leaderboard in the user's quest log. Spelling and capitalization is very crucial here! (As mentioned above, quest text only works with older content)

This is used in quest skipping logic, so please use it for every quest that has a prerequisite, optional or not! You only need to use this on Accept steps, the guide will extrapolate from there.

You don’t need to include previous steps in the chain with this tag, just the most recent. However, you CAN include multiple prerequisites if it is applicable by adding a ; (semicolon) or a + (plus) in between each the quest IDs. Use one or the other, don't mix. A semicolon indicates that all of the quests have to be completed for this step to activate. A plus indicates that any of the quests can be completed for this step to activate.

Used when you need to make sure the player has a specific item or amount of an item in their bags. Add the quantity after the item number with a space in between. If you only need one of an item, you do not need to specify a quantity.

Note that in some quests you loot an item, but it may not appear in your bags.
If so, you need to use the a QO tag instead.

Please do not use this along with a C type step or with QO tags, as it will cause issues in the tracking display.

Auto-Completion:

Causes the step to complete when the user has the specified item in their bag.

List coordinates here. You can list multiple coordinates by separating them with semicolons ";". Make sure you list coordinates for every step! The addon CAN get coordinates from the in-game quest blobs, but we'd rather have our own coordinates listed.

If you have more than one coordinate, you need to specify one of the |CS|CC|CN| tags.

Use this tag to show an item related to the step. The icon (which can be moused over for details) and the item name will be prepended to the note text. (i.e. placed in front of the text that follows the |N|) Usually this would be the drop from the rare mob or treasure. This is a link, not a clickable "use" item. (for Use items use the |U| tag)

Two arguments are required: the name of the profession and its "number". There are three optional arguments that follow:

|P|Alchemy;171|

The required form, with the name and profession number. If the toon has at least 1 in Alchemy, the step will activate.

|P|Blacksmithing;164;42|

This adds the profession level, which defaults to 1. A "*" can be used to mean max level for the expansion, 700 today. If the toon has at least 42 (>=) in Blacksmithing, this step will activate.

|P|Enchanting;333;42;1|

This sets the profession max level flag. A non zero value flips the sense of the profession level test. I.e. the toon would need less than 42 in Enchanting for this step to activate.

|P|Engineering;202;*;0;150|

This sets the profession max skill level. This defaults to 0. It will active the step if the current max profession level the toon could get without re-training is less than the argument. So this would require the toon to have Engineering(200).

Use either CC or CS in order to auto-complete the step when the coordinate (or set of coordinates), given in the |M| tag, is reached. If you are using a set of coordinates, the |CS| tag will make the step auto-complete only when the player follows the coordinates in sequence, from the first to last (final) coordinate, and the |CC| tag will make it auto-complete when the player reaches the final coordinate, regardless of the previous ones.

The |CN| tag is used to indicate that a set of coordinates are just markers on the map and NO auto-complete should be done.

If a set of coordinates is used in the |M| tag, one of these three tags is required or an error message will be issued.

Auto-Completion:

Completes when the user reaches the specified coordinate or series of coordinates.

This tag should be used as much as possible from now on, and denotes how important a quest is. 1 is the most important and will NEVER be skipped. 3 is the least important. Vital quest chains with great XP and item rewards should be marked 1. Things that are neutral in rewards but which are convenient to do should be a 2. Things that take you out of your way and aren’t particularly rewarding should be marked a 3. Anything unmarked will be considered a 1. In general, a character with heirlooms and RAF should be able to get through the guide on a setting of 1, while a character with none of these bonuses and who doesn’t do instances or have rested would need a setting of 2. 3 is more for completionists trying to get as many quests done as possible.

The only other note to this: If you use a rank tag, you must make sure all quests following that one in a chain must have the same rank or higher. We don’t want the user to be instructed to pick up a quest that he or she has not done the prerequisites for.

More specific descriptions:

|RANK|1|

You don’t need to use it, it’s implied if no rank is listed. Never skipped no matter what setting. Use for quest chains that lead to the “final” quest in the zone. I’m not sure how the high level zones go, but for the mid level ones there is usually one quest that yields very high quality rewards and “finishes” the story for that zone. All quests leading up to and including this kind of a quest should be rank 1.

|RANK|2|

These steps are only skipped by people on the lowest completion setting. Use this for quest chains that don’t lead to the “final” quest – though NOT if there are a ton of quest chains like this. I would say as a general guideline, between 1/4 and 1/3 quests should have this tag.

|RANK|3|

Really out of the way or annoying quests with little return. I haven’t been using it too often. Something the typical user would NOT want to do, something only completionists would want to do.

|RANK|-1|

Denotes a step you only want to show when a guide is being run on RANK 1. Typical usage is for R steps when you skip content that rank 2 or 3 walks you through.

If a guide is marked as an auto-switching guide using WoWPro:GuideAutoSwitch(guide), this tag is used to make this particular quest as not triggering an auto-switch. This is used for things like dungeon quests or other quests that are going to hang around in your quest log for a long time and could result in many irritating offers to switch guides.

Takes a set of two required arguments and up to two optional ones. Lets take an example:

|REP|Operation: Shieldwall;1376|

This is the minimally acceptable form. The first argument is the name of the faction and the second is the faction number. You can get faction numbers off of WowHead. Yeah, the number is all you really need, but then the guide would be unreadable. Besides, Blizzard has changed the names of factions in past patches, but preserved the faction numbers, so we feel safer in using the numbers. The third argument defaults to neutral-exalted and the fourth to 0. Explanations for them follow. This form enables the step if the reputation with "Operation: Shieldwall" is neutral through exalted.

Reputations are used with factions, like the Scryers or Tillers. Friendships were introduced in 5.1 for your status with individual NPC's like Gina Mudclaw.

A reputation range is separated by a '-' like neutral-exalted. If only one element is present, like the example, it is doubled up and interpreted as friendly-friendly and means that the step is enabled only when friendly with the faction. Do not mix reputation keywords and friendship keywords or evil things will result.

|REP|Operation: Shieldwall;1376;friendly;950|

The last argument is either the reputation level or the reputation bonus detector. In the example, it specifies that you need to be friendly and at least 950 points into friendly. It will not activate for any higher levels of reputation. You use this for quests that appear at specific reputation levels instead of reputation boundries. We may in the future choose to obey the upper reputation limit as well.

|REP|Operation: Shieldwall;1376;revered;nobonus|

The last argument is the reputation bonus detector. In the example, it specifies that you need to be revered and not have purchased and used the "Grand Commendation of Operation: Shieldwall". This can be used in guides to prompt the user to buy the commendation at the right rep level. The last argument could also be "bonus" to detect that you have the bonus, but we did that for completeness rather than utility.

Takes a set of one required arguments and two optional ones. Lets take a few examples:

|ACH|6031|

This is the minimally acceptable form. The first argument is the number of the achievement, 6031, which you can look up in wowhead. In this form, the step completes if the whole achievement is complete.

|ACH|6031;2|

This is the second form. The first argument is the number of the achievement, 6031, which you can look up in wowhead. The second, specifies the step in the achievement, in this case "firing off the fireworks in Orgrimmar". In this form, the step completes if the portion of the achievement is complete.

|ACH|6031;2;true|

This is the third form. The first argument is the number of the achievement, 6031, which you can look up in wowhead. The second, specifies the step in the achievement, in this case "firing off the fireworks in Orgrimmar". The third augment is the "flip" argument. In this form, the step completes if the portion of the achievement is not complete.

|ACH|6031;;true|

This is the fourth form. The first argument is the number of the achievement, 6031, which you can look up in wowhead. The second is set to nil, so it is equivalent to the first case. The third augment is the "flip" argument. In this form, the step completes if the whole achievement is not complete.

Buffs, those things that appear at the top, like Sayge's Dark Fortune of Strength, can be detected by this tag and cause the step to complete. Multiple buffs can be specified with the usual ';' delimited list. Example:

N Sayge's Dark Fortunes|M|52.94,75.94|BUFF|23735;23736;23737;23738;23766;23767;23768;23769|N|Sayge offers different 2 hour buffs. Pick one and elect to get a written fortune for a chance at a quest item! We pre-select based on your class.|

The PET tag takes one, two or three arguments, depending on what you are up to. The second and third arguments default to 3;false if not specified.

|PET|6031|

In the one argument form, this tests to see if less than 3 of the indicated pet. The creature IDs are not well documented. As far as I know, the only place to get them are in the Blizzard web API or by using the WoW-Pro debug log, which lists the IDs for all the pets you have.

|PET|6031;1|

In the two argument form, this tests to see if less than 1 of the indicated pet.

|PET|6031;1;true|

In the three argument form, this tests to see if you have >= 1 of the indicated pet. A true value flips the sense of the test.

The BUILDING tag takes two or more arguments, depending on what you are up to. The first argument is ignored and is used for documentation and second and following arguments are building numbers. You can find a list of building numbers for WoD at http://wod.wowhead.com/buildings . If you have none of the buildings specified, then the step is skipped. As a special bonus, if the step does not have a |M| tag, one for the building location will be added. The addon uses the building locations on your Garrison map, so it won't be perfect, but it is pretty good.

|BUILDING|Lumberyard;40|

In the two argument form, this tests to see if you have the indicated building. In this case, a level 1 Lumberyard.

|BUILDING|Lumberyards;40;41|

In the three argument form, this tests to see if you have either a level 1 or level 2 lumberyard.

Two special buildings types exist:

|BUILDING|TownHall;2|

In this form, it tests your Town Hall level. In this case, it checks that the Town Hall (Garrison) level is exactly 2. Only one level can be tested for. Note that this form does NOT set the |M| tag.

|BUILDING|TownHallOnly|

In this form, this tests to see if you have built no buildings. No other arguments are paid attention to!

This detects if you have the recipe (Koi Scented Stormray Spell ID: 201503) and if not to buy it. You should include the profession tag with skill level required. The number in the |L| tag is the item id of the recipe (133819) you buy and then click to learn it.

Guide has you Buy the Recipe, for cooking (if you have cooking), and if you do NOT have it Koi-Scented Stormray (Spell ID: 201503). Recipe ID is 133819 to learn it.

Interesting to note though, 201503 is Rank 1 of the recipe, 201532 - Rank 2, and 201552 - Rank 3... but all three (WP thinks) exist in your skill, once you've learned all three, so you dont need to list all three IDs...

so, somewhat related. The "go buy the recipe" steps in the Suramar guide have been bugging me. They direct you correctly when you need to. But, they continue directing you to buy the recipe after you have rank 3. IIRC, they didnt direct me there when I only had rank 1. (and stayed checked off)

How can we get them to stay checked off? The comment above from Blanckaert leads me to believe the answer is not to put the other ranks item #.

When I use |R|SingleRace| this works as expected, but when I do |R|Multiple,Races| it doesn't.

For example, load up Coldridge Valley on a non-Dwarf, it has the following line, but it doesn't show:
R Coldridge Valley |QID|24469|M|67.18,41.41|R|Gnome,Draenei,Night Elf,Human,Worgen|N|Head to the Dwarf starting zone, in Coldridge Valley, south-west of Dun Morogh. \n\nFrom Ironforge/Karanos, just follow the road south-west.|

In my experience, It looks at QID to match up |S| / |US| steps. That being said if you were using sticky steps with multiple individual QOs it would probably do wierd things. I of course could be totally wrong, I have not looked at the programatic logic, only speaking from what I think I have observed.

When a questgiver gives one of multiple (mutually exclusive) quests based on the choice the player made, you can account for it by putting a semicolon ";" between the QID's as shown below. This is also good for when same questgiver gives identically named quests but differant QIDs to Horde and Alliance.

Yeah, I also did not document wildcard quest IDs. In the Alliance Shieldwall dailies guide I have lines like this:

A Amber Kearnen's Quests|QID|*|M|89.79,32.43|NPC|68908|N|If Amber Kearnen offers a quest, off to the Skyfire or you go! Skip otherwise|

A Get Troteman's Quests|QID|*|M|89.69,33.08|NPC|67631|ACTIVE|-32451;-32452;-32157;-32142|N|From Marshall Troteman.|

A Get Mishka's Quests|QID|*|M|89.67,32.79|NPC|67630|ACTIVE|-32451;-32452;-32116;-32157;-32142|N|From Mishka.|

This has the effect of grabbing all the quests from Amber, then passing you on to Troteman to try to grab his quests, ONLY if Amber did NOT give you any quests (note the negative values in ACTIVE that flip the test). Then you go to Miska.

I dont know. With Legion all the rares (silver) have a high (not 100%) chance to drop a BoP item (ilvl 660 in Azsuna -- hope they scale that) and a artifact powering-up item. I dont suppose its necesary to list the powering up item, but with the lackluster quality of the main item, its really the only reason to kill them, (unless achievements are important to you).

I was hoping I could use this tag for Garrison Level, but couldn't work out a way to do. Sometimes coordinates are different depending on the level of garrison, and it would be smoother if it just shows the right one for the level of garrison you have. |GARRISON|1| to only show if your garrison is level 1?

I am attempting to write a profession leveling guide for enchanting and would like to keep it neutral if possible but there is a point where there is a pattern that has to be bought in order to continue. There are side specific vendors and I can't find any way to add tags for Horde or Alliance in the steps of the guide and since Pandaren could be for both sides I wish to know how to separate steps for either side.

Thank you for your time.

I am relying heavily on Twists Tailoring guide for help, so a BIG THANKS to Twists for the work on that guide.

Ok, answered my own question. I've done digging and find that you need both the Profession Name and ID number for it to display. If you don't have the Skill ID, the step won't show. The minimum needed is |P|Profession_Name;Skill_ID|

Yes, Guide has Automatically GREYED out the Bonus Objectives in the guide list.

Just editted this Guide to reflect that, put it just before the |M| tags.

I know this might not be an issue for some, but as I hit lvl 110, when I also finished My third zone, it was upsetting me that the Bonus Objectives where not popping up. So if you COMPLETE the guides as they have been written, you will CAP out about 2/3 - 3/4 through your third zone. (I did Azsuna, Highmountain, then Stormheim)

Added to Stormheim Ally. I can not edit Storm-Horde, Azsuna, or Highmountain Guides.

Bummer they can't be done at 110, was it that way in draenor too? I don't remember anymore, but I didn't think so. I will get Stormheim horde as I am nearly done with my next iteration ov it.

I don't know why you can't edit, but I will get the others also , it just may take longer. It should only need to be put on the "A" steps as "C" steps shouldn't show up if you don't have the quest in your log and the turn ins are "t" so they don't show until completed.

Is there anything that can be done to have a Prerequisite where you have to have done at least one of a given list of quests?

At this moment if you do |PRE|1;2;3;4| then you have to have done all of quests 1, 2, 3 and 4. What I'd like is something where if you have done any of 1, 2, 3 or 4 then the step shows.

An example would be Crushing the Cores (25577), this only shows up if you've done Into the Maw! but this has four quest IDs, two for Alliance and two for Horde. A step with |PRE|25618;25623;25617;25624| would want you to have done all four quests before showing this step, I'd like something that would show the step if any of the four have been done. Is there something (other than four lines of code?)