• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver
MQ2React

Release MQ2React (1 Viewer)

This is my react for taunt.

INI:
  Taunt:
    action: /doability Taunt
    condition: >-
      ${Me.CombatState.Equal[COMBAT]} && ${Me.Standing} && ${React.Global[NotCasting]}
      && ${React.Global[Tank]} && ${Me.TargetOfTarget.ID}!=${Me.ID} &&
      ${Target.Type.Equal[NPC]} && ${Range.Between[0,30:${Target.Distance}]}
      && (!${Me.TargetOfTarget.Class.Name.Equal[Warrior]} && !${Me.TargetOfTarget.Class.Name.Equal[Paladin]}
      && !${Me.TargetOfTarget.Class.Name.Equal[Shadow Knight]}) && !${Me.Stunned}
      && !${Me.Invis}

Is there a TLO to wait for the ToT window to populate? I have noticed that in the half sec when i change targets and the ToT window doesnt have anything in it taunt will fire even though it is being tanked by a War/Pal/SK.
 
Could this replace the event_plugin (will not work at all on my system)?

I need to do the /duck script for the mission bend your knees, wondering if this can be done with it.

Thank you.
 
Could this replace the event_plugin (will not work at all on my system)?

I need to do the /duck script for the mission bend your knees, wondering if this can be done with it.

Thank you.
mq2events watches chat channels, mq2react does not.
 
I am working so I can't do anything atm, I am just collecting information at this point.

I am using kiss assist, also using MQ2Events for the Avatar kneeing.

My goal is to use this for Old Man McKenzie Raid, (Spawning Mage pets).

To use this I just need to do /react reload ? I understand it is an MQ2React.yaml file.
Do I need to create a different file for each toon, or just put the code inside MQ2React.yaml file, using Notepad++ and this will work for all the toons?
Thanks.
 
I've been toying with using mq2react to FD my sk (puller) when he gets snared. I have it working but it FD's him when he's tanking in camp. I'm just unsure how to add a condition to make sure he's a certain distance from camp before hitting FD. I was hoping someone would have an idea.

-G
 
I've been toying with using mq2react to FD my sk (puller) when he gets snared. I have it working but it FD's him when he's tanking in camp. I'm just unsure how to add a condition to make sure he's a certain distance from camp before hitting FD. I was hoping someone would have an idea.

-G
You could try: ${Group.Member[1].Distance} > 100, assuming this group member stays in camp during pulls.
 
I grabbed this react from another thread, any idea why its not working for me?

[CODE lang="yaml" title="Explosion of Hatred and Spite"]

globals:

reacts:
Hatred:
action: /alt activate 822
condition: >-
${Me.AltAbilityTimer[Explosion of Hatred]}<43000 && !${Me.AltAbilityReady[Explosion
of Hatred]} && ${Plugin[MQ2Melee].Name.Length} && ${Me.AltAbilityReady[Explosion
of Spite]} && ${SpawnCount[npc radius 50]}>1 && ${Me.XTarget}>1
&& (${Me.XTarget[1].Type.Equal[NPC]} && ${Me.XTarget[1].PctAggro}<100
|| ${Me.XTarget[2].Type.Equal[NPC]} && ${Me.XTarget[2].PctAggro}<100
|| ${Me.XTarget[3].Type.Equal[NPC]} && ${Me.XTarget[3].PctAggro}<100
|| ${Me.XTarget[4].Type.Equal[NPC]} && ${Me.XTarget[4].PctAggro}<100
|| ${Me.XTarget[5].Type.Equal[NPC]} && ${Me.XTarget[5].PctAggro}<100
|| ${Me.XTarget[6].Type.Equal[NPC]} && ${Me.XTarget[6].PctAggro}<100
|| ${Me.XTarget[7].Type.Equal[NPC]} && ${Me.XTarget[7].PctAggro}<100||
${Me.XTarget[8].Type.Equal[NPC]} && ${Me.XTarget[8].PctAggro}<100
|| ${Me.XTarget[9].Type.Equal[NPC]} && ${Me.XTarget[9].PctAggro}<100
|| ${Me.XTarget[10].Type.Equal[NPC]} && ${Me.XTarget[10].PctAggro}<100
|| ${Me.XTarget[11].Type.Equal[NPC]} && ${Me.XTarget[11].PctAggro}<100
|| ${Me.XTarget[12].Type.Equal[NPC]} && ${Me.XTarget[12].PctAggro}<100
|| ${Me.XTarget[13].Type.Equal[NPC]} && ${Me.XTarget[13].PctAggro}<100)
Spite:
action: /alt activate 749
condition: >-
${Me.AltAbilityTimer[Explosion of Hatred]}<43000 && !${Me.AltAbilityReady[Explosion
of Hatred]} && ${Plugin[MQ2Melee].Name.Length} && ${Me.AltAbilityReady[Explosion
of Spite]} && ${SpawnCount[npc radius 50]}>1 && ${Me.XTarget}>1
&& (${Me.XTarget[1].Type.Equal[NPC]} && ${Me.XTarget[1].PctAggro}<100
|| ${Me.XTarget[2].Type.Equal[NPC]} && ${Me.XTarget[2].PctAggro}<100
|| ${Me.XTarget[3].Type.Equal[NPC]} && ${Me.XTarget[3].PctAggro}<100
|| ${Me.XTarget[4].Type.Equal[NPC]} && ${Me.XTarget[4].PctAggro}<100
|| ${Me.XTarget[5].Type.Equal[NPC]} && ${Me.XTarget[5].PctAggro}<100
|| ${Me.XTarget[6].Type.Equal[NPC]} && ${Me.XTarget[6].PctAggro}<100
|| ${Me.XTarget[7].Type.Equal[NPC]} && ${Me.XTarget[7].PctAggro}<100||
${Me.XTarget[8].Type.Equal[NPC]} && ${Me.XTarget[8].PctAggro}<100
|| ${Me.XTarget[9].Type.Equal[NPC]} && ${Me.XTarget[9].PctAggro}<100
|| ${Me.XTarget[10].Type.Equal[NPC]} && ${Me.XTarget[10].PctAggro}<100
|| ${Me.XTarget[11].Type.Equal[NPC]} && ${Me.XTarget[11].PctAggro}<100
|| ${Me.XTarget[12].Type.Equal[NPC]} && ${Me.XTarget[12].PctAggro}<100
|| ${Me.XTarget[13].Type.Equal[NPC]} && ${Me.XTarget[13].PctAggro}<100)
sleep_frames: 15[/CODE]
 
