Cleric Bot (Updated 05/08/05)

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

Moderator: MacroQuest Developers

guest_01
a ghoul
a ghoul
Posts: 115
Joined: Thu Apr 22, 2004 5:15 am

Post by guest_01 » Wed May 18, 2005 1:45 am

All three sections of code go into the same file... I just ran out of room for a single post, so had to break it up into 3 separate posts.



Since a clerics primary duty is healing, it will heal regardless of other settings (unless of course you turn DoHeal, DoHoT and DoCompleteHeal off...)
If it's set to DoMelee, it will start bashing the mob whenever it's NOT healing... which can add some decent damage with a good proc hammer.

I did a DPS parse at one point of just sitting on a mount and nuking below 60 % each time, and meleeing with yaulp and only nuking when 90 % and higher. The melee method was around 1.5 to 2 times higher DPS than just nuking alone... those procs add up.

Of course, there are times when I've turned melee off because heals need to take priority... I found that occasionally the 2 second cooldown on a yaulp cast wouldn't leave enough time to efficiently get heals off in some groups (challenged groups mainly =P), so play with it both ways and see which works for you....

Oh, another time to consider disabling melee is when fighting mobs that run... since at this time, the bot will chase the runner until it's dead or someone needs healing... and it won't return to camp after either unless someone needs healing

notadruid
a ghoul
a ghoul
Posts: 143
Joined: Mon Dec 08, 2003 6:02 pm

Post by notadruid » Wed May 18, 2005 9:30 am

I haven't reviewed the code in depth, but something cool that I think is the main difference between my cleric when I macro and when I play manually is interrupting a spell that's not going to land in time, to cast a faster one. A lot of times I CH late and interrupt to Pious Light, or DivArb. As far as I know, spell_routines.inc won't allow for that as it doesnt turn the command flow back to the macro until the casting bar is done.

I could be wrong. I have to look at the code more closely.
I am not a druid.

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 » Wed May 18, 2005 9:40 am

You are wrong. RaidDruid calculates the tank's time to live (TTL) based on the % per second damage he is taking (idea stolen from cr4zyb4rd), and will interrupt CH if the tank's TTL is shorter than the casting time left on CH in order to cast a fast heal. It will also cancel the CH if the tank's TTL is above 30 seconds and he's still above the heal threshold you define. The /call Cast function of spell_routines takes an argument at the end which allows you to run a Subroutine while the casting is happening. I also use the same feature to cancel quick heals if they're going to land on a tank with full HPs, to account for multiple healers in a group/raid setting. So many people underestimate the power of Rusty's spell_routines.

I've got a version of AFCleric which uses this same logic hidden in my archives somewhere. I'd post it but I don't want to support it, plus I didn't make it in the first place, Cr4zy did. Besides, RaidDruid/DruidBot is capable of doing pretty much everything AFCleric does, and a LOT more. Plus, it's easier to customize, no offense to fantum409 (love your work man).
Last edited by A_Druid_00 on Wed May 18, 2005 9:46 am, edited 1 time in total.
[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]

notadruid
a ghoul
a ghoul
Posts: 143
Joined: Mon Dec 08, 2003 6:02 pm

Post by notadruid » Wed May 18, 2005 9:45 am

Code: Select all

   /if (${underAttackBy} && ${DoRootParking}) {
      /target id ${underAttackBy}

      /call FullStop
            
      /call cast "${SpellRoot}" gem${SpellRootGem} 0 CheckForHeal

      /if (${Macro.Return.Equal[CAST_SUCCESS]} || ${Macro.Return.Equal[CAST_CANNOTSEE]} || ${Macro.Return.Equal[CAST_IMMUNE]}) {
         /echo Rooted ${Target.CleanName}
      }
      /call AttemptAvoid
         /goto :Main_Loop
   } 
I would not say it's rooted if you got cannot see target when you tried... would also use a different message if the mob is immune. Here's what I would do:

Code: Select all

   /if (${underAttackBy} && ${DoRootParking}) {
      /target id ${underAttackBy}

      /call FullStop
            
      /call cast "${SpellRoot}" gem${SpellRootGem} 0 CheckForHeal

      /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
         /echo Rooted ${Target.CleanName}
         /call AttemptAvoid
      } else /if (${Macro.Return.Equal[CAST_IMMUNE]}) {
         /echo ${Target.CleanName} is immune to root.
      }
      /goto :Main_Loop
   } 
