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

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

Moderator: MacroQuest Developers

Draimen
a lesser mummy
a lesser mummy
Posts: 69
Joined: Sun Jan 25, 2004 3:13 pm

Post by Draimen » Sat Jul 10, 2004 3:53 am

Haven't tested div arb that much, may wanna change it to cast at 30% or so to allow the for loop time to get all the grp members distances caculated and shit.

fantum409
a ghoul
a ghoul
Posts: 141
Joined: Fri Nov 14, 2003 10:03 pm

Post by fantum409 » Sat Jul 10, 2004 10:18 am

OK Draimen, added a variable to allow tweaking of the threshold for using divine arbitration. Found in the beginning of the macro with the rest of the variables.

Code: Select all

/declare divarbpoint int outer 25 
I don't think the amount of time used to calculate everyone's distance is more than a small fraction of a second. My objective is to keep this macro as fast as possible, and I've been running it with 2 EQ clients on a pent3 733... a very minimal machine for 2 boxing. But I can definitely see why it should be configurable.

Thanks for your post Draimen.

I'm out for 2 weeks guys, but when I get back I'll try to make this so that heals are tweakable for each specific class, and add documentation to make configuration easier for those not so familiar with the way macros work. Lots of things yet to come!

stm69
Secret Asian Man
Posts: 65
Joined: Sun Jan 25, 2004 1:31 am

Post by stm69 » Sat Jul 10, 2004 11:45 am

Macro doesn't seem to heal monks at all. onlyhealfd is off, it just targets monk in group and spam targets between monk and MT.

Ideas to try?

fantum409
a ghoul
a ghoul
Posts: 141
Joined: Fri Nov 14, 2003 10:03 pm

Post by fantum409 » Thu Jul 15, 2004 1:08 pm

OK, I'm just stopping by my house while on vacation, so sorry no time to really troubleshoot this problem of MNK not being healed. I looked over the code, don't see any reason why it should behave this way.

Will someone please try this macro out and see if there is a duplicatable problem with MNK heals? I dont have a MNK to test it on, and not home long enough to do it.

Thanks to anyone who finds the time.

And stm69 please post a few more details such as what settings you have changed, whether it initiated cast then interrupted, was MNK out of range, or MT out of range? Having a lot of lag at that time? Was cleric injured? The more specific you are, the more likely I can troubleshoot it. Thanks.

mystikule
a snow griffon
a snow griffon
Posts: 353
Joined: Sat Jul 17, 2004 9:23 pm

Post by mystikule » Sat Jul 17, 2004 9:30 pm

First off....this macro is the own....hats off to you :D

Only issue I seem to be having is with the classes that are not specified for heals, arent getting healed. ie...rangers/beserkers/rogues etc.... Also noticed that monks weren't getting healed with the latest version. Grp heal and DArb didnt go off when we wiped too...maybe connected?

Keep up the good work!!! AFCleric plays my cleric better than I can!

Draimen
a lesser mummy
a lesser mummy
Posts: 69
Joined: Sun Jan 25, 2004 3:13 pm

Post by Draimen » Sun Jul 18, 2004 7:02 am

Well, there seems to be a problem with the macro not healing grp members if the MT is not full HP but not at or below the set heal point. Not really a problem, it's by design. The macro watches the MT and yourself 1st before grp members.

Try setting the healmode to 2 and see if you still have the problem with it not healing the grp.

I don't have much time to test and shit, but I am sure we can get it working.

On a side note, I converted my version of this macro to use an ini file, but have not posted it due to the fact I change some of the code to better suit my playstyle. If anyone wants me to post it I will.

JimJohnson
a grimling bloodguard
a grimling bloodguard
Posts: 1299
Joined: Sat Oct 11, 2003 6:00 am

Post by JimJohnson » Sun Jul 18, 2004 7:50 am

Post or pm it to me Draimen, would love to check it out

Seariz
a lesser mummy
a lesser mummy
Posts: 52
Joined: Thu Feb 06, 2003 1:22 pm
Location: The Computer
Contact:

Post by Seariz » Sun Jul 18, 2004 7:46 pm

Yes please post it, id love to try it out.
Every work group has one sadistic nut who makes the job unbearable for everyone else. That's why they hired me!

User avatar
Slice
a hill giant
a hill giant
Posts: 189
Joined: Wed Oct 30, 2002 2:52 pm

Post by Slice » Mon Jul 19, 2004 12:49 pm

Will this heal groupmember pets as well?
Slice

Draimen
a lesser mummy
a lesser mummy
Posts: 69
Joined: Sun Jan 25, 2004 3:13 pm

Post by Draimen » Tue Jul 20, 2004 12:33 am

No it doesn't, but that can probably be added.

Draimen
a lesser mummy
a lesser mummy
Posts: 69
Joined: Sun Jan 25, 2004 3:13 pm

Post by Draimen » Tue Jul 20, 2004 12:35 am

Here is my version. Not much changed, just a few things here and there.

Code: Select all

|**---------------------------------------------------------- 
AFCleric.mac 

Run the macro with Main Tank targeted.    
   Usage: /mac AFCleric <%health> <Heal spell> 
   Defaults to casting Complete Healing at 60% 

This Cleric macro operates in 4 modes: 

   autohealmode=0 will watch a single target's health 
   relentlessly. The cleric will not heal self or group, only 
   the specified Tankname at the specified %health. 
   If the Tank takes dmg fast enough that HP is less than 70% 
   of the specified %health, the patchspell will be cast. 
   The Tank does not need to be in your group. 
    
   autohealmode=1 will watch Tank as above, but also heal 
   self and even attempt to cast DA if self HP get too low. 
    
   autohealmode=2 will watch Tank, self, and also the rest of 
   the group. Heals will go first to the person in group with 
   lowest HP percentage. Healtypes for people other than Tank 
   and self will be based on Class and HP percentage. 
    
   autohealmode=3 is exactly the same as mode 2, except that 
   Tank HP and self HP are double checked immediately before 
   healing anyone else. If Tank or self HP are low enough to 
   justify a heal, they get it first even if other group 
   members have lower HP. IE: it tries not to let Tank or 
   self die while healing that overnuking wizard. =) 
    
