AFCleric.mac - Cleric automation macro (updated Aug 24th)

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

eqaussie
a ghoul
a ghoul
Posts: 124
Joined: Tue Mar 16, 2004 5:58 am

Post by eqaussie » Fri Dec 03, 2004 8:45 am

Clueless_Coder, based on other options Cr4zy has used in this macro, i took a leaf out of his book and just changed those lines to

Code: Select all

/declare groupheal string outer ${If[${Me.Book[Word of Vivification]},Word of Vivification,Word of Replenishment]} 
/declare grouphealrange int outer ${Me.Book[${Me.Book[${groupheal}]}].Range} 

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Fri Dec 03, 2004 10:53 am

One spell you left out: The OoW group heal Word of Vivification.
Thanks. All of the clerics I play are "loaners" from guildies, so I don't really know wtf I'm doing..but I'm learning a lot tinkering this macro.
I went through all of the spells on alla, and even remember looking for a group heal upgrade, but I guess I just missed it somehow. With the way macro does it's group heals, I don't think I've ever had it fail to pretty much top everybody off anyway..probably some room for optimization here.

There's certainly a lot to the class that I don't think people realize is there, and I'm having a blast with it.

The range-checks on the group heals were one of the things I took out of mine, at least I remember doing it for DVA in one place. I haven't used it a lot in practice, but I know there's a few AE fights that my guild pretty much zergs down...if you're OOR for group heals too bad, that's your own ass. But yeah, the ${Me.Book[${Me.Book[]}]} thing looks weird, but it works, and prevents you from getting the .Range on something like a clickie-item spell from the database by mistake.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Fri Dec 03, 2004 11:04 am

Thanks both of you

I'll edit my macro when I get home from work :)

Oh oh oh... One other thing...

I didn't see anything in the updated code about using a mount...

Again I'm not a coder and I may have missed it but I searched for any references to bridal, drum, horse or drogmar and came up empty

Does it have some other means of finding the mount or do I have to make some sort of edit?

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Fri Dec 03, 2004 11:12 am

I think mounts and self-buffing are intentionally left out...although it should probably at least take chat commands to buff itself.

It's a timing thing...you don't want to be summoning your mount (because you had to duck or whatever) or casting virt/conviction on yourself while the tank's going splat.

With the way my code ducks out of heals, a mount would never work anyway.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Fri Dec 03, 2004 11:26 am

Good point

Okies. Can't wait to get home and give it a try. Gonna probably do a test run in MPG or RS later this afternoon

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Fri Dec 03, 2004 11:34 am

Cr4zyb4rd wrote:It's a timing thing...you don't want to be summoning your mount (because you had to duck or whatever) or casting virt/conviction on yourself while the tank's going splat.
I added a mini check group sub to my druid mac called check4pad that I run during all my non-healing related casts to handle ducking buffs/nukes/debuffs if any groupmembers get below my threshold. Not sure how you'd integrate it into your version of afcleric, but I'm sure its quite doable. Check the time remaining on your cast+gem refresh time+time to cast a heal, and divide that by your tank's time to live maybe?

Whatever's clever, just thought I'd throw it out there. You could even have it target your designated MT and evauluate his HPs mid buff cast.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Fri Dec 03, 2004 4:25 pm

Ok I'm in love

Using the macro for the past hour or so in a group in RS. It's working perfectly.

Just one question: Is there any way to turn off the ducking spamm?

Not only does it kinda give away that you're using a macro (How else would I know the tank has 28 seconds to live? :P) but it gets on my and the groups nerves :P

Can I selectively turn off duck/interrupts etc and still show casting messages? (I thought I had toggled them off but they still show up)

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Fri Dec 03, 2004 4:26 pm

Clueless_Coder wrote:Ok I'm in love

Using the macro for the past hour or so in a group in RS. It's working perfectly.

Just one question: Is there any way to turn off the ducking spamm?

Not only does it kinda give away that you're using a macro (How else would I know the tank has 28 seconds to live? :P) but it gets on my and the groups nerves :P

Can I selectively turn off duck/interrupts etc? (I thought I had toggled them off but they still show up)
Just look for the /echo in the macro for the line you don't want to hear, and comment it out with a |
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Fri Dec 03, 2004 9:01 pm

Ok Been giving it a hard workout so that I can report back whatever I find both good and bad. So far its been almost all good though.

The macro works smooth as silk. Interrupts heals and recasts whatever is approriate. Group makeup has been Cleric Pally, SK, Chanter, Rogue Wizzie, so effectively I've been the only healer.and the only time the tank died in 7 hours in RS has been when I screwed up and paused the macro to buff myself. Or on named pulls where we all got charmed.

That said... couple of early observations