I believe the shaman Slow subroutine can be harmlessly removed. It looks like your mark of karn uses the debuff routine, but you could probably remove malo too.


Edit: That's awesome, A_Druid_00. That was one of the main drawbacks of AFCleric for my cleric, the other being that it healed pullers when they came to camp and took agro.
I am not a druid.

notadruid
a ghoul
a ghoul
Posts: 143
Joined: Mon Dec 08, 2003 6:02 pm

Post by notadruid » Wed May 18, 2005 10:09 am

Also, I'm sure this script could be easily adapted to use a pet as MA.
I am not a druid.

guest_01
a ghoul
a ghoul
Posts: 115
Joined: Thu Apr 22, 2004 5:15 am

Post by guest_01 » Wed May 18, 2005 2:58 pm

notadruid wrote:

Code: Select all

   /if (${underAttackBy} && ${DoRootParking}) {
      /target id ${underAttackBy}

      /call FullStop
            
      /call cast "${SpellRoot}" gem${SpellRootGem} 0 CheckForHeal

      /if (${Macro.Return.Equal[CAST_SUCCESS]} || ${Macro.Return.Equal[CAST_CANNOTSEE]} || ${Macro.Return.Equal[CAST_IMMUNE]}) {
         /echo Rooted ${Target.CleanName}
      }
      /call AttemptAvoid
         /goto :Main_Loop
   } 
I would not say it's rooted if you got cannot see target when you tried... would also use a different message if the mob is immune. Here's what I would do:

Code: Select all

   /if (${underAttackBy} && ${DoRootParking}) {
      /target id ${underAttackBy}

      /call FullStop
            
      /call cast "${SpellRoot}" gem${SpellRootGem} 0 CheckForHeal

      /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
         /echo Rooted ${Target.CleanName}
         /call AttemptAvoid
      } else /if (${Macro.Return.Equal[CAST_IMMUNE]}) {
         /echo ${Target.CleanName} is immune to root.
      }
      /goto :Main_Loop
   } 
The root code was another artifact from my shaman macro, I cut it up quite a bit during the cleric portion (along with a lot of the rest)... the AttemptAvoid call in mine was being called regardless of success or failure (based on the idea that the tank may have gotten agro by now, and I just need to move out of melee range to drop agro, regardless of whether root held). Personally, I don't look much at the clerics screen, and could care less about any potential spam... and I havn't tried root parking with him either, so not sure if it still works (anyone want to let me know on that? It used to work on my shammy, but....)
notadruid wrote: I believe the shaman Slow subroutine can be harmlessly removed. It looks like your mark of karn uses the debuff routine, but you could probably remove malo too.
As I said earlier, the Slow routine is MISNAMED by functional... it's used as part of the Mark of Righteousness spell now, to put a DS on EVERY mob in camp. Likewise, the malo routine is part of the Mark of Kings to put the reverse heal debuff on the mob (or any other debuff you'd like...)

Basicly, if you want a spell to be cast ONCE on EVERY mob in camp, set it to the Slow spell... if you want a spell to be cast ONCE but ONLY on the mob that the tank is on, use the debuff spell.

guest_01
a ghoul
a ghoul
Posts: 115
Joined: Thu Apr 22, 2004 5:15 am

Post by guest_01 » Wed May 18, 2005 3:00 pm

notadruid wrote:I haven't reviewed the code in depth, but something cool that I think is the main difference between my cleric when I macro and when I play manually is interrupting a spell that's not going to land in time, to cast a faster one. A lot of times I CH late and interrupt to Pious Light, or DivArb. As far as I know, spell_routines.inc won't allow for that as it doesnt turn the command flow back to the macro until the casting bar is done.

I could be wrong. I have to look at the code more closely.

This script already does this. It uses a forumla to determine when to interrupt a CH for a quick heal. I havn't added in divine Arb yet, since my cleric doesn't have the AA yet, and I can't test it.... (I also am unable to play EQ at the moment, so am really unable to do much of any testing for the forseeable future)

The forumla is outlined in comments in the code, both by the heal setup and near the top.