FaNTuM 
----------------------------------------------------------**| 

#turbo 40 
#include spell_routines.inc 

#Chat Chat 
#Chat tell 

Sub Main 

   /declare healpct int outer 60 
   /declare tankname string outer ${Target} 
   /declare minorhurt int outer 0 
   /declare majorhurt int outer 0 
   /declare worsthurt string outer NULL 
   /declare worsthp int outer 100 
   /declare gmember int outer 
   /declare nohotforua string outer NULL 
   /declare nohotforub string outer NULL 
   /declare nohotforuc string outer NULL 
   /declare nohotforud string outer NULL 
   /declare rodwait int outer 0 
   /declare following int outer 0 
   /declare follname string outer NULL 
   /declare pallycount int outer 0 
   /declare stophealpoint int outer ${Ini[afcleric.ini,core,defaultstophealpoint]} 
   /declare buffbeg int outer 0 
   /declare oomspam int outer 1 
   /declare lomspam int outer 1 
   /declare duckspam int outer 1 
   /declare duckfdspam int outer 1 
   /declare duckselfspam int outer 1 
   /declare ghealhurtcount int outer 0 
   /declare divarboor int outer 0 

   /if (${Ini[afcleric.ini,core,joinchannel]}==1) /join ${Ini[afcleric.ini,core,mychannel]}
    
   /if (!${Target.ID}) { 
      /echo Target the Tank when you run this macro to designate him as MT 
      /end 
   } 

   /if (${Defined[Param0]}) {    
      /varset healpct ${Param0} 
   } else /echo No Heal% specified, defaulting to 60% 
    
   /if (!${Defined[Param1]}) {    
      /echo Usage: /mac AFCleric % healspell 
      /echo Example: /mac AFCleric 40 Complete Heal 
      /echo Defaulting to ${Ini[afcleric.ini,heals,healspell]} at ${healpct}% 
   } else {    
      /if (!${Defined[Param2]}) { 
         /varset healspell ${Param1} 
      } else /if (!${Defined[Param3]}) { 
         /varset healspell ${Param1} ${Param2} 
      } else /if (!${Defined[Param4]}) { 
         /varset healspell ${Param1} ${Param2} ${Param3} 
      } else { 
         /varset healspell ${Param1} ${Param2} ${Param3} ${Param4} 
      } 
   } 

   /echo AFCleric Active, running in Autohealmode ${Ini[afcleric.ini,core,autohealmode]} 
   /echo Casting ${Ini[afcleric.ini,heals,healspell]} on ${tankname} at ${healpct}% HP 
   /if (${Ini[afcleric.ini,core,autohealmode]}==0) /echo ONLY ${tankname} will be healed 
   /if (${Ini[afcleric.ini,core,autohealmode]}==1) /echo ONLY ${tankname} and myself will be healed 
   /if (${Ini[afcleric.ini,core,autohealmode]}==2) /echo ${tankname}, myself and my group will be healed 
   /if (${Ini[afcleric.ini,core,autohealmode]}==3) /echo ${tankname} and myself will be healed before the rest of the group 
    
   :tankwatchloop 
   /if ((!${Target.ID})||(${Target.Name.NotEqual[${tankname}]})) { 
      /Target pc ${tankname} 
      /delay 6 ${Target.Name.Equal[${tankname}]} 
   } 
   /if ((${Me.PctMana}<=20)&&(${Ini[afcleric.ini,core,announce]}==1)&&(${lomspam}==1)) { 
      /g ${Ini[afcleric.ini,announce,lomannounce]} 
      /varset lomspam 0 
      /timed 300 /varset lomspam 1 
   } 
   /if ((${Me.PctMana}<=7)&&(${Ini[afcleric.ini,core,announce]}==1)&&(${oomspam}==1)) { 
      /g ${Ini[afcleric.ini,announce,oomannounce]}
      /varset oomspam 0 
      /timed 300 /varset oomspam 1 
      /call MedTime 
   } 
   /if (${GameState.Equal[CHARSELECT]}) /end 
   /if (${Target.Name.Equal[${tankname}]}) { 
      /varset stophealpoint 85 
      /if ((${Target.Distance}<=${Ini[afcleric.ini,heals,patchhealrange]})&&(${Target.PctHPs}<=50)&&(${Target.PctHPs}>=1)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}  
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
      } 
      /if ((${Target.Distance}<=${Ini[afcleric.ini,heals,healspellrange]})&&(${Target.PctHPs}<=${healpct})&&(${Target.PctHPs}>=51)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,healannounce]} 
         /call Cast "${Ini[afcleric.ini,heals,healspell]}" gem1 1s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,healspell]}]} 
      } 
      /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
      /call CheckEvents 
   } 
   /if ((${Ini[afcleric.ini,core,autosit]}>=1)&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) { 
      /if ((${Me.PctMana}>98)||(${Me.PctHPs}<=90)) /stand 
   } 
   /if ((${Ini[afcleric.ini,core,autosit]}==1)&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) { 
      /if (${NearestSpawn[NPC].Distance}<=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Math.Calc[${Ini[afcleric.ini,core,distancetosit]}/3]}]}) /stand 
   } 
   /if (${Ini[afcleric.ini,core,autohealmode]}==0) { 
      /call CheckEvents 
      /goto :tankwatchloop 
   } 
   /if ((${Ini[afcleric.ini,core,autohealmode]}>=1)&&(${Me.PctHPs}<=${Ini[afcleric.ini,healpcts,selfhealpoint]})) /call Healself 
   /if (${Ini[afcleric.ini,core,autohealmode]}>=2) { 
      /if ((${Target.PctHPs}>=85)||(${Target.Distance}>${Ini[afcleric.ini,heals,healspellrange]})||(${Target.PctHPs}<=1)||(!${Target.ID})) { 
         /call Healgroup 
      } 
   } 
   /if ((${Ini[afcleric.ini,core,autohealmode]}<2)&&(${Me.PctHPs}>${Ini[afcleric.ini,healpcts,selfhealpoint]})&&(${Me.PctMana}<=98)) /call MedTime 
   /call CheckEvents 
   /goto :tankwatchloop 