Hatred:
!${Me.AltAbilityReady[Explosion of Hatred]} is telling you to use the ability when it's not ready, I assume you want to remove the !
${Me.AltAbilityReady[Explosion of Spite]} means this won't work unless both AAs are ready (you could add an !, but then it won't go off until you trigger Spite first, I would just remove this)

Spite:
!${Me.AltAbilityReady[Explosion of Hatred]} - same as above, won't go off until Hatred is manually triggered first, so if both abilities are ready at the same time nothing will happen

Together this is telling your toon to only use Hatred when it's not ready, so it never gets used, and to only use spite when Hatred is not ready, which is never true.
 
Last edited:
I grabbed this react from another thread, any idea why its not working for me?

[CODE lang="yaml" title="Explosion of Hatred and Spite"]

globals:

reacts:
Hatred:
action: /alt activate 822
condition: >-
${Me.AltAbilityTimer[Explosion of Hatred]}<43000 && !${Me.AltAbilityReady[Explosion
of Hatred]} && ${Plugin[MQ2Melee].Name.Length} && ${Me.AltAbilityReady[Explosion
of Spite]} && ${SpawnCount[npc radius 50]}>1 && ${Me.XTarget}>1
&& (${Me.XTarget[1].Type.Equal[NPC]} && ${Me.XTarget[1].PctAggro}<100
|| ${Me.XTarget[2].Type.Equal[NPC]} && ${Me.XTarget[2].PctAggro}<100
|| ${Me.XTarget[3].Type.Equal[NPC]} && ${Me.XTarget[3].PctAggro}<100
|| ${Me.XTarget[4].Type.Equal[NPC]} && ${Me.XTarget[4].PctAggro}<100
|| ${Me.XTarget[5].Type.Equal[NPC]} && ${Me.XTarget[5].PctAggro}<100
|| ${Me.XTarget[6].Type.Equal[NPC]} && ${Me.XTarget[6].PctAggro}<100
|| ${Me.XTarget[7].Type.Equal[NPC]} && ${Me.XTarget[7].PctAggro}<100||
${Me.XTarget[8].Type.Equal[NPC]} && ${Me.XTarget[8].PctAggro}<100
|| ${Me.XTarget[9].Type.Equal[NPC]} && ${Me.XTarget[9].PctAggro}<100
|| ${Me.XTarget[10].Type.Equal[NPC]} && ${Me.XTarget[10].PctAggro}<100
|| ${Me.XTarget[11].Type.Equal[NPC]} && ${Me.XTarget[11].PctAggro}<100
|| ${Me.XTarget[12].Type.Equal[NPC]} && ${Me.XTarget[12].PctAggro}<100
|| ${Me.XTarget[13].Type.Equal[NPC]} && ${Me.XTarget[13].PctAggro}<100)
Spite:
action: /alt activate 749
condition: >-
${Me.AltAbilityTimer[Explosion of Hatred]}<43000 && !${Me.AltAbilityReady[Explosion
of Hatred]} && ${Plugin[MQ2Melee].Name.Length} && ${Me.AltAbilityReady[Explosion
of Spite]} && ${SpawnCount[npc radius 50]}>1 && ${Me.XTarget}>1
&& (${Me.XTarget[1].Type.Equal[NPC]} && ${Me.XTarget[1].PctAggro}<100
|| ${Me.XTarget[2].Type.Equal[NPC]} && ${Me.XTarget[2].PctAggro}<100
|| ${Me.XTarget[3].Type.Equal[NPC]} && ${Me.XTarget[3].PctAggro}<100
|| ${Me.XTarget[4].Type.Equal[NPC]} && ${Me.XTarget[4].PctAggro}<100
|| ${Me.XTarget[5].Type.Equal[NPC]} && ${Me.XTarget[5].PctAggro}<100
|| ${Me.XTarget[6].Type.Equal[NPC]} && ${Me.XTarget[6].PctAggro}<100
|| ${Me.XTarget[7].Type.Equal[NPC]} && ${Me.XTarget[7].PctAggro}<100||
${Me.XTarget[8].Type.Equal[NPC]} && ${Me.XTarget[8].PctAggro}<100
|| ${Me.XTarget[9].Type.Equal[NPC]} && ${Me.XTarget[9].PctAggro}<100
|| ${Me.XTarget[10].Type.Equal[NPC]} && ${Me.XTarget[10].PctAggro}<100
|| ${Me.XTarget[11].Type.Equal[NPC]} && ${Me.XTarget[11].PctAggro}<100
|| ${Me.XTarget[12].Type.Equal[NPC]} && ${Me.XTarget[12].PctAggro}<100
|| ${Me.XTarget[13].Type.Equal[NPC]} && ${Me.XTarget[13].PctAggro}<100)
sleep_frames: 15[/CODE]
Xann is definitely correct on the ! usage

