Page 1 of 1

afcleric2 for druids

Posted: Sat Oct 23, 2004 1:47 pm
by Birdbrain
I used what fantum409 made and decided id change some stuff so druids could use it. So thanks to him heres an afcleric for druids! Please give feedback.

Code: Select all

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

Run the macro with Main Tank targeted.    
   Usage: /mac AFCleric <%health> <Heal spell> 
   Defaults to casting Karana's Renewal 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 

|------------READ THIS SECTION AND EDIT IF NEEDED-----------| 

   /declare mychannel string outer yourchannelhere 
   /declare autohealmode int outer 3 
   /declare healspell string outer Karana's Renewal
   /declare healspellrange int outer 100 
   /declare patchheal string outer Nature's Infusion
   /declare patchhealrange int outer 100 
   
   
   /declare usegroupheal int outer 1 
   /declare groupheal string outer Word of Replenishment 
   /declare grouphealrange int outer 70 
   /declare usedivarb int outer 0 
   /declare healafterdivarb int outer 0 
   /declare announce int outer 1 
   /declare autosit int outer 1 
   /declare distancetosit int outer 40 
   /declare autointerrupt int outer 1 
   /declare onlyhealfd int outer 1 
   /declare interrupt2healself int outer 1 
   /declare interrupt2healselfhp int outer 50 
   /declare noInvis int outer 1 
   /declare defaultstophealpoint int outer 80 
   /declare trickyda int outer 1 
   /declare acbuff string outer Ward of Gallantry 
   /declare longhpbuff string outer Virtue 
   /declare singlesymbuff string outer Symbol of Kazad 
   /declare groupsymbuff string outer Kazad`s Mark 
   /declare spellhastebuff string outer Blessing of Reverence 
   /declare rgcspell string outer Remove Greater Curse 
   /declare healpetmode int outer 2 
   /declare pethealpoint int outer 60 
   /declare manatohealpet int outer 60 
   /declare pethealspell string outer Complete Healing 
   /declare pethealspellrange int outer 100 
   /declare nukeone string outer Order 
   /declare nuketwo string outer Condemnation 
   /declare stunone string outer Sound of Might 
   /declare stuntwo string outer Tarnation 
    

|** Tweak Heals Here - tankhealpoint is for War/Pal/SK other 
than MT, casterpatchpoint refer to 
wiz/mag/enc/dru, necshmpatchpoint refers to necros and 
shamans, defaultpatchpoint refers to all other classes.   **| 

   /declare selfhealpoint int outer 85 
   /declare dacastpoint int outer 29 
   /declare divarbpoint int outer 25 
   /declare tankhealpoint int outer 65 
   
   /declare casterpatchpoint int outer 75
   /declare necshmpatchpoint int outer 60 
   /declare defaultpatchpoint int outer 70 

|------------------------END EDITING------------------------| 

   /declare healpct int outer 60 
   /declare tankname string outer ${Target} 
   /declare tanknameid int outer 
   /declare tankclass string outer 
   /declare minorhurt int outer 0 
   /declare majorhurt int outer 0 
   /declare worsthurt string outer NULL 
   /declare worsthurtid int outer 
   /declare worsthp int outer 100 
   /declare worstclass string outer NULL 
   /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 ${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 nomtspam int outer 1 
   /declare ghealhurtcount int outer 0 
   /declare divarboor int outer 0 


   /join ${mychannel} 
    
   /if (!${Target.ID}) { 
      /echo Target the Tank when you run this macro to designate him as MT 
      /end 
   } else { 
      /varset tanknameid ${Target.ID} 
      /varset tankclass ${Target.Class.Name} 
   } 

   /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 ${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 ${autohealmode} 
   /echo Casting ${healspell} on ${tankname} at ${healpct}% HP 
   /if (${autohealmode}==0) /echo ONLY ${tankname} will be healed 
   /if (${autohealmode}==1) /echo ONLY ${tankname} and myself will be healed 
   /if (${autohealmode}==2) /echo ${tankname}, myself and my group will be healed 
   /if (${autohealmode}==3) /echo ${tankname} and myself will be healed before the rest of the group 
    
   :tankwatchloop 
   /if (${String[${Spawn[${tanknameid}]}].NotEqual[${tankname}]}) /varset tanknameid 0 
   /if (!${Spawn[${tanknameid}].ID}) /if (${Spawn[${tankname}].ID}) { 
      /if (${SpawnCount[${tankname} ${tankclass}]}==1) { 
         /varset tanknameid ${Spawn[${tankname} ${tankclass}].ID} 
         /echo ${Spawn[${tankname} ${tankclass}].Name} is the designated MT and has ID# ${tanknameid} 
      } 
      /if (${SpawnCount[${tankname} ${tankclass}]}>1) { 
         /if (${SpawnCount[pc ${tankname} ${tankclass}]}==1) { 
            /beep 
            /varset tanknameid ${Spawn[pc ${tankname} ${tankclass}].ID} 
            /echo Defaulting to PC ${Spawn[pc ${tankname} ${tankclass}].Name} as MT. If incorrect, please restart macro 
         } else { 
            /beep 
            /echo Need to restart macro to correctly identify the MT 
         } 
      } 
   } 
   /if (${Spawn[${tanknameid}].ID}) /if (${Spawn[${tanknameid}].Type.Equal[Corpse]}) { 
      /if (${SpawnCount[pc ${tankname} ${tankclass}]}==1) { 
         /varset tanknameid ${Spawn[pc ${tankname ${tankclass}}].ID} 
         /echo ${Spawn[pc ${tankname} ${tankclass}].Name} is MT and has ID# ${tanknameid}. If incorrect, please restart macro 
      } 
   } 
   /if ((!${Target.ID})||(${Target.ID}!=${tanknameid})) { 
      /if (${Spawn[${tanknameid}].ID}) /if (${Spawn[${tanknameid}].Type.NotEqual[Corpse]}) { 
         /target id ${tanknameid} 
         /delay 6 ${Target.ID}==${tanknameid} 
      } 
   } 
   /if (!${Spawn[${tanknameid}].ID}) { 
      /if (${nomtspam}==1) { 
         /e Warning No Designated MT is available 
         /timed 300 /varset nomtspam 1 
         /varset nomtspam 0 
      } 
   } 
   /if ((${Me.PctMana}<=20)&&(${announce}==1)&&(${lomspam}==1)) { 
      /g ${Me.PctMana}m 
      /varset lomspam 0 
      /timed 300 /varset lomspam 1 
   } 
   /if ((${Me.PctMana}<=7)&&(${announce}==1)&&(${oomspam}==1)) { 
      /g oom 
      /varset oomspam 0 
      /timed 300 /varset oomspam 1 
      /call MedTime 
   } 
   /if (${GameState.Equal[CHARSELECT]}) /end 
   /if (${Target.ID}==${tanknameid}) { 
      /varset stophealpoint ${Math.Calc[${healpct}*1.1]} 
      /if ((${Target.Distance}<=${patchhealrange})&&(${Target.PctHPs}<=${Math.Calc[0.7*${healpct}]})&&(${Target.PctHPs}>=1)) { 
         /if (${announce}==1) /g Casting ${patchheal} on %T 
         /call Cast "${patchheal}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${patchheal}]} 
      } 
      /if ((${Target.Distance}<=${healspellrange})&&(${Target.PctHPs}<=${healpct})&&(${Target.PctHPs}>=${Math.Calc[0.7*${healpct}]})) { 
         /if (${announce}==1) /g Casting ${healspell} on %T 
         /call Cast "${healspell}" gem1 1s CheckHP 
         /delay 15 ${Me.SpellReady[${healspell}]} 
      } 
      /varset stophealpoint ${defaultstophealpoint} 
      /call CheckEvents 
   } 
   /if ((${autosit}>=1)&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) { 
      /if ((${Me.PctMana}>98)||(${Me.PctHPs}<=90)) /stand 
   } 
   /if ((${autosit}==1)&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) { 
      /if (${NearestSpawn[NPC].Distance}<=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Math.Calc[${distancetosit}/3]}]}) /stand 
   } 
   /if (${autohealmode}==0) { 
      /call CheckEvents 
      /goto :tankwatchloop 
   } 
   /if ((${autohealmode}>=1)&&(${Me.PctHPs}<=${selfhealpoint})) /call Healself 
   /if (${autohealmode}>=2) { 
      /if ((${Target.PctHPs}>${healpct})||(${Target.Distance}>${healspellrange})||(${Target.PctHPs}<=1)||(!${Target.ID})||(${Target.ID}!=${tanknameid})) { 
         /call Healgroup 
      } 
   } 
   /if ((${autohealmode}<2)&&(${Me.PctHPs}>${selfhealpoint})&&(${Me.PctMana}<=98)) /call MedTime 
   /call CheckEvents 
   /goto :tankwatchloop 
/return 
    

Sub Healself 
   /if (${Me.PctHPs}>${selfhealpoint}) /return 
   /varset stophealpoint ${Math.Calc[${selfhealpoint}+5]} 
   /if ((!${Target.ID})||(${Target.PctHPs}>=${Math.Calc[1.1*${healpct}]})||(${Target.PctHPs}<=1)||(${Target.ID}!=${tanknameid})) { 
      /if ((${Me.PctHPs}<=${selfhealpoint})&&(${Me.PctHPs}>${dacastpoint})) { 
         /target myself 
         /delay 6 ${Target.Name.Equal[${Me}]} 
         /if (${Target.Name.Equal[${Me}]}) { 
            /if (${announce}==1) /g Casting ${patchheal} on %T 
            /call Cast "${patchheal}" gem2 1s CheckHP 
            /delay 15 ${Me.SpellReady[${patchheal}]} 
         } 
      } 
      /if ((${Me.PctHPs}<=${dacastpoint})&&(${Me.SpellReady[${daspell}]})) { 
         /if (${announce}==1) /g Casting DA!! <<WARNING>> DA!! No Heals for 18 SECONDS 
         :retryda 
         /call Cast "${daspell}" 
         /delay 1 
         /if ((!${Me.Buff[${daspell}].ID})&&(${Me.SpellReady[${daspell}]})) /goto :retryda 
         /if ((${trickyda}==1)&&(${Me.Buff[${daspell}].ID})) /call TrickyDA 
         :dawait 
         /if (${Me.Buff[${daspell}].ID}) { 
            /delay 1s !${Me.Buff[${daspell}].ID} 
            /varset stophealpoint ${defaultstophealpoint} 
            /call CheckEvents 
            /goto :dawait 
         } 
      }            
   } 
   /if (${Me.PctHPs}<=${Math.Calc[${selfhealpoint}*0.7]}) { 
      /target myself 
      /delay 6 ${Target.Name.Equal[${Me}]} 
      /if (${Target.Name.Equal[${Me}]}) { 
         /if (${announce}==1) /g Casting ${patchheal} on %T 
         /varset stophealpoint ${Math.Calc[${selfhealpoint}+5]} 
         /call Cast "${patchheal}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${patchheal}]} 
      } 
   } 
   /varset stophealpoint ${defaultstophealpoint} 
/return 


Sub Healgroup 
   :healgroup 
   /varset worsthurt NULL 
   /varset worsthp 100 
   /varset worstclass NULL 
   /varset minorhurt 0 
   /varset majorhurt 0 
   /varset ghealhurtcount 0 
   /for gmember 0 to ${Group} 
      /if (${onlyhealfd}==0) { 
         /if (${Group[${gmember}].Distance}<=${patchhealrange}) { 
            /if (${Group[${gmember}].PctHPs}<=${worsthp}) { 
               /varset worsthurt ${Group[${gmember}].Name} 
               /varset worsthurtid ${Group[${gmember}].ID} 
               /varset worsthp ${Group[${gmember}].PctHPs} 
               /varset worstclass ${Group[${gmember}].Class.Name} 
            } 
         } 
      } 
      /if (${onlyhealfd}==1) { 
         /if (${Group[${gmember}].Distance}<=${patchhealrange}) { 
            /if ((${Group[${gmember}].Class.Name.NotEqual[Monk]})&&(${Group[${gmember}].Class.Name.NotEqual[Necromancer]})&&(${Group[${gmember}].PctHPs}<=${worsthp})) { 
               /varset worsthurt ${Group[${gmember}].Name} 
               /varset worsthurtid ${Group[${gmember}].ID} 
               /varset worsthp ${Group[${gmember}].PctHPs} 
               /varset worstclass ${Group[${gmember}].Class.Name} 
            } 
            /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 worsthurtid ${Group[${gmember}].ID} 
                  /varset worsthp ${Group[${gmember}].PctHPs} 
                  /varset worstclass ${Group[${gmember}].Class.Name} 
               } 
            } 
         } 
      } 
      /if ((${Group[${gmember}].Distance}<=${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 (${autohealmode}==3) { 
      /if ((!${Target.ID})||(${Target.Name.NotEqual[${tankname}]})) /if (${Spawn[${tanknameid}].ID}) { 
         /target id ${tanknameid} 
         /delay 6 ${Target.ID}==${tanknameid} 
         /delay 1 
         /if ((${Target.ID}==${tanknameid})&&(${Target.PctHPs}<=${healpct})&&(${Target.Distance}<=${healspellrange})) /return 
      } 
      /if (${Me.PctHPs}<=${selfhealpoint}) /return 
   } 
   /if ((${majorhurt}==0)&&(${minorhurt}==0)) { 
      /if (${Spawn[${tanknameid}].ID}) { 
         /target id ${tanknameid} 
         /delay 6 ${Target.ID}==${tanknameid} 
         /delay 1 
      } 
      /if (((${Target.ID}==${tanknameid})&&(${Target.PctHPs}>${healpct}))||(!${Spawn[${tanknameid}].ID})||(${Spawn[${tanknameid}].Type.Equal[corpse]})) { 
         /if ((${healpetmode}>0)&&(${Me.PctMana}>=${manatohealpet})) /call HealPet 
         /if (${Me.PctMana}<=98) /call MedTime 
      } 
      /call CheckEvents 
      /return 
   } 
   /if ((${usedivarb}==1)&&(${Target.PctHPs}<=${divarbpoint})&&(${Target.Distance}<=200)&&(${Me.AltAbilityReady[Divine Arbitration]})) { 
      /for gmember 0 ${Group} 
         /if (${Group[${gmember}].Distance}>200) /varcalc divarboor ${divarboor}+1 
      /next gmember 
      /if ((${Group}>=3)&&(${divarboor}<2)) /call Cast "Divine Arbitration" alt 3s 
      /delay 3 ${Me.AltAbilityReady[Divine Arbitration]} 
      /if ((${healafterdivarb}==1)&&(${Me.PctMana}>40)) { 
         /if (${announce}==1) /g Inc Grp Heal, get close 
         /call Cast "${groupheal}" gem4 1s 
         /delay 15 ${Me.SpellReady[${groupheal}]} 
      } 
      /varset divarboor 0 
      /return 
   } 
   /if ((${Math.Calc[${majorhurt}+${minorhurt}]}>=3)&&(${usegroupheal}==1)) { 
      /if (${announce}==1) /g Inc Grp Heal, get close 
      /call Cast "${groupheal}" gem4 1s 
      /delay 15 ${Me.SpellReady[${groupheal}]} 
      /call CheckEvents 
      /return 
   } 
   /if (${worsthurtid}==${tanknameid}) /return 
   /if (${worsthurtid}==${Me.ID}) { 
      /call Healself 
      /call CheckEvents 
      /return 
   } 
   /if ((${String[${worstclass}].Equal[Warrior]})||(${String[${worstclass}].Equal[Paladin]})||(${String[${worstclass}].Equal[Shadow Knight]})) { 
      /if ((${worsthp}<=${tankhealpoint})&&(${worsthp}>=${Math.Calc[0.7*${tankhealpoint}]})&&(${majorhurt}<=1)&&(${minorhurt}<=1)) { 
         /target id ${worsthurtid} 
    /delay 5 ${Target.ID}==${worsthurtid} 
         /if (!${Target.ID}) /return 
         /if (${Target.ID}!=${worsthurtid}) /return 
         /varset stophealpoint ${Math.Calc[${tankhealpoint}+5]} 
         /if (${announce}==1) /g Casting ${healspell} on %T 
         /call Cast "${healspell}" gem1 1s CheckHP 
         /delay 15 ${Me.SpellReady[${healspell}]} 
         /varset stophealpoint ${defaultstophealpoint} 
         /call CheckEvents 
         /return 
      } 
      /if (${worsthp}<=${tankhealpoint}) { 
         /target id ${worsthurtid} 
    /delay 5 ${Target.ID}==${worsthurtid} 
         /if (!${Target.ID}) /return 
         /if (${Target.ID}!=${worsthurtid}) /return 
         /varset stophealpoint ${Math.Calc[${tankhealpoint}+5]} 
         /if (${announce}==1) /g Casting ${patchheal} on %T 
         /call Cast "${patchheal}" gem2 1s CheckHP 
         /delay 15 ${Me.SpellReady[${patchheal}]} 
         /varset stophealpoint ${defaultstophealpoint} 
         /call CheckEvents 
         /return 
      } 
   } else /if ((${String[${worstclass}].Equal[Magician]})||(${String[${worstclass}].Equal[Wizard]})||(${String[${worstclass}].Equal[Enchanter]})||(${String[${worstclass}].Equal[Druid]})) { 
      /if ((${worsthp}<=${castpatchpoint})&&(${worsthp}>${casterpatchpoint})) { 
         /if ((${String[${worsthurt}].Equal[${nohotforua}]})||(${String[${worsthurt}].Equal[${nohotforub}]})||(${String[${worsthurt}].Equal[${nohotforuc}]})||(${String[${worsthurt}].Equal[${nohotforud}]})) /return 
         /if (${String[${nohotforua}].Equal[NULL]}) { 
            /target id ${worsthurtid} 
       /delay 5 ${Target.ID}==${worsthurtid} 
       /if (!${Target.ID}) /return 
            /if (${Target.ID}!=${worsthurtid}) /return 
            /varset nohotforua ${Target.Name} 
            /if (${announce}==1) /g Casting ${hotspell} on %T 
            /varset stophealpoint ${Math.Calc[${casterpatchpoint}+5]} 
            /call Cast "${hotspell}" gem3 1s CheckHP 
            /timed 200 /varset nohotforua NULL 
            /delay 15 ${Me.SpellReady[${hotspell}]} 
         } else /if (${String[${nohotforub}].Equal[NULL]}) { 
            /target id ${worsthurtid} 
       /delay 5 ${Target.ID}==${worsthurtid} 
       /if (!${Target.ID}) /return 
            /if (${Target.ID}!=${worsthurtid}) /return 
       /varset nohotforub ${Target.Name} 
            /if (${announce}==1) /g Casting ${hotspell} on %T 
            /varset stophealpoint ${Math.Calc[${casterhotpoint}+5]} 
            /call Cast "${hotspell}" gem3 1s CheckHP 
            /timed 200 /varset nohotforub NULL 
            /delay 15 ${Me.SpellReady[${hotspell}]} 
         } else /if (${String[${nohotforuc}].Equal[NULL]}) { 
            /target id${worsthurtid} 
       /delay 5 ${Target.ID}==${worsthurtid} 
       /if (!${Target.ID}) /return 
            /if (${Target.ID}!=${worsthurtid}) /return 
       /varset nohotforuc ${Target.Name} 
            /if (${announce}==1) /g Casting ${patchealspell} on %T 
            /varset stophealpoint ${Math.Calc[${casterhotpoint}+5]} 
            /call Cast "${hotspell}" gem3 1s CheckHP 
            /timed 200 /varset nohotforuc NULL 
            /delay 15 ${Me.SpellReady[${hotspell}]} 
         } else /if (${String[${nohotforud}].Equal[NULL]}) { 
            /target id ${worsthurtid} 
       /delay 5 ${Target.ID}==${worsthurtid} 
       /if (!${Target.ID}) /return 
            /if (${Target.ID}!=${worsthurtid}) /return 
       /varset nohotforud ${Target.Name} 
            /if (${announce}==1) /g Casting ${patchealspell} on %T 
            /varset stophealpoint ${Math.Calc[${casterpatchpoint}+5]} 
            /call Cast "${hotspell}" gem3 1s CheckHP 
            /timed 200 /varset nohotforud NULL 
            /delay 15 ${Me.SpellReady[${hotspell}]} 
         } 
         /varset stophealpoint ${defaultstophealpoint} 
         /call CheckEvents 
         /return 
      } 
      /if ((${worsthp}<=${casterpatchpoint})&&(${worsthp}>=1)) { 
         /target id ${worsthurtid} 
    /delay 5 ${Target.ID}==${worsthurtid} 
    /if (!${Target.ID}) /return 
         /if (${Target.ID}!=${worsthurtid}) /return 
         /if (${announce}==1) /g Casting ${patchheal} on %T 
         /call Cast "${patchheal}" gem2 1s CheckHP 
         /varset stophealpoint ${defaultstophealpoint} 
         /call CheckEvents 
         /delay 15 ${Me.SpellReady[${patchheal}]} 
         /return 
      } 
      /varset stophealpoint ${defaultstophealpoint} 
   } else /if ((${String[${worstclass}].Equal[Necromancer]})||(${String[${worstclass}].Equal[Shaman]})) { 
      /if ((${worsthp}<=${necshmpatchpoint})&&(${worsthp}>=1)) { 
         /target id ${worsthurtid} 
    /delay 5 ${Target.ID}==${worsthurtid} 
    /if (!${Target.ID}) /return 
         /if (${Target.ID}!=${worsthurtid}) /return 
         /varset stophealpoint ${Math.Calc[${necshmpatchpoint}+5]} 
         /if (${announce}==1) /g Casting ${patchheal} on %T 
    /call Cast "${patchheal}" gem2 1s CheckHP 
    /varset stophealpoint ${defaultstophealpoint} 
    /call CheckEvents 
    /delay 15 ${Me.SpellReady[${patchheal}]} 
    /return 
      } 
   } else /if ((${worsthp}<=${defaultpatchpoint})&&(${worsthp}>=1)) { 
      /target id ${worsthurtid} 
      /delay 5 ${Target.ID}==${worsthurtid} 
      /if (!${Target.ID}) /return 
      /if (${Target.ID}!=${worsthurtid}) /return 
      /if (${announce}==1) /g Casting ${patchheal} on %T 
      /varset stophealpoint ${Math.Calc[${defaultpatchpoint}+5]} 
      /call Cast "${patchheal}" gem2 1s CheckHP 
      /varset stophealpoint ${defaultstophealpoint} 
      /call CheckEvents 
      /delay 15 ${Me.SpellReady[${patchheal}]} 
      /return 
   } 
   /varset stophealpoint ${defaultstophealpoint} 
   /if ((${healpetmode}==2)&&(${Me.PctMana}>${manatohealpet})) /call HealPet 
/return 


Sub HealPet 
   /varset worsthurt NULL 
   /varset worsthp 100 
   /for gmember 0 to ${Group} 
      /if (${Group[${gmember}].Pet.ID}) { 
         /if (${Group[${gmember}].Pet.Distance}<=${pethealspellrange}) { 
            /if ((${Group[${gmember}].Pet.PctHPs}<=${worsthp})&&(${Group[${gmember}].Pet.PctHPs}<=${pethealpoint})) { 
               /varset worsthurt ${Group[${gmember}].Pet.Name} 
               /varset worsthurtid ${Group[${gmember}].Pet.ID} 
               /varset worsthp ${Group[${gmember}].Pet.PctHPs} 
            } 
         } 
      } 
   /next gmember 
   /if (${String[${worsthurt}].NotEqual[NULL]}) { 
      /target id ${worsthurtid} 
      /delay 5 ${Target.ID}==${worsthurtid} 
      /if (!${Target.ID}) /return 
      /if (${Target.ID}!=${worsthurtid}) /return 
      /delay 3 
      /if (${Target.PctHPs}<=${pethealpoint}) { 
         /if (${announce}==1) /g Casting ${pethealspell} on %T 
         /varset stophealpoint ${Math.Calc[${pethealpoint}+5]} 
         /call Cast "${pethealspell}" spell 1s CheckHP 
         /varset stophealpoint ${defaultstophealpoint} 
         /delay 15 ${Me.SpellReady[${pethealspell}]} 
      } 
   } 
/return 


Sub CheckEvents 
   /delay 1 
   /doevents Chat 
   /doevents tell 
   /doevents flush 
/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 ((${autosit}==1)&&(${Me.PctMana}<=98)&&(!${Me.Casting.ID})) { 
      /if ((${Bool[${Me.Standing}]})&&(${NearestSpawn[NPC].Distance}>=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${distancetosit}]})&&(${Me.PctHPs}>90)) /sit 
      /if ((${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})&&(${NearestSpawn[NPC].Distance}<=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Math.Calc[${distancetosit}/3]}]})) /stand 
   } 
   /if ((${Bool[${Me.Standing}]})&&(${autosit}==2)&&(${Me.PctMana}<=98)&&(${Me.PctHPs}>90)&&(!${Me.Casting.ID})) /sit 
   /if ((${Bool[${Me.Sitting}]})&&(${autosit}>=1)&&(${Me.PctMana}>98)&&(!${Window[SpellBookWnd].Open})) /stand 
   /if ((${Bool[${Me.Standing}]})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${yaulpspell}]})&&(!${Me.Buff[${yaulpspell}].ID})) { 
      /if ((!${Me.Buff[Vallon].ID})&&(!${Me.Buff[Spiritual Vigor].ID})&&(!${Me.Buff[Strength of Tunare].ID})) /call Cast "${yaulpspell}" 
   } 
   /if (${buffbeg}==1) /call Buffbeg 
   /if (${Me.PctHPs}<=${selfhealpoint}) /return 
   /if (${Me.PctMana}<=8) /goto :oomwait 
/return 


Sub CheckHP 
   /if (!${Window[CastingWindow].Open}) /return 
   /if ((${autointerrupt}>=1)&&(${Target.PctHPs}>=${stophealpoint})) { 
      /if ((${announce}==1)&&(${duckspam}==1)) { 
         /g Ducking heal on %T 
         /e Ducking heal on ${Target.Name} 
         /varset duckspam 0 
         /timed 60 /varset duckspam 1 
      } 
      /call Interrupt 
   } 
   /if ((${interrupt2healself}==1)&&(${Target.Name.NotEqual[${Me}]})&&(${Me.PctHPs}<${interrupt2healselfhp})) { 
      /if ((${announce}==1)&&(${duckselfspam}==1)) { 
         /g Ducking heal on %T so I can heal my (ChickenShit) self 
         /e Ducking heal on ${Target} so I can heal myself 
         /varset duckselfspam 0 
         /timed 60 /varset duckselfspam 1 
      } 
      /call Interrupt 
   } 
   /if (${onlyhealfd}==1) { 
      /if ((${Target.Class.Name.Equal[Necromancer]})||(${Target.Class.Name.Equal[Monk]})) { 
         /if (${Target.State.NotEqual[feign]}) { 
            /if ((${announce}==1)&&(${duckfdspam}==1)) { 
               /g Ducking heal on %T because he isn't staying FD 
               /e Ducking heal on ${Target.Name} because he isn't staying FD 
               /varset duckfdspam 0 
               /timed 40 /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[${daspell}].ID}) { 
      :waitalittle 
      /delay 1s ${Me.Buff[${daspell}].Duration}<2 
      /if (${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
      } else /e No guild Druid available for 9 
   } 
   /if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
      } else /e No guild Shaman available for Focus 
   } 
   /if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
      } else /e No guild Paladin available for BSS 
   } 
   /if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
      } else /e No guild Enchanter available for C5 
   } 
   /if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
      } else /e No guild Beastlord available for SD 
   } 
   /varset buffbeg 0 
/return 


Sub FindExactPC(string name) 
   /declare nameid int local 
   /declare counter int local 1 
   :FindNext 
   /if (!${NearestSpawn[${counter}, pc ${name}].ID}) /return NOT_FOUND 
   /varset nameid ${NearestSpawn[${counter}, pc ${name}].ID} 
   /if (${Spawn[${nameid}].CleanName.Equal[${name}]}) { 
      /target id ${nameid} 
      /delay 1s ${Target.ID}==${nameid} 
      /if (${Target.ID}==${nameid}) /return TARGET_SUCCESS 
   } 
   /varcalc counter ${counter}+1 
   /if (${NearestSpawn[${counter}, pc ${name}].ID}) /goto :FindNext 
/return NOT_FOUND 


Sub Event_Chat(string ChatType,string Sender,string ChatText) 
   /if ((!${ChatType.Equal[${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 "${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 "${spellhastebuff}" gem8 5s 
      /for gmember 1 to ${Group} 
         /target id ${Group[${gmember}].ID} 
         /delay 1s ${Target.ID}==${Group[${gmember}].ID} 
         /if (${Target.ID}==${Group[${gmember}].ID}) { 
            /if (${Target.Class.Name.NotEqual[Paladin]}) /call Cast "${acbuff}" gem5 7s 
            /if (${Target.Class.Name.Equal[Paladin]}) { 
               /call Cast "${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 "${spellhastebuff}" gem8 5s 
            } 
         } 
      /next gmember 
      /if (${Math.Calc[${Group}-${pallycount}]}>=2) /call Cast "${groupsymbuff}" gem5 10s 
      /if (${Math.Calc[${Group}-${pallycount}]}<2) { 
         /for gmember 0 to ${Group} 
            /target id ${Group[${gmember}].ID} 
            /delay 1s ${Target.ID}==${Group[${gmember}].ID} 
            /if (${Target.Class.Name.NotEqual[Paladin]}) /call Cast "${singlesymbuff}" gem5 7s 
         /next gmember 
      } 
   }    
   /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 "${spellhastebuff}" gem8 5s 
      /for gmember 1 to ${Group} 
         /target id ${Group[${gmember}].ID} 
         /delay 1s ${Target.ID}==${Group[${gmember}].ID} 
         /if (${Target.ID}==${Group[${gmember}].ID}) { 
            /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 "${spellhastebuff}" gem8 5s 
            } 
         } 
      /next gmember 
   }    
   /if (${ChatText.Equal[nuke]}) { 
      /if (${Me.PctMana}<30) { 
         /chat #${mychannel} Cleric Mana ${Me.PctMana}%, holding on nukes! 
      } else { 
         /assist ${Sender} 
         /delay 5 
         /if (${Target.Type.NotEqual[NPC]}) { 
            /assist ${Sender} 
            /delay 5 ${Target.Type.Equal[NPC]} 
         } 
         /if ((${Target.Type.Equal[NPC]})&&(${Target.PctHPs}<=90)) { 
            /if (${Me.SpellReady[${nukeone}]}) { 
               /if (${announce}==1) /g Casting ${nukeone} on %T 
               /call Cast "${nukeone}" spell 3s 
            } else /if (${Me.SpellReady[${nuketwo}]}) { 
               /if (${announce}==1) /g Casting ${nuketwo} on %T 
               /call Cast "${nuketwo}" spell 3s 
            } else /chat #${mychannel} nukes not ready 
            /if (${Me.PctMana}<=60) /chat #${mychannel} FYI Cleric Mana ${Me.PctMana}% 
         } else /chat #${mychannel} wrong target (${Target.Type} at ${Target.PctHPs}% HP) 
      } 
   } 
   /if (${ChatText.Equal[stun]}) { 
      /assist ${Sender} 
      /delay 5 
      /if (${Target.Type.NotEqual[NPC]}) { 
         /assist ${Sender} 
         /delay 5 ${Target.Type.Equal[NPC]} 
      } 
      /if ((${Target.Type.Equal[NPC]})&&(${Target.PctHPs}<=90)) { 
         /if (${Me.SpellReady[${stunone}]}) { 
            /if (${announce}==1) /g Casting ${stunone} on %T 
            /call Cast "${stunone}" spell 3s 
         } else /if (${Me.SpellReady[${stuntwo}]}) { 
            /if (${announce}==1) /g Casting ${stuntwo} on %T 
            /call Cast "${stuntwo}" spell 3s 
         } else /chat #${mychannel} stuns not ready 
      } else /chat #${mychannel} wrong target (${Target.Type} at ${Target.PctHPs}% HP) 
   } 
   /if (${ChatText.Equal[buffme]}) { 
      /call FindExactPC ${Sender} 
      /if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return 
      /if (${Target.Class.Name.Equal[Paladin]}) { 
         /call Cast "${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 "${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 "${spellhastebuff}" gem8 5s 
      } 
      /call Cast "${acbuff}" gem6 7s 
      /call Cast "${singlesymbuff}" gem5 7s 
   } 
   /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]})) { 
      /call FindExactPC ${Sender} 
      /if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return 
      /if (${Target.Distance}<=${patchhealrange}) { 
         /if (${announce}==1) /g Casting ${patchheal} on %T 
         /call Cast "${patchheal}" gem2 2s 
         /delay 15 ${Me.SpellReady[${patchheal}]} 
      } else /tell ${Sender} your OOR 
   } 
   /if ((${ChatText.Equal[sym]})||(${ChatText.Equal[wog]})||(${ChatText.Equal[V]})||(${ChatText.Equal[bor]})||(${ChatText.Equal[rgc]})||(${ChatText.Equal[hot me]})||(${ChatText.Equal[ch me]})||(${ChatText.Equal[pb]})) { 
      /if (${Spawn[pc ${Sender}].Distance}>250) /return 
      /call FindExactPC ${Sender} 
      /if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return 
   } 
   /if (${ChatText.Equal[sym]}) /call Cast "${singlesymbuff}" gem5 7s 
   /if (${ChatText.Equal[wog]}) /call Cast "${acbuff}" gem6 7s 
   /if (${ChatText.Equal[V]}) /call Cast "${longhpbuff}" gem4 10s 
   /if (${ChatText.Equal[bor]}) { 
      /if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
      /if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${spellhastebuff}" gem8 5s 
   } 
   /if (${ChatText.Equal[rgc]}) { 
      /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 "${rgcspell}" gem8 5s 
   } 
   /if (${ChatText.Equal[pb]}) /call Cast "Pure Blood" gem6 10s 
   /if (${ChatText.Equal[hot me]}) { 
      /if (${Target.Distance}<=${hotspellrange}) { 
         /if (${announce}==1) /g Casting ${hotspell} on %T 
         /call Cast "${hotspell}" gem2 2s 
         /delay 15 ${Me.SpellReady[${hotspell}]} 
      } else /tell ${Sender} your OOR 
   } 
   /if (${ChatText.Equal[ch me]}) { 
      /if (${Target.Distance}<=100) { 
         /if (${announce}==1) /g Casting Complete Healing on %T 
         /call Cast "Complete Healing" gem2 5s 
         /delay 15 ${Me.SpellReady[${hotspell}]} 
      } else /tell ${Sender} your OOR 
   } 
   /if (${ChatText.Equal[mana check]}) /chat #${mychannel} Cleric Mana ${Me.PctMana}% 
   /if (${ChatText.Equal[slowcamp]}) { 
      /if (${Me.Standing}) /sit 
      /delay 5m ${Me.PctMana}>=98 
      /camp 
      /end 
   } 
/return

Posted: Sat Oct 23, 2004 1:51 pm
by oneoneone
I use something very similar. Nice work.

Posted: Sat Oct 23, 2004 1:51 pm
by Birdbrain
I have some bugs in it i need to work out that ill fix later.

Posted: Sat Oct 23, 2004 1:52 pm
by peach
use code tags to make it look pretty?

Posted: Sat Oct 23, 2004 2:54 pm
by Birdbrain
anyone know how to make it use spirit of the wood for word of replenishment or divine arb? Im no pro at making macros :P i can just edit some stuff and make it work.

Posted: Sat Oct 23, 2004 5:02 pm
by geostone

Code: Select all

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

Run the macro with Main Tank targeted. 
Usage: /mac AFCleric <%health> <Heal spell> 
Defaults to casting Karana's Renewal 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 

|------------READ THIS SECTION AND EDIT IF NEEDED-----------| 

/declare mychannel string outer yourchannelhere 
/declare autohealmode int outer 3 
/declare healspell string outer Karana's Renewal 
/declare healspellrange int outer 100 
/declare patchheal string outer Nature's Infusion 
/declare patchhealrange int outer 100 


/declare usegroupheal int outer 1 
/declare groupheal string outer Word of Replenishment 
/declare grouphealrange int outer 70 
/declare usedivarb int outer 0 
/declare healafterdivarb int outer 0 
/declare announce int outer 1 
/declare autosit int outer 1 
/declare distancetosit int outer 40 
/declare autointerrupt int outer 1 
/declare onlyhealfd int outer 1 
/declare interrupt2healself int outer 1 
/declare interrupt2healselfhp int outer 50 
/declare noInvis int outer 1 
/declare defaultstophealpoint int outer 80 
/declare trickyda int outer 1 
/declare acbuff string outer Ward of Gallantry 
/declare longhpbuff string outer Virtue 
/declare singlesymbuff string outer Symbol of Kazad 
/declare groupsymbuff string outer Kazad`s Mark 
/declare spellhastebuff string outer Blessing of Reverence 
/declare rgcspell string outer Remove Greater Curse 
/declare healpetmode int outer 2 
/declare pethealpoint int outer 60 
/declare manatohealpet int outer 60 
/declare pethealspell string outer Complete Healing 
/declare pethealspellrange int outer 100 
/declare nukeone string outer Order 
/declare nuketwo string outer Condemnation 
/declare stunone string outer Sound of Might 
/declare stuntwo string outer Tarnation 