/return 
    

Sub Healself 
   /if (${Me.PctHPs}>${Ini[afcleric.ini,healpcts,selfhealpoint]}) /return 
   /varset stophealpoint 90 
   /if ((!${Target.ID})||(${Target.PctHPs}>=85)||(${Target.PctHPs}<=1)) { 
      /if ((${Me.PctHPs}<=${Ini[afcleric.ini,healpcts,selfhealpoint]})&&(${Me.PctHPs}>${Ini[afcleric.ini,healpcts,dacastpoint]})) { 
         /target myself 
         /delay 6 ${Target.Name.Equal[${Me}]} 
         /if (${Target.Name.Equal[${Me}]}) { 
            /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
            /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
            /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
         } 
      } 
      /if ((${Me.PctHPs}<=${Ini[afcleric.ini,healpcts,dacastpoint]})&&(${Me.SpellReady[${Ini[afcleric.ini,spells,daspell]}]})) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,daannounce]}
         :retryda 
         /call Cast "${Ini[afcleric.ini,spells,daspell]}" 
         /delay 1 
         /if ((!${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID})&&(${Me.SpellReady[${Ini[afcleric.ini,spells,daspell]}]})) /goto :retryda 
         /if ((${Ini[afcleric.ini,core,trickyda]}==1)&&(${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID})) /call TrickyDA 
         :dawait 
         /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) { 
            /delay 1s !${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID} 
            /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
            /call CheckEvents 
            /goto :dawait 
         } 
      }            
   } 
   /if (${Me.PctHPs}<=${Ini[afcleric.ini,healpcts,selfhealpoint]}) { 
      /target myself 
      /delay 6 ${Target.Name.Equal[${Me}]} 
      /if (${Target.Name.Equal[${Me}]}) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
         /varset stophealpoint 90 
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
      } 
   } 
   /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
/return 


