Welcome, Guest. Please login or register.
Did you miss your activation email?
February 07, 2023, 12:14:40 am *

Login with username, password and session length
Pages: [1] 2 3 4
Print
Author Topic: Quality of Life macro commands  (Read 32124 times)
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« on: February 25, 2018, 01:05:04 am »

I know there are a few how-to threads floating around the forums with some useful commands for MQ2, but I'm too lazy to go searching for them and bumping them with things I use, so I am just starting this thread to share some of the things I do with MQ2 to streamline my play experience.  I'll try to add things as I think of them to the thread.

First, mass pulling is a key tenant for progressing and looting all the corpses is an exercise in tedium.  I don't have any fancy loot macros other than my hotkey that targets a corpse and clicks the lootall button in the loot window.  I also put in a command to close the confirmation pop up window when a no loot item shows up on the corpse since I configure EQ to always ask me before looting no drop items.  This is a simple hotkey and has worked well enough so far for me, but as the pulls get larger and the corpses pile up, I tend to get super bored in checking corpse after corpse for gsoa, gss, plat bags or anything else worth keeping.  Most zones don't really present a problem because most have a scripted loot system that keeps most junk off the loot tables. 

But I was zone pulling T9 last week and when the last mob dies, it ends up being somewhere in the neighborhood of 350ish corpses of armor component ridden trash to loot.  It was honestly taking so long to loot the corpses that by the time I finished the mobs started respawning.  Mindlessly clicking loot over and over sucked enough, but never feeling like you're making progress was the biggest pain.  So, at the end of my loot key I added a command to pop up an alert telling me how many mobs I still needed to loot.  I don't know that anyone else finds looting as tedious as I do, but I find it somewhat therapeutic to see how many mobs I have left in the pile to loot so I'm going to post my hotkey code in case anyone else might find it useful.

Line 1: /tar corpse
Line 2: /loot
Line 3: /notify LootWnd LW_LootAllButton leftmouseup
Line 4: /notify ConfirmationDialogBox No_Button leftmouseup
Line 5: /popup ${SpawnCount[radius 70 corpse]} corpses left to loot

Hopefully someone can find this beneficial to their EZ QOL experience.  Feel free to reply to this post with things that you use to make the grind more tolerable.
Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #1 on: February 25, 2018, 01:30:23 am »

The syntax for creating and entering instances is pretty straightforward and easy to use, but since I am lazy I tend to set the enter syntax as an alias command for zones I constantly find myself making instances for as the old instances expire.

Alias is a text trigger command for MQ2, much like EZ has text trigger commands like /say aa, /say stats, etc.  MQ2 has a list of alias commands in the MacroQuest.ini file in your mq2 install folder, along with your active plugins, filters and some other stuff.  When you set an alias command, when mq2 sees the text in a chatbox, it executes the associated command.  The alias syntax is /alias [trigger text] [command to execute].  You can set whatever text you want as the trigger, but the command to execute must be some command that MQ2 will recognize and be able to execute.

So, using the alias command to make my access to instances works by typing the trigger text into chat. I have 3 alias commands for frozenshadow instances, one for solo, one for raid and one for guild.

When I type /frozensolo into my chat window and hit enter, my toon does /say enter solo dimurwar frozenshadow.  If I have a frozenshadow solo instance active, I port in and save the hassle of typing it out longhand.
When I type /frozenraid into my chat window and hit enter, my toon does /say enter raid dimurwar frozenshadow.  If I have a forzenshadow raid instance active, I port in and save the hassle of typing in out longhand.
You can probably figure out what happens when I type /frozenguild.

The alias command can be set from in game, but only the toon executing the command can use it right away. For this reason, general alias commands that you want all toons to have access to are best to set up with a /bcaa command so they all execute it and have access to it without having to relog.

Syntax for setting up an alias command is as follows: /alias [trigger text] [command to execute].  So to set up the /frozensolo command, I would use this format:
/alias /frozensolo /say enter solo dimurwar frozenshadow 
If I want to have all toons set it up at once, I just /bcaa it like:
/bcaa //alias /frozensolo /say enter solo dimurwar frozenshadow