also considering you mentioned that your addition of those AAs are special to your emu outside of era when you would get them - does ${Me.AltAbilityReady[Explosion of Hatred]} return back true, that you have the alt ability ready when it is ready? if mq2 doesn't think you have the alt ability because something has been modified or changeed or added so you can use it, then its not going to be able to use it if it doesn't think you have it
 
trying to think of how to use this to make 12 toons do 4 different things in a cycle over about 30 min stretch. Develop conditionals/reacts for running horns, feathers, COP clickies, etc in succession repeatedly until they;re not in combat anymore. I can certainly think of a logic in my head of how to do it, but translating it to MQ2react has been a tad more elusive.
 
Trying to get a react which will alternate between COP clickies, horns, and feathers. Anyone please provide me some feedback on this? Looking for alternatives to the COP4 click final conditional if anyone knows anything which will click them one right after another consistently.

INI:
Globals:
CheckStatus: "${Me.CombatState.Equal[COMBAT]} && !${Me.Casting.ID} && !${Me.Invis}"
NotCoP: "!${Me.Song[Circle of Power].ID}"
NotBlessed: "!${Me.Song[Grace of Unity].ID} && !${Me.Song[Blessing of Unity].ID}
RageReady: "${Me.ItemReady[Rage of Rolfron]}"
HornReady: "${Me.ItemReady[Miniature Horn of Unity]}"
FeatherReady: "${Me.ItemReady[Unified Phoenix Feather]}"
OneBelow95: >-
${Group.Member[0].PctMana} <= 95 || ${Group.Member[1].PctMana} <= 95
|| ${Group.Member[2].PctMana} <= 95 || ${Group.Member[3].PctMana} <=
95 || ${Group.Member[4].PctMana} <= 95 || ${Group.Member[5].PctMana} <= 95
OneBelow90: >-
${Group.Member[0].PctMana} <= 90 || ${Group.Member[1].PctMana} <= 90
|| ${Group.Member[2].PctMana} <= 90 || ${Group.Member[3].PctMana} <=
90 || ${Group.Member[4].PctMana} <= 90 || ${Group.Member[5].PctMana} <= 90
OneBelow85: >-
${Group.Member[0].PctMana} <= 85 || ${Group.Member[1].PctMana} <= 85
|| ${Group.Member[2].PctMana} <= 85 || ${Group.Member[3].PctMana} <=
85 || ${Group.Member[4].PctMana} <= 85 || ${Group.Member[5].PctMana} <= 85
OneBelow80: >-
${Group.Member[0].PctMana} <= 80 || ${Group.Member[1].PctMana} <= 80
|| ${Group.Member[2].PctMana} <= 80 || ${Group.Member[3].PctMana} <=
95 || ${Group.Member[4].PctMana} <= 80 || ${Group.Member[5].PctMana} <= 80
OneBelow75: >-
${Group.Member[0].PctMana} <= 75 || ${Group.Member[1].PctMana} <= 75
|| ${Group.Member[2].PctMana} <= 75 || ${Group.Member[3].PctMana} <=
75 || ${Group.Member[4].PctMana} <= 75 || ${Group.Member[5].PctMana} <= 75
OneBelow70: >-
${Group.Member[0].PctMana} <= 70 || ${Group.Member[1].PctMana} <= 70
|| ${Group.Member[2].PctMana} <= 70 || ${Group.Member[3].PctMana} <=
70 || ${Group.Member[4].PctMana} <= 70 || ${Group.Member[5].PctMana} <= 70
OneBelow65: >-
${Group.Member[0].PctMana} <= 65 || ${Group.Member[1].PctMana} <= 65
|| ${Group.Member[2].PctMana} <= 65 || ${Group.Member[3].PctMana} <=
65 || ${Group.Member[4].PctMana} <= 65 || ${Group.Member[5].PctMana} <= 65
OneBelow60: >-
${Group.Member[0].PctMana} <= 60 || ${Group.Member[1].PctMana} <= 60
|| ${Group.Member[2].PctMana} <= 60 || ${Group.Member[3].PctMana} <=
60 || ${Group.Member[4].PctMana} <= 60 || ${Group.Member[5].PctMana} <= 60
OneBelow55: >-
${Group.Member[0].PctMana} <= 55 || ${Group.Member[1].PctMana} <= 55
|| ${Group.Member[2].PctMana} <= 55 || ${Group.Member[3].PctMana} <=
55 || ${Group.Member[4].PctMana} <= 55 || ${Group.Member[5].PctMana} <= 55
OneBelow50: >-
${Group.Member[0].PctMana} <= 50 || ${Group.Member[1].PctMana} <= 50
|| ${Group.Member[2].PctMana} <= 50 || ${Group.Member[3].PctMana} <=
50 || ${Group.Member[4].PctMana} <= 50 || ${Group.Member[5].PctMana} <= 50
OneBelow45: >-
${Group.Member[0].PctMana} <= 45 || ${Group.Member[1].PctMana} <= 45
|| ${Group.Member[2].PctMana} <= 45 || ${Group.Member[3].PctMana} <=
45 || ${Group.Member[4].PctMana} <= 45 || ${Group.Member[5].PctMana} <= 45
OneBelow40: >-
${Group.Member[0].PctMana} <= 40 || ${Group.Member[1].PctMana} <= 40
|| ${Group.Member[2].PctMana} <= 40 || ${Group.Member[3].PctMana} <=
40 || ${Group.Member[4].PctMana} <= 40 || ${Group.Member[5].PctMana} <= 40

