TimothyLuke / GSE-Advanced-Macro-Compiler

GSE is an alternative advanced macro editor and engine for World of Warcraft.
https://discord.gg/gseunited
MIT License
200 stars 71 forks source link

GSE is changing spell when changing forms #669

Closed vspangler closed 3 years ago

vspangler commented 4 years ago

I noticed that this is not a problem when you use the normal wow macro settings or LongMacro Addon.

I create a macro in GSE. with abilities.

/cast [stance:1,nochanneling:Void Torrent] Void Bolt
/cast [nomod,nochanneling:Mind Flay] Mind Flay

I ramp up and cast Void Eruption on a seperate key bind..... The addon uses the sequence in GSE as intended..... but when I drop from Voidform.... the GSE changes the spells in the addon to this sequence.

/cast [stance:1,nochanneling:Void Torrent] Void Eruption
/cast [nomod,nochanneling:Mind Flay] Mind Flay
TimothyLuke commented 4 years ago

It’s because Wows macros are just text in the language of the client. GSE instead stores the spell ID’s so that macros go cross server. The id for both spells is the same but the spell changes based on the circumstance. GSE shows what the value is at the time and then changes back afterwards.

It also doesn’t take into account a spell in the modifier. Hence the disconnect

TimothyLuke

On 6 Aug 2020, at 2:26 pm, Vernon Spangler notifications@github.com wrote:  I noticed that this is not a problem when you use the normal wow macro settings or LongMacro Addon.

I create a macro in GSE. with abilities.

/cast [stance:1,nochanneling:Void Torrent] Void Bolt /cast [nomod,nochanneling:Mind Flay] Mind Flay I ramp up and cast Void Eruption on a seperate key bind..... The addon uses the sequence in GSE as intended..... but when I drop from Voidform.... the GSE changes the spells in the addon to this sequence.

/cast [stance:1,nochanneling:Void Torrent] Void Eruption /cast [nomod,nochanneling:Mind Flay] Mind Flay — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

vspangler commented 4 years ago

I don't see how a spell ID makes the determination on its ability to be cross server let alone the difference rather it be text instead. WA addon uses both and does not have that problem. The difference is if you create the WA jsut to only show the name it will only show that ability rather it be available or not.

TimothyLuke commented 4 years ago

I’m not talking cross server I am talking cross language. The wow macro api ONLY works in your native language. Player cannot call castSpellID() in combat only Blizzard are able to do that. If you take a French macro it won’t work on an English client and vice verse. So GSE converts to spell id and stores that. The part that makes this super interesting is that talents and procs like Warlocks have change the spell for a limited time so GSE stores the BASE spell as if you are in those transforms /cast BASE spell casts the temporary version.

WA uses APIs that don’t have this limitation. It also does not ACT on anything It just looks so it can do what it likes. GSE runs with a thing called the “Combat sandbox” so the rules it has to adhere to are completely different. It can only call 8 of WoW’s in game APIs.

TimothyLuke

On 7 Aug 2020, at 11:47 pm, Vernon Spangler notifications@github.com wrote:

 I don't see how a spell ID makes the determination on its ability to be cross server let alone the difference rather it be text instead. WA addon uses both and does not have that problem. The difference is if you create the WA jsut to only show the name it will only show that ability rather it be available or not.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

TimothyLuke commented 4 years ago

In short GSE is supposed to be saving the Base Spell - this behaviour has been the same since #406

vspangler commented 4 years ago

I understand what you are saying but come Shadow Lands this will be a problem for the Shadow Priest class making the addon not work correctly.

TimothyLuke commented 4 years ago

Hi Vernon,

Is Blizzard changing the Smart Spell mechanic they introduced with Legion in Shadowlands? If so I haven’t seen anything on this. Note I don’t have access to Shadowlands and can only go on what Blizzard releases in the form of API changes and what players report.

The “Smart Spell” mechanic is where a base spell is replace with a different version based on a talent or a proc. In a macro when you “/cast Basespell” it casts the updated spell. The problem was it didn’t retroactively work from updated spell to base spell. They did this where they merged multiple spells into one spell under the covers but show in the UI as different spells. This mainly affected Shadow Priests, Warlocks and Hunters where they were from procs and situational circumstances. The other classes had this behaviour more predictably via talents.

TimothyLuke

On 10 Aug 2020, at 1:30 am, Vernon Spangler notifications@github.com wrote:

 Closed #669.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

vspangler commented 4 years ago

Hey Tim,

So no from what I can say they are not really changing much from the Smart Spell mechanic as originally released. They are just changing how it is used.

https://www.wowhead.com/shadowlands-priest-class-changes and recent changes https://www.wowhead.com/news=317236/shadowlands-shadow-priest-rework-voidform-changes-new-talents-core-spell-changes

The biggest concern I see here, is the way Void Bolt works. Once in Vordform you can channel Mind Flay and cast Void Bolt at the same time. So in turn if you was to incorporate the GSE to preform this action you have issues with the it changing from from /cast Void Eruption verse doing this /cast [stance:1,nochanneling:Void Torrent] Void Bolt