Note that I intentionally use a forward slash in my trigger text.  I do this to avoid accidentally triggering the command when I am just chatting with someone.  You can do it without the slash, but I err on the side of caution.  You can see the /alias is telling mq2 that you are either adding a new /alias command or editing an existing one.  If mq2 sees that there is already an alias for /frozensolo, it updates that alias with the command to execute.  This is handy if you fat-finger it and mistype the command to execute, you don't have to delete anything it just overwrites itself. But once again, this isn't gamebreaking or anything though it does help streamline my playstyle.
Logged
synthaxx_17
Full Member
***
Posts: 124

rawr!


View Profile
« Reply #2 on: February 25, 2018, 09:34:37 pm »

Thanks Dim for this!

T9 is a pain when it comes to looting hehe
Logged

Ectheldir/Thoruz
(Alliance of the Savage)
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #3 on: February 26, 2018, 10:36:44 pm »

Another minor annoyance is the couple of low duration buffs that I use in normal gameplay and trying to keep them up, here's looking at you Kraken.  My assist hotkey is  massive, and I'm not going to go over everything that I use in it in one post, but I do have a command in it to check my buffs to see if Kraken is there.  If Kraken is not found AND my shaman (Trisdan) is within 70 units, I use a multiline command to tell my shaman to target me and cast spell slot 4 where Kraken is located along with a /popup command to indicate that it's been applied.  If Kraken is already up, nothing happens.  I could probably have it set to always refresh it on my assist call, but that seems pointless and excessive to do every few seconds.

