Elfyau's Midnight v0.1 Protection Paladin **Updated 16-Feb-26**

NOTE I have created a plugin for all of my Paladin sequences, they are available at both Curseforge and Wago. Just search for ‘Elfyau’ or ‘GSE’

16-Feb-26:- Updated talents - no other changes.

This is my first functional pass, focused on getting the correct talent strings sorted and a working sequence ready so you can jump straight into tanking without setup friction. It’s a simple foundation build aimed at making Prot feel solid from the start.

It’s still early days, but it should play smoothly in real content. I hope it holds the line well and works nicely for you :grinning_face_with_smiling_eyes:

TALENTS:-

CIEAVg1HmQqr1Dwlv86ljju8vuNjBzyMLjZMjxyYmxMLz2MGAgBAAAAAANNzwMmZYY2aDADAYwGAAYGtNGzMzsst0yMjNDMAgZYMAALzAmZGA

SEQUENCE:-

Elfyau’s Midnight v0.1 Protection Paladin

!GSE3!1ZbPctpGHMdLmhPTB2gzPewxzRDzLwLsTmcqIxByJEwNcYxdT2YRP0B4tavsrkzEyTn10j5EYjI9dKZ9hr5DX6FvUN+7QtiRqTtJmx5cLpKW32/38/39vrvSazPAEWF4uLD2MffwgIA4azrY5Uyc2Q0CPlBZZyGVGasLz0OgLohXOw39Wafz7LSwUVysgl+em7orPUbFd2+MXhRAcw8CwLJleCKedfhHw48DD37JS8zHIIGCH6EjyiaY+8dHQ8DD42zexUKiI58NtzCROcrcCaYUiEfHx6imVarlL+OU9Gi5uFnWPjjRZf4Ar+eVizWtYEglJmFvWVQCP8VELy5S96mIlcaf31OjmHijv4M9oWxGt1rY94EjNkK2N56sx679+xeJWrlSKLxLYu1Rul9v0nrXe/fynbrEyiP/rBUIcRAgv0oQESpr5U0th0oVrVrOXT4tL9eslWrHCvDbDzbXzVWqalq1cqMTymmi8xXGD/+xx0uFUrX4rxPThCkNP2bO//9bMtGWnDx3FrfHpjdtojTrx5es39+moyJNmOJ+K+buLXX4zYZY3hs2Y8HK/XftroSgGdJEYYd7jHsyWlztBCcfCmWKrwOCI+DXAHJJ15ULiuXse4U9usayhpjGunMNayd5z0oPk45FB6FH5NWr+VWzvpz+omHjARDTgBEOiXxsq7o9CYZYwrCtKlIplIqVwqZWLWrWU8AnesixOGs5ILGBJf6p1QISKNqTJxMpA7GVzwMZRRs4zMeDwuxhogDUajaMsRu9tpKBLsgDv2419P1xseV/85wXjRk5rVXIdBrWTsP2dHseOfb00Jm+iPr+C8eelxxTH2/ry1+7PZ85/mG/X8KGbuj9manrfVO2zbkzF0IWImfaNhx9fNh3dN2e6/6hqT82QLjcC+K6HHy+y72xRzFBl18iKOFSz7Kph3LCeLOhhOBwx+w29oELlfbZJ7/vOZiGmCRndlxZRi8uS5fpNeiIcRdUYQNVm4FHlCMujLhC/cy9+BMHPUQ98FWvefbBgzaTsPVwfTuhmUcIokyipYMVC/Ox9FxMSJRDEQtXAQBDJBnylzwkSqI9uYGs5RRISBYgEQAdolYHMYq6Ew/IMF5HTgDtxWsBC8VGttuymr0YhJHllBwUoKrI24SrYDWznKCnjC+HTcJ4hO4L1fEvkEcRZxLHFcnqdjxfk/G1UKWeKVDpTlDAmSvQ/W6c2+wG4FrGp9v13m793keZ33412tiH1Kfh0vI79V3bbtR71m77Tw==

This package consists of 1 elements.

Sequences

  • EA_PP_v0.1

CHANGES:-
TALENTS: Hero set changed and other major talent changes.
SEQUENCE: Major changes to the sequence.
MACROS: None.

Your feedback is the secret ingredient that transforms great macros into legendary ones! Every click, comment, and suggestion is a building block for future awesomeness.
Let’s work together to create macros that elevate your gameplay to the next level. Help me make them smoother, stronger, and faster! Let’s unlock the full potential of your character together!

