Help with new trans from GSE2 to GSE3

Ok, please help.

  1. What has happened to my old Macros under GSE2? Are they still there? Are they gone for good?
  2. If they are not gone, can I get them transferred to GSE3? And if so, How do I do that?
  3. If I can not simply import them into GSE3, but must recreate them in GSE3, is there a way to get back to GSE2 in order to open up those macros I use and then cut-n-paste them such that I can recreate them in GSE3?

Heres some info for you.

IT should be your GSE.lua file. It’s located c:\path\yo\wow\retail\WTF\Account\YourAccountName\SavedVariables\GSE.lua

But alas, always make a backup of the folders for safety.

Cheers.

Ok, please fully read the following before replying:

Ok, I’ve read thru Understanding GSE3 from a GSE2 Users and can understand both the need for an update to GSE 2, as well as the reasons given for the update from GSE 2 to GSE 3, and the basic concept for GSE 3 look interesting, but the import macros from GSE 2.6.55 into GSE 3.0.08 do not work - and what little they do work I’m showing a lost in DPS not the promised improvement in DPS. I am guessing that that this is because you understand the ins and outs and coding of GSE 3.0.08, and despite the GitHub wiki page-ism write ups on GSE 3:

Understanding GSE3 from a GSE2 Users Perspective
Chaining Macros
GSE3.0 Block Specification

The info is just not enough or detailed to understand what’s wrong or why the macros are working well in GSE 2.6.55, but when imported into GSE 3.0.08 are either failing or not preforming to the level they were in GSE 2.6.55.

Therefore, let me write out here a macro
that I use in GSE 2.6.55 that does not appear to be working in GSE 3.0.08

GSE 2.6.55 Macro:
Name: UBMMT
Step Function: Sequential (1 2 3 4)
Inner Loop: 2
Show Current Spell: Check

KeyPress:
/targetenemy [noharm,dead]
/startattack
/petattack
/cast Claw
/cast Bite
/cast Smack
/cast [target=pet,dead] Mend Pet; [nopet,nodead] Call Pet 1
/cast [target=focus, exists, nodead],[target=pet, exists, nodead] Misdirection

PreMacro:
/cast Bestial Wrath
/cast Aspect of the Wild
/castsequence [nomod,nochanneling] reset=target/combat Hunter’s Mark, nul

Sequential:
/cast Kill Shot
/cast Kill Command
/cast Barbed Shot
/cast Barbed Shot
/cast Bestial Wrath
/cast Aspect of the Wild
/castsequence Cobra Shot, Cobra Shot, Barbed Shot, Cobra Shot, Cobra Shot
/castsequence Cobra Shot, Cobra Shot, Kill Command, Cobra Shot, Cobra Shot

KeyRelease:
/cast Claw
/cast Bite
/cast Smack

PostMacro:
/cast Mend Pet

Use:
Head: Gold Check
Neck: Gold Check
Belt: Gold Check
Ring1: Gold Check
Ring2: Gold Check
Trinket1: Gold Check
Trinket2: Silver Check

Resets:
Combat: Check

This Macro works, and works well