Sub Healgroup 
   :healgroup 
   /varset worsthurt NULL 
   /varset worsthp 100 
   /varset minorhurt 0 
   /varset majorhurt 0 
   /varset ghealhurtcount 0 
   /for gmember 0 to ${Group} 
      /if (${Ini[afcleric.ini,core,onlyhealfd]}==0) { 
         /if (${Group[${gmember}].Distance}<=${Ini[afcleric.ini,heals,patchhealrange]}) { 
            /if (${Group[${gmember}].PctHPs}<=${worsthp}) { 
               /varset worsthurt ${Group[${gmember}].Name} 
               /varset worsthp ${Group[${gmember}].PctHPs} 
            } 
         } 
      } 
      /if (${Ini[afcleric.ini,core,onlyhealfd]}==1) { 
         /if (${Group[${gmember}].Distance}<=${Ini[afcleric.ini,heals,patchhealrange]}) { 
            /if ((${Group[${gmember}].Class.Name.NotEqual[Monk]})&&(${Group[${gmember}].Class.Name.NotEqual[Necromancer]})&&(${Group[${gmember}].PctHPs}<=${worsthp})) { 
               /varset worsthurt ${Group[${gmember}].Name} 
               /varset worsthp ${Group[${gmember}].PctHPs} 
            } 
            /if ((${Group[${gmember}].Class.Name.Equal[Monk]})||(${Group[${gmember}].Class.Name.Equal[Necromancer]})) { 
               /if ((${Group[${gmember}].State.Equal[feign]})&&(${Group[${gmember}].PctHPs}<=${worsthp})) { 
                  /varset worsthurt ${Group[${gmember}].Name} 
                  /varset worsthp ${Group[${gmember}].PctHPs} 
               } 
            } 
         } 
      } 
      /if ((${Group[${gmember}].Distance}<=${Ini[afcleric.ini,heals,grouphealrange]})&&(${Group[${gmember}].PctHPs}<=85)) /varcalc ghealhurtcount ${ghealhurtcount}+1 
      /if ((${Group[${gmember}].PctHPs}<=85)&&(${Group[${gmember}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1 
      /if ((${Group[${gmember}].PctHPs}<=60)&&(${Group[${gmember}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1 
   /next gmember 
   /if (${Ini[afcleric.ini,core,autohealmode]}==3) { 
      /if ((!${Target.ID})||(${Target.Name.NotEqual[${tankname}]})) { 
         /Target pc ${tankname} 
         /delay 6 ${Target.Name.Equal[${tankname}]} 
         /delay 1 
         /if ((${Target.Name.Equal[${tankname}]})&&(${Target.PctHPs}<=${healpct})&&(${Target.Distance}<=${Ini[afcleric.ini,heals,healspellrange]})) {
            /call ClearHurts
            /return
         }
      } 
      /if (${Me.PctHPs}<=${Ini[afcleric.ini,healpcts,selfhealpoint]}) {
         /call ClearHurts
         /return
      }
   } 
   /if ((${majorhurt}==0)&&(${minorhurt}==0)) { 
      /Target pc ${tankname} 
      /delay 6 ${Target.Name.Equal[${tankname}]} 
      /delay 1 
      /if ((${Target.Name.Equal[${tankname}]})&&(${Target.PctHPs}>${healpct})&&(${Me.PctMana}<=98)) {
         /call ClearHurts
         /call MedTime 
         /return
      } 
   } 
   /target pc ${worsthurt} 
   /delay 5 ${Target.Name.Equal[${worsthurt}]} 
   /if (!${Target.ID}) /goto :healgroup 
   /if ((${Ini[afcleric.ini,core,usedivarb]}==1)&&(${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,divarbpoint]})&&(${Target.Distance}<=200)&&(${Me.AltAbilityReady[Divine Arbitration]})) { 
      /for gmember 0 to ${Group}
         /if (${Group[${gmember}].Distance}>200) /varcalc divarboor ${divarboor}+1 
      /next gmember 
      /if ((${Group}>=4)&&(${divarboor}<2)) /call Cast "Divine Arbitration" alt 3s 
      /delay 3
      /if ((${Ini[afcleric.ini,core,healafterdivarb]}==1)&&(${Me.PctMana}>40)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,ghealannounce]} 
         /call Cast "${Ini[afcleric.ini,heals,groupheal]}" gem4 1s 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,groupheal]}]}
         /call ClearHurts
      } 
      /varset divarboor 0
      /return 
   } 
   /if (${Target.Name.Equal[${tankname}]}) {
      /call ClearHurts
      /return
   }
   /if (${Target.Name.Equal[${Me}]}) { 
      /call Healself 
      /call CheckEvents
      /call ClearHurts 
      /return 
   } 
   /if ((${Target.PctHPs}>=65)&&(${Ini[afcleric.ini,core,usegroupheal]}==1)&&(${ghealhurtcount}>=3)) { 
      /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,ghealannounce]}
      /call Cast "${Ini[afcleric.ini,heals,groupheal]}" gem4 1s 
      /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,groupheal]}]} 
      /call CheckEvents
      /call ClearHurts
      /return 
   } 
   /if ((${Target.Class.Name.Equal[Warrior]})||(${Target.Class.Name.Equal[Paladin]})||(${Target.Class.Name.Equal[Shadow Knight]})) { 
      /if ((${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,tankhealpoint]})&&(${Target.PctHPs}>=51)&&(${majorhurt}<=1)&&(${minorhurt}<=1)) { 
         /varset stophealpoint 90
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,heal2hannounce]} 
         /call Cast "${Ini[afcleric.ini,heals,healspell2]}" gem1 1s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,healspell2]}]} 
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents
         /call ClearHurts
         /return 
      } 
      /if (${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,tankhealpoint]}) { 
         /varset stophealpoint 90
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents
         /call ClearHurts
         /return 
      } 
   } else /if ((${Target.Class.Name.Equal[Magician]})||(${Target.Class.Name.Equal[Wizard]})||(${Target.Class.Name.Equal[Enchanter]})||(${Target.Class.Name.Equal[Druid]})&&(${Ini[afcleric.ini,core,usehot]}==1)) { 
      /varset stophealpoint ${Math.Calc[${Ini[afcleric.ini,healpcts,casterhotpoint]}+5]} 
      /if ((${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,casterhotpoint]})&&(${Target.PctHPs}>${Ini[afcleric.ini,healpcts,casterpatchpoint]})) { 
         /if ((${Target.Name.Equal[${nohotforua}]})||(${Target.Name.Equal[${nohotforub}]})||(${Target.Name.Equal[${nohotforuc}]})||(${Target.Name.Equal[${nohotforud}]})) { 
            /echo No ${Ini[afcleric.ini,heals,hotspell]} for ${Target.Name} (Timer not up yet) 
            /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
            /return 
         } 
         /if (${String[${nohotforua}].Equal[NULL]}) { 
            /varset nohotforua ${Target.Name} 
            /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,hotannounce]} 
            /call Cast "${Ini[afcleric.ini,heals,hotspell]}" gem3 1s CheckHP 
            /timed 200 /varset nohotforua NULL 
         } else /if (${String[${nohotforub}].Equal[NULL]}) { 
       /varset nohotforub ${Target.Name} 
            /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,hotannounce]}
            /call Cast "${Ini[afcleric.ini,heals,hotspell]}" gem3 1s CheckHP 
            /timed 200 /varset nohotforub NULL 
         } else /if (${String[${nohotforuc}].Equal[NULL]}) { 
       /varset nohotforuc ${Target.Name} 
            /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,hotannounce]}
            /call Cast "${Ini[afcleric.ini,heals,hotspell]}" gem3 1s CheckHP 
            /timed 200 /varset nohotforuc NULL 
         } else /if (${String[${nohotforud}].Equal[NULL]}) { 
       /varset nohotforud ${Target.Name} 
            /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,hotannounce]}
            /call Cast "${Ini[afcleric.ini,heals,hotspell]}" gem3 1s CheckHP 
            /timed 200 /varset nohotforud NULL 
         } 
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents 
         /return 
      } 
      /if ((${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,casterpatchpoint]})&&(${Target.PctHPs}>=1)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
         /return 
      } 
      /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
   } else /if ((${Target.Class.Name.Equal[Magician]})||(${Target.Class.Name.Equal[Wizard]})||(${Target.Class.Name.Equal[Enchanter]})||(${Target.Class.Name.Equal[Druid]})&&(${Ini[afcleric.ini,core,usehot]}==0)) { 
      /varset stophealpoint 90 
      /if (${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,casterhealpoint]})&&(${Target.PctHPs}>=1)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents
         /call ClearHurts
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
         /return 
      } 
      /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
   } else /if ((${Target.Class.Name.Equal[Necromancer]})||(${Target.Class.Name.Equal[Shaman]})) { 
      /varset stophealpoint 90 
      /if ((${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,necshmpatchpoint]})&&(${Target.PctHPs}>=1)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents
         /call ClearHurts
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
         /return 
      } 
      /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]}
      
   } else /if (${Target.Class.Name.Equal[Monk]}) {
      /varset stophealpoint 90 
      /if ((${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,monkpatchpoint]})&&(${Target.PctHPs}>=1)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]} 
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
         /call CheckEvents
         /call ClearHurts
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
         /return 
      } 
      /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]}
   } else /if ((${Target.PctHPs}<=${Ini[afcleric.ini,healpcts,defaultpatchpoint]})&&(${Target.PctHPs}>=1)) { 
      /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
      /varset stophealpoint 90
      /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
      /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]} 
      /call CheckEvents
      /call ClearHurts
      /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
      /return 
   } 
   /varset stophealpoint ${Ini[afcleric.ini,core,defaultstophealpoint]}
   /call ClearHurts
