Moderator: MacroQuest Developers
Code: Select all
/declare divarbpoint int outer 25 
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}%
/returnCode: 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 >

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 wellDraimen 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.