Multiple condition with spell name (clarification required)

I found in a great working marco this syntax:

/cast [nochannelling: Void Torrent],[channelling:Mind Flay, Smite] Void Bolt
/cast [nochannelling: Void Torrent],[channelling:Mind Flay, Smite] Another spell
/cast [nochannelling: Void Torrent],[channelling:Mind Flay, Smite] a 3th spell

I have 4 questions:

  1. Not sure what do [channelling: spell, same spell]
  2. What is the intent of this macro
  3. To not clip Mind Flay
  4. Why smite if smite is mind flay in shadow spec.

I googled internet and seems that only conditions can be put in square bracket, so this syntax should give an error.

I’m missing something?

Let’s try to expand it (up to my knowledge)
Cast will be applied at the first condition met,
Condition in the same [A, B] works as logic AND
So if I’m not channelling Void Torrent i will immediately cast Void Bolt.
then if I’m not casting Mind Flay and smite I’ll cast Void bolt.
But you can’t put a spell in the condition (as far as I know) so the second one will be never triggered. (so can be removed)

/cast [nochannelling: Void Torrent],[channelling:Mind Flay] Void Bolt

In this way seems that you can cast Void Bolt only if you are not channeling Void Torrent and you are channelling Mind Flay.
so at the end you need to cast al least Mind Flay to be able to cast another spell. (That is in another part of the macro)

I can understand:

/cast [nochannelling:Mind Flay] Mind Flay

that make sense if I don’t want to clip the Mind Fly with another Mind Flay. Is my understanding correct?

In any case consider that when you are in shadow Smite = Mind Flay why you want to put in the “and” condition the same spell that you are checking it is channeled?

Please help me improve my knowledge :slight_smile:

1 Like

Hello Zemaree,

Great questions, if this works sounds great. It looks like if you can input any ability as a condition or in a sequence. But I doubt it, might need to test it but I think there might be some syntax issues.

  1. However, I think that comma (,) after the Mind Flay might invalidate the next condition as it is just a spell. I would think the closest to make something like that is to use a “/” in between instead of the comma (kind of like talent:3/2) but not sure if that would work. There shouldn’t be a comma in between the bracket groups I think also, might be ignored by the interpreter.

  2. Brackets are the “IF”, comes in priority from left to right to execute depending on what comes first. In this case they are being specific only while channeling that spell not to execute, but you can clip any other. The cast line is correct as you explain, just have to verify if that comma between the 2 brackets is valid or can remove it to be safe by adding a space instead.

  3. Correct, you can add that condition to all the other lines you do not want to clip the Mind Flay only.

  4. Also if Smite = Mind Flay, then they were probably trying to make sure the base spell would be forced to read in both ways just in case as in the beginning of Shadowlands it was kind of buggy depending if you had the macro editor open or wrong spec, etc.

1 Like

lol, yeah I have been burnt and scratched my head a few times when a macro I am working on hangs up and I find out I put a comma where it should not or leave one in when I am taking a spell out of rotation.

1 Like

thanks Lutechi

great and clear answer.

I’ll try to remove all the ,Smite (that look like useless).

an Advice: why I would like to have Mind Flay running to cast any other spell? Look like a wast of a GCD. (that most probably is ignored because of the ,Smite)

Side question:

Should the spell in the condition translated? Because if I left in English (ITA client here) seem that spell are clipped.

for the point 1) i found this example:
/cast [@player, btn:2][@focus, help, nodead][@player] Flash Heal

so as far as i understand is an “AND” in the bracket but only with “regular conditions” and a spell is not AFAIK.

but also i did not find any reason for the comma between the two bracket. Close and open should trigger the next condition.

This macro is like the bumblebee, should not be able to fly but it does DPS :slight_smile:

Might not be useless, I just haven’t been able to test if is some sort of workaround.

Kind of like when Timothy recommends to not do reset=nocombat he says that it does not work but it either works for me or it just somehow it defaults to combat or is a placebo cause I have reset macro in combat but makes it easier for me to read lol.

If I understand the advice, I think they are trying to clip Mind Flay (filler spell) with something more powerful and that makes sense.

I have never played in other client languages, but it seems to be the case that is not backwards compatible. If I could redo the macro system I think it should be standardized in English and optional to work with other languages for the spells.

This is how I read it, but I could be wrong:

/cast [On my self if I push button 2 in the mouse] [On my focus target if is friendly and not dead and I did not push button 2 in the mouse] [On myself by default if the other 2 brackets did not meet the conditions] Flash Heal

Yes, correct. this is also my assumption and the one from the macro explain tool:

If you activated this macro with mouse button 2 then:
Cast Flash Heal on you

Else, if the unit saved as your focus target is a friend and is not dead then:
Cast Flash Heal on the unit saved as your focus target

Cast Flash Heal on you

and If I put the macro at the beginning of our discussion with, smite and the comma between the two bracket is not working.