/return 


Sub CheckEvents 
   /delay 1 
   /doevents Chat 
   /doevents tell 
   /doevents flush 
/return

Sub ClearHurts
   /varset minorhurt 0
   /varset majorhurt 0
   /varset ghealhurtcount 0
   /varset worsthp 100
   /varset worsthurt NULL
/return

Sub MedTime 
   :oomwait 
   /call CheckEvents 
   /If ((${FindItem["Rod of Mystical Transvergance"].InvSlot})&&(${Me.PctMana}<=70)&&(${Me.PctHPs}>=98)&&(${rodwait}==0)) { 
      /call Cast "Rod of Mystical Transvergance" item 
      /varset rodwait 1 
      /timed 3000 /varset rodwait 0 
   } 
   /if ((${Ini[afcleric.ini,core,autosit]}==1)&&(${Me.PctMana}<=98)&&(!${Me.Casting.ID})) { 
      /if ((${Bool[${Me.Standing}]})&&(${NearestSpawn[NPC].Distance}>=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Ini[afcleric.ini,core,distancetosit]}]})) /sit 
      /if ((${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})&&(${NearestSpawn[NPC].Distance}<=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Math.Calc[${Ini[afcleric.ini,core,distancetosit]}/3]}]})) /stand 
   } 
   /if ((${Bool[${Me.Standing}]})&&(${Ini[afcleric.ini,core,autosit]}==2)&&(${Me.PctMana}<=98)&&(${Me.PctHPs}>90)&&(!${Me.Casting.ID})) /sit 
   /if ((${Bool[${Me.Sitting}]})&&(${Ini[afcleric.ini,core,autosit]}>=1)&&(${Me.PctMana}>98)&&(!${Window[SpellBookWnd].Open})) /stand 
   /if ((${Bool[${Me.Standing}]})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${Ini[afcleric.ini,spells,yaulpspell]}]})&&(!${Me.Buff[${Ini[afcleric.ini,spells,yaulpspell]}].ID})) { 
      /if ((!${Me.Buff[Vallon].ID})&&(!${Me.Buff[Spiritual Vigor].ID})&&(!${Me.Buff[Strength of Tunare].ID})) /call Cast "${Ini[afcleric.ini,spells,yaulpspell]}" 
   } 
   /if (${buffbeg}==1) /call Buffbeg 
   /if (${Me.PctHPs}<=${Ini[afcleric.ini,healpcts,selfhealpoint]}) /return 
   /if (${Me.PctMana}<=8) /goto :oomwait 
/return 


Sub CheckHP 
   /if ((${Ini[afcleric.ini,core,autointerrupt]}>=1)&&(${Target.PctHPs}>=${stophealpoint})) { 
      /if ((${Ini[afcleric.ini,core,announce]}==1)&&(${duckspam}==1)) { 
         /g ${Ini[afcleric.ini,announce,duckannounce]}
         /e Ducking heal on ${Target.Name} 
         /varset duckspam 0 
         /timed 30 /varset duckspam 1 
      } 
      /call Interrupt 
   } 
   /if ((${Ini[afcleric.ini,core,interrupt2healself]}==1)&&(${Target.Name.NotEqual[${Me}]})&&(${Me.PctHPs}<${Ini[afcleric.ini,core,interrupt2healselfhp]})) { 
      /if ((${Ini[afcleric.ini,core,announce]}==1)&&(${duckselfspam}==1)) { 
         /g ${Ini[afcleric.ini,announce,duckannounce]}
         /e Ducking heal on ${Target} so I can heal myself 
         /varset duckselfspam 0 
         /timed 30 /varset duckselfspam 1 
      } 
      /call Interrupt 
   } 
   /if (${Ini[afcleric.ini,core,onlyhealfd]}==1) { 
      /if ((${Target.Class.Name.Equal[Necromancer]})||(${Target.Class.Name.Equal[Monk]})) { 
         /if (${Target.State.NotEqual[feign]}) { 
            /if ((${Ini[afcleric.ini,core,announce]}==1)&&(${duckfdspam}==1)) { 
               /g ${Ini[afcleric.ini,announce,duckannounce]}
               /e Ducking heal on ${Target.Name} because he isn't staying FD 
               /varset duckfdspam 0 
               /timed 20 /varset duckfdspam 1 
            } 
            /call Interrupt 
         } 
      } 
   } 
/return 