Character1:
UseFeather1:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow65]}
UseHorn1:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow95]}
UseCircle1:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow95]}

Character2:
UseFeather2:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow60]}
UseHorn2:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow90]}
UseCircle2:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow90]}

Character3:
UseFeather3:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow55]}
UseHorn3:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow85]}
UseCircle3:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow85]}

Character4:
UseFeather4:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow50]}
UseHorn4:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow80]}
UseCircle4:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow80]}

Character5:
UseFeather5:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow45]}
UseHorn5:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow75]}
UseCircle5:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow75]}

Character6:
UseFeather6:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow40]}
UseHorn6:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow70]}
UseCircle6:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow70]}
 
Trying to get a react which will alternate between COP clickies, horns, and feathers. Anyone please provide me some feedback on this? Looking for alternatives to the COP4 click final conditional if anyone knows anything which will click them one right after another consistently.

INI:
Globals:
CheckStatus: "${Me.CombatState.Equal[COMBAT]} && !${Me.Casting.ID} && !${Me.Invis}"
NotCoP: "!${Me.Song[Circle of Power].ID}"
NotBlessed: "!${Me.Song[Grace of Unity].ID} && !${Me.Song[Blessing of Unity].ID}
RageReady: "${Me.ItemReady[Rage of Rolfron]}"
HornReady: "${Me.ItemReady[Miniature Horn of Unity]}"
FeatherReady: "${Me.ItemReady[Unified Phoenix Feather]}"
OneBelow95: >-
${Group.Member[0].PctMana} <= 95 || ${Group.Member[1].PctMana} <= 95
|| ${Group.Member[2].PctMana} <= 95 || ${Group.Member[3].PctMana} <=
95 || ${Group.Member[4].PctMana} <= 95 || ${Group.Member[5].PctMana} <= 95
OneBelow90: >-
${Group.Member[0].PctMana} <= 90 || ${Group.Member[1].PctMana} <= 90
|| ${Group.Member[2].PctMana} <= 90 || ${Group.Member[3].PctMana} <=
90 || ${Group.Member[4].PctMana} <= 90 || ${Group.Member[5].PctMana} <= 90
OneBelow85: >-
${Group.Member[0].PctMana} <= 85 || ${Group.Member[1].PctMana} <= 85
|| ${Group.Member[2].PctMana} <= 85 || ${Group.Member[3].PctMana} <=
85 || ${Group.Member[4].PctMana} <= 85 || ${Group.Member[5].PctMana} <= 85
OneBelow80: >-
${Group.Member[0].PctMana} <= 80 || ${Group.Member[1].PctMana} <= 80
|| ${Group.Member[2].PctMana} <= 80 || ${Group.Member[3].PctMana} <=
95 || ${Group.Member[4].PctMana} <= 80 || ${Group.Member[5].PctMana} <= 80
OneBelow75: >-
${Group.Member[0].PctMana} <= 75 || ${Group.Member[1].PctMana} <= 75
|| ${Group.Member[2].PctMana} <= 75 || ${Group.Member[3].PctMana} <=
75 || ${Group.Member[4].PctMana} <= 75 || ${Group.Member[5].PctMana} <= 75
OneBelow70: >-
${Group.Member[0].PctMana} <= 70 || ${Group.Member[1].PctMana} <= 70
|| ${Group.Member[2].PctMana} <= 70 || ${Group.Member[3].PctMana} <=
70 || ${Group.Member[4].PctMana} <= 70 || ${Group.Member[5].PctMana} <= 70
OneBelow65: >-
${Group.Member[0].PctMana} <= 65 || ${Group.Member[1].PctMana} <= 65
|| ${Group.Member[2].PctMana} <= 65 || ${Group.Member[3].PctMana} <=
65 || ${Group.Member[4].PctMana} <= 65 || ${Group.Member[5].PctMana} <= 65
OneBelow60: >-
${Group.Member[0].PctMana} <= 60 || ${Group.Member[1].PctMana} <= 60
|| ${Group.Member[2].PctMana} <= 60 || ${Group.Member[3].PctMana} <=
60 || ${Group.Member[4].PctMana} <= 60 || ${Group.Member[5].PctMana} <= 60
OneBelow55: >-
${Group.Member[0].PctMana} <= 55 || ${Group.Member[1].PctMana} <= 55
|| ${Group.Member[2].PctMana} <= 55 || ${Group.Member[3].PctMana} <=
55 || ${Group.Member[4].PctMana} <= 55 || ${Group.Member[5].PctMana} <= 55
OneBelow50: >-
${Group.Member[0].PctMana} <= 50 || ${Group.Member[1].PctMana} <= 50
|| ${Group.Member[2].PctMana} <= 50 || ${Group.Member[3].PctMana} <=
50 || ${Group.Member[4].PctMana} <= 50 || ${Group.Member[5].PctMana} <= 50
OneBelow45: >-
${Group.Member[0].PctMana} <= 45 || ${Group.Member[1].PctMana} <= 45
|| ${Group.Member[2].PctMana} <= 45 || ${Group.Member[3].PctMana} <=
45 || ${Group.Member[4].PctMana} <= 45 || ${Group.Member[5].PctMana} <= 45
OneBelow40: >-
${Group.Member[0].PctMana} <= 40 || ${Group.Member[1].PctMana} <= 40
|| ${Group.Member[2].PctMana} <= 40 || ${Group.Member[3].PctMana} <=
40 || ${Group.Member[4].PctMana} <= 40 || ${Group.Member[5].PctMana} <= 40

