Gnome Sequencer for Protection Spec

 I wanted to clarify some common mistakes I see people make when creating gnomesequencer macros for Prot warriors. The issue that cripples DPS is a misunderstanding of how exactly gnomesequencer works. Gnomesequencer does not necessarily prioritize skills, rather, it uses them in a cycle and in order to get the best DPS possible, you need to maximize your chances of using the right skill in the right priority. Let me give you some examples of what works well and why many current macros are sub par. 

A sequence that works well:

'/cast Shield Slam',
'/cast Shield Slam', <--- Shield slam prioritized over revenge,two casts give it a greater chance of being used before revenge

'/cast revenge', <---- Revenge prioritized over devastate
'/cast Shield Slam',
'/cast Shield Slam',
'/cast Devastate',
'/cast Shield Slam',
'/cast Shield Slam',
'/cast Victory Rush',
'/cast Shield Slam',
'/cast Shield Slam',
'/cast [combat] Storm Bolt',
'/cast Shield Slam',
'/cast Shield Slam',
'/cast revenge', <--- revenge again prioritized over devastate because it must be triggered by GS before and after the devastate usage

Notice that shield slam is prioritized over everything because after every attempt to use any skill, it will attempt to use shield slam twice. Revenge is prioritized over devastate because it will attempt to use it before and after the devastate attempt. This sequence combined with a good pre and post macro will give you the best chance at maximizing your DPS with GS.

Now lets look at what a lot of people are using and why it does not work:

'/cast Shield Slam',
'/cast Revenge',
--'/cast [combat] Blood Fury',
'/cast [combat] Bloodbath',
'/use [combat] 13',
'/use [combat] 14',
'/cast [mod:shift] Shield Block',
'/cast [mod:alt] Heroic Strike',
'/cast Shield Slam',
'/cast Revenge',
'/cast Victory Rush',
'/cast Storm Bolt',
'/cast [combat] Dragon Roar',
'/cast Devastate',
'/cast Shield Slam',
'/cast Revenge',

This is one of the better GS macros because the creator prioritizes revenge before and after devastate. However, it will generate less DPS because shield slam is not prioritized over revenge in any way so when revenge and shield slam are both available, there is a 50/50 chance that it will use one or the other, resulting in a DPS loss when revenge is selected.

Many macros also only prioritize revenge over devastate at the start of the sequence, which will result in further DPS loss when devastate and revenge become available at the same time and devastate is used.

What you are doing there is also accomplished using the step sequence found in the example sequence file included with GS. With the step sequence included it will cast the spells in the following order.

1
12
123
1234
12345 <- Last spell is 5
1
12 etc.

So rather than repeating the same spell over and over in the macro, put the spells in order of priority, and include the step sequence. An example of this use can be seen here, Prot Paladin Macro

Also, anything that is off of the GCD, and to be cast anytime it is off cooldown should be included in the post macro, it will then be cast everytime the macro is pressed. In the above linked example, this is done with Shield of the Righteous, it will always cast, everytime there is 3 holy power, without fail.

Outstanding! I did not know about this and I think I speak on behalf of a lot of other people as well. The step sequence works really well - not perfect mind you, but it works better than the macro I suggested with much fewer lines, so definitely more efficient. I look forward to toying with it

Playing around with the list sequence you suggested, so far I have increased my dps by 5% (a lot). This is what I have come up with so far