|** Tweak Heals Here - tankhealpoint is for War/Pal/SK other 
than MT, casterpatchpoint refer to 
wiz/mag/enc/dru, necshmpatchpoint refers to necros and 
shamans, defaultpatchpoint refers to all other classes. **| 

/declare selfhealpoint int outer 85 
/declare dacastpoint int outer 29 
/declare divarbpoint int outer 25 
/declare tankhealpoint int outer 65 

/declare casterpatchpoint int outer 75 
/declare necshmpatchpoint int outer 60 
/declare defaultpatchpoint int outer 70 

|------------------------END EDITING------------------------| 

/declare healpct int outer 60 
/declare tankname string outer ${Target} 
/declare tanknameid int outer 
/declare tankclass string outer 
/declare minorhurt int outer 0 
/declare majorhurt int outer 0 
/declare worsthurt string outer NULL 
/declare worsthurtid int outer 
/declare worsthp int outer 100 
/declare worstclass string outer NULL 
/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 ${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 nomtspam int outer 1 
/declare ghealhurtcount int outer 0 
/declare divarboor int outer 0 


/join ${mychannel} 

/if (!${Target.ID}) { 
/echo Target the Tank when you run this macro to designate him as MT 
/end 
} else { 
/varset tanknameid ${Target.ID} 
/varset tankclass ${Target.Class.Name} 
} 

/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 ${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 ${autohealmode} 
/echo Casting ${healspell} on ${tankname} at ${healpct}% HP 
/if (${autohealmode}==0) /echo ONLY ${tankname} will be healed 
/if (${autohealmode}==1) /echo ONLY ${tankname} and myself will be healed 
/if (${autohealmode}==2) /echo ${tankname}, myself and my group will be healed 
/if (${autohealmode}==3) /echo ${tankname} and myself will be healed before the rest of the group 

:tankwatchloop 
/if (${String[${Spawn[${tanknameid}]}].NotEqual[${tankname}]}) /varset tanknameid 0 
/if (!${Spawn[${tanknameid}].ID}) /if (${Spawn[${tankname}].ID}) { 
/if (${SpawnCount[${tankname} ${tankclass}]}==1) { 
/varset tanknameid ${Spawn[${tankname} ${tankclass}].ID} 
/echo ${Spawn[${tankname} ${tankclass}].Name} is the designated MT and has ID# ${tanknameid} 
} 
/if (${SpawnCount[${tankname} ${tankclass}]}>1) { 
/if (${SpawnCount[pc ${tankname} ${tankclass}]}==1) { 
/beep 
/varset tanknameid ${Spawn[pc ${tankname} ${tankclass}].ID} 
/echo Defaulting to PC ${Spawn[pc ${tankname} ${tankclass}].Name} as MT. If incorrect, please restart macro 
} else { 
/beep 
/echo Need to restart macro to correctly identify the MT 
} 
} 
} 
/if (${Spawn[${tanknameid}].ID}) /if (${Spawn[${tanknameid}].Type.Equal[Corpse]}) { 
/if (${SpawnCount[pc ${tankname} ${tankclass}]}==1) { 
/varset tanknameid ${Spawn[pc ${tankname ${tankclass}}].ID} 
/echo ${Spawn[pc ${tankname} ${tankclass}].Name} is MT and has ID# ${tanknameid}. If incorrect, please restart macro 
} 
} 
/if ((!${Target.ID})||(${Target.ID}!=${tanknameid})) { 
/if (${Spawn[${tanknameid}].ID}) /if (${Spawn[${tanknameid}].Type.NotEqual[Corpse]}) { 
/target id ${tanknameid} 
/delay 6 ${Target.ID}==${tanknameid} 
} 
} 
/if (!${Spawn[${tanknameid}].ID}) { 
/if (${nomtspam}==1) { 
/e Warning No Designated MT is available 
/timed 300 /varset nomtspam 1 
/varset nomtspam 0 
} 
} 
/if ((${Me.PctMana}<=20)&&(${announce}==1)&&(${lomspam}==1)) { 
/g ${Me.PctMana}m 
/varset lomspam 0 
/timed 300 /varset lomspam 1 
} 
/if ((${Me.PctMana}<=7)&&(${announce}==1)&&(${oomspam}==1)) { 
/g oom 
/varset oomspam 0 
/timed 300 /varset oomspam 1 
/call MedTime 
} 
/if (${GameState.Equal[CHARSELECT]}) /end 
/if (${Target.ID}==${tanknameid}) { 
/varset stophealpoint ${Math.Calc[${healpct}*1.1]} 
/if ((${Target.Distance}<=${patchhealrange})&&(${Target.PctHPs}<=${Math.Calc[0.7*${healpct}]})&&(${Target.PctHPs}>=1)) { 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/call Cast "${patchheal}" gem2 1s CheckHP 
/delay 15 ${Me.SpellReady[${patchheal}]} 
} 
/if ((${Target.Distance}<=${healspellrange})&&(${Target.PctHPs}<=${healpct})&&(${Target.PctHPs}>=${Math.Calc[0.7*${healpct}]})) { 
/if (${announce}==1) /g Casting ${healspell} on %T 
/call Cast "${healspell}" gem1 1s CheckHP 
/delay 15 ${Me.SpellReady[${healspell}]} 
} 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
} 
/if ((${autosit}>=1)&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) { 
/if ((${Me.PctMana}>98)||(${Me.PctHPs}<=90)) /stand 
} 
/if ((${autosit}==1)&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) { 
/if (${NearestSpawn[NPC].Distance}<=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Math.Calc[${distancetosit}/3]}]}) /stand 
} 
/if (${autohealmode}==0) { 
/call CheckEvents 
/goto :tankwatchloop 
} 
/if ((${autohealmode}>=1)&&(${Me.PctHPs}<=${selfhealpoint})) /call Healself 
/if (${autohealmode}>=2) { 
/if ((${Target.PctHPs}>${healpct})||(${Target.Distance}>${healspellrange})||(${Target.PctHPs}<=1)||(!${Target.ID})||(${Target.ID}!=${tanknameid})) { 
/call Healgroup 
} 
} 
/if ((${autohealmode}<2)&&(${Me.PctHPs}>${selfhealpoint})&&(${Me.PctMana}<=98)) /call MedTime 
/call CheckEvents 
/goto :tankwatchloop 
/return 


