• 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

Question - Seeing buff durations on others

ButtKoWitz

Member
Joined
Mar 23, 2023
RedCents
342¢
I'm trying a from-scratch buff monitor for my characters. It's my understanding that the only way to see (current) buff durations is by either
1) Target each character prior to doing mq.TLO.Spawn(name).Buff(spell).Duration
2) Run the script on each individual character and use mq.TLO.Me.Buff(name).Duration

Are my assumptions correct, or have I missed a way to query buff durations without targeting?

I have a nicely working Lua using #2, as I don't want to swap targets constantly (buff checks are running in a delayed loop), but am unsure if it's the proper/best method.

Thanks!
 
If these are just your characters, can you use dannet to have the character report buff info?
 
They are just my characters (4 grouped, 2 babysitting PLr's). I am using DanNet, but primarily using it to mq.cmd() a caster to buff me with xyz.
Something like:
[CODE lang="Lua" title="Buff me with armor, Minion!"]if mq.TLO. Me.Buff(Duration) / 1000 <= 300 then
mq.cmd(/dex Minion /target Tankboy)
mq.delay(10)
mq.cmd(/dex Minion /casting Armor) --using MQ2AutoCast
end[/CODE]

I am unaware of using DanNet to get status from players. (I'm very new to MacroQuest et. al. & Lua)
 
Last edited:
...oooh Queries via DanNet, I was completely unaware of that! Thanks for steering me! Will monkey around with DanNet :) ...I thought it was just for sending "tells"/commands.
 
Few ways to handle this all depending on how involved you want the script.

You can simply monitor the buff duration on the target player, then /dex the buffer to buff when you want it refreshed.

Or you can use dannet observes and have the buffer maintain observes for the buff on the target player and cast once duration reaches a specific threshold. If you do this, word of caution with having too many observes and the default dannet timeout values. I’ve seen it be an issue when you get to 20-30+ observes per character.

Or you can dannet queries to check buff durations periodically (works similar to observes but not constant)

Or you could use chachedbuff pointers but this does require you to initially target the target player with the buffer.
 
Thanks for the input evianwater. I originally started scripting my routine using cachedbuff, but found the requirement for targeting unacceptable (character I'm actively controlling is my tank/MA and swapping targets constantly makes no sense, especially on a timer (loop).

I'm still reading a bit about using DanNet and am leaning towards using the one-time /dquery calls. I don't think constantly running observers sounds friendly to resources. Especially if I eventually get into forming a raid mob.

Now I'm just pulling my hair out because of a 6 hour extended downtime with EQ and being unable to test my new methods. :(
 
I need to make one for myself as well, planning to do it in Lua. If you are on discord id work on this with ya

Using dannet+worn.off+beg is the right way to do it
 
That would be cool, but I have to pass. Being an old fart I have to deal with life, work, and the worst thing: wife aggro and am often interrupted for hours to attend to chores during my precious little gaming time. 😵‍💫
 
Thanks for the input evianwater. I originally started scripting my routine using cachedbuff, but found the requirement for targeting unacceptable (character I'm actively controlling is my tank/MA and swapping targets constantly makes no sense, especially on a timer (loop).

I'm still reading a bit about using DanNet and am leaning towards using the one-time /dquery calls. I don't think constantly running observers sounds friendly to resources. Especially if I eventually get into forming a raid mob.

Now I'm just pulling my hair out because of a 6 hour extended downtime with EQ and being unable to test my new methods. :(
The issue I ran into with dquery was that my buffers were essentially getting spammed by query commands for buff requests. Was causing lots of issues and delays in firing other events/actions that I needed done.

I built my own Lua buffing system that using observes because it seemed to be the simplest route to monitor buffs at all times. It's still not great, but it functions for what I need it to be doing. By using the observes, I just have the code check for some environmental checks (are we fighting, do i have enough mana, am i already casting, etc) and then buff when its needed.
 
I'm pulling my hair out trying to learn DanNet (*should* be simple). I cannot for the life of me do any form of a /dquery. The instructions are pretty vague, and I've spent hours searching the forums/web for Lua examples of using /dquery with no luck.
Anyone know what syntax I need to do a lookup on a spawn's buff duration?

Probably done for tonight, I'm so frustrated. :p
 
Last edited:
I'm pulling my hair out trying to learn DanNet (*should* be simple). I cannot for the life of me do any form of a /dquery. The instructions are pretty vague, and I've spent hours searching the forums/web for LUA examples of using /dquery with no luck.
Anyone know what syntax I need to do a lookup on a spawn's buff duration?

Probably done for tonight, I'm so frustrated. :p
I'll clean up my Lua script tonight that I built for monitoring buffs and shoot it over to you for reference. It uses DanNet observes and is fairly simple to follow. I've been building it out so haven't delved into making things more sophisticated yet.
 
Much appreciated! I've mostly given up and back to using individual buff-me scripts for each character.
 
I attached my Lua for buffing. It's not perfect and still being worked on. I cut out all my debug logging and other things that I've been working on slowly.

In the .zip:
1) BuffStuff.Lua - this is the main script that runs the buffing. This should be run on every character (/Lua run BuffStuff)
2) vlua folder with 4 other files - this is the support folder that holds all the actual functions of the Lua

Things you will need to edit:
1) BuffStuff.Lua - Nothing
2) vlua/binds.Lua - Nothing, this is just for ingame command to edit some variables
3) vlua/buffsnew.Lua - Nothing, this is just the cast handler for burns, buffs, and items
4) vlua/functionsnew.Lua - nothing, this is the meat and potatoes of how the Lua works. Suggest reading through it and seeing all my comments on lines, specifically the function VerifyGoodToCast since this is the main check and balance function.
5) vlua/setbuffsnew.Lua -
  • Line 23: ClrHP_Targets = {'TargetToBuff1','TargetToBuff2'} --these are the targets to the buff ClrHP
    • Change the TargetToBuff1 and TargetToBuff2 to the character that you want to RECEIVE the buff
  • Line 27: ClrHP = {'Name of Buff','Name of Buffer',ClrHP_Targets,0} --this is the actual spell to cast and who is the caster (Name of Buff, Name of Buffer, Targets, InCombat?)
    • [BGCOLOR=initial]Change the Name of Buff to the actual spell name[/BGCOLOR]
    • Change the Name of Buffer to the actual name of the character casting the spell
    • The 0 indicates that this buff is NOT cast in combat (0 = Not in Combat, 1 = In Combat, 2 = Not in Combat AND In Combat)
  • Line 41: if (Name=='Name of Toon') then --this is a cleric for example
    • Change Name of Toon to the name of the character
  • Line 42: BuffList = {ClrSelfHP, ItemDometrius, AuraClr} -- we are telling it to buff these on itself
    • [BGCOLOR=initial]BuffList is the buffs that the character casts on THEMSELF[/BGCOLOR]
  • Line 43: BurnList = {ClrSwarm} --these are our burn spells that we will cast if BurnFlag is true
    • BurnList is the buffs that the character casts if you use /luaset BurnFlag "true"
  • Line 44: WatchBuffList = {ClrHP} --these are the buffs that we monitor for based on the targets defined above
    • [BGCOLOR=initial]WatchBuffList is the buffs that the character watches for on the list of targets (For ClrHP, it would monitor the targets from ClrHP_Targets[/BGCOLOR]
Things to know:
  • DanNet must be loaded, otherwise you will get an error. I have not added sanity checks for the plugin yet.
  • This uses DanNet Observes, it will take time to load depending on how many characters/buffs you set up.
  • This handles Self Buffs, Buffs on others, Items, Auras, Disciplines, and buffs for burns.
  • VerifyGoodToCast function in functionsnew.Lua is the main source of sanity checks. If you need to edit when a spell is used, this is where you will do it. I added comments to each line to make it logical
  • Characters must be in a group for this to work (can remove that line in VerifyGoodToCast if you want)
  • Intended targets must be in the zone for sanity check reasons
  • This will NOT buff in PoKnowlege or Guild Lobby (I personally don't like doing that, but can remove it in buffsnew.Lua at the top
  • This handles bard casting as well (you must have MQ2Twist loaded)
  • Must have MQ2Nav loaded
  • This uses spell gem 9 as the "mem swap" slot. So if you are trying to cast a buff that isnt on the spell bar, it will swap the spell into that gem slot. You can change this in functionsnew.Lua line 6.
Obviously once you get the first buff working and functioning, you'll need to add in more but the system is fairly simple. I have plans to make it a lot easier to add stuff (GUI additions) but haven't got there yet.
 

Attachments

I attached my LUA for buffing. It's not perfect and still being worked on. I cut out all my debug logging and other things that I've been working on slowly.
...
Nice! Have gone over it briefly. Definitely learning a few things about using Lua and MQ, much appreciated! Looks like you're doing pretty much what I'm slowly building. Scripts on each toon to monitor buffs, DanNet for firing off things. You have a TON more work progress on checks, I've only scratched the surface (primarily if in range and mana. Will definitely be using your code to learn from. Thanks!
 
Question - Seeing buff durations on others

Users who are viewing this thread

Back
Top
Cart