Page 6 of 29

Posted: Sat Jul 10, 2004 3:53 am
by Draimen
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.

Posted: Sat Jul 10, 2004 10:18 am
by fantum409
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!

Posted: Sat Jul 10, 2004 11:45 am
by stm69
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?

Posted: Thu Jul 15, 2004 1:08 pm
by fantum409
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.

Posted: Sat Jul 17, 2004 9:30 pm
by mystikule
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!

Posted: Sun Jul 18, 2004 7:02 am
by Draimen
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.

Posted: Sun Jul 18, 2004 7:50 am
by JimJohnson
Post or pm it to me Draimen, would love to check it out

Posted: Sun Jul 18, 2004 7:46 pm
by Seariz
Yes please post it, id love to try it out.

Posted: Mon Jul 19, 2004 12:49 pm
by Slice
Will this heal groupmember pets as well?

Posted: Tue Jul 20, 2004 12:33 am
by Draimen
No it doesn't, but that can probably be added.

Posted: Tue Jul 20, 2004 12:35 am
by Draimen
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 >

Posted: Tue Jul 20, 2004 12:46 am
by Draimen
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.

Posted: Tue Jul 20, 2004 7:11 pm
by fantum409
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:

Crashing EQ

Posted: Wed Jul 21, 2004 2:37 pm
by awaterbrother
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.

Posted: Thu Jul 22, 2004 12:19 am
by DumbStruck
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