/squelch /docommand ${If[!${Me.Buff[Spirit of the Kraken].ID} && ${Spawn[Trisdan].Distance3D}<70,/multiline ; /bct trisdan //target ${Me.Name} ; /bct trisdan //cast 4 ; /popup Krakening,]}

This bit of code can be modified easily enough for other buffs, like the druid regen line. For whatever reason, this one has a hard time evaluating multiple conditions so I used a nested if structure but it does the dirty work.

/squelch /docommand ${If[!${Me.Buff[Ancient: Druid].ID},${If[${Spawn[Dimurhippie].Distance3D}<220,/multiline ; /bct dimurhippie //target ${Me.Name} ; /bct dimurhippie //cast 1 ; /popup Ancient Druid Regen Applied,]},]}

The /squelch is there so I don't get spammed in the bccmd window every time it evaluates the if statement.  If you want to see it fire in your window each time it is run, just omit the squelch.



« Last Edit: February 26, 2018, 10:39:55 pm by Dimur » Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #4 on: February 28, 2018, 02:31:05 pm »

As much as I enjoy trying to figure all this mq2 code out, I realize most people probably either don't know what they need nor have the motivation to learn since very few come from a coding background.  Most people play EZ to get away from having to focus too hard on things they aren't motivated by.  So this next snippet is going to focus on something everyone on EZ should be familiar with again...social hotkeys.  I could post a long line of code and tell you where to copy and paste it and tell you how to execute it in game, but before I get ahead of myself and lose your interest I'm just going to show a hotkey you can use to track kill counts in T10.

This will check to see if you task window is open, if it isn't then it'll open it using the default keybind alt+q.  Then is checks your active quest list to see a quest that matches [IV: For].  If found, it clicks on that quest.  The next line again checks for a quest that matches [IV: For] and puts the task objective(s) into the bccmd window.  I do a second check for the quest before sending the objectives to the bccmd channel because if I didn't, it would send whatever quest I had highlighted's objectives.  Then this button executes the alt+q keypress again to close the window. No multilines, no nested if statements, just 4 simple lines to put into a social hotkey.

For the gnoll kill quest IV: For the Glory of Neriak:
Line 1: /if (!${Window[TaskWnd].Open}) /keypress alt+q
Line 2: /if ((${Window[TaskWnd].Child[TASK_TaskList].List[IV: For,2]}) /notify TaskWnd TASK_TaskList listselect ${Window[TaskWnd].Child[TASK_TaskList].List[IV: For,2]}
Line 3: /if ((${Window[TaskWnd].Child[TASK_TaskList].List[IV: For,2]}) /bc ${Window[TaskWnd].Child[TASK_TaskElementList].List[1,2]} Gnoll Kill Counter
Line 4: /if (${Window[TaskWnd].Open}) /keypress alt+q


Note: This will ONLY work for the specified quest.

The code can be cannibalized and used for other kill quests by simply changing the search parameters for what .List[ ] is looking for.

For the plagueborn kill quest QFI: Purge the Plagueborn:
Line 1: /if (!${Window[TaskWnd].Open}) /keypress alt+q
Line 2: /if (${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}) /notify TaskWnd TASK_TaskList listselect ${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}
Line 3: /if (${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}) /bc ${Window[TaskWnd].Child[TASK_TaskElementList].List[1,2]} Plaugeborn Kill Counter
Line 4: /if (${Window[TaskWnd].Open}) /keypress alt+q


For the



Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #5 on: February 28, 2018, 02:48:44 pm »

Now with this handy hotkey, you could keep it simple and have each character with their own so you can cycle to their window and click it whenever you wanted to see their progress.  Most people use /bca and /bcaa commands so they don't have to cycle to each toon to execute a command.  We can do the same thing with this hotkey!  If we add a little bit of code that's familiar (/bca, /bcaa) and a little bit of code that may not be familiar (/noparse and /squelch), we can have a good clean response from all your characters that have the quest you are checking progress on and the ones that are finished or don't have the quest won't litter the channel with any type of response.

/noparse is an MQ2 command that tells MQ2 to not try to parse the following line of text.  What this means is that if I /bcaa //say ${Me.Name}, MQ2 is going to parse that before it broadcasts it and every toon will say the name of the character the code was sent from.  If you prepend it with /noparse, then MQ2 sends the whole string to each character to parse before saying their own names.  So when I'm checking for a quest, I want each character to check their quest window to see if they have it.  Without using /noparse, I'm telling them all if I have the quest.

/squelch is an MQ2 command that tells MQ2 to hide this line of text from the bccmd window. These hotkeys while small, still send a pretty big string of code to evaluate and by default, your bccmd window will show you the command you are being sent to process.  All /squelch does is keep your bccmd window clean.  You can omit squelch if you want to send the result text in a different channel like guild, raid or whatever chat channel you have set up for it.

So we have our plagueborn tracker hotkey.  We want all toons with the plagueborn kill count quest to report their status, so we take this code:
Line 1: /if (!${Window[TaskWnd].Open}) /keypress alt+q
Line 2: /if (${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}) /notify TaskWnd TASK_TaskList listselect ${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}
Line 3: /if (${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}) /bc ${Window[TaskWnd].Child[TASK_TaskElementList].List[1,2]} Plaugeborn Kill Counter
Line 4: /if (${Window[TaskWnd].Open}) /keypress alt+q


...and we prepend each line with /noparse /squelch and /bcaa it to all toons
Line 1: /noparse /squelch /bcaa //if (!${Window[TaskWnd].Open}) /keypress alt+q
Line 2: /noparse /squelch /bcaa //if (${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}) /notify TaskWnd TASK_TaskList listselect ${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}
Line 3: /noparse /squelch /bcaa //if (${Window[TaskWnd].Child[TASK_TaskList].List[QFI: Purge,2]}) /bc ${Window[TaskWnd].Child[TASK_TaskElementList].List[1,2]} Plaugeborn Kill Counter
Line 4: /noparse /squelch /bcaa //if (${Window[TaskWnd].Open}) /keypress alt+q

Note: Since we are using the /bcaa command we also have to use an extra slash in front of the /if so MQ2 knows that it is executing a /docommand.  This should be familiar to anyone using /bc commands.

Voila!
Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #6 on: March 06, 2018, 02:14:44 pm »

I recently modified my loot hotkey because while doing some mass pulling/looting, I realized that I find myself having to loot a pile then move a little to loot the next stack of corpses.  It's not overly annoying if all the corpses are right at your feet, but with mobs warping right onto you when they encounter pathing issues means you need to back up to be able to hit them since they warp to a point slightly behind you.  Instead of constantly nudging up to keep looting, I just made the logic check to see if there is a corpse, then it checks to see if the corpse is close enough to loot (I set it at < 10 units and it seems to work).  If the mob is close enough, it loots and if it's too far away, as long as it's not further than 100 units away, the stick command is executed with a value of 5 and a message is sent to the bc channel.

Line 1: /tar corpse
Line 2: /docommand ${If[${Target.Distance}<10,/loot,/multiline ; /docommand ${If[${Target.Distance}<100,/stick 5,]} ; /bc Moving closer to corpse]}
Line 3: /notify LootWnd LW_LootAllButton leftmouseup
Line 4: /notify ConfirmationDialogBox No_Button leftmouseup
Line 5: /popup ${SpawnCount[radius 70 corpse]} corpses left to loot
« Last Edit: April 03, 2018, 05:10:42 pm by Dimur » Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #7 on: March 20, 2018, 02:47:57 pm »

I tend to hoard my AA points on alts until they get enough to bother with a good turn in, but I hate having to cycle through all of them after /bca //say aa to check where they are at.  I made a simple macro to parse out the AA from the ingame  command and broadcast it to the bccmd window.  You can change the /bc to /say, /rs or whatever you want but essentially it's just an easy way to display a toon's count without tabbing to their window to see.  You can copy/paste the code below into a text file and save it as countaa.mac or anything easy enough to remember.  Then to load it in game and use it, /mac countaa and /say aa.  \
Obviously to make all toons give their total you

/bca //mac countaa

and then
/bca //say aa

Code:
#Event CountAA "Unspent AA: #1#"



Sub Main()
:Primeloop
/doevents
/goto :Primeloop
/return

|===================================================
|  SUB: Event_CountAA
|===================================================
Sub Event_CountAA(Line, AACount)
/bc Total AA: ${AACount}
/return

Honestly, I'm not sure if anyone finds these posts useful at all but am happy to keep adding things as I think of them if people actually give a shit.  Feedback is welcome, questions will be answered and any suggestions or requests would give me something else to work on.
Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #8 on: March 20, 2018, 03:03:55 pm »

Someone in game suggested that the max HP on /say hp be added as well, so added it in the code below.

Code:
#Event CountAA "Unspent AA: #1#"
#Event MaxHP "Max HP: #1#"



Sub Main()
:Primeloop
/doevents
/goto :Primeloop
/return

|===================================================
|  SUB: Event_CountAA
|===================================================
Sub Event_CountAA(Line, AACount)
/bc Total AA: ${AACount}
/return

|===================================================
|  SUB: Event_MaxHP
|===================================================
Sub Event_MaxHP(Line, HPCount)
/bc Total HP: ${HPCount}
/return

Logged
Sarthin
Hero Member
Sr. Member
*****
Posts: 339

Common sense is not so common


View Profile
« Reply #9 on: March 20, 2018, 07:42:01 pm »

I just got back after a few years MIA and all this is really helpful to me, Dimur.
Learned quite a bit after going through and trying out your stuff.
Keep it coming!  Smiley

PS: Finding it really sweet to add as much as possible to macro's, rather than to type all stuff in on hotkeys.
« Last Edit: June 18, 2022, 07:43:58 am by Sarthin » Logged

Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #10 on: March 20, 2018, 09:52:17 pm »

Thanks Sarthin!
So it occurred to me that since I am parsing out the AA total from the /say aa command, I could take that value and assign it to a global variable in the macro.  Once you have that, you can use a custom UI piece or HUD element to display it and just update it every time the macro sees another  AA exp point gain message.  I haven't had much time to play with it, but each toon running the macro assigns their own global variable and can keep their displayed AA total accurate.  The appended code is below and to display it you just call the variable like any TLO for MQ2...${CurrentAA}.  If you start the macro and kill enough to get an AA point, /echo ${CurrentAA} should reflect the current AA you have.

Code:
#Event CountAA "Unspent AA: #1#"
#Event MaxHP "Max HP: #1#"
#Event CurrentAA "#*# now have #1# ability points."



Sub Main()
:Primeloop
/doevents
/goto :Primeloop
/return

|===================================================
|  SUB: Event_CountAA
|===================================================
Sub Event_CountAA(Line, AACount)
/bc Total AA: ${AACount}
/return

|===================================================
|  SUB: Event_MaxHP
|===================================================
Sub Event_MaxHP(Line, HPCount)
/bc Total HP: ${HPCount}
/return

|===================================================
|  SUB: Event_CurrentAA
|===================================================
Sub Event_CurrentAA(Line, WhatsMyAA)
/varset CurrentAA ${WhatsMyAA}
/return


Putting it in a UI piece is a bit more involved than the HUD, but either way should work to display it for you.  Again, this is only going to be accurate for the toon whose screen you are on.  Monk with 100k aa will show their own count and Warrior with 200k aa will show his own count, etc. I suppose you could make each toon send their count total to the requester then parse it out and display it but that'd be pretty verbose and quite  likely cause incremental lag issues for each toon sending the info and having it parsed.

tl;dr This works fine to keep your current AA displayed on your screen, use the /bca say aa command to have each toon tell what their respective counts are.
Logged
Sarthin
Hero Member
Sr. Member
*****
Posts: 339

Common sense is not so common


View Profile
« Reply #11 on: March 21, 2018, 05:11:41 am »

Would be nice to incorporate it with the "bog control center", or any other UI addon that displays characters status.
Logged

Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #12 on: March 21, 2018, 10:01:37 am »

Already incorporated it into my player window...

Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #13 on: March 27, 2018, 03:49:15 pm »

I've recently refactored some of my T10 progression tracking aliases to remove some of the spam where characters not working on certain things would respond with zero counts on tokens, etc.  I get confused with what toon needs to loot what token when I've been putzing around flagging another group in T10 crap, so these commands checks to see if anyone has at least one of the corresponding tokens in their inventory or bank and if so, they respond with their counts.  If they don't have any, I just don't have them respond at all because otherwise all the toons that are done with all 3 armor sets would respond with their zero counts.  I already know who the new gimps progressing are and if they don't respond I know that they need to loot that type of armor token.  You can paste this code on a social hotkey or set up an alias command for it, I'm just partial to alias commands because I prefer keyboarding over mousing.

Gnoll token counter:
Code:
/noparse /bcaa //docommand ${If[(${FindItemCount[indigo vanguard]} + ${FindItemBankCount[indigo vanguard]}) > 0,/noparse /bc ${FindItemCount[indigo vanguard]} in inventory and ${FindItemBankCount[indigo vanguard]} in bank,]}

Orc token counter:
Code:
/noparse /bcaa //docommand ${If[(${FindItemCount[faydwer alliance]} + ${FindItemBankCount[faydwer alliance]}) > 0,/noparse /bc ${FindItemCount[faydwer alliance]} in inventory and ${FindItemBankCount[faydwer alliance]} in bank,]}

Sarnak token counter:
Code:
/noparse /bcaa //docommand ${If[(${FindItemCount[cabilis foreign]} + ${FindItemBankCount[cabilis foreign]}) > 0,/noparse /bc ${FindItemCount[cabilis foreign]} in inventory and ${FindItemBankCount[cabilis foreign]} in bank,]}

Logged
Dimur
Hero Member
Hero Member
*****
Posts: 699


View Profile
« Reply #14 on: March 27, 2018, 04:11:21 pm »

Here's code that checks all toons to see if they have a max ROA and if not, they respond in the /bc channel what their ring status is.  Yes, pretty useless but I like to know where my gimps are on it.

ROA checker
Code:
/noparse /bca //if (${Int[${FindItem[Ring of the Ages].ID}]} != 117000) /squelch /bca //echo ${Me.Name} ${FindItem[Ring of the Ages].Name}
Logged
Pages: [1] 2 3 4
Print
Jump to:  

Recent

Stats

Members
  • Total Members: 6036
  • Latest: theSpyr
Stats
  • Total Posts: 64355
  • Total Topics: 4991
  • Online Today: 124
  • Online Ever: 8678
  • (December 19, 2022, 02:32:09 pm)
Users Online
Users: 0
Guests: 69
Total: 69
TinyPortal v1.0 beta 4 © Bloc