While I understand that most people use this addon to be able to mash a single button without having to think about what spell is important to hit first. However there are a few that utilize this addon because of the prioritization when creating macro's. A function that is not available in Wow or any other addon macro feature.

Now I know we have discussed another feature and the plan was for me to fork this to add additional features. Unfortunately myself a local friend in the area have been to busy to learn LUA do to increased work because of COVID. However we are looking at Shadow Lands API and trying to bring ourselves up to speed to present some advanced features to this project.

TimothyLuke commented 4 years ago

Then that part is easy - we override the Smart Spell function for Void Bolt. The problem is though if you have cast Void Erruption in your macro and you are not in Void Form, it wont cast Void Bolt - if that is in a castsequence it will just hang the macro.

TimothyLuke commented 4 years ago

Prob is can either override always or not at all - cant situationally do it.

TimothyLuke commented 4 years ago

Oh and other thing is that if you are in Void Form when you write or edit a macro, that macro will no longer work.

TimothyLuke commented 4 years ago

What you can do though is instead of /cast [stance:1,nochanneling:Void Torrent] Void Bolt

do either /use [stance:1,nochanneling:Void Torrent] Void Bolt or /cast [stance:1,channeling:Mind Blast] Void Bolt

This requires no code changes at all.

TimothyLuke commented 4 years ago

Only downside is you macro will only work on English clients

vspangler commented 4 years ago

So this works without changing the spell back.

/use [stance:1,nochanneling:Void Torrent] Void Bolt

however this does not work work since it shares the same spell ID as you said previously.

/cast [stance:1,channeling:Mind Blast] Void Bolt

I will log into beta later tonight and see if it works there. I had to make some changes because of the LUA errors.... I will send you the updates on that later.

TimothyLuke commented 4 years ago

Yeah its the difference between /cast and /use.

/castsequence and /cast both convert to a spell id. so underneath /cast spell is stored and referenced as /cast 1235561 <-- auto updates based on talents and procs to the current version of the spell because WoW just 'does it"

/use doesn't - Its left as a string and it first attempts to find an item by that name and then tries a spell of that name. if you use that for you specific Void Bolt times it will stay as Void Bolt irrespective of Smart Spell stuff. It just means that if you share the macro and the other guy is playing in french, they will need to change that line to the french version of void bolt rather than the english

Note also that using "channeling:mind Flay" over "nochanneling:Void Torrent" may give you more control over when its trying to do the Void Bolt as opposed to the other

vspangler commented 4 years ago

Here is what the actual Macro code looks like.

/use [nomod,stance:1,nochanneling:Void Torrent] Void Bolt /cast [nomod,nochanneling:Void Torrent/Mind Flay] Mind Flay

I will make slight changes when it comes to Shadow Lands due to the prioritization of spells but I still need to get you the changes that I made but I seen the ones you made in another open issue. I want to test those out first and see. Thanks for the help.

TimothyLuke commented 4 years ago

Is there any further feedback on this?

vspangler commented 4 years ago

@TimothyLuke sorry I have been busy working on puppet/foreman with +25k systems as we are under going the first phases of upgrading our work environment to RHEL8 as well as a F5 change that uses lua. So at the moment my work team and I are learning puppet and lua. Sorry I had no time to look at at the bugs in beta to closely.

However did get a chance to do testing in beta for the /use [nomod,stance:1,nochanneling:Void Torrent] Void Bolt and it works fine from what I can see. But tomorrow I will do a debug and see if I am seeing any errors.

TimothyLuke commented 4 years ago

All good. Puppet and Chef and Docker can make things very interesting.

TimothyLuke

On 10 Sep 2020, at 11:33 am, Vernon Spangler notifications@github.com wrote:

 @TimothyLuke sorry I have been busy working on puppet/foreman with +25k systems as we are under going the first phases of upgrading our work environment to RHEL8 as well as a F5 change that uses lua. So at the moment my work team and I are learning puppet and lua. Sorry I had no time to look at at the bugs in beta to closely.

However did get a chance to do testing in beta for the /use [nomod,stance:1,nochanneling:Void Torrent] Void Bolt and it works fine from what I can see. But tomorrow I will do a debug and see if I am seeing any errors.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

TimothyLuke commented 3 years ago

I had another thought on how this might be able to be achieved. what about putting /use [nomod,stance:1,channeling:Void Torrent] Void Bolt into the KeyRelease? IE If you are channeling and in the right form then cast void bolt? if the other lines are nochanelling - they will be skipped and it will fall through to the KeyRelease

TimothyLuke commented 3 years ago

in the alpha on curse, there is the ability to prefix a spell line with $$. This will force GSE to use the specific version of a spell. eg /cast Crusade will return /cast Avenging wrath NORMALLY HOWEVER $$/cast Crusade will return /cast Crusade. This will work for Shadow Priests for example to cast Void Bolt like $$/cast [nomod,stance:1,channeling:Void Torrent] Void Bolt

TimothyLuke commented 3 years ago

Specifically https://www.curseforge.com/wow/addons/gse-gnome-sequencer-enhanced-advanced-macros/download/3086062