Post your Holyshits and Downshits!

How do u check to see if the mob already has a debuff? For example, i want to make a holy that snares. Thx in advance.
 
How do u check to see if the mob already has a debuff? For example, i want to make a holy that snares. Thx in advance.

${Target.Snared} is what your after I believe

Petes TLO builder is great for this stuff, see attached excel sheet. Just put in what your after, in this case would be Target, then Snared, click Preview TLO and voilà.
 

Attachments

  • TLO.xlsm
    392 KB · Views: 46
  • Love
Reactions: EQDAB
My first attempt.
PAL holyshits to keep a healing mod on. Cycles between Armor of the Inquisitor, BP clicky, and Epic 2.0 clicky to keep healing mod on indefinitely during combat.

holyflag1=1
holyshit1=/if (${Me.AltAbilityReady[Armor of the Inquisitor]} && !${Me.Buff[Rousing Zeal].ID} && !${Me.Song[Flames of the Valiant].ID}) /casting "Armor of the Inquisitor" alt
holyflag2=1
holyshit2=/if (${Cast.Ready[Snowbound Exarch Breastplate]} && !${Me.Song[Armor of the Inquisitor XXIV].ID} && !${Me.Song[Flames of the Valiant ].ID} && !${Me.AltAbilityReady[Armor of the Inquisitor]}) /casting "Snowbound Exarch Breastplate"|Item
holyflag3=1
holyshit3=/if (${Cast.Ready[Nightbane, Sword of the Valiant]} && !${Me.Song[Armor of the Inquisitor XXIV].ID} && !${Me.Buff[Rousing Zeal].ID} && !${Me.AltAbilityReady[Armor of the Inquisitor]} && !${Cast.Ready[Snowbound Exarch Breastplate]}) /casting "Nightbane, Sword of the Valiant"|Item
 
  • Like
Reactions: EQDAB
Anyone have a holyshit for SK Purity of death? I tried searching but not coming up with anything.
 
  • Like
Reactions: EQDAB
I am trying to be clever and work out some ideas myself. Here is what I copied and combined from several different Holyshits into one idea.

If it is a valid mob and the mob's level is higher than mine and we are fighting and it has more than 99% HP then it will do one thing, wait, do the second thing, wait, then do the third thing. I am trying to do a few things when my puller grabs a yellow or red con. I was also thinking of changing the level check with ${Target.Named}

holyflag0=1
holyshit0=/if (${Target.ID} && ${Target.Level}>${Me.Level} && ${Me.Combat} && ${Target.PctHPs}>=99) /multiline ; /do one thing ; /timed 5 ; /do the second thing ; /timed 5 ; /do the last thing

I haven't seen it work yet so I thought I would ask for advice and try to explain what I am trying to do.

Thank you
 
  • Like
Reactions: EQDAB
I was able to work through the IF statement logic and the /timed piece with more searching. I need to rethink what is will actually happen once the IF statement logic is TRUE. The goal was to have this event only happen once (the reason I thought the HP>=99 in the IF statement would work) but since the IF statement is TRUE when pulling the mob, it spams until the HP of the mobs drops to 98.
 
  • Like
Reactions: EQDAB
Esadair:

MQ2Melee was an amazing plugin that was ahead of its time with respect to getting characters to perform many combat specific abilities.

The Holy/Downshits offer some customization but they are not really good for general purpose logic.

Its been a while since I did a deep dive on using MQ2Melee but from what I recall, the MQ2Melee framework will evaluate the next holy/downshit in the list. If your game client is running at 30 fps then it will take 1 full second to process 30 shits. When all shits are processed it then restarts at the beginning of the loop.

Lets say you have a single holyshit:

holyshit1=/disc "throw stone"

Assuming my client is running at 30 fps, when I am in combat MQ2Melee would execute:

/disc "throw stone"
/disc "throw stone"
/disc "throw stone"
/disc "throw stone"

over and over once every frame.

This is why you have to wrap your shits with " /if (condition) do something" type blocks.

In your case you are spamming the client with :

/if (${Target.ID} && ${Target.Level}>${Me.Level} && ${Me.Combat} && ${Target.PctHPs}>=99) /multiline ; /do one thing ; /timed 5 ; /do the second thing ; /timed 5 ; /do the last thing

over and over and over ...

---------------------------------------------------------------------

Your best bet is to write your logic either in a macro or lua script. If you absolutely don't want to go that route then you *CAN* force the code to be done in a shit but its really not pretty.