Sub Healself 
/if (${Me.PctHPs}>${selfhealpoint}) /return 
/varset stophealpoint ${Math.Calc[${selfhealpoint}+5]} 
/if ((!${Target.ID})||(${Target.PctHPs}>=${Math.Calc[1.1*${healpct}]})||(${Target.PctHPs}<=1)||(${Target.ID}!=${tanknameid})) { 
/if ((${Me.PctHPs}<=${selfhealpoint})&&(${Me.PctHPs}>${dacastpoint})) { 
/target myself 
/delay 6 ${Target.Name.Equal[${Me}]} 
/if (${Target.Name.Equal[${Me}]}) { 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/call Cast "${patchheal}" gem2 1s CheckHP 
/delay 15 ${Me.SpellReady[${patchheal}]} 
} 
} 
/if ((${Me.PctHPs}<=${dacastpoint})&&(${Me.SpellReady[${daspell}]})) { 
/if (${announce}==1) /g Casting DA!! <<WARNING>> DA!! No Heals for 18 SECONDS 
:retryda 
/call Cast "${daspell}" 
/delay 1 
/if ((!${Me.Buff[${daspell}].ID})&&(${Me.SpellReady[${daspell}]})) /goto :retryda 
/if ((${trickyda}==1)&&(${Me.Buff[${daspell}].ID})) /call TrickyDA 
:dawait 
/if (${Me.Buff[${daspell}].ID}) { 
/delay 1s !${Me.Buff[${daspell}].ID} 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/goto :dawait 
} 
} 
} 
/if (${Me.PctHPs}<=${Math.Calc[${selfhealpoint}*0.7]}) { 
/target myself 
/delay 6 ${Target.Name.Equal[${Me}]} 
/if (${Target.Name.Equal[${Me}]}) { 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/varset stophealpoint ${Math.Calc[${selfhealpoint}+5]} 
/call Cast "${patchheal}" gem2 1s CheckHP 
/delay 15 ${Me.SpellReady[${patchheal}]} 
} 
} 
/varset stophealpoint ${defaultstophealpoint} 
/return 


