- Joined
- Oct 31, 2019
- RedCents
- 1,695¢
I have the feeling I am getting addicted to mq2React 

Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.


If I understood right, Kissassist doesn't like mq2cast. When starting kissassist, it eveb searches for mq2cast and if active, it will be unloaded.
what would be a working solution for:
action: /cast Zrelik's Recourse
condition: ${Me.SpellReady[Zrelik's Recourse]} && ${React.Global[IC]}"
if I dont want to use anything from mq2Cast? Shall that be the solution without mq2Cast?
globals:
IC: "${Me.CombatState.Equal[COMBAT]}"
NotCasting: "!${Me.Casting.ID}"
ZrelikGem: "8"
OneBelow50: >-
${Group.Member[0].PctHPs} <= 50 || ${Group.Member[1].PctHPs} <= 50
|| ${Group.Member[2].PctHPs} <= 50 || ${Group.Member[3].PctHPs} <=
50 || ${Group.Member[4].PctHPs} <= 50 || ${Group.Member[5].PctHPs}
<= 50
action: /cast ${GemZrelik}
condition: >-
${React.Global[NotCasting]} && ${React.Global[IC]} && ${React.Global[NmoveNinvNsit]}
&& ${React.Global[OneBelow50]} && ${Me.SpellReady[${GemZrelik}}
It doesn't cause any error message.
Is there a better condition for "any groupmember below 50% hp?
| int | Injured[XX] | Will return the numbers of people in the group that has a hp percent lower than 90 |
need /timed for the /mqp offMy PullerTank is an SK. They get a self-cure AA called Purity of Death (AA #2031).
The spiders in ToV Crystal Caverns will sometimes root my puller and if there are enough of them on my back they'll kill me.
This React is my first pass on trying to cure myself so I have a better chance of getting back to the group alive.
[CODE lang="yaml" title="Puller cure YAML"] CurePuller:
action: >-
/multiline ; /stopcast ; /nav pause ; /mqp on ; /keypress F1 ; /echo
Attempting to cure my snare or root ; /alt act 2031 ; /mqp off
condition: "${Me.Snared.ID} || ${Me.Rooted.ID} && ${Me.AltAbilityReady[2031]}"
[/CODE]
KA is perfectly fine with MQ2Cast. Kiss only does this if you have UseMQ2Melee=0. Set that =1 and it will stop unloading mq2cast (yes, one setting controls both plugins).If I understood right, Kissassist doesn't like mq2cast. When starting kissassist, it eveb searches for mq2cast and if active, it will be unloaded.
I'm completely sure it's a good thing based on the amount of code required to handle it in the plugin. Considerably less error prone (mini-yaml serializer issues aside) than doing INI parsing as well. I value my personal time far too much to NOT use yaml for a configuration format. Plus the next major version of mq2 will have yaml built-in and many plugins will most likely transition in this direction (personal opinion).I'm not so sure that YAML is a good thing.
It is arguably less error pone in the long run both from a programmer and configurator perspective. It was purposefully designed to be whitespace sensitive -- there's considerable work out and about in the world about the benefits of whitespace sensitivity in syntax design. Much of this is solved by using a good text editor (notepad++, Visual Studio Code, vim, emacs, or anything that isn't notepad.exe)It's "white space sensitivity" seems like an artificial and error-prone constraint?
Sadly a drawback (benefit?) of the mini-yaml library. It's serializer uses its own preferred formatting rules when the file saves.Then I let the module itself reformat it for me when I enable the specific react.
In the long run, it's not a big deal and the plugin itself is awesome!
I dunno. Looking at the samples so far I see a trend toward the action and condition sections getting denser and harder to follow. I think being able to break it out a little for readability would be a boon for react configs. At least I have my idea out there in case you change your mindMy general preference is to not do anything special for the user so they can have specific control over both to avoid issues with automation conflicting with other parts of the gameplay. At a certain point, if you had a lot of actions you were tying together, you should just write a macro.
. Sorry, didn't mean to inject a discussion into this thread. I'll post my merc burn/revive reacts after a little more testing to make up for it
.My design advice is if you're getting to the point where you have complex actions, or a series of complex actions, I'd start adding binds to the regularly used macros or just create a macro with an empty main loop (with a delay and event processing) that purely handles binds. You can then call the binds from mq2react.Looking at the samples so far I see a trend toward the action and condition sections getting denser and harder to follow.
/multiline isn't particularly robust (i.e., you can't use /delay with it and /timed is problematic for other reasons) and you really shouldn't be doing complex automation in a plugin (this is an area of design disagreement in the mq2 community -- but it's far too easy to have plugins and macros fight with each other)..../multilineisn't particularly robust (i.e., you can't use /delay with it and /timed is problematic for other reasons)...
This was news to me and led me into a 15 minute session right now trying to find out where this information is documented.
Again, I don't doubt you, but this makes writing robust actions very difficult if you can't pace the action to allow for lag and other external factors.
It works -- it's just not a replacement for delay. It says wait so many tens of seconds then execute the command so you're basically having to guess when the last command completes... and start working on funny math... etc.... So it's fine for something simple.But you say that's problematic also?
And this is why I suggest folks write macros for complex automation. Considerably easier to read, understand, and debug. With #include_optional there's no reason all automation macros shouldn't just have aThe only other solution I can envision would entail the use of Global Reacts to act as a sort of cascading sequence of triggers so that succeeding actions take place on successive pulses as the previous action toggled. And then you'd have to reset all these toggle conditions back to their original state when completely finished.
#include_optional rgcustom.inc (selfish push for standard naming) at the top of their macro to let folks include their own custom binds that perform more advanced automation (and then they can use /delay too!)reacts:
LandReact:
action: >-
/multiline ; /echo Putting normal item back on ; /exchange "Insidious
Halo" head ; /react enable WaterReact ; /react disable LandReact
condition: "!${Me.FeetWet}"
WaterReact:
action: >-
/multiline ; /echo Putting on EB item ; /exchange "Rebreather" head
; /react enable LandReact ; /react disable WaterReact
condition: "${Me.FeetWet}"
I would use mq2melee for that. You could turn off all the other parts of it except the combat abilities like kickIs there a condition for when auto attack is on? For example I have a react that will automatically kick if I'm in combat, but I'd like it to kick only if I have auto attack on instead of just in combat.
Is there a condition for when auto attack is on? For example I have a react that will automatically kick if I'm in combat, but I'd like it to kick only if I have auto attack on instead of just in combat.
Is there a condition for when auto attack is on? For example I have a react that will automatically kick if I'm in combat, but I'd like it to kick only if I have auto attack on instead of just in combat.
I'd asked for help writing this, and it's such a clever solution. Thank you @runcade!On TLPs I always find myself leaving enduring breath items on my chars 100% of the time because I spent a lot of time in water zones and navigating through even a little water can drown you. Then I picked up tanking AoW the other day and realized my rebreather was still on so I decided to use MQ2React with MQ2Exchange to automatically switch between items whenever I get into the water and back out.
Notes: You will need to maintain this as you get new items. I also set it up to work for 12 chars with different items which meant I copied the code below 12 times and renamed the items and the reacts to be "LandReactCharname" on. I didn't want to get spammed when staying on land or in the water so it turns that react off and the other one on so it is waiting for you to switch states. There is probably a more efficient way to do that but this works for me.
YAML:reacts: LandReact: action: >- /multiline ; /echo Putting normal item back on ; /exchange "Insidious Halo" head ; /react enable WaterReact ; /react disable LandReact condition: "!${Me.FeetWet}" WaterReact: action: >- /multiline ; /echo Putting on EB item ; /exchange "Rebreather" head ; /react enable LandReact ; /react disable WaterReact condition: "${Me.FeetWet}"
fists:
action: >-
/multiline ; /bandolier Activate fists ; /react disable fists ; /react
enable twohander
condition: "!${Me.Song[Fists of Fury II].ID} && !${Me.Bandolier[fists].Active}"
twohander:
action: >-
/multiline ; /bandolier Activate twohander ; /react disable twohander
; /react enable fists
condition: "${Me.Song[Fists of Fury II].ID} && !${Me.Bandolier[twohander].Active}"
/if (!${Defined[jFellow]}) /declare jFellow int global
/varset jFellow ${Window[FellowshipWnd].Child[FP_FellowshipPage].Child[FP_MemberList].List[${Me.CleanName}]}
FellowXP:
action: >-
/multiline ; /nomodkey /notify FellowshipWnd FP_MemberList listselect
${jFellow};
condition: "${Defined[jFellow]} && ${jFellow} && !${Window[FellowshipWnd].Child[FP_FellowshipPage].Child[FP_ToggleExpSharingButton].Enabled}"
FellowXPoff:
action: >-
/multiline ; /nomodkey /notify FellowshipWnd FP_ToggleExpSharingButton
leftmouseup; /react disable FellowXPoff; /react enable FellowXPon
condition: >-
${Me.XTarget} && ${Defined[jFellow]} && ${jFellow} && ${Me.XTarget[1].PctHPs}<15
&& ${Window[FellowshipWnd].Child[FP_FellowshipPage].Child[FP_MemberList].List[${jFellow},7].Equal[sharing]}
FellowXPon:
action: >-
/multiline ; /nomodkey /notify FellowshipWnd FP_ToggleExpSharingButton
leftmouseup; /react disable FellowXPon; /react enable FellowXPoff
condition: >-
(!${Me.XTarget} || ${Defined[jFellow]} && ${jFellow} && ${Me.XTarget[1].PctHPs}>20)
&& ${Window[FellowshipWnd].Child[FP_FellowshipPage].Child[FP_MemberList].List[${jFellow},7].Equal[not
sharing]}
LevDown:
action: /multiline ; /keypress End hold
condition: ${Navigation.Active}
PetDisc:
action: /removepetbuff Dissident Roar 4
condition: >-
${Me.ActiveDisc.Name.Equal[Impertinent Influence Rk. II]} && ${Pet.Buff[Dissident
Roar 4]}
PetDisc2:
action: /removepetbuff Composite Roar 2
condition: >-
${Me.ActiveDisc.Name.Equal[Impertinent Influence Rk. II]} && ${Pet.Buff[Composite
Roar 2]}
This is what I use for my monk, swapping between bando's when fists of fury procs. he's 110, so if you're 115 you'll have to change it from II to III. I have it enabling and disabling out of preference. Must have the "fists" and "twohander" bandolier.
YAML:fists: action: >- /multiline ; /bandolier Activate fists ; /react disable fists ; /react enable twohander condition: "!${Me.Song[Fists of Fury II].ID} && !${Me.Bandolier[fists].Active}" twohander: action: >- /multiline ; /bandolier Activate twohander ; /react disable twohander ; /react enable fists condition: "${Me.Song[Fists of Fury II].ID} && !${Me.Bandolier[twohander].Active}"
Does anyone have something similar to the above for swapping between 1-hander+shield and a 2-hander bandolier for a tank class?
I'm trying to figure something out where my tank would use a 2-hander unless he was being hit/had agro on a mob ... at which time he would automatically swap to sword+board.
SwapShield:
action: /invoke ${Me.Bandolier[Shield].Activate}
condition: "${Me.Bandolier[2hd].Active} && ${Me.XTAggroCount} != ${Me.XTarget} && ${Me.PctHPs}<90"
Swap2hd:
action: /invoke ${Me.Bandolier[2hd].Activate}
condition: "${Me.Bandolier[Shield].Active} && ${Me.XTAggroCount} == ${Me.XTarget} && ${Me.PctHPs}>90"
orDoes anyone have something similar to the above for swapping between 1-hander+shield and a 2-hander bandolier for a tank class?
I'm trying to figure something out where my tank would use a 2-hander unless he was being hit/had agro on a mob ... at which time he would automatically swap to sword+board.
or
${Me.XTarget}> 2 || ${Target.Named}
aggro > 99 ?I'm using this in situations where there will usually be more than 2 on xtarget and probably always a named, as well (raids).
Given my particular use case, I would probably opt to keep the MQ2React focused on swapping from 2-hander to 1-hander+Shield. I would manually swap back to 2-hander when I deem it safe enough to do so. I'm mostly just trying to ensure that if I go from dps to tanking that I swap in the tanking weapon setup asap.
Wouldn't that only work if I had agro on my target?aggro > 99 ?
Yeah, I thought you could swap to s&b if aggro > 99Wouldn't that only work if I had agro on my target?
Say I'm whacking on a boss with my 2-hander but get agro on an add. I don't want to die to the add while my 2-hander is out and before I can swap to the add with my 1-hander + shield.
Also, checking hps only works if the event doesn't have crazy wild ramp... which all raid events nowadays do.
Memento:
action: /useitem Memento of the Ungod's Suffering
condition: !${Me.Invis} && !${Me.Moving} && !${Me.Buff[Aura of the Void II].ID}
