• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->
MQ2Melee

Plugin - MQ2Melee (1 Viewer)

Hmm interesting.. would !${Group.MainTank.Spell[Augmentation].Stacks[0]} work?

The Spell TLO has a Stacks[] and a WillStack[spellname]

you would need to use something like this: ${Group.MainTank.Buff[Augmentation].Spell.Stacks[0]} or ${Group.MainTank.Buff[Augmentation].Spell.WillStack[????]}

I am not sure how stacks[] will work since it looks at your current buffs to see if the spell you want to cast will stack. Not sure how to apply that to someone other than your self, unless you check every buff on the groupmember using the WillStack[Augmentation]. you can't do that in a holyshit.
 
You can't view someone else's buffs without targeting them (except via netbots or if it is your pet). So Group.MainTank.Buff or any variation thereof will not work unless something has changed that I dont know about. The original example you are basing this on used Target.Buff and that would only work if they were targeting that tank in the first place so it was wrong.
 
You can check the buff on the character you want the buff to be cast on. Then set up a holy/downshit on that character to send an EQBC command to the character that needs to cast the buff.
 
actually you could do an advanced config/mq2melee combo to keep buffs on players. on your ingame.cfg:
/if (!${Defined[HP_1_ID]}) /declare HP_1 global string
/if (!${Defined[HP_1_Timer]}) /declare HP_1 global string

then you have a downshit:
/if (${Group.Member[1].ID} && (${HP_1_ID.NotEqual[${Group.Member[1].ID}]}||!${HP_1_Timer]}) && ${Group.Member[1].Distance}<${Spell[Credence].Range}) /multiline ; /target id ${Group.Member[1].ID} ; /timed 5 ; /casting "Credence" ; /varset HP_1_ID ${Group.Member[1].ID} ; /varset HP_1_Timer ${Spell[Credence].Duration.TotalSeconds}s

Then. Tada.
 
actually you could do an advanced config/mq2melee combo to keep buffs on players. on your ingame.cfg:
/if (!${Defined[HP_1_ID]}) /declare HP_1 global string
/if (!${Defined[HP_1_Timer]}) /declare HP_1 global string

then you have a downshit:
/if (${Group.Member[1].ID} && (${HP_1_ID.NotEqual[${Group.Member[1].ID}]}||!${HP_1_Timer]}) && ${Group.Member[1].Distance}<${Spell[Credence].Range}) /multiline ; /target id ${Group.Member[1].ID} ; /timed 5 ; /casting "Credence" ; /varset HP_1_ID ${Group.Member[1].ID} ; /varset HP_1_Timer ${Spell[Credence].Duration.TotalSeconds}s

Then. Tada.

Could you elaborate on this a bit more for setting it up and what it actually is doing? I definitely have a ton of use for something with this capability but would like to have a clue for using it :D
 
i actually had an error in that i declared the timer as a string instead of a timer and had the scope/type reversed because i havent written code in months. but the premise is that you can /declare global variables that exist until you shut down mq2. inside a macro you are declaring them as "outer", which really means they exist as long as the macro is running, or as "local" which means it only exists inside a sub within a macro.

So you can declare a bunch of global variables in a .cfg file that will exist in the background and use them to store information for mq2melee, or mq2hud, or etc purposes. all you have to do is have a mechanism in place to manipulate their values.

so inside my mq2/configs/ingame.cfg (this executes each time you enter game), i have the following:
/if (!${EQBC.Connected}) /bccmd connect
/viewport reset

that way my viewport resets and my eqbc connects when i enter game.

and for my zoned.cfg i have:
/if (${Twist.Twisting}) /squelch /twist off
/if (!${EQBC.Connected}) /bccmd connect

So if i zone and am /twisting something it stops, and it will reattempt to connect to eqbc in case i was dropped somehow.


So how I could use that in a holyshit:
ingame.cfg:
/if (!${Defined[Burn]}) /declare Burn bool global FALSE

mq2melee ini:
holyshit1=/if (${Burn} && ${Me.AltAbilityReady[super duper skill]}) /alt act ${Me.AltAbility[super duper skill].ID}
holyshit2=/if (${Burn} && ${Me.AltAbilityReady[super awesome skill]}) /alt act ${Me.AltAbility[super awesome skill].ID}