Sub Healgroup 
:healgroup 
/varset worsthurt NULL 
/varset worsthp 100 
/varset worstclass NULL 
/varset minorhurt 0 
/varset majorhurt 0 
/varset ghealhurtcount 0 
/for gmember 0 to ${Group} 
/if (${onlyhealfd}==0) { 
/if (${Group[${gmember}].Distance}<=${patchhealrange}) { 
/if (${Group[${gmember}].PctHPs}<=${worsthp}) { 
/varset worsthurt ${Group[${gmember}].Name} 
/varset worsthurtid ${Group[${gmember}].ID} 
/varset worsthp ${Group[${gmember}].PctHPs} 
/varset worstclass ${Group[${gmember}].Class.Name} 
} 
} 
} 
/if (${onlyhealfd}==1) { 
/if (${Group[${gmember}].Distance}<=${patchhealrange}) { 
/if ((${Group[${gmember}].Class.Name.NotEqual[Monk]})&&(${Group[${gmember}].Class.Name.NotEqual[Necromancer]})&&(${Group[${gmember}].PctHPs}<=${worsthp})) { 
/varset worsthurt ${Group[${gmember}].Name} 
/varset worsthurtid ${Group[${gmember}].ID} 
/varset worsthp ${Group[${gmember}].PctHPs} 
/varset worstclass ${Group[${gmember}].Class.Name} 
} 
/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 worsthurtid ${Group[${gmember}].ID} 
/varset worsthp ${Group[${gmember}].PctHPs} 
/varset worstclass ${Group[${gmember}].Class.Name} 
} 
} 
} 
} 
/if ((${Group[${gmember}].Distance}<=${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 (${autohealmode}==3) { 
/if ((!${Target.ID})||(${Target.Name.NotEqual[${tankname}]})) /if (${Spawn[${tanknameid}].ID}) { 
/target id ${tanknameid} 
/delay 6 ${Target.ID}==${tanknameid} 
/delay 1 
/if ((${Target.ID}==${tanknameid})&&(${Target.PctHPs}<=${healpct})&&(${Target.Distance}<=${healspellrange})) /return 
} 
/if (${Me.PctHPs}<=${selfhealpoint}) /return 
} 
/if ((${majorhurt}==0)&&(${minorhurt}==0)) { 
/if (${Spawn[${tanknameid}].ID}) { 
/target id ${tanknameid} 
/delay 6 ${Target.ID}==${tanknameid} 
/delay 1 
} 
/if (((${Target.ID}==${tanknameid})&&(${Target.PctHPs}>${healpct}))||(!${Spawn[${tanknameid}].ID})||(${Spawn[${tanknameid}].Type.Equal[corpse]})) { 
/if ((${healpetmode}>0)&&(${Me.PctMana}>=${manatohealpet})) /call HealPet 
/if (${Me.PctMana}<=98) /call MedTime 
} 
/call CheckEvents 
/return 
} 
/if ((${usedivarb}==1)&&(${Target.PctHPs}<=${divarbpoint})&&(${Target.Distance}<=200)&&(${Me.AltAbilityReady[Divine Arbitration]})) { 
/for gmember 0 ${Group} 
/if (${Group[${gmember}].Distance}>200) /varcalc divarboor ${divarboor}+1 
/next gmember 
/if ((${Group}>=3)&&(${divarboor}<2)) /call Cast "Divine Arbitration" alt 3s 
/delay 3 ${Me.AltAbilityReady[Divine Arbitration]} 
/if ((${healafterdivarb}==1)&&(${Me.PctMana}>40)) { 
/if (${announce}==1) /g Inc Grp Heal, get close 
/call Cast "${groupheal}" gem4 1s 
/delay 15 ${Me.SpellReady[${groupheal}]} 
} 
/varset divarboor 0 
/return 
} 
/if ((${Math.Calc[${majorhurt}+${minorhurt}]}>=3)&&(${usegroupheal}==1)) { 
/if (${announce}==1) /g Inc Grp Heal, get close 
/call Cast "${groupheal}" gem4 1s 
/delay 15 ${Me.SpellReady[${groupheal}]} 
/call CheckEvents 
/return 
} 
/if (${worsthurtid}==${tanknameid}) /return 
/if (${worsthurtid}==${Me.ID}) { 
/call Healself 
/call CheckEvents 
/return 
} 
/if ((${String[${worstclass}].Equal[Warrior]})||(${String[${worstclass}].Equal[Paladin]})||(${String[${worstclass}].Equal[Shadow Knight]})) { 
/if ((${worsthp}<=${tankhealpoint})&&(${worsthp}>=${Math.Calc[0.7*${tankhealpoint}]})&&(${majorhurt}<=1)&&(${minorhurt}<=1)) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset stophealpoint ${Math.Calc[${tankhealpoint}+5]} 
/if (${announce}==1) /g Casting ${healspell} on %T 
/call Cast "${healspell}" gem1 1s CheckHP 
/delay 15 ${Me.SpellReady[${healspell}]} 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/return 
} 
/if (${worsthp}<=${tankhealpoint}) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset stophealpoint ${Math.Calc[${tankhealpoint}+5]} 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/call Cast "${patchheal}" gem2 1s CheckHP 
/delay 15 ${Me.SpellReady[${patchheal}]} 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/return 
} 
} else /if ((${String[${worstclass}].Equal[Magician]})||(${String[${worstclass}].Equal[Wizard]})||(${String[${worstclass}].Equal[Enchanter]})||(${String[${worstclass}].Equal[Druid]})) { 
/if ((${worsthp}<=${castpatchpoint})&&(${worsthp}>${casterpatchpoint})) { 
/if ((${String[${worsthurt}].Equal[${nohotforua}]})||(${String[${worsthurt}].Equal[${nohotforub}]})||(${String[${worsthurt}].Equal[${nohotforuc}]})||(${String[${worsthurt}].Equal[${nohotforud}]})) /return 
/if (${String[${nohotforua}].Equal[NULL]}) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset nohotforua ${Target.Name} 
/if (${announce}==1) /g Casting ${hotspell} on %T 
/varset stophealpoint ${Math.Calc[${casterpatchpoint}+5]} 
/call Cast "${hotspell}" gem3 1s CheckHP 
/timed 200 /varset nohotforua NULL 
/delay 15 ${Me.SpellReady[${hotspell}]} 
} else /if (${String[${nohotforub}].Equal[NULL]}) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset nohotforub ${Target.Name} 
/if (${announce}==1) /g Casting ${hotspell} on %T 
/varset stophealpoint ${Math.Calc[${casterhotpoint}+5]} 
/call Cast "${hotspell}" gem3 1s CheckHP 
/timed 200 /varset nohotforub NULL 
/delay 15 ${Me.SpellReady[${hotspell}]} 
} else /if (${String[${nohotforuc}].Equal[NULL]}) { 
/target id${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset nohotforuc ${Target.Name} 
/if (${announce}==1) /g Casting ${patchealspell} on %T 
/varset stophealpoint ${Math.Calc[${casterhotpoint}+5]} 
/call Cast "${hotspell}" gem3 1s CheckHP 
/timed 200 /varset nohotforuc NULL 
/delay 15 ${Me.SpellReady[${hotspell}]} 
} else /if (${String[${nohotforud}].Equal[NULL]}) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset nohotforud ${Target.Name} 
/if (${announce}==1) /g Casting ${patchealspell} on %T 
/varset stophealpoint ${Math.Calc[${casterpatchpoint}+5]} 
/call Cast "${hotspell}" gem3 1s CheckHP 
/timed 200 /varset nohotforud NULL 
/delay 15 ${Me.SpellReady[${hotspell}]} 
} 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/return 
} 
/if ((${worsthp}<=${casterpatchpoint})&&(${worsthp}>=1)) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/call Cast "${patchheal}" gem2 1s CheckHP 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/delay 15 ${Me.SpellReady[${patchheal}]} 
/return 
} 
/varset stophealpoint ${defaultstophealpoint} 
} else /if ((${String[${worstclass}].Equal[Necromancer]})||(${String[${worstclass}].Equal[Shaman]})) { 
/if ((${worsthp}<=${necshmpatchpoint})&&(${worsthp}>=1)) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/varset stophealpoint ${Math.Calc[${necshmpatchpoint}+5]} 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/call Cast "${patchheal}" gem2 1s CheckHP 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/delay 15 ${Me.SpellReady[${patchheal}]} 
/return 
} 
} else /if ((${worsthp}<=${defaultpatchpoint})&&(${worsthp}>=1)) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/varset stophealpoint ${Math.Calc[${defaultpatchpoint}+5]} 
/call Cast "${patchheal}" gem2 1s CheckHP 
/varset stophealpoint ${defaultstophealpoint} 
/call CheckEvents 
/delay 15 ${Me.SpellReady[${patchheal}]} 
/return 
} 
/varset stophealpoint ${defaultstophealpoint} 
/if ((${healpetmode}==2)&&(${Me.PctMana}>${manatohealpet})) /call HealPet 
/return 