Character1:
UseFeather1:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow65]}
UseHorn1:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow95]}
UseCircle1:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow95]}

Character2:
UseFeather2:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow60]}
UseHorn2:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow90]}
UseCircle2:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow90]}

Character3:
UseFeather3:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow55]}
UseHorn3:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow85]}
UseCircle3:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow85]}

Character4:
UseFeather4:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow50]}
UseHorn4:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow80]}
UseCircle4:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow80]}

Character5:
UseFeather5:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow45]}
UseHorn5:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow75]}
UseCircle5:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow75]}

Character6:
UseFeather6:
  action: "/useitem Unified Phoenix Feather"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow40]}
UseHorn6:
  action: "/useitem Miniature Horn of Unity"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotBlessed]} && ${React.Global[FeatherReady]} && ${React.Global[OneBelow70]}
UseCircle6:
  action: "/useitem Rage of Rolfron"
  condition: >-
      ${React.Global[CheckStatus]} && ${React.Global[NotCoP]} && ${React.Global[RageReady]} && ${React.Global[OneBelow70]}
you already posted this in another thread. here

asking the same thing in 2 locations is frowned upon. now you're going to have people trying to help you in two places.
 
you already posted this in another thread. here

asking the same thing in 2 locations is frowned upon. now you're going to have people trying to help you in two places.

well... nobody said anything, i will be happy to delete the other one if it helps.
 
FYI, I play on Rizlona

I have the following react which works wonders:


Code:
DivineArb:
    action: "/multiline ; /stopcast ; /alt act 169 ;/G --> Divine Arbitration"
    condition: >-
      ${Me.AltAbilityReady[169]}  && ${Group.Injured[35]} == 1

I recently acquired my 1.5 and wanted to duplicate this functionality to do the shield first. So I modified the react thusly:


Code:
DivineArb:
    action: "/multiline ; /stopcast ; /alt act 169 ;/G --> Divine Arbitration"
    condition: >-
      ${Me.AltAbilityReady[169]} && !${Me.ItemReady[Harmony of the Soul]}
      && ${Group.Injured[35]} == 1

And that react operates perfectly if the clicky on the shield is not ready. However I added this one:

Code:
  Harmonic:
    action: >-
      /multiline ; /stopcast ; /useitem "Harmony of the Soul" ;/G --> Harmonic Balance
    condition: >-
      ${Me.ItemReady[Harmony of the Soul]} &&  ${Group.Injured[35]} == 1

It fires, but it loops endlessly until the runaway loop threshold hits. I tried some /timed commands in various places in the condition, but it seems to have no effect on the react polling time. The shield has a cast time of .8 (whereas Divine Arbitration is instant)

Any ideas?
 
Love this plugin, used on all my toons, I have close to 40 reacts now.