then you can make a hotkey:
/varset Burn ${If[${Burn},FALSE,TRUE]}

then when you hit that hotkey it toggles burn mode on and off to either fire or not fire your 2 holyshits.
 
Last edited:
CombatState Returns one of the following: COMBAT, DEBUFFED, COOLDOWN, ACTIVE, RESTING, UNKNOWN

I forget the exact conditions for each return, but ACTIVE is probable the one you want.

Probable the best way to recognize a non combat state would be to change Equal to NotEqual:

/if (${Me.CombatState.NotEqual[Combat]}

another way to write it is:

/if (!${Me.CombatState.Equal[Combat]}

Here are some useful links to MQ2 commands and syntax:

http://www.redguides.com/wiki/Category:Top-Level_Objects
http://www.macroquest2.com/wiki/index.php/Slash_Commands
http://www.macroquest2.com/wiki/index.php/Pound_Commands
http://www.redguides.com/wiki/Category:Data_Types
 
To use the mage AA Mana Reserve:

downflag0=1
downshit0=/if (${Me.PctMana}<20 && ${Me.AltAbilityReady[Mana Reserve]}) /alt act 2065
 
Looking for a way to change monks melee. One of his main attacks he is using is tiger claw, dragon strike or kick, I need to know how to change it to FLYING KICK please any help appreciated it Need a good monk plugin that uses FLYING KICK + Stunning kick and Doomwalkers Synergy , Vigorous Shuriken and Phantom Partisans if anyone can help please!!
 
Last edited:
I'm having issues getting Holy's / Downs to fire. I get "DoCommand - Couldn't parse" errors and "Failed to parse /if command. Could not find command to execute.

Warrior:
Rich (BB code):
downflag0=1
downshit0=/if (${Me.XTarget}>=1&&${SpawnCount[npc radius 50]}>=1&&${Me.CombatState.Equal[COMBAT]}&&${Macro.RunTime}>0) 
	/multiline ; /if (${Spawn[${Me.XTarget[1].ID}].Distance} <= 50) /target id ${Me.XTarget[1].ID} ; /alt act 601
downflag1=1
downshit1=/if(!${Me.Moving}&&${Me.CombatState.NotEqual[COMBAT]}&&${Me.PctEndurance}<80&&!${Me.Sitting}&&${Macro.RunTime}>0) 
	/Sit
Holyflag0=1
Holyshit0=/if (${Target.Fleeing} && !${Target.Snared.ID})
     	/alt act 552
Holyflag1=1
Holyshit1=/if (${Me.XTarget} > 1 && ${SpawnCount[npc radius 50]} >1 &&  ${Macro.RunTime}>0 && ${Me.AltAbilityReady[area taunt]} && ${Melee.AggroMode}) 
	/alt activate 132

Shaman & Necro:
Rich (BB code):
downflag0=1
downshit0=/if(!${Me.Moving}&&!${Me.Combat}&&${Me.PctMana}<80&&${Me.PctAggro}<60&&!${Me.Sitting}&&${Macro.RunTime}>0)/Sit
downflag1=1
downshit1=/if(${Me.CombatState.Equal[COMBAT]}&&!${Me.TributeActive}&&${Macro.RunTime}>0)/tribute personal on
downflag2=1
downshit2=if(${Me.CombatState.NotEqual[COMBAT]}&&${Me.TributeActive}&&${Macro.RunTime}>0)/tribute personal off

Bard
Rich (BB code):
downflag0=1
downshit0=/if (!${Me.Moving} && !${Me.Combat} && ${Me.PctMana}<80 && !${Me.Sitting} && ${Macro.RunTime}>0) 
	/Sit
holyflag0=1
holyshit0=/if(${Target.Fleeing} && !${Target.Snared.ID} && ${Macro.RunTime}>0)
     /casting "Dirge of Metala"

I'm kinda lost as to sources of the issue.

----

Thanks for the help winnower, between that error and some missing punctuation I got it cleaned up and firing well now.

I had to turn the tribute ones off, 1) it bought new tribute each time it fired, so I'll have to research a better set of conditions and 2) I didn't see a whole lot of improvement from using the tribute.
 
Last edited:
Trying to basically get a weapon swap holyshit configured so that I swap in a stave of shielding. This one I found and edited on the MQ2Melee wiki didn't work out of the box so I edited it down to this:

Rich (BB code):
holyflag0=1
holyflag1=1
holyshit0=/if (${Me.Inventory[mainhand].ID}==5841 && ${Me.Combat} && !${Me.Buff[Major Shielding].ID}) /exchange 6610 mainhand
holyshit1=/if (${Me.Inventory[mainhand].ID}==6610 && ${Me.Combat} && ${Me.Buff[Major Shielding].ID}) /exchange 5841 mainhand

It works pretty well, except it seems to require that the weapon be in my base inventory (not in a bag), or else it will just leave the item that was replaced on my cursor and fk everything up.

Two questions:
  1. How can I get it to work from my bags and not a base inventory slot;
  2. How can I clean up the function so that it will swap ANY mainhand weapon out and then put that same weapon back in after the proc (not a specific one....I realize this may be impossible)
 
If the item can be clicky cast from inventory :
Rich (BB code):
holyshit28=/if (${Cast.Ready[ItemName]}) /casting "ItemName"|Item
Holys are only done in melee combat anyway.
 
What Derp said.


holyflag0=1
holyflag1=1
holyshit0=/if (${Me.Inventory[mainhand].ID}!=6610 && ${Me.Combat} && !${Me.Buff[Major Shielding].ID}) /bandolier activate shielding
holyshit1=/if (${Me.Inventory[mainhand].ID}==6610 && ${Me.Combat} && ${Me.Buff[Major Shielding].ID}) /bandolier activate normal
 
Should have mentioned this was on the TLP. No bandolier function there yet :(

I figured it out with the help of a friend:

Rich (BB code):
holyflag0=1
holyshit0=/if (${Me.Combat}) /multiline ; /if (${InvSlot[mainhand].Item.Name.Equal[Shard of Night]} && !${Me.Buff[Major Shielding].ID} && ${Me.CountBuffs}<=15) /exchange "Stave of Shielding" mainhand ; /if (${Cursor.ID}) /autoinv ;/if (${InvSlot[mainhand].Item.Name.Equal[Stave of Shielding]} && ${Me.Buff[Major Shielding].ID}) /unequip mainhand ; /if (!${InvSlot[mainhand].Item.Name.Equal[Shard of Night]} && ${Me.Buff[Major Shielding].ID}) /exchange "Shard of Night" mainhand

This solves the first problem flawlessly. The second problem can be solved, I just need to learn how to do it. (Having the swap define what was equipped before swapping, then calling for that variable after the buff procs, something like that)
 
Is there a way to turn downshit on and off in game? I have a six box heavy on caster. I'm using this downshit below to force med after 90% mana. The issue I have is whenever I need to move my camp, the toons would sit even if I turn KA off, and that's due to the downshit below. Is there away to force downflag off as I move from camp to camp and turn it back on along with KA when I am at my destination and ready to engage.

downflag1=1
downshit1=/if (${Me.CombatState.Equal[COMBAT]} && ${Target.Type.Equal[NPC]} && !${Me.TargetOfTarget.CleanName.Equal[${Me.CleanName}]} && ${Target.PctHPs}<75 && !${Me.Sitting}) /Sit
downflag2=1
downshit2=/if (!${Me.CombatState.Equal[COMBAT]} && ${Me.PctMana}<90 && !${Me.TargetOfTarget.CleanName.Equal[${Me.CleanName}]} && !${Me.Sitting}) /Sit
 
For my Warrior i use this (This way i can pull with provoke - the agro disc).

If Target = NPC and hps between 99 and 31%, and i am in combat, and provoke is ready, and provoke is not on the mob or with a duration of maximal 500ms and you have enough endurance for provoke (85) then cast a new provoke on it. Works very well and you can change provoke with higher lv agro abilitys (Just change the me.endurance value also)


Rich (BB code):
holyshit0=/if ( (${Target.Type.Equal[NPC]}) && (${Target.PctHPs}<100) && (${Target.PctHPs} > 30) && (${Me.Combat}) && (${Me.CombatAbilityReady[Provoke]}) && (${Target.BuffDuration[Provoke]} < 500) && (${Me.Endurance} > 85)) /disc Provoke

- - - Updated - - -

Try using the /bandolier feature that's part of vanilla Everquest instead of exchange?

bandolier is not part of vanilla Everquest, sadly :)
 
Rich (BB code):
holyshit1=/if (!${Bool[${Target.Slowed}]} && ${Me.Inventory[mainhand].ID}!=133167 && !${SpawnCount[pc group slower]}) /Bandolier Activate Slow

(use this on my tanks)
looks for not slowed
checks primary weapon
switches to slow stick if not already equipped... using the Bandolier function.

Rich (BB code):
holyshit2=/if (${Bool[${Target.Slowed}]} && ${Me.Inventory[mainhand].ID}!=23916) /Bandolier Activate 1Hand
puts his normal weapon back in hand when mob is slowed.

Not often I do not have a slow toon lurking around, but when it happens this is how I slow the mobs.
 
Couple of questions.. is it possible to check and see if an NPC has mana? I've tried using this downshit to intelligently cast a mana tap:

Rich (BB code):
downshit1=/if (${Target.MaxMana}>1) && !${Me.Moving} && ${Me.PctMana}<90 && ${Target.Type.Equal[NPC]}) /casting "Theft of Thought"