Sub HealPet 
/varset worsthurt NULL 
/varset worsthp 100 
/for gmember 0 to ${Group} 
/if (${Group[${gmember}].Pet.ID}) { 
/if (${Group[${gmember}].Pet.Distance}<=${pethealspellrange}) { 
/if ((${Group[${gmember}].Pet.PctHPs}<=${worsthp})&&(${Group[${gmember}].Pet.PctHPs}<=${pethealpoint})) { 
/varset worsthurt ${Group[${gmember}].Pet.Name} 
/varset worsthurtid ${Group[${gmember}].Pet.ID} 
/varset worsthp ${Group[${gmember}].Pet.PctHPs} 
} 
} 
} 
/next gmember 
/if (${String[${worsthurt}].NotEqual[NULL]}) { 
/target id ${worsthurtid} 
/delay 5 ${Target.ID}==${worsthurtid} 
/if (!${Target.ID}) /return 
/if (${Target.ID}!=${worsthurtid}) /return 
/delay 3 
/if (${Target.PctHPs}<=${pethealpoint}) { 
/if (${announce}==1) /g Casting ${pethealspell} on %T 
/varset stophealpoint ${Math.Calc[${pethealpoint}+5]} 
/call Cast "${pethealspell}" spell 1s CheckHP 
/varset stophealpoint ${defaultstophealpoint} 
/delay 15 ${Me.SpellReady[${pethealspell}]} 
} 
} 
/return 