One thing I wish I could do with it is toggle a react to save hot buttons.

Does anyone know how I would turn them on and off with the same command?

/if ${React.Enabled[reactname]} == TRUE then /react disable reactname || /if ${React.Enabled[reactname]} == FALSE then /react enable reactname
 
I am trying to get this react to work and it is not firing off. I am sure I am doing something wrong here

INI:
drinal:
  Beastlord:
    NewMATank: disabled
    PetTank: enabled
    PetAssist: enabled
  OffTank:
    NewMATank: enabled
  Tank:
    NewMATank: disabled
  Healer:
    NewMATank: disabled
  Bard:
    NewMATank: disabled
  Zerker:
    NewMATank: disabled
globals:
  NewTankToon: OffTank
reacts:
  NewMATank:
    action: >-
      /multiline ; /grouproles set ${React.Global[NewTankToon]} 2 ; /dex
      ${React.Global[NewTankToon]} /docommand /${Me.Class.ShortName} mode tank
    condition: >-
      (${Group.MainAssist.Dead} || ${Group.MainAssist.Linkdead}) && ${Group.Member[0].Leader}
      && !${Group.Member[${React.Global[NewTankToon]}].MainAssist} && ${Me.CombatState.Equal[combat]}
  PetTank:
    action: >-
      /pet taunt on
    condition: >-
      /if (${Spawn[${Group.MainTank} pccorpse radius 40].ID}>0 && ${Me.Pet.Taunt}==False)
  PetAssist:
    action: >-
      /pet taunt off
    condition: >-
      /if (${Spawn[${Group.MainTank}  pccorpse radius 40].ID}==NULL && ${Me.Pet.Taunt}==True)
sleep_frames: 15
 
I am trying to get this react to work and it is not firing off. I am sure I am doing something wrong here

INI:
      /if (${Spawn[${Group.MainTank} pccorpse radius 40].ID}>0 && ${Me.Pet.Taunt}==False)

      /if (${Spawn[${Group.MainTank}  pccorpse radius 40].ID}==NULL && ${Me.Pet.Taunt}==True)
First off, you don't use /if statements in your mq2react.yaml file. The "condition" is always treated as an "if" scenario.

Second, it appears as though you're trying to compare boolean variables to strings. That type of mismatch is never going to resolve to something useful. Booleans are in and of themselves a true/false indicator, so you can simply drop the ==NULL and the ==TRUE bits.