So I think that Timothy is doing some kinda magic accepting also this syntax (or maybe the site is only old and now it’s accepted.

For the translation: I checked in the condition in eng seems ignored, have to be translated but are not automatically translated but GSE.

I think that at the and would be nice having the option to lock the GSE addon to eng and let (if it’s working) the client do the complete translation cause time by time some spells are lost in translation…

That’s because there a no such thing as reset=nocombat what you are saying is reset=nil which doesn’t even have a placebo effect.

You need reset=combat which means reset when I leave or enter combat.

1 Like

lol let my placebo be haha :stuck_out_tongue:

I have to check where I use those again and test why it behaves how I want.

GSE doesn’t do anything. It simply takes what you enter and passes that to WoW and says to WoW’s macro engine “please do this thing my player thought up.”

With translating macros are only evaluated in the clients local language. Macros with English spell names running on a German client are completely ignored by WoW. There is also no universal way to translate a macro so it works on every client. I have done what is possible with spell abilities but with conditions it is next to impossible to determine that a spell is in there.

To translate spell names in conditions the macro author would need to create a GSE variable and then from that variables function call GetSpellInfo for the WoW spellid of the spell the were using and return the local name for that spell. This is the only way however that takes effort on the authors part which few if any are either willing to do or have the mental fore thought to think that this is something they might need to do for international users. This is a capability that has only just been added to GSE but requires people to really think about what they are doing.

1 Like

yep so the condition HAVE to HAVE translated :slight_smile: good to know.

for the variable, can you adress me to a post that explain (maybe with example) how it works?

I was thinking to add variable instead of translate 10 times the same condition.

Heres how Variables work:

Here’s a real world example

The function you would want to use instead is API GetSpellInfo | WoWWiki | Fandom
and pass it the spellid inside the brackets. This will always return the local language.

HU great, now it’s more clear.

The ‘variable’ are evaluated one at load?

I mean:

  1. when I change a spec or a talent the evaluation is retriggered? Or i need to align it with /rl?
  2. the variable is executed every time you call it like a function? For example i can check if the GDC is long i will use that spell if is close to be ended or with

UnitHealth(“unit”) - Returns the current health, in points, of the specified unit.

UnitHealthMax(“unit”) - Returns the maximum health, in points, of the specified unit.

check if the targeted unit’s health is below 20% and cast Shadow Word: Death instead of skip it…

I know we are going in the close to cheat area…

Variables are calculated outside of combat. Once combat starts its locked. UnitHealth is useless in a variable as either it wont be known (0) or it will be full health. This is the bit that moves it out of cheat area. The game wont let it see the result of that function in combat.

Once you change talents, edit a macro, level, leave combat, change equipment or change specs it recalculates to what is current.

You never /reload if you have made changes to GSE as the /reload function will load what you had when you logged and wipe any changes you made along the way.

/cast [nochannelling: Void Torrent],[channelling:Mind Flay, Smite] Void Bolt
/cast [nochannelling: Void Torrent],[channelling:Mind Flay, Smite] Another spell
/cast [nochannelling: Void Torrent],[channelling:Mind Flay, Smite] a 3th spell

  1. Not sure what do [channelling: spell, same spell

if you are channeling spell then cast spell. so in the sample you have if you are channelling mind flay it will cast the spell if availible. In other words cancel mind flay to cast spell.

  1. What is the intent of this macro

the intent of the sample you have is to not cast spells while channeling Void Torrent so it will complete the channel.

  1. To not clip Mind Flay

no the macro is written to clip mind flay as the spells are higher priority then mind flay

  1. Why smite if smite is mind flay in shadow spec.

I asked the creater of the macro the same question. He said he added the smite there just in case cause sometimes mind flay showed up as smite instead.

/cast [nochannelling: Void Torrent] Void Bolt
/cast [nochannelling: Void Torrent] Another spell
/cast [nochannelling: Void Torrent] a 3th spell
That will have the same effect as the original one.

There is no need to have smite in it cause when in shadow form even if the macro says smite it still reads mindflay.

Also channeling: non channeling spell has no effect. it wont interupt cast spells only channel spells

@TimothyLuke So i made a variable named VT and value of
function() return GetSpellInfo (263165) End
Clicking the test variable button shows it returns Void Torrent. However after i do this i can nolonger edit my macros. to test it

Why cant you? What is or isnt happening after you test the variable?

You did put ~~VT~~ where you wanted Void Torrent to be eg [nochanneling:~~VT~~]

This will never return true and never come into effect. For it to work the ,Smite has to be removed.

yes i did that .
/use [nochanneling:~~VT~~,exists] Void Bolt
/cast [nochanneling:~~VT~~,exists] Ascended Blast
/cast [nochanneling:~~VT~~,exists,combat] Devouring Plague
/cast [nochanneling:~~VT~~,exists,combat] Mind Blast
When i add the variable i click save. Then i got the the macro tab and edit the macro to have the ~~VT~~ in it click save and close the editor. Normally the sequence viewer is still open after i save in editor. But now it is closed. I reopen the viewer and go into my macro to edit it. The variable is saved but the sequence did not save

There is a thing called the Out of Combat Queue. When you hit save it puts the save action and the reopen GSE action into the queue. It wont pop back up until the save action has completed. When you manually reopen it you are aborting the save action. The Minimap icon has a list of the events in the queue and also to show its state. Buttons cant be updated in combat. Part of your save action is updating the button so it has to wait.

it was happening we me never going into combat. However after a few restarts are edited the sequence first then added the variable now all works as intended. One last question. Do you know if using mod:alt mod:shift and mod:ctrl work for all languages or do they need to be alter based on language or are they universal?

from what i understand they are universal.

There is also lalt ralt and lctrl and rctrl and these seem to be more reliable on some Euro keyboards/clients than US ones.