Sub CheckEvents 
/delay 1 
/doevents Chat 
/doevents tell 
/doevents flush 
/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 ((${autosit}==1)&&(${Me.PctMana}<=98)&&(!${Me.Casting.ID})) { 
/if ((${Bool[${Me.Standing}]})&&(${NearestSpawn[NPC].Distance}>=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${distancetosit}]})&&(${Me.PctHPs}>90)) /sit 
/if ((${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})&&(${NearestSpawn[NPC].Distance}<=${Math.Calc[${NearestSpawn[NPC].MaxRange}+${Math.Calc[${distancetosit}/3]}]})) /stand 
} 
/if ((${Bool[${Me.Standing}]})&&(${autosit}==2)&&(${Me.PctMana}<=98)&&(${Me.PctHPs}>90)&&(!${Me.Casting.ID})) /sit 
/if ((${Bool[${Me.Sitting}]})&&(${autosit}>=1)&&(${Me.PctMana}>98)&&(!${Window[SpellBookWnd].Open})) /stand 
/if ((${Bool[${Me.Standing}]})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${yaulpspell}]})&&(!${Me.Buff[${yaulpspell}].ID})) { 
/if ((!${Me.Buff[Vallon].ID})&&(!${Me.Buff[Spiritual Vigor].ID})&&(!${Me.Buff[Strength of Tunare].ID})) /call Cast "${yaulpspell}" 
} 
/if (${buffbeg}==1) /call Buffbeg 
/if (${Me.PctHPs}<=${selfhealpoint}) /return 
/if (${Me.PctMana}<=8) /goto :oomwait 
/return 