Third, ${Spawn[].ID} returns an integer, so you can't compare it to a string like "NULL", so drop that bit. You don't need any comparison operators on these anyways. In that first line, drop the >0 and in the second line, use !${Spawn[].ID} (note the exclamation point, that's the important bit, it means "opposite of w/e variable comes next").
 
INI:
  PetAssist:
    action: /pet taunt off
    condition: "(!${Spawn[${Group.MainTank} pccorpse radius 75].ID} && ${Me.Pet.Taunt})"
  PetTank:
    action: /pet taunt on
    condition: "(${Spawn[${Group.MainTank} pccorpse radius 75].ID} && !${Me.Pet.Taunt})"

So like this?
 
Is there a way to use a wildcard search to click and item that has roman numerals in the name - i.e Spider's bite? I have a lot of different levels of that I need to use up (i.e IX, XX etc etc) but I would rather not have a react with a bunch of conditionals using up CPU cycles / further slowing things
 
Is there a way to use a wildcard search to click and item that has roman numerals in the name - i.e Spider's bite? I have a lot of different levels of that I need to use up (i.e IX, XX etc etc) but I would rather not have a react with a bunch of conditionals using up CPU cycles / further slowing things
/useitem will accept partial matches
 
YAML:
invis:
    action: /alt activate 212
    condition: >-
      !${Me.Song[Evader's Invisibility].ID} && ${Me.PctMana} >=25 && ${Select[${Zone.ShortName}
      drogab_errand, greatdividetwo_mission]}
  selo:
    action: /alt activate 3704
    condition: >-
      !${Me.Buff[Selo's Accelerando].ID} && ${Me.PctMana} >=25 && ${Select[${Zone.ShortName}
      drogab_errand, greatdividetwo_mission]}


This I made for my bard that is being dragged through instances. Keep him Invis'd as well as keep Selo's on the rest of the group.

Edit: Noticed / found out you could also do this if using mq2Grind
Code:
invis:
    action: /alt activate 212
    condition: >-
      !${Me.Song[Evader's Invisibility].ID} && ${Me.PctMana} >=25 && ${Grind.Instance} >= 1
 
Last edited:
so i just tried to load mq2reacts and now im getting Error parsing mq2react configuration: Missing key line. Line 3: Enable

How to fix?
this is a fresh instal of mq2next lastest version
first time using mq2reacts on mq2next
 
Just one mq2react.yaml
Thanks for responding ...so there will just be a separate line with the toons name and their respective commands under their name? Also, do I need to write a hot key to cause the reaction for each event that I am trying to create? Meaning ...I am trying to figure out why I keep wiping on Shei at 2 to 5% with mostly 120 toons and a tank that is well geared with 490K HP and 9K AC. I saw the MQ2React for Shei and thought that might help me get past this so I can start harvesting Ore.
 
Last edited:
write 1 react,
write it in a class agnostic way
enable it for the toons (their name) specifically

react config file is set up in 3 sections
1. global section (like definitions for combat, invis etc)
2. the reacts (action and trigger), and
3. the toons each react is enabled for

for shei specifically MQ2React might not be the best tool to use, coz, shaman, wizards, clerics, bards, enchanters, and necros can bane those alien fookers. all of those classes have spells or AA and they are all different names and numbers ... so unless you work out a generic definition in the global sections for 'root' .. then .. use a Lua prhaps
 
FYI, I play on Rizlona

I have the following react which works wonders:


Code:
DivineArb:
    action: "/multiline ; /stopcast ; /alt act 169 ;/G --> Divine Arbitration"
    condition: >-
      ${Me.AltAbilityReady[169]}  && ${Group.Injured[35]} == 1

I recently acquired my 1.5 and wanted to duplicate this functionality to do the shield first. So I modified the react thusly:


Code:
DivineArb:
    action: "/multiline ; /stopcast ; /alt act 169 ;/G --> Divine Arbitration"
    condition: >-
      ${Me.AltAbilityReady[169]} && !${Me.ItemReady[Harmony of the Soul]}
      && ${Group.Injured[35]} == 1

And that react operates perfectly if the clicky on the shield is not ready. However I added this one:

Code:
  Harmonic:
    action: >-
      /multiline ; /stopcast ; /useitem "Harmony of the Soul" ;/G --> Harmonic Balance
    condition: >-
      ${Me.ItemReady[Harmony of the Soul]} &&  ${Group.Injured[35]} == 1

It fires, but it loops endlessly until the runaway loop threshold hits. I tried some /timed commands in various places in the condition, but it seems to have no effect on the react polling time. The shield has a cast time of .8 (whereas Divine Arbitration is instant)

Any ideas?
Try adding ' ' around this line: /multiline ; /stopcast ; /useitem "Harmony of the Soul" ;/G --> Harmonic Balance

I've seen react not respond well with internal "" in the multilines.

'/multiline ; /stopcast ; /useitem "Harmony of the Soul" ;/G --> Harmonic Balance'
 
FYI, I play on Rizlona

I have the following react which works wonders:


Code:
DivineArb:
    action: "/multiline ; /stopcast ; /alt act 169 ;/G --> Divine Arbitration"
    condition: >-
      ${Me.AltAbilityReady[169]}  && ${Group.Injured[35]} == 1

I recently acquired my 1.5 and wanted to duplicate this functionality to do the shield first. So I modified the react thusly:


Code:
DivineArb:
    action: "/multiline ; /stopcast ; /alt act 169 ;/G --> Divine Arbitration"
    condition: >-
      ${Me.AltAbilityReady[169]} && !${Me.ItemReady[Harmony of the Soul]}
      && ${Group.Injured[35]} == 1

And that react operates perfectly if the clicky on the shield is not ready. However I added this one:

Code:
  Harmonic:
    action: >-
      /multiline ; /stopcast ; /useitem "Harmony of the Soul" ;/G --> Harmonic Balance
    condition: >-
      ${Me.ItemReady[Harmony of the Soul]} &&  ${Group.Injured[35]} == 1

It fires, but it loops endlessly until the runaway loop threshold hits. I tried some /timed commands in various places in the condition, but it seems to have no effect on the react polling time. The shield has a cast time of .8 (whereas Divine Arbitration is instant)

Any ideas?
Code:
 Harmonic:
    action: >-
      /multiline ; /stopcast ; /casting "Harmony of the Soul" ;/G --> Harmonic Balance
    condition: >-
      ${Me.ItemReady[Harmony of the Soul]} && !${Me.AltAbilityReady[169]} && ${Group.Injured[75]} >=2 && !${Me.Casting.ID} || ${Group.Injured[40]} > 0 && ${Me.ItemReady[Harmony of the Soul]} && !${Me.AltAbilityReady[169]} && !${Me.Casting.ID}

Try this out.
 
Last edited:
Here is my .yaml file for Shei Venatras mission. #1 they never casted anything ....and number two ....my group just sat on the ground and didn't attack. CWTN Plugins were used on all but the Bard, they were all set to assist and I could not even get them to engage manually. Been away from the game awhile and was wondering if someone might know what went wrong. ** Do I have do anything on each individual toon other and load MQ2React? Thanks!
 
Here is my .yaml file for Shei Venatras mission. #1 they never casted anything ....and number two ....my group just sat on the ground and didn't attack. CWTN Plugins were used on all but the Bard, they were all set to assist and I could not even get them to engage manually. Been away from the game awhile and was wondering if someone might know what went wrong. ** Do I have do anything on each individual toon other and load MQ2React? Thanks!
i edited out your picture as it had some toon names in them. you really want to share the actual info and not a screenshot of the info (and definitely remove toon names)

I'd recommend using a Lua instead there are several in my > Shei Thread <

or use > LUA event manager <

react isn't really designed for scripting like this, and things can go sideways
 
i edited out your picture as it had some toon names in them. you really want to share the actual info and not a screenshot of the info (and definitely remove toon names)

I'd recommend using a lua instead there are several in my > Shei Thread <

or use > LUA event manager <

react isn't really designed for scripting like this, and things can go sideways

Are you still thinking about a Lua Events librart subfolder? I get the feeling that if people how the ability to pull events up like KA INI you might find a lot more people playing / leveraging Lua in general.
 
Are you still thinking about a Lua Events librart subfolder? I get the feeling that if people how the ability to pull events up like KA INI you might find a lot more people playing / leveraging LUA in general.
I am really not all that familiar with Lua Programming so I am going to have to look into it and how it works.
 
Here's the idea and the goal...

120 mage is powerleveling alts/friends at an outdoor camp using AoE spells. Sends pet in to round up 3-8 mobs at a time. My mage, using AoE spells sometimes draws aggro from 1-4 mobs at a time. If I'm using KA, my mage pet (which is the tank) won't switch to the mobs beating on my mage without my intervention. I have my /pet attack (with taunt) on a hotkey (F12, for example). Am I on the right track to achieving the following:

Mage pulls aggro > starts getting hit > react conditions press the /pet attack hotkey for each true condition (NPC has 100% aggro on me) > pet targets the mobs on the extended targets list that have 100% aggro on the mage > pet regains aggro

INI:
Pet Taunt:    
   action: /multiline ; /keypress F12
   condition: >-
      ${Me.XTarget}>1
      && (${Me.XTarget[1].Type.Equal[NPC]} && ${Me.XTarget[1].PctAggro}<100
      || ${Me.XTarget[2].Type.Equal[NPC]} && ${Me.XTarget[2].PctAggro}<100
      || ${Me.XTarget[3].Type.Equal[NPC]} && ${Me.XTarget[3].PctAggro}<100
      || ${Me.XTarget[4].Type.Equal[NPC]} && ${Me.XTarget[4].PctAggro}<100
      || ${Me.XTarget[5].Type.Equal[NPC]} && ${Me.XTarget[5].PctAggro}<100
      || ${Me.XTarget[6].Type.Equal[NPC]} && ${Me.XTarget[6].PctAggro}<100
      || ${Me.XTarget[7].Type.Equal[NPC]} && ${Me.XTarget[7].PctAggro}<100||
      ${Me.XTarget[8].Type.Equal[NPC]} && ${Me.XTarget[8].PctAggro}<100
      || ${Me.XTarget[9].Type.Equal[NPC]} && ${Me.XTarget[9].PctAggro}<100
      || ${Me.XTarget[10].Type.Equal[NPC]} && ${Me.XTarget[10].PctAggro}<100
      || ${Me.XTarget[11].Type.Equal[NPC]} && ${Me.XTarget[11].PctAggro}<100
      || ${Me.XTarget[12].Type.Equal[NPC]} && ${Me.XTarget[12].PctAggro}<100
      || ${Me.XTarget[13].Type.Equal[NPC]} && ${Me.XTarget[13].PctAggro}<100)

What else do I need to make this idea happen? Is it even possible? I've been trying to think through how to make this possible all day. I don't want to use 10-15 minute AAs that dump threat because this event happens nearly every pull (because I'm 120 blasting 104-108 mobs).
 
please don't duplicate post.

it becomes nearly impossible to help you if folks are talking to you in more than once place at the same time.


your use-case isn't a super great usecase for mq2react

react is more of like "do this response to thing in response to a specific thing".

this is going to make you spam f12

you'd be much better with a Lua script to handle the logic and behavior you're looking for
 
please don't duplicate post.

it becomes nearly impossible to help you if folks are talking to you in more than once place at the same time.


your use-case isn't a super great usecase for mq2react

react is more of like "do this response to thing in response to a specific thing".

this is going to make you spam f12

you'd be much better with a lua script to handle the logic and behavior you're looking for
Well, that's kind of why I was thinking MQ2React is perfect for this because I am trying to do a thing in response to another specific thing. When my mage draws aggro, I want my pet to switch to that target.

And yes, spamming F12 would be spamming pet attack on mobs that have 100% aggro on me, right?
 
Well, that's kind of why I was thinking MQ2React is perfect for this because I am trying to do a thing in response to another specific thing. When my mage draws aggro, I want my pet to switch to that target.
you're looking for it to swap targets, establish some aggro, and then swap again - this react is just smashing your f12 with flagrant disregard.

unless your f12 hotkey is some supermagic l337 hotkey of doom, i still think you'd be better off handling it with an actual script instead of action->response
 
you're looking for it to swap targets, establish some aggro, and then swap again - this react is just smashing your f12 with flagrant disregard.

unless your f12 hotkey is some supermagic l337 hotkey of doom, i still think you'd be better off handling it with an actual script instead of action->response
Hmm. Okay. I don't know Lua well enough for something like this, but thank you for the response.
 
Release MQ2React

Users who are viewing this thread

Back
Top
Cart