As for the spell_routines.inc library, it is quite powerful, but still has a few bugs in it (I think I've worked most out in my local copy, but hard to say)... I'm in the process of converting it to a plugin at the moment, since I have nothing else to do =P but can't test it until I have access to EQ again... it's 75 % done now... I may or may not post it just to have others test

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 » Wed May 18, 2005 3:11 pm

Only real problems I had with it were more related to auto-swapping and dropping plugins conflicting with its built in item swapping.

Well that, and it wouldn't stand you up after the very first part of the macro even though there was an Event_Standing built in. But it only showed up once in a blue moon against mobs with AE FD or something like it. That was easy to correct though.

Overall it's a great inc tho. I thought about reworking it once or twice myself, but decided it was good enough for what I needed it to do :)
[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]

DigitalMocking
a grimling bloodguard
a grimling bloodguard
Posts: 620
Joined: Mon Apr 04, 2005 5:53 pm

Post by DigitalMocking » Wed May 18, 2005 4:12 pm

I'll be happy to test it for you guest_01

DigitalMocking
a grimling bloodguard
a grimling bloodguard
Posts: 620
Joined: Mon Apr 04, 2005 5:53 pm

Post by DigitalMocking » Thu May 19, 2005 4:01 am

guest_01, you said there was a plugin needed for MoK, I don't see it anywhere, did the post get deleted?

notadruid
a ghoul
a ghoul
Posts: 143
Joined: Mon Dec 08, 2003 6:02 pm

Post by notadruid » Thu May 19, 2005 6:56 am

Is you have probably noticed, I am very interested in this macro and see it as a good alternative, perhaps even a replacement, for AFCleric.

Once MQ2 is updated for the may 18 patch I'll begin ingame testing. Of course any changes I make I'll post.
I am not a druid.

notadruid
a ghoul
a ghoul
Posts: 143
Joined: Mon Dec 08, 2003 6:02 pm

Post by notadruid » Mon May 23, 2005 6:48 pm

Ok, you should be able to set it to NOT buff when it starts.

It casts my zealot spell regardless of it already being up, and buffs the grp assuming you haven't already (9 times out of 10 I already have).

Interrupting said buffs just makes the macro recast. I interrupted them because they weren't necessary damnit.
I am not a druid.

Badfish
decaying skeleton
decaying skeleton
Posts: 8
Joined: Mon May 23, 2005 9:17 pm

Post by Badfish » Mon May 23, 2005 9:23 pm

Well i love the macro but im havin a few small problems.

First off im havin issues witth the "Follow Me" command where he just walks forward a lil past me and stops. Also when i have him domelee he just stands up and turns on attack instead of moving to the mob / staying in range. The second part is easy to counter but i really wish i could get him to follow me reliably.

Im no macro pro but im guessing this has to do with the advpath file i got BUT i got the latest one off of the forums but it doesnt seem to be working. Could anyone point me to the correct place to get this as /search brings up multiple outdated versions i think. Any and all help is appreciated : )


Secondly- Is there a way to have the macro heal a person outside of the group such as on a raid where i box my cleric and dont have room in main tanks group for my cleric. Seems the person i target just sets the assist key.



All in all its a great macro and works VERY well im just a lil too dense to figure it out i guess haha

DigitalMocking
a grimling bloodguard
a grimling bloodguard
Posts: 620
Joined: Mon Apr 04, 2005 5:53 pm

Post by DigitalMocking » Mon May 23, 2005 9:55 pm

Both of guest's macros that I use currently have problems with "follow me", I just haven't had time to debug it yet, if I get tired of setting follow by hand I'll take a look.

DigitalMocking
a grimling bloodguard
a grimling bloodguard
Posts: 620
Joined: Mon Apr 04, 2005 5:53 pm

Post by DigitalMocking » Tue May 24, 2005 1:03 pm

In the #chat blech, change the "Follow Me" function to this:

Code: Select all

  /if (${ChatText.Equal["follow me"]}) { 
    /if (!${AllowAutoFollow}) /return 
    /squelch /stick off 
    /squelch /moveto off 
    /target ${ChatSender}
    /call FollowFunction "${Target.CleanName}"
    /return 
  } 
That'll fix 'follow me'