Sub CheckHP 
/if (!${Window[CastingWindow].Open}) /return 
/if ((${autointerrupt}>=1)&&(${Target.PctHPs}>=${stophealpoint})) { 
/if ((${announce}==1)&&(${duckspam}==1)) { 
/g Ducking heal on %T 
/e Ducking heal on ${Target.Name} 
/varset duckspam 0 
/timed 60 /varset duckspam 1 
} 
/call Interrupt 
} 
/if ((${interrupt2healself}==1)&&(${Target.Name.NotEqual[${Me}]})&&(${Me.PctHPs}<${interrupt2healselfhp})) { 
/if ((${announce}==1)&&(${duckselfspam}==1)) { 
/g Ducking heal on %T so I can heal my (ChickenShit) self 
/e Ducking heal on ${Target} so I can heal myself 
/varset duckselfspam 0 
/timed 60 /varset duckselfspam 1 
} 
/call Interrupt 
} 
/if (${onlyhealfd}==1) { 
/if ((${Target.Class.Name.Equal[Necromancer]})||(${Target.Class.Name.Equal[Monk]})) { 
/if (${Target.State.NotEqual[feign]}) { 
/if ((${announce}==1)&&(${duckfdspam}==1)) { 
/g Ducking heal on %T because he isn't staying FD 
/e Ducking heal on ${Target.Name} because he isn't staying FD 
/varset duckfdspam 0 
/timed 40 /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[${daspell}].ID}) { 
:waitalittle 
/delay 1s ${Me.Buff[${daspell}].Duration}<2 
/if (${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
} else /e No guild Druid available for 9 
} 
/if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
} else /e No guild Shaman available for Focus 
} 
/if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
} else /e No guild Paladin available for BSS 
} 
/if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
} else /e No guild Enchanter available for C5 
} 
/if ((!${Me.Buff[${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[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup 
} else /e No guild Beastlord available for SD 
} 
/varset buffbeg 0 
/return 


Sub FindExactPC(string name) 
/declare nameid int local 
/declare counter int local 1 
:FindNext 
/if (!${NearestSpawn[${counter}, pc ${name}].ID}) /return NOT_FOUND 
/varset nameid ${NearestSpawn[${counter}, pc ${name}].ID} 
/if (${Spawn[${nameid}].CleanName.Equal[${name}]}) { 
/target id ${nameid} 
/delay 1s ${Target.ID}==${nameid} 
/if (${Target.ID}==${nameid}) /return TARGET_SUCCESS 
} 
/varcalc counter ${counter}+1 
/if (${NearestSpawn[${counter}, pc ${name}].ID}) /goto :FindNext 
/return NOT_FOUND 


Sub Event_Chat(string ChatType,string Sender,string ChatText) 
/if ((!${ChatType.Equal[${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 "${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 "${spellhastebuff}" gem8 5s 
/for gmember 1 to ${Group} 
/target id ${Group[${gmember}].ID} 
/delay 1s ${Target.ID}==${Group[${gmember}].ID} 
/if (${Target.ID}==${Group[${gmember}].ID}) { 
/if (${Target.Class.Name.NotEqual[Paladin]}) /call Cast "${acbuff}" gem5 7s 
/if (${Target.Class.Name.Equal[Paladin]}) { 
/call Cast "${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 "${spellhastebuff}" gem8 5s 
} 
} 
/next gmember 
/if (${Math.Calc[${Group}-${pallycount}]}>=2) /call Cast "${groupsymbuff}" gem5 10s 
/if (${Math.Calc[${Group}-${pallycount}]}<2) { 
/for gmember 0 to ${Group} 
/target id ${Group[${gmember}].ID} 
/delay 1s ${Target.ID}==${Group[${gmember}].ID} 
/if (${Target.Class.Name.NotEqual[Paladin]}) /call Cast "${singlesymbuff}" gem5 7s 
/next gmember 
} 
} 
/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 "${spellhastebuff}" gem8 5s 
/for gmember 1 to ${Group} 
/target id ${Group[${gmember}].ID} 
/delay 1s ${Target.ID}==${Group[${gmember}].ID} 
/if (${Target.ID}==${Group[${gmember}].ID}) { 
/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 "${spellhastebuff}" gem8 5s 
} 
} 
/next gmember 
} 
/if (${ChatText.Equal[nuke]}) { 
/if (${Me.PctMana}<30) { 
/chat #${mychannel} Cleric Mana ${Me.PctMana}%, holding on nukes! 
} else { 
/assist ${Sender} 
/delay 5 
/if (${Target.Type.NotEqual[NPC]}) { 
/assist ${Sender} 
/delay 5 ${Target.Type.Equal[NPC]} 
} 
/if ((${Target.Type.Equal[NPC]})&&(${Target.PctHPs}<=90)) { 
/if (${Me.SpellReady[${nukeone}]}) { 
/if (${announce}==1) /g Casting ${nukeone} on %T 
/call Cast "${nukeone}" spell 3s 
} else /if (${Me.SpellReady[${nuketwo}]}) { 
/if (${announce}==1) /g Casting ${nuketwo} on %T 
/call Cast "${nuketwo}" spell 3s 
} else /chat #${mychannel} nukes not ready 
/if (${Me.PctMana}<=60) /chat #${mychannel} FYI Cleric Mana ${Me.PctMana}% 
} else /chat #${mychannel} wrong target (${Target.Type} at ${Target.PctHPs}% HP) 
} 
} 
/if (${ChatText.Equal[stun]}) { 
/assist ${Sender} 
/delay 5 
/if (${Target.Type.NotEqual[NPC]}) { 
/assist ${Sender} 
/delay 5 ${Target.Type.Equal[NPC]} 
} 
/if ((${Target.Type.Equal[NPC]})&&(${Target.PctHPs}<=90)) { 
/if (${Me.SpellReady[${stunone}]}) { 
/if (${announce}==1) /g Casting ${stunone} on %T 
/call Cast "${stunone}" spell 3s 
} else /if (${Me.SpellReady[${stuntwo}]}) { 
/if (${announce}==1) /g Casting ${stuntwo} on %T 
/call Cast "${stuntwo}" spell 3s 
} else /chat #${mychannel} stuns not ready 
} else /chat #${mychannel} wrong target (${Target.Type} at ${Target.PctHPs}% HP) 
} 
/if (${ChatText.Equal[buffme]}) { 
/call FindExactPC ${Sender} 
/if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return 
/if (${Target.Class.Name.Equal[Paladin]}) { 
/call Cast "${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 "${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 "${spellhastebuff}" gem8 5s 
} 
/call Cast "${acbuff}" gem6 7s 
/call Cast "${singlesymbuff}" gem5 7s 
} 
/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]})) { 
/call FindExactPC ${Sender} 
/if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return 
/if (${Target.Distance}<=${patchhealrange}) { 
/if (${announce}==1) /g Casting ${patchheal} on %T 
/call Cast "${patchheal}" gem2 2s 
/delay 15 ${Me.SpellReady[${patchheal}]} 
} else /tell ${Sender} your OOR 
} 
/if ((${ChatText.Equal[sym]})||(${ChatText.Equal[wog]})||(${ChatText.Equal[V]})||(${ChatText.Equal[bor]})||(${ChatText.Equal[rgc]})||(${ChatText.Equal[hot me]})||(${ChatText.Equal[ch me]})||(${ChatText.Equal[pb]})) { 
/if (${Spawn[pc ${Sender}].Distance}>250) /return 
/call FindExactPC ${Sender} 
/if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return 
} 
/if (${ChatText.Equal[sym]}) /call Cast "${singlesymbuff}" gem5 7s 
/if (${ChatText.Equal[wog]}) /call Cast "${acbuff}" gem6 7s 
/if (${ChatText.Equal[V]}) /call Cast "${longhpbuff}" gem4 10s 
/if (${ChatText.Equal[bor]}) { 
/if (${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "Breastplate of Vengeful Fury" item 
/if (!${FindItem[Breastplate of Vengeful Fury].ID}) /call Cast "${spellhastebuff}" gem8 5s 
} 
/if (${ChatText.Equal[rgc]}) { 
/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 "${rgcspell}" gem8 5s 
} 
/if (${ChatText.Equal[pb]}) /call Cast "Pure Blood" gem6 10s 
/if (${ChatText.Equal[hot me]}) { 
/if (${Target.Distance}<=${hotspellrange}) { 
/if (${announce}==1) /g Casting ${hotspell} on %T 
/call Cast "${hotspell}" gem2 2s 
/delay 15 ${Me.SpellReady[${hotspell}]} 
} else /tell ${Sender} your OOR 
} 
/if (${ChatText.Equal[ch me]}) { 
/if (${Target.Distance}<=100) { 
/if (${announce}==1) /g Casting Complete Healing on %T 
/call Cast "Complete Healing" gem2 5s 
/delay 15 ${Me.SpellReady[${hotspell}]} 
} else /tell ${Sender} your OOR 
} 
/if (${ChatText.Equal[mana check]}) /chat #${mychannel} Cleric Mana ${Me.PctMana}% 
/if (${ChatText.Equal[slowcamp]}) { 
/if (${Me.Standing}) /sit 
/delay 5m ${Me.PctMana}>=98 
/camp 
/end 
} 
/return

Posted: Sat Oct 23, 2004 7:49 pm
by geostone
not an expert by any means but it still seems to me there is a lot of cleric stuff in the macro still. just thought id post the one i use that unless i am trained or grouped with idiots hasnt let me down yet. the only problem i have had is targeting a mount or someones pet sometimes in which case i just end it and heal them myself. this is what i use in wos for yard trash with 0 deaths to my fault.

note: i got it from these boards none of this work is mine

Code: Select all

#event MeHit "#*#hits YOU for#*#" 
#event OutOfMana "Insufficient Mana to cast this spell!" 
#event OutOfRange "Your target is out of range, get closer!" 
#event Fizzle "Your spell fizzles!" 
#event SkinBuffs "#*#Your skin returns to normal#*#" 
#event FoE "#*#The avian spirit departs#*#"    
#event Fizzle "#*#Your spell fizzles#*#" 
#event Death "#*#You have entered#*#" 
#event bracken "#*#The bracken falls away#*#" 
#event might "#*#Your natural might fades#*#" 

Sub Main 
/declare Healpct int outer 65
/declare Fastheal string outer Nature's Infusion 
/declare Groupnum int outer 
/declare i int outer  
/declare Delay int outer 
/declare Casting string outer 

:chkevent 
   /doevents 
   /varset Groupnum ${Group} 
   | *** AutoHeal *** 
:Healcheck 
   /for i 1 to ${Group} 
      /if (${Group[${i}].PctHPs}<=${Healpct}) { 
              /if (${Group[${i}].PctHPs}<1) /goto :nextmember 
              /if (${Group[${i}].Class.Name.Equal["Warrior"]}) /goto :Tankheal 
              /if (${Group[${i}].Class.Name.Equal["Paladin"]}) /goto :Tankheal 
              /if (${Group[${i}].Class.Name.Equal["Shadow Knight"]}) /goto :Tankheal 
              /if (${Group[${i}].Class.Name.Equal["Monk"]}) /goto :Tankheal 
         /doevents 
         /goto :CasterHeal 

:Tankheal 
          
             /target ${Group[${i}].Name} 
             /stand 
             /g Inc 'Super Duid' Incomplete Heal on %t in 10 seconds stay close or die trying! 
             /varset Casting Karana's Renewal 
             /cast "Karana's Renewal" 
             /doevents 
             /varset Delay ${Math.Calc[${Spell[Karana's Renewal].MyCastTime}*10+10]} 
             /delay ${Delay}  
             /goto :nextmember 
          

:Casterheal 
    
             /target ${Group[${i}].Name} 
             /g Incoming 'Super Druid' quickheal on %t! 
             /varset Delay ${Math.Calc[${Spell[${Fastheal}].MyCastTime}*10+25]} 
             /varset Casting ${Fastheal} 
             /cast "${Fastheal}" 
             /doevents 
             /delay ${Delay} 
             /if (${Sit}==1) /sit 
         } 
:nextmember 
      } 
   /next i 
   /goto :chkevent 
/return 

Sub Event_MeHit 
    /if (${Me.PctHPs}<=60 { 
                
                /target myself 
                /stand 
                /g Quickhealing 'Super Druid' %t! 
                /varset Casting Nature's Infusion 
                /cast "Nature's Infusion" 
                /doevents 
                /varset Delay ${Math.Calc[${Spell[Nature's Infusion].MyCastTime}*10+5]} 
                /delay ${Delay} 
              
          
    } else /if (${Me.PctHPs}<=40 AND ${Me.PctHPs}>25) { 
            /target myself 
            /stand 
            /g Fast Heal on %t! 
            /varset Delay ${Math.Calc[${Spell[${Fastheal}].MyCastTime}*10+25]} 
            /varset Casting ${Fastheal} 
            /cast "${Fastheal}" 
            /doevents 
            /delay ${Delay} 
          
    } else { 
        /stand 
    }    
          
        
      
/return 

Sub Event_FoE 
 /keypress back 
   /keypress F1 
   /delay 1s 
   /cast "Flight of Eagles" 
   /delay 6s 
   /keypress esc 
/return 

Sub Event_SkinBuffs 
 /keypress back 
   /keypress F1 
   /delay 1s 
   /cast "Brackencoat" 
   /delay 6s 
   /keypress esc 
/return 

Sub Event_might 
 /keypress back 
  /keypress F1 
  /delay 1s 
  /cast "Nature's Might" 
/return 

Sub Event_bracken 
 /keypress back 
  /keypress F1 
  /delay 1s 
  /cast "Legacy of Bracken" 
/return 

Sub Event_fizzle 
/return DAMN_FIZZLE 
/if (${Macro.Return.Equal["DAMN_FIZZLE"]}) /goto :Healcheck 

Sub Event_OutOfRange 
    /g %t your OOR of the Super Druid! 
    /delay 1s 
/return 


Posted: Fri Oct 29, 2004 6:09 pm
by Birdbrain
/bump