I had to lower the threshhold it cast CH at to 75. If I were doing a solo group (My own tank shaman and cleric) I wouldn't have cared but it gets a bit hard to explain to a group why you're attempting to cast CH on a pally that's at 85% AFTER the fight ends

I copied and pasted the code directly from the thread changing only the group heal (as mentioned earlier) but in order for it to let me sit at all, either during a fight or tween pulls, I had to enter the variable

Code: Select all

/varset autosit 2
otherwise I stand constantly never getting a chance to catch up on mana or benefit from the efficiency of ducking the heals, even with FT 23, Clairvoyance, Zealot and 8500 or so mana, I was running OOM every 20 mins or so.

And I had to finally just keep the announcing off altogether. With the number of casts it makes - casting, interrupting and recasting, even just the heal spam was too much for a group.

Okies back to testing. Another Pyrilen Summoner needs to die!!!

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Fri Dec 03, 2004 10:33 pm

It actually kept you alive in RS? Wow..i'd been afraid to even test it there, although it's been doing ok for me in Ikkinz group trials where i sometimes test, save a couple insta-gibs i don't think anybody could have stopped (sometimes tanks just explode in that zone)

There's code in there to not cancel the heal and let it top off a tank if there's no mob within a certain x/y (need to add zradius to that at some point, 200 or so is probably good) Maybe also add a cuttoff to like not bother topping them off if they're >80%? Dunno..hard call.

I'll check out the sit thing...but the whole idea is to duck out of one heal and start another, when exactly are you going to sit during that? Do you do much sitting doing nothing when you're playing manually? Tell me under what circumstances and i'll code it...I just don't see it.

I don't know what to do about the announcing...except maybe just make it only go to echos. There's no way to know ahead of time if you're going to duck the heal or not...maybe just call once and set a flag that's only toggled off if /call Cast returns CAST_SUCCESS or whatever it returns on a completed cast? Even the old version was spammy...I *do* like the mana calls every time an xp message is given though, and groups seem to appreciate it.

Also I'm at a loss for what to do when CR fires...do I just ignore healing non-tank group members as long as my own CR icon is up, assuming it'll heal them too? I added a nice big delay immediately after triggering the AA so it doesn't blow CR and then insta-spam a necro for example, but it still tends to waste it after the first 2-3 "panic" ticks do their work.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Sat Dec 04, 2004 9:00 am

Yup. And it not only kept us alive, it did a damn fine job of it too.

K the sit thing first: Gotta remember this was RS. So more heals than average hit. A lot were ducked or interrupted but a lot also hit. And there were times when a lot of spots on the rest of the group were needed. So mana got eaten quickly at some times, not at all at others.

Unless I entered the variable I wasn't even able to sit during pulls or downtime without pausing the macro. That's not good cause you need to regen (even if just to top off) mana somewhere and pausing the macro defeats the purpose of being automated IMO. To my way of thinking, if there is no mob in camp I like to be sitting if I'm not FM. Or to be able to manually choose. As the code is written it stopped me from even doing that unless I added the /varset.

My suggestions for either autositting if not FM or allowing manual sitting would be:

If the tank is taking no damage, check mana, if < X pct, sit. Or alternately, if tank is taking no damage check mana and if < X pct allow player to sit. (I don't use this AFK so having to manually sit isn't horrid)

The rest of it, the announcing and topping off, was easily fixed.

I just turned off external announcing and have it just echo to the MQ2 window. I told the group not to expect heal spam from me since I have to react too quickly and IMO hotkeys cause delays. That was cool. As long as they got healed noone cared IMO. Turning off cast spam didn't turn off the mana checks btw. And yes that is a nice touch.

I solved the topping off problem by lowering the heal threshhold to 75 and not 85. And it went fine. Tank was never actually lower than 85ish at the end of any fight and if they were too close to the threshhold I just popped a remedy manually. I may up it to 80 today and see how that goes but for the group yesterday 75 was fine.

The top off code may not have worked well or at all in this test since we were in the Queen's room in RS and there seems to always be a mob within a medium radius. Might need to tighten that radius a bit to within melee range or something?

I'll have to think about the CR issue. I didn't see mine fire (Altho I loved the way it used Divine Arb. That is genius at work TY ) yet so I'm not sure what situations it calls it in.

I did mention that with the exception of the Pally who was also the tank I was the only healer in the group for over 7 hours right? So I'd say all in all the first test was a major success.

Gonna try it again later today in some MPG trials

insanitywiz
a hill giant
a hill giant
Posts: 250
Joined: Mon Jul 08, 2002 7:50 am

Post by insanitywiz » Sat Dec 04, 2004 2:25 pm