Sequences[‘Glad’] = {
StepFunction = [[
limit = limit or 1
if step == limit then
limit = limit % #macros + 1
step = 1
else
step = step % #macros + 1
end
]],
PreMacro = [[
/console Sound_EnableSFX 0
/targetenemy [noharm][dead]
/cast [combat] Berserker Rage
/cast [combat] Blood Fury
/cast [combat] Bloodbath
/cast [combat] Demoralizing Shout
/castsequence reset=10 Shield charge,heroic strike
/cast heroic strike
]],
‘/cast Victory Rush’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Shield Slam’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast Revenge’,
‘/cast [combat] Storm Bolt’,
‘/cast Execute’,
‘/cast Devastate’,
PostMacro = [[
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

I use a timed macro with a gaming mouse to hit the key every .003 seconds, so the 8 sequences of shield slam and revenge ensure they are used in the proper order. Do you have any improvements to recommend?

Also, why is nobody else using this feature of GS? It’s great.

[quote quote=21934]I use a timed macro with a gaming mouse to hit the key every .003 seconds, so the 8 sequences of shield slam and revenge ensure they are used in the proper order. Do you have any improvements to recommend?

Also, why is nobody else using this feature of GS? It’s great.[/quote]

Try this,

Sequences[‘Glad’] = {
StepFunction = [[
limit = limit or 1
if step == limit then
limit = limit % #macros + 1
step = 1
else
step = step % #macros + 1
end
]],
PreMacro = [[
/console Sound_EnableSFX 0
/targetenemy [noharm][dead]
]],
‘/cast Victory Rush’,
‘/cast Shield Slam’,
‘/cast Revenge’,
‘/cast [combat] Storm Bolt’,
‘/cast Execute’,
‘/cast Devastate’,
PostMacro = [[
/cast [combat] Berserker Rage
/cast [combat] Blood Fury
/cast [combat] Bloodbath
/cast [combat] Demoralizing Shout
/castsequence Shield charge,heroic strike
/cast heroic strike
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

You were still repeating, with the step function, it doesn’t do anything but delay other things. Also, reset={time} doesn’t work in GS macros, the only thing you can use /castsequence for is timing out spells that have a CD that doesn’t match how long it lasts, like sacred shield.

All of the non-GCD things, which i’m assuming all the stuff you had in the premacro are, will produce less latency in the post macro, not sure why, just works out that way. I’ve not delved that deep into the addon code to find out.

If anything in the main sequence isn’t on the GCD, like Shield of the Righteous for a paladin, you should move it to post as well as they are instant and don’t need to be in the priority sequence.

I’ve been doing some parses and I’m pulling about 500-600 more DPS, which is great. I noticed in another post you mentioned using a naga with time-delay macros. Do you still stand by 0.04 second delays? Also, what is your lag tolerance set to ingame?

[quote quote=21942]

<div class=“d4p-bbt-quote-title”>Will wrote:</div>I use a timed macro with a gaming mouse to hit the key every .003 seconds, so the 8 sequences of shield slam and revenge ensure they are used in the proper order. Do you have any improvements to recommend?
Also, why is nobody else using this feature of GS? It’s great.

Try this, ``` Sequences[‘Glad’] = { StepFunction = [[ limit = limit or 1 if step == limit then limit = limit % #macros + 1 step = 1 else step = step % #macros + 1 end ]], PreMacro = [[ /console Sound_EnableSFX 0 /targetenemy [noharm][dead] ]], ‘/cast Victory Rush’, ‘/cast Shield Slam’, ‘/cast Revenge’, ‘/cast [combat] Storm Bolt’, ‘/cast Execute’, ‘/cast Devastate’, PostMacro = [[ /cast [combat] Berserker Rage /cast [combat] Blood Fury /cast [combat] Bloodbath /cast [combat] Demoralizing Shout /castsequence Shield charge,heroic strike /cast heroic strike /script UIErrorsFrame:Hide(); /console Sound_EnableSFX 1 ]], } ```You were still repeating, with the step function, it doesn’t do anything but delay other things. Also, reset={time} doesn’t work in GS macros, the only thing you can use /castsequence for is timing out spells that have a CD that doesn’t match how long it lasts, like sacred shield. All of the non-GCD things, which i’m assuming all the stuff you had in the premacro are, will produce less latency in the post macro, not sure why, just works out that way. I’ve not delved that deep into the addon code to find out. If anything in the main sequence isn’t on the GCD, like Shield of the Righteous for a paladin, you should move it to post as well as they are instant and don’t need to be in the priority sequence. [/quote] just wondering if i can use this for prot, just by replacing Shield Charge in the cast sequence?

I adjusted this a bit and seems to be working great for me. Only thing I need to hit manually is Shield Barrier and Heroic Strike. I didn’t add Heroic Strike into the sequence because it rage starves you.

Talents: 2,1,3,1,3,2

Level 100 talent is up to you.

Glyphs: Cleave, Unending Rage, Bull Rush


Sequences['ProtWar'] = {
StepFunction = [[
limit = limit or 1
if step == limit then
limit = limit % #macros + 1
step = 1
else
step = step % #macros + 1
end
]],
PreMacro = [[
/console Sound_EnableSFX 0
/targetenemy [noharm][dead]
/cast charge
]],
'/cast Victory Rush',
'/cast Shield Slam',
'/cast Revenge',
'/cast Devastate',
'/cast [combat] Storm Bolt',
'/cast Execute',
'/cast !Shield Block',
'/cast [combat] THunder Clap',
PostMacro = [[
/cast [combat] Berserker Rage
/cast [combat] Bloodbath
/cast [combat] Demoralizing Shout
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

[quote quote=22663]I adjusted this a bit and seems to be working great for me. Only thing I need to hit manually is Shield Barrier and Heroic Strike. I didn’t add Heroic Strike into the sequence because it rage starves you.
Talents: 2,1,3,1,3,2
Level 100 talent is up to you.
Glyphs: Cleave, Unending Rage, Bull Rush


Sequences['ProtWar'] = {
StepFunction = [[
limit = limit or 1
if step == limit then
limit = limit % #macros + 1
step = 1
else
step = step % #macros + 1
end
]],
PreMacro = [[
/console Sound_EnableSFX 0
/targetenemy [noharm][dead]
/cast charge
]],
'/cast Victory Rush',
'/cast Shield Slam',
'/cast Revenge',
'/cast Devastate',
'/cast [combat] Storm Bolt',
'/cast Execute',
'/cast !Shield Block',
'/cast [combat] THunder Clap',
PostMacro = [[
/cast [combat] Berserker Rage
/cast [combat] Bloodbath
/cast [combat] Demoralizing Shout
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

```[/quote]

Thunder Clap doesn't work if you spam the macro too fast... :S:S

This macro doesn’t seem to work for me. It writes a bunch of stuff in /say and never activates abilities such as bloodbath or berserker rage. Any clue as to what is happening?

Also my second question is how do I set up a times macro like someone mentioned earlier in this thread. He said he can click the macro every .03 seconds, so that intrigued me. Thanks for all your help guys