Code:
sub main
   /declare LastTarget int local 0
   /while (1) {
      /if ( ${Target.ID}!=${LastTarget}) {
         /varset LastTarget ${Target.ID}
         |-- Put your logic here.
         /if (${Target.ID} && ${Target.Level}>${Me.Level} && ${Me.Combat} && ${Target.PctHPs}>=99) {
              | do something
              /delay 5
              | do 2nd thing
              /delay 5
              | do last thing
          }
  }
/return

Now if I was REALLY determined to make this into something that run as a holy shit ( which is a really really bad idea ) you would need to convert each part of the macro:

Holyshit1=/if (!${Defined[LastTarget]}) /declare LastTarget global 0
Holyshit2=/if (${Target.ID}!=${LastTarget}&&${Target.ID}) ____ monsterously long /multiline.
 
Last edited:
  • Like
  • Haha
Reactions: EQDAB and esadair
Esadair:

MQ2Melee was an amazing plugin that was ahead of its time with respect to getting characters to perform many combat specific abilities.

The Holy/Downshits offer some customization but they are not really good for general purpose logic.

Its been a while since I did a deep dive on using MQ2Melee but from what I recall, the MQ2Melee framework will evaluate the next holy/downshit in the list. If your game client is running at 30 fps then it will take 1 full second to process 30 shits. When all shits are processed it then restarts at the beginning of the loop.

Lets say you have a single holyshit:

holyshit1=/disc "throw stone"

Assuming my client is running at 30 fps, when I am in combat MQ2Melee would execute:

/disc "throw stone"
/disc "throw stone"
/disc "throw stone"
/disc "throw stone"

over and over once every frame.

This is why you have to wrap your shits with " /if (condition) do something" type blocks.

In your case you are spamming the client with :

/if (${Target.ID} && ${Target.Level}>${Me.Level} && ${Me.Combat} && ${Target.PctHPs}>=99) /multiline ; /do one thing ; /timed 5 ; /do the second thing ; /timed 5 ; /do the last thing

over and over and over ...

---------------------------------------------------------------------

Your best bet is to write your logic either in a macro or lua script. If you absolutely don't want to go that route then you *CAN* force the code to be done in a shit but its really not pretty.

Code:
sub main
   /declare LastTarget int local 0
   /while (1) {
      /if ( ${Target.ID}!=${LastTarget}) {
         /varset LastTarget ${Target.ID}
         |-- Put your logic here.
         /if (${Target.ID} && ${Target.Level}>${Me.Level} && ${Me.Combat} && ${Target.PctHPs}>=99) {
              | do something
              /delay 5
              | do 2nd thing
              /delay 5
              | do last thing
          }
  }
/return

Now if I was REALLY determined to make this into something that run as a holy shit ( which is a really really bad idea ) you would need to convert each part of the macro:

Holyshit1=/if (!${Defined[LastTarget]}) /declare LastTarget global 0
Holyshit2=/if (${Target.ID}!=${LastTarget}&&${Target.ID}) ____ monsterously long /multiline.
Thank you for the input! Looks like I have both some thinking to do and some research!
 
  • Like
Reactions: EQDAB
Trying to create a HS to cast Knifeplay Discipline for a rogue. But it doesn't stack with Rogue's Fury. Doesn't seem to work with what i came up with.. any suggestions?

holyshit1=/if (${Melee.Combat} && ${Window[CombatAbilityWnd].Child[CAW_CombatEffectLabel].Text.Equal[No Effect]} && ${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && ${Spell[Knifeplay Discipline Rk. II].Stacks} /disc Knifeplay Discipline Rk. II
 
  • Like
Reactions: EQDAB
holyshit1=/if ( ${Melee.Combat} && ${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && ${Bool[!${Me.ActiveDisc}]} && !${Me.Song[Rogue's Fury].ID}) /disc "${Me.CombatAbility[Knifeplay Discipline].RankName}"


or maybe
holyshit1=/if (${Melee.Combat} && ${Window[CombatAbilityWnd].Child[CAW_CombatEffectLabel].Text.Equal[No Effect]} && ${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && ${Me.CombatAbility[Knifeplay Discipline Rk. II].Stacks} /disc Knifeplay Discipline Rk. II
 
  • Like
Reactions: EQDAB
holyshit1=/if ( ${Melee.Combat} && ${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && ${Bool[!${Me.ActiveDisc}]} && !${Me.Song[Rogue's Fury].ID}) /disc "${Me.CombatAbility[Knifeplay Discipline].RankName}"


or maybe
holyshit1=/if (${Melee.Combat} && ${Window[CombatAbilityWnd].Child[CAW_CombatEffectLabel].Text.Equal[No Effect]} && ${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && ${Me.CombatAbility[Knifeplay Discipline Rk. II].Stacks} /disc Knifeplay Discipline Rk. II
unfortunately neither of those work either
 
  • Sad
Reactions: EQDAB
Anyone have a downshit for the Fungal Shrieker Spore Familiar, tried many times and just cant get it to work
 
  • Like
Reactions: EQDAB
holyshit1=/if (${Me.CombatAbilityReady[Knifeplay Discipline]} && (${Melee.Combat} && !${Me.Song[Rogue's Fury XXIII].ID}) !${Me.Invis}) /disc Knifeplay Discipline

ok it work's now but constantlly keeps spamming it. any idea why it keeps trying to fire when disc is not ready?
 
  • Like
Reactions: EQDAB
holyshit1=/if (${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && (${Melee.Combat} && !${Me.Song[Rogue's Fury XXIII].ID}) !${Me.Invis}) /disc Knifeplay Discipline

or

holyshit1=/if (${Me.CombatAbilityReady[${Spell[Knifeplay Discipline].RankName}]} && (${Melee.Combat} && !${Me.Song[Rogue's Fury XXIII].ID}) !${Me.Invis}) /disc Knifeplay Discipline
 
  • Like
Reactions: EQDAB
Trying to create a HS to cast Knifeplay Discipline for a rogue. But it doesn't stack with Rogue's Fury. Doesn't seem to work with what i came up with.. any suggestions?

holyshit1=/if (${Melee.Combat} && ${Window[CombatAbilityWnd].Child[CAW_CombatEffectLabel].Text.Equal[No Effect]} && ${Me.CombatAbilityReady[Knifeplay Discipline Rk. II]} && ${Spell[Knifeplay Discipline Rk. II].Stacks} /disc Knifeplay Discipline Rk. II

When you are wondering how a holyshit/downshit evals, echo the TLO. /echo ${meleemvs[holyshit1]}

I notice you have no closing ) on your holyshit, is that a typo here? If not, that would be one reason.

Also, while you can certainly check the test for No Effect, it would be easier just to replace that Window TLO check with: !${Melee.DiscID}
 
  • Love
Reactions: EQDAB
downshit2=/if (${Spell[Familiar: Fungal Shreiker Spore].Stacks} && !${Me.Buff[Familiar: Fungal Shrieker Spore].ID} && !${Me.Moving} && !${Me.Invis}) /useitem Fungal Shrieker Spore

this is what i have thus far , im sure it is completely wrong if anyone can help a newb out id appreciate it thanks
 
  • Like
Reactions: EQDAB
downshit2=/if (${Spell[Familiar: Fungal Shreiker Spore].Stacks} && !${Me.Buff[Familiar: Fungal Shrieker Spore].ID} && !${Me.Moving} && !${Me.Invis}) /useitem Fungal Shrieker Spore

this is what i have thus far , im sure it is completely wrong if anyone can help a newb out id appreciate it thanks

Don't be so sure, if not it's dang close and impressive as a 1st try. An echo would tell you. Try, "When you are wondering how a holyshit/downshit evals, echo the TLO" :hth. In this case; /echo ${meleemvs[downshit2]}
 
it returned /if (NULL && !15 && !FALSE && !FALSE) /useitem Fungal Shrieker Spore
 
So the issue is the NULL. That is from the 1st item that corresponds to your entry, i.e.: ${Spell[Familiar: Fungal Shreiker Spore].Stacks}

Memorize this rule:

Code:
I before e, except after c
Or when sounded as 'a' as in 'neighbor' and 'weigh'
Unless the 'c' is part of a 'sh' sound as in 'glacier'
Or it appears in comparatives and superlatives like 'fancier'
And also except when the vowels are sounded as 'e' as in 'seize'
Or 'i' as in 'height'
Or also in '-ing' inflections ending in '-e' as in 'cueing'
Or in compound words as in 'albeit'
Or occasionally in technical words with strong etymological links to their parent languages as in 'cuneiform'
Or in other numerous and random exceptions such as 'science', 'forfeit', and 'weird'.

LOL


Change it to: ${Spell[Familiar: Fungal Shrieker Spore].Stacks}
 
  • Like
  • Haha
Reactions: EQDAB and tiki
and maybe throw in a ${FindItem[Fungal Shrieker Spore].ID} so it doesn't try to fire it constantly if you put it in the bank or something.
 
  • Like
Reactions: EQDAB and tiki