Or, to be more complex, toss in a array for the mobs in x raidius, check to see if those mobs have agro on anything except the tank (for mezzed mobs) and sit when not casting heals, stand if any of those mobs gets agro on anything except the tank. I would toss in a wait time before it tries to sit if the bot gets agro though, otherwise you get the cleric ping ponging the mob from it to the tank.

Thats similar to the way I used to do my chanter mezz macro to lock down everything that wasn't the target.

Not sure how resource intensive the code may get for that though, not very good at judging that.

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sat Dec 04, 2004 3:19 pm

The top off code may not have worked well or at all in this test since we were in the Queen's room in RS and there seems to always be a mob within a medium radius. Might need to tighten that radius a bit to within melee range or something?
Add something like this to the declares at the top

Code: Select all

/declare zradiuscheck int outer 100
Then, anywhere in the macro you see

Code: Select all

${NearestSpawn[npc]
(no matter what's after the ], and make sure youget the places where NPC is in caps too...need to replace all of those so it's one standard not that it really matters)

with

Code: Select all

${NearestSpawn[npc zradius ${zradiuscheck}]
You might have to tweak the number or change it for different zones, but that should make it ignore mobs above/below you.

I'm not sure why it's not sitting at all with autosit 1, and haven't had a chance to look at the code. I suspect it's just because it detects some mob within range and the z-axis fix above might help. Either that, or you're trying to chain-cast in which case the logic's just broken somehow.

Having played a bard or war most of my eq career, I don't know enough about how aggro from sitting works to risk adding my own stuff to try to "cheat" in a tick of sit-regen like while the spell gems are refreshing after a cast and whatnot.
I'll have to think about the CR issue. I didn't see mine fire (Altho I loved the way it used Divine Arb. That is genius at work TY ) yet so I'm not sure what situations it calls it in.
Make sure you have the apropirate type of CR aa defined. (Actually just using celestial regen probably works with all of them, but i've had problems with the upgradable AAs on other classes so I went with safety and just made it a define) It *should* fire CR every time it's available after DVA, and group heal otherwise.
I solved the topping off problem by lowering the heal threshhold to 75 and not 85. And it went fine. Tank was never actually lower than 85ish at the end of any fight and if they were too close to the threshhold I just popped a remedy manually. I may up it to 80 today and see how that goes but for the group yesterday 75 was fine.
That's great if you're sure that the tank can live that long, but ideally I want to be starting the CHs asap, just in case the tank eats a bad first round or whatever..I'm even thinking of adding code to make it fire one off on incoming. Of course this would make auto-sitting to steal some mana regen whenever you can even more critical.

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Sat Dec 04, 2004 3:28 pm

Or, to be more complex, toss in a array for the mobs in x raidius, check to see if those mobs have agro on anything except the tank (for mezzed mobs) and sit when not casting heals, stand if any of those mobs gets agro on anything except the tank. I would toss in a wait time before it tries to sit if the bot gets agro though, otherwise you get the cleric ping ponging the mob from it to the tank.
I can't see an effective way to do this. The code in rusty's mage.mac does a pretty good job at "add detection" and whatnot, and I have my own crackhead method I came up with for detecting aggro that my tankbot uses, but there's just nothing reliable enough that I've seen or came up with that I'd trust enough to put in healer code.

There's certainly a lot of room to work with here, and a lot that could be done with HoTT that isn't (if the mob's on a caster or toggling back and forth from the tank to the caster, he probably needs a patch, otherwise an HoT will work...things like that).

I'm not sure what if anything a_druid's doing with his druid macs, maybe we can put our heads together on something. On a related note, I'll probably be switching to his buffbeg and self-buff code, or something like it in my cleric. I'll post here if I get something working.

Clueless_Coder
a hill giant
a hill giant
Posts: 192
Joined: Wed Aug 25, 2004 3:18 pm

Post by Clueless_Coder » Sat Dec 04, 2004 6:13 pm

Ok playing with it again today in MPG and without any added statements I'm sitting whenever I'm not casting. So I'm assuming the issue with the code was the mobs in radius.

As for CR: I have all the CR's maxed: Basic, PoP upgrade, Gates upgrade and Omens upgrade. So whatever is in the code should work for me. But after Div Arb it's been using my group heal. Which is fine. IMO in a place like RS or MPG CR or any other HoT doesn't cut it except as backup or secondary healing.

Just a note here. My cleric is my main. My name and my reputation are based on her performance. So when I use the macro she's not a bot. I just use the macro for efficiency. And to allow me some relaxed play time. But I'm never AFK and am always just a click away from disabling the macro in the event something goes wrong.

With this macro tho, I've played for hours straight without having to do anything other than sit now and then and move around to follow the group from camp to camp. And it has performed flawlessly.