GSE 3.0.08
Name: UBMMT
{
[“Variables”] = {
[“KeyRelease”] = {
[1] = “/cast Claw”,
[2] = “/cast Bite”,
[3] = “/cast Smack”
},
[“KeyPress”] = {
[1] = “/targetenemy [noharm,dead]”,
[2] = “/startattack”,
[3] = “/petattack”,
[4] = “/cast Claw”,
[5] = “/cast Bite”,
[6] = “/cast Smack”,
[7] = “/cast [target=pet,dead] Mend Pet; [nopet,nodead] Call Pet 1”,
[8] = “/cast [target=focus, exists, nodead],[target=pet, exists, nodead] Misdirection”
}
},
[“Actions”] = {
[1] = {
[1] = “KeyPress”,
[2] = “/cast Bestial Wrath”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[2] = {
[1] = “KeyPress”,
[2] = “/cast Aspect of the Wild”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[3] = {
[1] = “KeyPress”,
[2] = “/castsequence [nomod,nochanneling] reset=target/combat Hunter’s Mark, nul”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[4] = {
[1] = {
[1] = “KeyPress”,
[2] = “/cast Kill Shot”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[2] = {
[1] = “KeyPress”,
[2] = “/cast Kill Command”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[3] = {
[1] = “KeyPress”,
[2] = “/cast Barbed Shot”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[4] = {
[1] = “KeyPress”,
[2] = “/cast Barbed Shot”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[5] = {
[1] = “KeyPress”,
[2] = “/cast Bestial Wrath”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[6] = {
[1] = “KeyPress”,
[2] = “/cast Aspect of the Wild”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[7] = {
[1] = “KeyPress”,
[2] = “/castsequence Cobra Shot, Cobra Shot, Barbed Shot, Cobra Shot, Cobra Shot”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[8] = {
[1] = “KeyPress”,
[2] = “/castsequence Cobra Shot, Cobra Shot, Kill Command, Cobra Shot, Cobra Shot”,
[3] = “KeyRelease”,
[“Type”] = “Action”
},
[“Type”] = “Loop”,
[“Repeat”] = “1”,
[“StepFunction”] = “Sequential”
},
[5] = {
[1] = “KeyPress”,
[2] = “/cast Mend Pet”,
[3] = “KeyRelease”,
[“Type”] = “Action”
}
},
[“InbuiltVariables”] = {
[“Combat”] = true,
[“Ring2”] = true,
[“Head”] = true,
[“Neck”] = true,
[“Trinket1”] = true,
[“Belt”] = true,
[“Ring1”] = true
}
}

Now this macro does not really work, there are some spells that go off, most do not seem to go off and the icon for the spell displayed does not change, additionally I am showing like a 30% or better lose in DPS using this macro in GSE 3.0.08.

Could you explain then why one works fine under (GSE 2.6.55) and one does not under (GSE 3.0.08)

Addition this would be a good teach lesson on working in GSE 3.0.08. Thank You for the help.

BEcause of Input Lag.

Forgive the nerd speak but this is actually rather technical. GSE2 was “interpreted” what that meant was that in combat it figured out what was going to happen now. It didnt know what was going to happen next. This slowed down the execution of your macro and did so rather significantly. In GSE3 all the compilation is happening before you enter combat and the result is that instead of 50 to 200 odd Milliseconds of execution lag added to every click (and as a result clicks being ignored that you werent aware of), GSE3 is keeping up with what you are doing. If you look at the Compile Template button - it will show what is going to be sent to WoW each click of your macro. Again all this computation stuff in GSE2 is figured out on the fly in combat.

A consequence of this can be seen by running AHK at about 50MS. Your frame rate will suffer significantly and drop to about 10FPS. Running at 5MS you will disconnect yourself as you are now flooding WoW’s input buffer.

Your macro is structured the same as it was in GSE2. You have an inner loop which is still between your PreMacro and PostMacro but GSE3 is responding significantly faster than it was before. All this was hidden before in GSE2 now its all exposed so you can factor it into your macro.

The other thing to consider here is that the computation values of your stats is also marginally different in 9.0 to 9.1 There are also Blizzard API changes in 9.1 I can give you GSE2 macros that worked well in 9.0 that now on GSE2 don’t work in 9.1.

The way your macro is executing may need tuning as a result of both GSE3 and 9.1’s changes.

If you run your macro with /gse debug It will tell you why stuff didnt go off. There is also a setting in the options to include what the compiled version of the block was at each step. It will show what you sent to WoW and what the result was. Did WoW interpret a mod, were you in hte GCD window was it on cooldown etc.

1 Like

The other thing to consider is do you want your KeyPress and KeyRelease on every click now. Adding these are optional not required. Taking some of these lines out will change how your macro executes. Just as leaving them on each line will also change how your macro executes.

You have these lines duplicated each click:

[4] = “/cast Claw”,
[5] = “/cast Bite”,
[6] = “/cast Smack”,

This will affect the execution of your macro at WoW’s end.

1 Like

Also @John Metz posted this on Discord and may be of use to people:

This image breakdown actually helps a lot. Thank you for sharing it.

@TimothyLuke - OMG, bingo … that’s perfect. That answers a lot of question of GSE 2 to GSE 3.

  1. I was wonder about that:

     ["KeyRelease"] = {
         [1] = "/cast Claw",
         [2] = "/cast Bite",
         [3] = "/cast Smack"
     },
     ["KeyPress"] = {
         [1] = "/targetenemy [noharm,dead]",
         [2] = "/startattack",
         [3] = "/petattack",
         [4] = "/cast Claw",
         [5] = "/cast Bite",
         [6] = "/cast Smack",
         [7] = "/cast [target=pet,dead] Mend Pet; [nopet,nodead] Call Pet 1",
         [8] = "/cast [target=focus, exists, nodead],[target=pet, exists, nodead] Misdirection"
     }
    

I should mention that this macro is a Frankenstein, I took pieces and parts from several different macros and combined that together. Now from what you just mentioned, and correct me if I wrong here or am misunderstanding this:

    ["KeyRelease"] = {
        [1] = "/cast Claw",
        [2] = "/cast Bite",
        [3] = "/cast Smack"
    },

This code should be removed from the macro because it duplicates the same code in KeyPress, and I would guess that require removing it from the rest of the code like this:

["Actions"] = {
    [1] = {
        [1] = "~~KeyPress~~",
        [2] = "/cast Bestial Wrath",
        ["Type"] = "Action"
    },
    [2] = {
        [1] = "~~KeyPress~~",
        [2] = "/cast Aspect of the Wild",
        ["Type"] = "Action"
    },
    [3] = {
        [1] = "~~KeyPress~~",
        [2] = "/castsequence [nomod,nochanneling]   reset=target/combat  Hunter's Mark, nul",
        ["Type"] = "Action"
    },
    [4] = {
        [1] = {
            [1] = "~~KeyPress~~",
            [2] = "/cast Kill Shot",
            ["Type"] = "Action"
        },
        [2] = {
            [1] = "~~KeyPress~~",
            [2] = "/cast Kill Command",
            ["Type"] = "Action"
        },
        [3] = {
            [1] = "~~KeyPress~~",
            [2] = "/cast Barbed Shot",
            ["Type"] = "Action"
        },
        [4] = {
            [1] = "~~KeyPress~~",
            [2] = "/cast Barbed Shot",
            ["Type"] = "Action"
        },
        [5] = {
            [1] = "~~KeyPress~~",
            [2] = "/cast Bestial Wrath",
            ["Type"] = "Action"
        },
        [6] = {
            [1] = "~~KeyPress~~",
            [2] = "/cast Aspect of the Wild",
            ["Type"] = "Action"
        },
        [7] = {
            [1] = "~~KeyPress~~",
            [2] = "/castsequence Cobra Shot, Cobra Shot, Barbed Shot, Cobra Shot, Cobra Shot",
            ["Type"] = "Action"
        },
        [8] = {
            [1] = "~~KeyPress~~",
            [2] = "/castsequence Cobra Shot, Cobra Shot, Kill Command, Cobra Shot, Cobra Shot",
            ["Type"] = "Action"
        },
        ["Type"] = "Loop",
        ["Repeat"] = "1",
        ["StepFunction"] = "Sequential"
    },
    [5] = {
        [1] = "~~KeyPress~~",
        [2] = "/cast Mend Pet",
        ["Type"] = "Action"
    }
},

Is that correct?

  1. The GSE 3 code, from what you’ve illustrated as it relates to the GSE 2 makes me wonder why in GSE 2, there is:
 Step Function: Sequential (1 2 3 4)
    Inner Loop: 2

and in GSE 3, from what I’ve just seen, it is:

        ["Type"] = "Loop",
        ["Repeat"] = "1",
        ["StepFunction"] = "Sequential"

Does this mean that the code in the “Sequential” section of of GSE 3 is repeated only 1 time? Or is GSE 3 using a base 0 at the start. Since there would be no such thing as a 0 Repeat Loop and thus the Loop is less like a:

For ... To ...
	:
	:
Next

and more like:

Do
	:
	:
Until ...

Is that correct?

  1. Why / What is throttling back the macro between GSE 2 to GSE 3? Honestly running the same macro between GSE 2 to GSE 3 (which has prompted me to do this discussion) under patch 9.1, same code, I am seeing a better than 30% drop in DPS … under GSE 2, under patch 9.1, I am seeing a DPS of like 4.6~ or better. Under GSE 3, under patch 9.1, I am seeing a DPS of like 2.6~ or worst. Is there some option I have not changed or need to change in GSE 3 to get numbers closer to what I’m seeing in GSE 2?

  2. Is the code section Variables:

["Variables"] = {
    ["KeyRelease"] = {
       :
    },
    ["KeyPress"] = {
        :
    }
},

A place holder for only the events KeyPress / KeyRelease, or can you name any variables in there and then use the variables in the code that follows in the “Actions” code section like:

["Variables"] = {
    ["VeryImportantCode"] = {
		:
    },
},
["Actions"] = {
    [1] = {
        [1] = "... Cast some Spell ... ",
        [2] = "... Cast some Spell ... ",
        ["Type"] = "Action"
    },
    [2] = {
        [1] = "... Cast some Spell ... ",
        [2] = "... Cast some Spell ... ",
        [3] = "~~VeryImportantCode~~",
        ["Type"] = "Action"
    },

Ok, clearly I have more stuff to test and more question to ask, but this clears up some stuff. I will do more testing as you requested that I try and report back what I find as results.

will do my best to answer them all.

  1. Yes your KeyRelease is redundant and can be taken out like you have there.

  2. I spent a billion hours explaining Inner Loop and its relationship to PreMacro and PostMacro. To simplify this If you want an inner loop - add a loop and set the repeat to what the inner loop was. If you want a Prioriy StepFunction instead of a Sequential one - add a loop and set it to Priority - everything inside the loop will be Priority instead of Sequential.

Your macro by default is repeated when it gets to the end so the whole thing is a loop to begin with.

  1. see My response to this question earlier: Help with new trans from GSE2 to GSE3 - #4 by TimothyLuke

GSE2 executes at a different internal speed to GSE3 as a result the timing of when an action occurs is different. This means that each click is going off at different times to what it did in GSE2 in some cases a macro has run through its full cycle in half the time in 3 than it did 2 - As its getting to actions earlier things arent off cooldown when the macro gets to them as it was in 2.

Simple answer: GSE2 ran in combat a crap ton slower than GSE3 does. So where it took 4 seconds to get to line 15 for example it’s not getting through there at 2 seconds instead GSE2 dropped a lot of clicks if it was still processing the old one. It said it did things but it was an approximation and actually didn’t do everything you thought it did.

Try three - in GSE2 there was a gap between when you pressed the button in AHK → Your macro fired → it figured out what to do → GSE Tells wow what to try to do it. This micro second delay added up. In GSE3 its you press the button in AHK → GSE tells wow to try to do next step. It already knows what that is so just gets on with it.

  1. You could call the variable ‘JingleBells’ if you wanted to. KeyPress and KeyRelease were only added if they were in a GSE2 macro that had them. They were then inserted into each block where they were in GSE2 to get the same general behaviour.