It never seems to fire with the Target.MaxMana check.

Also I am using this downshit in order to shit during combat,

Rich (BB code):
downshit0=/if (${Me.PctMana}<=90 && !${Me.Moving} && !${Me.Sitting} && !${Me.PctHPs}<91 && ${Target.PctHPs}<50) /sit

I would have liked to have used an aggro check on the current target, but I'm not sure I'm using that correctly. Something like ${Me.PctAggro}<=20, but again, it never seems to fire with the aggro check in there. Am I using that correctly, i.e. I would have to have <20% of the total aggro table of the mob in order to return true?

Some other questions I had:

- Is it possible to determine if the currently targeted NPC is casting a spell? I would like to fire off multiple stuns.
- Is it possible to delay an action by X seconds after returning true?

More questions to come probably, thanks for your help.
 
I tried using ${Target.MaxMana} on a few different things... it always returned 0 or 100, depending on if it was a caster target.

You might try going with something like this.... (Unless you are PVPing, I have generally gotten mana out of any mob that can cast, for a mana tap)
Rich (BB code):
holyshit16=/if (${Target.Class.CanCast} && !${Me.Moving} && ${Me.PctMana}<90 && ${Target.Type.Equal[NPC]}) /casting "Theft of Thought"

Generally though, downshits happen when you are not in a fight IE resting. Were you perchance trying to make some holyshits?
Holyshit:

Commands will be executed when in combat, no casting going on and the cursor is free.

Downshit:

Commands will be executed when not in combat, not casting and the cursor is free.
 
Warlock, I'm going to give that a shot. I think everything I do needs to be a downshit because my character doesn't ever actually enter into melee. I've tried Holy's but nothing at all seems to happen because melee is disabled. I should note I'm using KA macro for all of this.

**Edit, after using the above- it's working perfectly!

Any ideas on whether or not we can detect casting or delay an action for a certain amount of time after triggering the holy/down?
 
Last edited:
do not believe there is a TLO specific for casting. Hoosierbilly posted some very helpful links earlier in this thread. If you follow them, the format can be tricky to follow, but chasing down TLO, then Target, then Spawn, I find:

Casting Spell, if currently casting (only accurate on yourself, not NPCs or other group members)

is the closest I can find. I am sure you can write some script looking for specific casting, but I do not think you will be doing it in a holyshit/downshit. As for delayed action.... I am no programmer but I think the answer will be the same.... I can see how you can do it in script but do not think you can do it in a holeyshit. >>shrugs<< I may be wrong though, just offering my 2 cents =)
 
Certainly

First you will want to check if the item is ready to be cast so
Rich (BB code):
${Cast.Ready[Diplomatic Papers]}

next you will want to check your HPs so
Rich (BB code):
${Me.PctHPs}<50

then you will want to cast it. I generally use MQ2Cast for casting from a holy, so
Rich (BB code):
 /casting "Diplomatic Papers" Item

Then you put them all together to get

Rich (BB code):
holyshit1=/if (${Cast.Ready[Diplomatic Papers]} && ${Me.PctHPs}<50) /casting "Diplomatic Papers" Item
 
Plugin - MQ2Melee

Users who are viewing this thread

Back
Top