|- healer.mac
|- Author: Alatyami, Redguides.com Moderator
|- Original Credits:
|------------------------------------------------------------------------------|
|- Modifications:
|- [07-14-2005] * Fixed the TLO errors
|- * Removed trickyda, it didn't really work to well anyways
|------------------------------------------------------------------------------|
#include spell_routines.inc
#include Exp_Tracking.inc
#event Exp "You gain#*#"
#Chat Chat
#Chat tell
Sub Main
|------------------READ THIS SECTION AND EDIT IF NEEDED------------------------|
|- The following declarations are used to determine spell names and spell
|- ranges for the spells you would like to use.
/declare mychannel string outer pullhealer
/declare autohealmode int outer 3
|-Edit this line to change your start message to the primary tank
/declare tankstartmsg string outer Healer alive and awake .. lets kill stuff
/declare healspell string outer Complete Healing
/declare healspellrange int outer 100
/declare patchheal string outer Ethereal Light
/declare patchhealrange int outer 200
/declare hotspell string outer Celestial Elixir
/declare hotspellrange int outer 100
/declare daspell string outer Divine Barrier
/declare yaulpspell string outer Yaulp V
/declare usegroupheal int outer 1
/declare groupheal string outer Word of Restoration
/declare grouphealrange int outer 70
/declare usedivarb int outer 1
/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 acbuff string outer Ward of Valiance
/declare longhpbuff string outer Conviction
/declare singlesymbuff string outer Symbol of Balikor
/declare groupsymbuff string outer NULL
/declare spellhastebuff string outer Blessing of Reverence
/declare rgcspell string outer Remove Greater Curse
/declare healpetmode int outer 2
/declare pethealpoint int outer 65
/declare manatohealpet int outer 25
/declare pethealspell string outer Complete Healing
/declare pethealspellrange int outer 100
/declare nukeone string outer Judgement
/declare nuketwo string outer Order
/declare stunone string outer Sound of Divinity
/declare stuntwo string outer Shock of Wonder
/declare rootspellname string outer Greater Immobilize
/declare rootspelltime int outer 2
|------------------------------------------------------------------------------|
/declare selfhealpoint int outer 70
/declare dacastpoint int outer 29
/declare divarbpoint int outer 25
/declare interrupt2divarb int outer 12
|- Heal at % for WAR/PAL/SK
/declare tankhealpoint int outer 65
|- Heal at % for WIZ/MAG/ENC/DRU
/declare casterhotpoint int outer 85
/declare casterpatchpoint int outer 60
|- Heal at % for NEC/SHM
/declare necshmpatchpoint int outer 60
|- Heal at % for all other classes
/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
/declare aetime int outer 0
|-- Uncomment the following line if you want to use a chat channel
|-- /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}
}
}
/call ExpPrep |- Start the xp tracker,
/echo AutoHealer Active, running in Autohealmode ${autohealmode}
/echo Casting ${healspell} on ${tankname} at ${healpct}% HP
/tell ${tankname} You are me primary heal.
/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 (${Spawn[${tanknameid}].Name.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}<=50)&&(${announce}==1)&&(${lomspam}==1)) {
/tell ${tankname} ${Me.PctMana}m
/varset lomspam 0
/timed 300 /varset lomspam 1
}
/if ((${Me.PctMana}<=7)&&(${announce}==1)&&(${oomspam}==1)) {
/tell ${tankname} 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) /tell ${tankname} (${patchheal}) --- %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) /tell ${tankname} (${healspell}) --- %T ---
/call Cast "${healspell}" gem1 1s CheckHP
/delay 15 ${Me.SpellReady[${healspell}]}
/if (${announce}==1) /tell ${tankname} ${Me.PctMana}
}
/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) /tell ${tankname} (${patchheal}) --- %T ---
/call Cast "${patchheal}" gem2 1s CheckHP
/delay 15 ${Me.SpellReady[${patchheal}]}
}
}
}
/if (${Me.PctHPs}<=${Math.Calc[${selfhealpoint}*0.7]}) {
/target myself
/delay 6 ${Target.Name.Equal[${Me}]}
/if (${Target.Name.Equal[${Me}]}) {
/if (${announce}==1) /tell ${tankname} (${patchheal}) --- %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.Member[${gmember}].Distance}<=${patchhealrange}) {
/if (${Group.Member[${gmember}].PctHPs}<=${worsthp}) {
/varset worsthurt ${Group.Member[${gmember}].Name}
/varset worsthurtid ${Group.Member[${gmember}].ID}
/varset worsthp ${Group.Member[${gmember}].PctHPs}
/varset worstclass ${Group.Member[${gmember}].Class.Name}
}
}
}
/if (${onlyhealfd}==1) {
/if (${Group.Member[${gmember}].Distance}<=${patchhealrange}) {
/if ((${Group.Member[${gmember}].Class.Name.NotEqual[Monk]})&&(${Group.Member[${gmember}].Class.Name.NotEqual[Necromancer]})&&(${Group.Member[${gmember}].PctHPs}<=${worsthp})) {
/varset worsthurt ${Group.Member[${gmember}].Name}
/varset worsthurtid ${Group.Member[${gmember}].ID}
/varset worsthp ${Group.Member[${gmember}].PctHPs}
/varset worstclass ${Group.Member[${gmember}].Class.Name}
}
/if ((${Group.Member[${gmember}].Class.Name.Equal[Monk]})||(${Group.Member[${gmember}].Class.Name.Equal[Necromancer]})) {
/if ((${Group.Member[${gmember}].State.Equal[feign]})&&(${Group.Member[${gmember}].PctHPs}<=${worsthp})) {
/varset worsthurt ${Group.Member[${gmember}].Name}
/varset worsthurtid ${Group.Member[${gmember}].ID}
/varset worsthp ${Group.Member[${gmember}].PctHPs}
/varset worstclass ${Group.Member[${gmember}].Class.Name}
}
}
}
}
/if ((${Group.Member[${gmember}].Distance}<=${grouphealrange})&&(${Group.Member[${gmember}].PctHPs}<=85)) /varcalc ghealhurtcount ${ghealhurtcount}+1
/if ((${Group.Member[${gmember}].PctHPs}<=85)&&(${Group.Member[${gmember}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1
/if ((${Group.Member[${gmember}].PctHPs}<=60)&&(${Group.Member[${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 (${Me.PctMana}<=98) /call MedTime
}
/call CheckEvents
/return
}
/if ((${usedivarb}==1)&&(${worsthp}<=${divarbpoint})&&(${Me.AltAbilityReady[divine arbitration]})) /call Divarbcast
/if ((${Math.Calc[${majorhurt}+${minorhurt}]}>=3)&&(${usegroupheal}==1)) {
/if (${announce}==1) /tell ${tankname} 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 ((${worstclass}.Equal[Warrior]})||(${worstclass}.Equal[Paladin]})||(${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) /tell ${tankname} ((${healspell}) --- %T ---
/if (${announce}==1) /tell ${tankname} ${Me.PctMana}
/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) /tell ${tankname} (${patchheal}) --- %T ---
/call Cast "${patchheal}" gem2 1s CheckHP
/delay 15 ${Me.SpellReady[${patchheal}]}
/varset stophealpoint ${defaultstophealpoint}
/call CheckEvents
/return
}
} else /if ((${worstclass}.Equal[Magician]})||([${worstclass}.Equal[Wizard]})||(${worstclass}.Equal[Enchanter]})||(${worstclass}.Equal[Druid]})) {
/if ((${worsthp}<=${casterhotpoint})&&(${worsthp}>${casterpatchpoint})) {
/if ((${worsthurt}.Equal[${nohotforua}]})||(${worsthurt}.Equal[${nohotforub}]})||(${worsthurt}.Equal[${nohotforuc}]})||(${worsthurt}.Equal[${nohotforud}]})) /return
/if (${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) /tell ${tankname} (${hotspell}) --- %T ---
/varset stophealpoint ${Math.Calc[${casterhotpoint}+5]}
/call Cast "${hotspell}" gem3 1s CheckHP
/timed 200 /varset nohotforua NULL
/delay 15 ${Me.SpellReady[${hotspell}]}
} else /if (${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) /tell ${tankname} (${hotspell}) --- %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 (${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) /tell ${tankname} (${hotspell}) --- %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 (${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) /tell ${tankname} (${hotspell}) --- %T ---
/varset stophealpoint ${Math.Calc[${casterhotpoint}+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) /tell ${tankname} (${patchheal}) --- %T ---
/call Cast "${patchheal}" gem2 1s CheckHP
/varset stophealpoint ${defaultstophealpoint}
/call CheckEvents
/delay 15 ${Me.SpellReady[${patchheal}]}
/return
}
/varset stophealpoint ${defaultstophealpoint}
} else /if ((${worstclass}.Equal[Necromancer]})||(${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) /tell ${tankname} (${patchheal}) --- %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) /tell ${tankname} (${patchheal}) --- %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 Divarbcast
/varset divarboor 0
/for gmember 0 to ${Group}
/if (${Group.Member[${gmember}].Distance}>200) /varcalc divarboor ${divarboor}+1
/next gmember
/if (${Math.Calc[${Group}-${divarboor}]}>=2) {
/if (${announce}==1) /tell ${tankname} Inc Divine Arbitration
/call Cast "Divine Arbitration" alt 2s
/if ((${healafterdivarb}==1)&&(${Me.PctMana}>40)) {
/if (${announce}==1) /tell ${tankname} Inc Grp Heal, get close
/call Cast "${groupheal}" gem4 2s
/delay 15 ${Me.SpellReady[${groupheal}]}
}
}
/return
Sub CheckEvents
/delay 1
/doevents Exp
/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)) {
/e Ducking heal on ${Target.Name}
/varset duckspam 0
/timed 60 /varset duckspam 1
}
/call Interrupt
/return
}
/if ((${interrupt2healself}==1)&&(${Target.Name.NotEqual[${Me}]})&&(${Me.PctHPs}<${interrupt2healselfhp})) {
/if ((${usedivarb}==1)&&(${Me.PctHPs}<=${divarbpoint})&&(${Me.AltAbilityReady[Divine Arbitration]})) {
/call Interrupt
/call Divarbcast
/return
}
/if ((${announce}==1)&&(${duckselfspam}==1)) {
/e Ducking heal on ${Target} so I can heal myself
/varset duckselfspam 0
/timed 60 /varset duckselfspam 1
}
/call Interrupt
/return
}
/if (${onlyhealfd}==1) {
/if ((${Target.Class.Name.Equal[Necromancer]})||(${Target.Class.Name.Equal[Monk]})) {
/if (${Target.State.NotEqual[feign]}) {
/if ((${announce}==1)&&(${duckfdspam}==1)) {
/e Ducking heal on ${Target.Name} because he isn't staying FD
/varset duckfdspam 0
/timed 40 /varset duckfdspam 1
}
/call Interrupt
/return
}
}
}
/if ((${usedivarb}==1)&&(${Target.PctHPs}<=${divarbpoint})&&(${Target.Distance}<=200)&&(${Me.AltAbilityReady[Divine Arbitration]})&&(${castEndTime}>=${interrupt2divarb})) {
/for gmember 0 to ${Group}
/if (${Target.ID}==${Group.Member[${gmember}].ID}) {
/call Interrupt
/call Divarbcast
/return
}
/next gmember
}
/return
Sub Buffbeg
/if (${buffbeg}==0) /return
/echo Begging for buffs now
/if ((!${Me.Buff[Voice of Quellious].ID})&&(!${Me.Buff[Tranquility].ID})&&(!${Me.Buff[Koadic's Endless Intellect].ID})&&(!${Me.Buff[Clairvoyance].ID})&&(!${Me.Buff[Voice of Clairvoyance].ID})) {
/if (${NearestSpawn[PC guild enchanter]}.NotEqual[NULL]}) /if (${NearestSpawn[PC guild enchanter].Distance}<=100) {
/tell ${tankname} ${NearestSpawn[PC guild enchanter]} need C 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[Protection of the Nine].ID})&&(!${Me.Buff[Blessing of the Nine].ID})&&(!${Me.Buff[Steeloak Skin].ID})&&(!${Me.Buff[Blessing of Steeloak].ID})&&(!${Me.Buff[Virtue].ID})&&(!${Me.Buff[Hand of Virtue].ID})&&(!${Me.Buff[Conviction].ID})&&(!${Me.Buff[Hand of Conviction].ID})) {
/if (${NearestSpawn[PC guild druid]}.NotEqual[NULL]}) /if (${NearestSpawn[PC guild druid].Distance}<=100) {
/tell ${tankname} ${NearestSpawn[PC guild druid]} need dru crack 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 DRU crack
}
/if ((!${Me.Buff[Spiritual Dominion].ID})&&(!${Me.Buff[Spiritual Ascendance].ID})) {
/if (${NearestSpawn[PC guild beastlord]}.NotEqual[NULL]}) /if (${NearestSpawn[PC guild beastlord].Distance}<=100) {
/tell ${tankname} ${NearestSpawn[PC guild beastlord]} need bst crack plz
/delay 20
/if (${Me.Buff[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup
} else /e No guild Beastlord available for BST crack
}
/if ((!${Me.Buff[Kazad`s Mark].ID})&&(!${Me.Buff[Symbol of Kazad].ID})&&(!${Me.Buff[Symbol of Balikor].ID})&&(!${Me.Buff[Balikor's Mark].ID})&&(!${Me.Buff[Virtue].ID})&&(!${Me.Buff[Hand of Virtue].ID})&&(!${Me.Buff[Conviction].ID})&&(!${Me.Buff[Hand of Conviction].ID})) {
/if (${NearestSpawn[PC guild cleric]}.NotEqual[NULL]}) /if (${NearestSpawn[PC guild cleric].Distance}<=100) {
/tell ${tankname} ${NearestSpawn[PC guild cleric]} need sym plz
/delay 20
/if (${Me.Buff[${daspell}].ID}) /notify BuffWindow Buff${Math.Calc[${Me.Buff[${daspell}].ID}-1].Int} leftmouseup
} else /e No guild Cleric available for Symbol
}
/if ((!${Me.Buff[Brell's Stalwart Shield].ID})&&(!${Me.Buff[Brell's Brawny Bulwark].ID})&&(!${Me.Buff[Spiritual Vigor].ID})&&(!${Me.Buff[Spiritual Vitality].ID})) {
/if (${NearestSpawn[PC guild paladin]}.NotEqual[NULL]}) /if (${NearestSpawn[PC guild paladin].Distance}<=100) {
/tell ${tankname} ${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[Shield of Maelin].ID})&&(!${Me.Buff[Focus of the Seventh].ID})&&(!${Me.Buff[Focus of Soul].ID})&&(!${Me.Buff[Wunshi's Focusing].ID})&&(!${Me.Buff[Talisman of Wunshi].ID})) {
/if (${NearestSpawn[PC guild shaman]}.NotEqual[NULL]}) /if (${NearestSpawn[PC guild shaman].Distance}<=100) {
/tell ${tankname} ${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
}
/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 (${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.Member[${gmember}].ID}
/delay 1s ${Target.ID}==${Group.Member[${gmember}].ID}
/if (${Target.ID}==${Group.Member[${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)&&(${groupsymbuff}.NotEqual[NULL]})) /call Cast "${groupsymbuff}" gem5 10s
/if ((${Math.Calc[${Group}-${pallycount}]}<2)||(${groupsymbuff}.Equal[NULL]})) {
/for gmember 0 to ${Group}
/target id ${Group.Member[${gmember}].ID}
/delay 1s ${Target.ID}==${Group.Member[${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.Member[${gmember}].ID}
/delay 1s ${Target.ID}==${Group.Member[${gmember}].ID}
/if (${Target.ID}==${Group.Member[${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) /tell ${tankname} %T shal feel the wrath of Brell! (${nukeone})
/call Cast "${nukeone}" spell 3s
} else /if (${Me.SpellReady[${nuketwo}]}) {
/if (${announce}==1) /tell ${tankname} %T shal feel the wrath of Brell! (${nuketwo})
/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) /tell ${tankname} Casting ${stunone} on %T
/call Cast "${stunone}" spell 3s
} else /if (${Me.SpellReady[${stuntwo}]}) {
/if (${announce}==1) /tell ${tankname} 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 (${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 (${Macro.Return}.NotEqual[TARGET_SUCCESS]}) /return
/if (${Target.Distance}<=${patchhealrange}) {
/if (${announce}==1) /tell ${tankname} (${patchheal}) --- %T ---
/call Cast "${patchheal}" gem2 2s
/delay 15 ${Me.SpellReady[${patchheal}]}
} else /tell ${tankname} ${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 (${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[buff pet]}) {
/target ${Spawn[pc ${Sender}].Pet}
/delay 8
/target ${Spawn[pc ${Sender}].Pet}
/call Cast "${acbuff}" gem6 7s
/call Cast "${singlesymbuff}" gem5 7s
}
/if (${ChatText.Equal[da pet]}) {
/target ${Spawn[pc ${Sender}].Pet}
/delay 6
/target ${Spawn[pc ${Sender}].Pet}
/if (${Me.AltAbilityReady[39]}) /if (${Target.Name}.Equal[${Spawn[pc ${Sender}].Pet.Name}]}) {
/call Cast "39" alt
} else {
/chat #${mychannel} Bestow Divine Aura is not ready, or Target (%T) OOR or wrong target
}
}
/if (${ChatText.Equal[pb]}) /call Cast "Pure Blood" gem6 10s
/if (${ChatText.Equal[hot me]}) {
/if (${Target.Distance}<=${hotspellrange}) {
/if (${announce}==1) /tell ${tankname} (${hotspell}) --- %T ---
/call Cast "${hotspell}" gem2 2s
/delay 15 ${Me.SpellReady[${hotspell}]}
} else /tell ${tankname} ${Sender} your OOR
}
/if (${ChatText.Equal[ch me]}) {
/if (${Target.Distance}<=100) {
/if (${announce}==1) /tell ${tankname} (Complete Heal) --- %T --- 10 secs
/call Cast "Complete Healing" gem2 5s
/tell ${tankname} ${Me.PctMana}m
/delay 15 ${Me.SpellReady[${hotspell}]}
} else /tell ${tankname} ${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
Sub Event_Exp
/call ExpTrack
/return