Sub TrickyDA 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Virtue].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Virtue].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Hand of Virtue].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Hand of Virtue].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Focus of Soul].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Focus of Soul].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Focus of the Seventh].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Focus of the Seventh].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Protection of the 9].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Protection of the 9].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Blessing of the Nine].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Blessing of the Nine].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Symbol of Kazad].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Symbol of Kazad].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Kazad`s Mark].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Kazad`s Mark].ID}-1].Int} leftmouseup 
   /if ((${Me.PctHPs}<40)&&(${Me.Buff[Brell's Stalwart Shield].ID})) /notify BuffWindow Buff${Math.Calc[${Me.Buff[Brell's Stalwart Shield].ID}-1].Int} leftmouseup 
   /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) { 
      :waitalittle 
      /delay 1s ${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].Duration}<2 
      /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].Duration}>=2) /goto :waitalittle 
   } 
   /varset buffbeg 1 
   /call Buffbeg 
/return 


Sub Buffbeg 
   /if (${buffbeg}==0) /return 
   /echo Begging for buffs now 
   /if ((!${Me.Buff[Protection of the Nine].ID})&&(!${Me.Buff[Blessing of the Nine].ID})&&(!${Me.Buff[Virtue].ID})&&(!${Me.Buff[Hand of Virtue].ID})) { 
      /if (${String[${NearestSpawn[PC guild druid]}].NotEqual[NULL]}) /if (${NearestSpawn[PC guild druid].Distance}<=100) { 
         /tell ${NearestSpawn[PC guild druid]} need 9 plz 
         /delay 20 
         /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}-1].Int} leftmouseup 
      } else /e No guild Druid available for 9 
   } 
   /if ((!${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID})&&(${Me.PctHPs}<=75)) /call Healself 
   /if ((!${Me.Buff[Focus of the Seventh].ID})&&(!${Me.Buff[Focus of Soul].ID})) { 
      /if (${String[${NearestSpawn[PC guild shaman]}].NotEqual[NULL]}) /if (${NearestSpawn[PC guild shaman].Distance}<=100) { 
         /tell ${NearestSpawn[PC guild shaman]} need focus plz 
         /delay 20 
         /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}-1].Int} leftmouseup 
      } else /e No guild Shaman available for Focus 
   } 
   /if ((!${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID})&&(${Me.PctHPs}<=75)) /call Healself 
   /if ((!${Me.Buff[Brell's Stalwart Shield].ID})&&(!${Me.Buff[Spiritual Vigor].ID})) { 
      /if (${String[${NearestSpawn[PC guild paladin]}].NotEqual[NULL]}) /if (${NearestSpawn[PC guild paladin].Distance}<=100) { 
         /tell ${NearestSpawn[PC guild paladin]} need BSS plz 
         /delay 20 
         /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}-1].Int} leftmouseup 
      } else /e No guild Paladin available for BSS 
   } 
   /if ((!${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID})&&(${Me.PctHPs}<=75)) /call Healself 
   /if ((!${Me.Buff[Voice of Quellious].ID})&&(!${Me.Buff[Tranquility].ID})&&(!${Me.Buff[Koadic's Endless Intellect].ID})) { 
      /if (${String[${NearestSpawn[PC guild enchanter]}].NotEqual[NULL]}) /if (${NearestSpawn[PC guild enchanter].Distance}<=100) { 
         /tell ${NearestSpawn[PC guild enchanter]} need c5 plz 
         /delay 20 
         /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}-1].Int} leftmouseup 
      } else /e No guild Enchanter available for C5 
   } 
   /if ((!${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID})&&(${Me.PctHPs}<=75)) /call Healself 
   /if (!${Me.Buff[Spiritual Dominion].ID}) { 
      /if (${String[${NearestSpawn[PC guild beastlord]}].NotEqual[NULL]}) /if (${NearestSpawn[PC guild beastlord].Distance}<=100) { 
         /tell ${NearestSpawn[PC guild beastlord]} need SD plz 
         /if (${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${Ini[afcleric.ini,spells,daspell]}].ID}-1].Int} leftmouseup 
      } else /e No guild Beastlord available for SD 
   } 
   /varset buffbeg 0 
/return 