P.S. You can find me on Patreon and other social links at: Links - Elfyau

Updated the talents, all updates in the original post.

I get this error every key press: 1382x GSE/API/Storage.lua:547: attempt to index field '?' (a nil value)[Blizza - Pastebin.com

This only happens after using the sequence for around a minute or so, then it’s starts firing them off.

Tried importing using the curseforge sequence addon, got the error, deleted the addon and used the code here instead, same story, and then after trying to reimport and few times I completely deleted everything related to GSE then reinstalled it, same error. It still does seem to fire off the sequence, but spams with error warnings while doing so.
From looking around it seems to be usually fixed by reimporting because the sequence is corrupted, but that didn’t help me.

Using the talent import you posted above.

Tested another sequence from another thread and no error warnings there (tho I don’t think it fired off as cleanly as this one)

so, not sure if it’s my GSE breaking or the sequence

did you delete the old sequence before you imported the new one? dont choose replace.

Yep. I deleted the sequence/keybinds and reimported from the curseforge addon (https://www.curseforge.com/wow/addons/gse-elfyaus-paladin-macros), when that didn’t work I deleted all the sequences/keybinds and imported from the code here instead (and removed the above addon to make sure it wasn’t overwriting anything), but still the same. Final try was uninstalling GSE completely, wiping all the files from the wow folder and reinstalling, reimporting, same errors still.

I’ll try reimporting the talent tree in case something went wrong there and maybe disabling all my addons except GSE to see if something weird might be happening.

i’m on it right now and not getting that. you might want to download GSE from Wago. CF sometimes currupts files.

Still the same error when using the Wago version. This is probably a stupid question, but I assumed this works in the prepatch for midnight, or should I be going back to the TWW version until Midnight is out?

i am using it in prepatch, just finished a mythic with it. might be time to delete the WTF folder.

That’s odd then. I do get an error when I import that it’s for a different version of the game, I’m tanking the prepatch event elites with it just fine, I just get a ton of popups about errors and bugstack spat out what I pasted earlier. The only other thing is I haven’t bought Midnight yet, but would that make a difference? If not I’ll try WTF, yeah.

Okay, after deleting WTF it still kept happening, so I disabled everything but GSE - no errors. then I decided to enable bugsack/buggrabber and it started reporting errors in the chatframe, so I disabled bugsack and buggrabber and slowly enabled everything else and it seems to work fine now, which is weird because the first errors I was getting was without bugsack and buggrabber, I just installed them to see what the errors were lol. Perhaps some kinda false positive from that addon after I reimported or something? Seems okay for now tho, and sorry for filling up your thread Elfyau!

1 Like

@loch13 all good, glad you got it working. Let us know how you go!

I’m having the same issue. I’ve uninstalled addon, reinstalled addon, deleted WTF, removed all macros and hotkeys from GSE, and set up this macro from scratch in the addon..and still getting the same errors -

Message: Interface/AddOns/GSE/API/Storage.lua:635: attempt to index field ‘?’ (a nil value)
Time: Thu Feb 26 17:05:59 2026
Count: 1
Stack:
[C]: ?
[Interface/AddOns/GSE/API/Storage.lua]:635: in function ‘UpdateIcon’
[Interface/AddOns/GSE/API/Storage.lua]:297: in function ‘ResetButtons’
[Interface/AddOns/GSE/API/Events.lua]:483: in function ‘?’

Message: Interface/AddOns/GSE/API/Storage.lua:605: attempt to index field ‘?’ (a nil value)
Time: Thu Feb 26 17:05:55 2026
Count: 251
Stack:
[C]: ?
[Interface/AddOns/Blizzard_RestrictedAddOnEnvironment/RestrictedExecution.lua]:485: in function <…d_RestrictedAddOnEnvironment/RestrictedExecution.lua:448>
[tail call]: ?
[Interface/AddOns/Blizzard_RestrictedAddOnEnvironment/SecureHandlers.lua]:285: in function <…izzard_RestrictedAddOnEnvironment/SecureHandlers.lua:279>
[tail call]: ?

I tried talking to the maker of GSE, but they told me it’s something the macro is doing. :frowning:

i just used this in the first dungeon and it is working fine for me. not sure why you are getting that.

Now I’m getting additional information with the error -

Locals:
owningFrame = EA_PP_v0.1 {
}
signature = “self,button,down”
body = " local mods = “RALT=” .. tostring(IsRightAltKeyDown()) .. “|” ..
“LALT=”.. tostring(IsLeftAltKeyDown()) .. “|” ..
“AALT=” .. tostring(IsAltKeyDown()) .. “|” ..
“RCTRL=” .. tostring(IsRightControlKeyDown()) .. “|” ..
“LCTRL=” .. tostring(IsLeftControlKeyDown()) .. “|” ..
“ACTRL=” .. tostring(IsControlKeyDown()) .. “|” ..
“RSHIFT=” .. tostring(IsRightShiftKeyDown()) .. “|” ..
“LSHIFT=” .. tostring(IsLeftShiftKeyDown()) .. “|” ..
“ASHIFT=” .. tostring(IsShiftKeyDown()) .. “|” ..
“AMOD=” .. tostring(IsModifierKeyDown()) .. “|” ..
“MOUSEBUTTON=” .. GetMouseButtonClicked()
self:SetAttribute(‘localmods’, mods)
local iteration = self:GetAttribute(‘iteration’) or 1
local step = self:GetAttribute(‘step’)
step = tonumber(step)
iteration = tonumber(iteration)
if self:GetAttribute(‘stepped’) then
self:SetAttribute(‘stepped’, false)
else
for k,v in pairs(spelllist[iteration][step]) do
if k == “macrotext” then
factory = {
}
LOCAL_Closure_Factories = {
self = {
}
self,button,down = {
}
}
LOCAL_execution_count = 1

I will look into this some more, but without knowing what I am looking for, it may take some time.

<edit - I was wrong on first suggestion>

I don’t know all the in and outs of GSE and such, but with working with ChatGPT, I managed to trouble shoot it til the error went away.

I don’t know how to make sure the entire macro is running properly, but this is what the AI gave me:

That nails it: the crash is coming from the per-block “Repeat 1” wrapper, not from your castsequence spacing.

What’s happening under the hood is:

  • With Repeat 1 enabled on blocks 1–5, GSE is generating extra “virtual steps” and/or advancing the internal step attribute differently.

  • In your setup (especially with a loop block after 5), that can produce a step value that doesn’t exist in the compiled spelllist table at that moment → spelllist[iteration][step] becomes nil → error spam.

  • When you uncheck Repeat 1 on 1–5, the step math stays aligned, so the error disappears.

The fix (keep the behavior, stop the nil)

Pick one of these stable patterns:

Option A (recommended): Don’t use per-block Repeat on the “setup” section

Leave Repeat 1 OFF for blocks 1–5, and instead control repetition using:

  • the Loop Block (for the rotation section), and/or

  • the sequence Step Function (Priority or Sequential)

This is the most reliable because it avoids stacked control structures (Repeat + Loop + StepFunction) fighting each other.

Option B: Keep Repeat, but only inside the looped “rotation” section

If blocks 1–5 are “openers / utility / setup,” keep them single-pass.
Only apply Repeat to the blocks that are inside the looped section (e.g., blocks 6+), and only to a small number of blocks.

Rule of thumb: avoid Repeat on the same blocks that sit immediately before a Loop Block boundary — that’s where step indices desync most often.

Option C: Replace “Repeat 1” with explicit duplicate lines (only for the few you need)

For things like double-casting Judgment or Avenger’s Shield, it’s safer to just put the line twice in that block (like you already do in some blocks) rather than using Repeat on the whole block.

Why “Repeat 1” is special

Even though it sounds like “repeat once,” it’s implemented as a wrapper that changes how GSE increments step and how it compiles the block into the secure execution table. With Loop Blocks, that’s enough to create an off-by-one step index.

Quick “minimal-change” recommendation for your macro

  • Leave Repeat 1 OFF for blocks 1–5 (since that definitively stops the errors).

  • Keep your Loop Block for the rotation portion.

  • If you still need those blocks to fire more often, set the overall sequence step type to Priority (instead of repeating the blocks themselves). Priority naturally “weights” early blocks without messing with step indexing.

With it being the repeat issue, it makes more sense on why I’m getting the errors only after about 30 seconds of using the macro, and not right away.

1 Like

After canceling the repetition of the first macro command as you said, it indeed stopped showing the error. I then inserted an identical macro afterward.