Sub Event_Chat(string ChatType,string Sender,string ChatText) 
   /if ((!${ChatType.Equal[${Ini[afcleric.ini,core,mychannel]}]})&&(!${ChatType.Equal[TELL]})) /return 
   /if (!${Spawn[${Sender}].ID}) { 
      /e ${Sender} is not in the zone 
      /return 
   } 
   /if (${ChatText.Equal[Follow me]}) { 
      /delay 5 
      /if (!${Spawn[${Sender}].ID}) { 
         /e ${Sender} is not in zone for me to follow! 
         /return 
      } 
      /varset follname ${Sender} 
      /varset following 1 
      :targetfoll 
      /target pc ${follname} 
      /delay 1s ${Target.Name.Equal[${follname}]} 
      /if (${Target.Name.Equal[${follname}]}) { 
         /goto :Loop 
      } else /goto :targetfoll 
      :Loop 
      /face fast 
      /if (${Target.Distance}>10) /keypress forward hold 
      /if (${Target.Distance}<9) /keypress back 
      /if (!${Target.ID}) /varset following 0 
      /call CheckEvents 
      /if ((${Target.Name.Equal[${follname}]})&&(${following}>0)) { 
         /goto :Loop 
      } else { 
         /keypress forward 
         /keypress back 
      } 
   } 
   /if (${ChatText.Equal[End follow]}) { 
      /varset following 0 
      /keypress forward 
      /keypress back 
      /timed 50 /face pc ${follname} 
   } 
   /if (${ChatText.Equal[Gbuff now!]}) { 
      /varset pallycount 0 
      /target myself 
      /call Cast "${Ini[afcleric.ini,buffs,acbuff]}" gem6 7s 
      /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
      /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
      /for gmember 1 to ${Group} 
         /target pc ${Group[${gmember}].Name} 
         /delay 1s ${Target.Name.Equal[${Group[${gmember}].Name}]} 
         /if (${Target.Name.Equal[${Group[${gmember}].Name}]}) { 
            /if (${Target.Class.Name.NotEqual[Paladin]}) /call Cast "${Ini[afcleric.ini,buffs,acbuff]}" gem5 7s 
            /if (${Target.Class.Name.Equal[Paladin]}) { 
               /call Cast "${Ini[afcleric.ini,buffs,longhpbuff]}" gem4 10s 
               /varcalc pallycount ${pallycount}+1 
            } 
            /if ((${Target.Class.Name.NotEqual[Warrior]})&&(${Target.Class.Name.NotEqual[Monk]})&&(${Target.Class.Name.NotEqual[Rogue]})&&(${Target.Class.Name.NotEqual[Berserker]})&&(${Target.Class.Name.NotEqual[Bard]})) { 
               /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
               /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
            } 
         } 
      /next gmember 
      /if (${Math.Calc[${Group}-${pallycount}]}>=2) /call Cast "${Ini[afcleric.ini,buffs,groupsymbuff]}" gem5 10s 
      /if (${Math.Calc[${Group}-${pallycount}]}<2) { 
         /for gmember 0 to ${Group} 
            /target pc ${Group[${gmember}].Name} 
            /delay 1s ${Target.Name.Equal[${Group[${gmember}].Name}]} 
            /if (${Target.Class.Name.NotEqual[Paladin]}) /call Cast "${Ini[afcleric.ini,buffs,singlesymbuff]}" gem5 7s 
         /next gmember 
      } 
      /delay 5 
   }    
   /if (${ChatText.Equal[BoR now!]}) { 
      /target myself 
      /delay 5 ${Target.Name.Equal[${Me}]} 
      /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
      /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
      /for gmember 1 to ${Group} 
         /target pc ${Group[${gmember}].Name} 
         /delay 1s ${Target.Name.Equal[${Group[${gmember}].Name}]} 
         /if (${Target.Name.Equal[${Group[${gmember}].Name}]}) { 
            /if ((${Target.Class.Name.NotEqual[Warrior]})&&(${Target.Class.Name.NotEqual[Monk]})&&(${Target.Class.Name.NotEqual[Rogue]})&&(${Target.Class.Name.NotEqual[Berserker]})&&(${Target.Class.Name.NotEqual[Bard]})) { 
               /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
               /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
            } 
         } 
      /next gmember 
   }    
   /if (${ChatText.Equal[buffme]}) { 
      /target pc ${Sender} 
      /delay 1s ${Target.Name.Equal[${Sender}]} 
      /if (${Target.Name.Equal[${Sender}]}) { 
         /if (${Target.Class.Name.Equal[Paladin]}) { 
            /call Cast "${Ini[afcleric.ini,buffs,longhpbuff]}" gem4 10s 
            /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
            /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
            /return 
         } 
         /if ((${Target.Class.Name.NotEqual[Warrior]})&&(${Target.Class.Name.NotEqual[Monk]})&&(${Target.Class.Name.NotEqual[Rogue]})&&(${Target.Class.Name.NotEqual[Berserker]})&&(${Target.Class.Name.NotEqual[Bard]})) { 
            /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
            /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
         } 
         /call Cast "${Ini[afcleric.ini,buffs,acbuff]}" gem6 7s 
         /call Cast "${Ini[afcleric.ini,buffs,singlesymbuff]}" gem5 7s 
      } 
   }    
   /if (${ChatText.Equal[sym]}) { 
      /target pc ${Sender} 
      /delay 1s ${Target.Name.Equal[${Sender}]} 
      /call Cast "${Ini[afcleric.ini,buffs,singlesymbuff]}" gem5 7s 
   } 
   /if (${ChatText.Equal[wog]}) { 
      /target pc ${Sender} 
      /delay 1s ${Target.Name.Equal[${Sender}]} 
      /call Cast "${Ini[afcleric.ini,buffs,acbuff]}" gem6 7s 
   } 
   /if (${ChatText.Equal[V]}) { 
      /target pc ${Sender} 
      /delay 1s ${Target.Name.Equal[${Sender}]} 
      /call Cast "${Ini[afcleric.ini,buffs,longhpbuff]}" gem4 10s 
   } 
   /if (${ChatText.Equal[bor]}) { 
      /target pc ${Sender} 
      /delay 1s ${Target.Name.Equal[${Sender}]} 
      /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
      /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${Ini[afcleric.ini,buffs,spellhastebuff]}" gem8 5s 
   } 
   /if (${ChatText.Equal[rgc]}) { 
      /target pc ${Sender} 
      /delay 1s ${Target.Name.Equal[${Sender}]} 
      /if (${FindItem[Blackflame Sphere].ID}) { 
         /call Cast "Blackflame Sphere" item 
      } else /if (${FindItem[Wand of Casual Blessings].ID}) { 
         /call Cast "Wand of Casual Blessings" item 
      } else /call Cast "${Ini[afcleric.ini,spells,rgcspell]}" gem8 5s 
   } 
   /if ((${ChatText.Equal[patch me]})||(${ChatText.Equal[heal]})||(${ChatText.Equal[heal me]})||(${ChatText.Equal[heal plz]})||(${ChatText.Equal[heal me plz]})||(${ChatText.Equal[need heal]})) { 
      /if (${Spawn[pc radius 200 ${Sender}].ID}) { 
         /target pc ${Sender} 
         /delay 1s ${Target.Name.Equal[${Sender}]} 
      } 
      /if ((${Target.Name.Equal[${Sender}]})&&(${Target.Distance}<=${Ini[afcleric.ini,heals,patchhealrange]})) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,patchannounce]}
         /call Cast "${Ini[afcleric.ini,heals,patchheal]}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,patchheal]}]} 
      } else /tell ${Sender} your OOR 
   } 
   /if (${ChatText.Equal[hot me]}) { 
      /if (${Spawn[pc radius 200 ${Sender}].ID}) { 
         /target pc ${Sender} 
         /delay 1s ${Target.Name.Equal[${Sender}]} 
      } 
      /if ((${Target.Name.Equal[${Sender}]})&&(${Target.Distance}<=${Ini[afcleric.ini,heals,hotspellrange]})) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,hotannounce]} 
         /call Cast "${Ini[afcleric.ini,heals,hotspell]}" gem2 2s 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,hotspell]}]} 
      } else /tell ${Sender} your OOR 
   } 
   /if (${ChatText.Equal[ch me]}) { 
      /if (${Spawn[pc radius 200 ${Sender}].ID}) { 
         /target pc ${Sender} 
         /delay 1s ${Target.Name.Equal[${Sender}]} 
      } 
      /if ((${Target.Name.Equal[${Sender}]})&&(${Target.Distance}<=100)) { 
         /if (${Ini[afcleric.ini,core,announce]}==1) /g ${Ini[afcleric.ini,announce,healannounce]}
         /call Cast "Complete Healing" gem2 5s CheckHP 
         /delay 15 ${Me.SpellReady[${Ini[afcleric.ini,heals,hotspell]}]} 
      } else /tell ${Sender} your OOR 
   } 
   /if (${ChatText.Equal[mana check]}) /chat #${Ini[afcleric.ini,core,mychannel]} Cleric Mana ${Me.PctMana}% 
/return
And the ini

Code: Select all

Afcleric.mac Ini File

[core]
autohealmode=3
defaultstophealpoint=100
usehot=0
usegroupheal=1
usedivarb=0
healafterdivarb=1
announce=1
autosit=1
distancetosit=40
autointerrupt=1
onlyhealfd=1
interrupt2healself=1
interrupt2healselfhp=50
noinvis=1
joinchannel=0
mychannel=
trickyda=0


[heals]
healspell=Complete Healing
healspellrange=100
healspell2=Holy Light
healspell2range=100
patchheal=Supernal Remedy
patchhealrange=200
hotspell=Supernal Elixir
hotspellrange=100
groupheal=Word of Replenishment
grouphealrange=70


[healpcts]
healpct=60
selfhealpoint=85
dacastpoint=30
divarbpoint=25
tankhealpoint=65
casterhotpoint=85
casterhealpoint=85
casterpatchpoint=85
necshmpatchpoint=85
defaultpatchpoint=85
monkpatchpoint=60


[spells]
daspell=Divine Barrier
yaulpspell=Yaulp VI
rgcspell=Remove Greater Curse


[buffs]
acbuff=Ward of Gallantry
longhpbuff=Virtue
singlesymbuff=Symbol of Kazad
groupsymbuff=Kazad`s Mark
spellhastebuff=Blessing of Reverence

[announce]
healannounce=CH to < %T > 10 seconds
heal2announce=4K heal to < %T > 3.8 seconds
patchannounce=Quick heal to < %T > 1.8 seconds
hotannounce=HoT to < %T > 500/tick
daannounce=DA!!  No heals for 18 seconds!
ghealannounce=Inc Group Heal, get close
divarbannounce=Inc Divine Arbitration
lomannounce=LOM
oomannounce=OOM
duckannounce=Ducking heal on < %T >

Draimen
a lesser mummy
a lesser mummy
Posts: 69
Joined: Sun Jan 25, 2004 3:13 pm

Post by Draimen » Tue Jul 20, 2004 12:46 am

I meant to make a new variable for the ini file to avoid have to spell out the ini file name each time, but I forgot hehe.

Basically I have converted it to use ini, I added an option as to use HoT or not, I added seperate heal code just for monks. I added a sub that clears all the healgrp variables because I think sometime they weren't getting reset. I hardcoded alot of the stopheal points. And a few more things, can't remember.

If you can use any of my changes go for it. I try to test the macro when I can. Just let me know if I can help any.

fantum409
a ghoul
a ghoul
Posts: 141
Joined: Fri Nov 14, 2003 10:03 pm

Post by fantum409 » Tue Jul 20, 2004 7:11 pm

Wow! hats off guys, good to see this project moving ahead while I'm away on vacation. But think I will have a bunch of reading to do when I get back. The ini version looks like a sound plan, but maybe incorporate a way to read all the healopints from the ini as well, to avoid those being hard coded in?

Maybe will just adopt your version Draimen if it works as good as it looks.

/grins

I will learn a bunch about ini files too finally.
:lol:

awaterbrother
decaying skeleton
decaying skeleton
Posts: 3
Joined: Mon Jul 19, 2004 10:53 am
Location: Los Angeles

Crashing EQ

Post by awaterbrother » Wed Jul 21, 2004 2:37 pm

This macro is crashing EQ to the desktop, not sure why. I tried both the original and guest's version and they both have the same effect. This only happens when my cleric is about to cast CH (only spell I've tried to have him cast so far). I get the group message about casting on <My Tank> and then cleric goes LD and crashes to desktop. Running the 7/19 version of MQ, just in case this makes a difference. Thanks.

DumbStruck
a ghoul
a ghoul
Posts: 125
Joined: Fri Apr 30, 2004 8:46 am

Post by DumbStruck » Thu Jul 22, 2004 12:19 am

Draimen wrote: Try setting the healmode to 2 and see if you still have the problem with it not healing the grp.

I don't have much time to test and shit, but I am sure we can get it working.
I switched it too 2 and it still doesnt heal as a power lvl macro this thing rules 1 on 1 .. but as a grouping macro it doesnt function as well