Sub DoWeMed
/if (!${MedOn}) /return
/if (${Debug}) /echo \atDEBUG DoWeMed Enter \agLine#: ${Macro.CurLine}
/declare Med2On int local 0
/declare MedStat1 string local ${MedStat}
/declare j int local 0
/if (${Select[${Me.Class.ShortName},BST,BRD,CLR,DRU,ENC,MAG,NEC,PAL,RNG,SHM,SHD,WIZ]}) /varset MedStat Mana
/if (${Select[${Me.Class.ShortName},BER,MNK,ROG,WAR]}) /varset MedStat Endurance
/if (!${Me.Moving}) {
/if (${Select[${Me.Class.ShortName},BST,PAL,RNG,SHD]} && ${Me.Pct${MedStat2}}<${MedStart} && ${Me.Pct${MedStat}}>${MedStart}) {
/varset MedStat1 ${MedStat}
/varset MedStat ${MedStat2}
/varset Med2On 1
}
/if (${Me.Pct${MedStat}}<${MedStart} || (${ChainPullHold}==2 && ${Me.Pct${MedStat}}<100) || (${Group.MainAssist.ID} && ${Group.MainAssist.Sitting} && ${Me.Pct${MedStat}}<20 && !${Role.Find[puller]} && !${MedCombat})) {
/squelch /tar clear
/varset Medding 1
/if (${Attacking}) /call CombatReset
/if (${Select[${Role},puller,pullertank,pullerpettank,hunter,hunterpettank]}) /call BroadCast ${IRCOn} ${EQBCOn} t "PULLER-> My ${MedStat} is ${MedStart}% time to med."
| bards twisting while others fighting negate fast med
/if (${IAmBard} && ${AggroTargetID}) {
/if (${Twist}) /squelch /twist off
/delay 10
/squelch /twist ${TwistMed}
}
/if (${Medding}) /echo Medding until ${MedStat} 100%
/if (${Me.Pct${MedStat}}<${MedStart}) /call BroadCast ${IRCOn} ${EQBCOn} t "My ${MedStat} is ${MedStart}% time to med."
:wait_for_resume
/doevents
/if (${ReturnToCamp} && ${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) {
/if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
/call DoWeMove
}
/if (!${Me.Mount.ID} && ${Me.Standing}) /sit
/if (${Debug}) /echo \atDEBUG ${MedStat} ${MedStat1} ${MedStat2} \agLine#: ${Macro.CurLine}
/delay 5
/call CheckCasting 50
/delay 5
/if (!${MedCombat}) {
/call WaitSubs
/call CheckForCombat 1 DoWeMed
/if (${AggroTargetID}) {
/if (${Med2On}) /varset MedStat ${MedStat1}
/varset Medding 0
/return
}
}
/if (${Me.Pct${MedStat}}<100) /goto :wait_for_resume
:done_medding
/if (${Med2On}) /varset MedStat ${MedStat1}
/varset Medding 0
/if (${Me.Sitting}) /stand
/if (${IAmABard} && ${TwistMed}) /stopsong
}
/if (${Select[${Role},pullerpettank,puller,hunter,hunterpettank]} && ${Me.PctHPs}<=50) {
/echo Medding to 100% health
/if (!${Me.Mount.ID} && !${Me.Sitting}) /sit
:WaitFor100
/doevents
/if (${ReturnToCamp} && ${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) {
/if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
/call DoWeMove
}
/delay 5
/call CheckCasting 50
/delay 5
/if (!${MedCombat}) {
/call WaitSubs
/call CheckForCombat 1 DoWeMed
/if (${AggroTargetID}) {
/varset Medding 0
/return
}
}
/if (${Me.PctHPs}<100) /goto :WaitFor100
/if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
}
/if (${Select[${Role},pullerpettank,hunterpettank]} && (${Me.Pet.PctHPs}<=50 || ${PetForceHealOnMed})) {
| Check pet is at full health before pulling.
/echo Waiting on pet to full health before next pull
/if (${Me.Pet.ID} && ${Me.Pet.PctHPs}<100) {
:WaitingOnPetHealth
/for j ${Heals.Size} downto 1
/if (${Heals[${j}].Arg[3,|].NotEqual[pet]} || !${Heals[${j}].Length} || ${Heals[${j}].Arg[2,|]}==0) /goto :NextPetHeal
/if (${Me.Pet.ID} && ${Me.Pet.Distance}<${Spell[${Heals[${j}].Arg[1,|]}].Range}) {
/if (${Debug}) /echo \amDEBUG DoPetMedStuff (${Heals[${j}].Arg[3,|].Find[PET]} && ${HealThem}==${Me.ID} && ${Me.Pet.PctHPs}<=${HealPct} && ${Me.Pet.ID} && ${Me.Pet.Distance}<${Spell[${Heals[${j}].Arg[1,|]}].Range}) \agLine#: ${Macro.CurLine}
/call CastWhat "${Heals[${j}].Arg[1,|]}" ${Me.Pet.ID} Med
/if (${Macro.Return.Equal[CAST_SUCCESS]}) {
/call BroadCast ${IRCOn} ${EQBCOn} o "${Heals[${j}].Arg[1,|]} on >> ${Me.Pet.CleanName} <<"
/varcalc PetHealTimer${j} (${Spell[${Heals[${j}].Arg[1,|]}].Duration.TotalSeconds}*${DurationMod})*10
}
/varset j 1
}
:NextPetHeal
/next j
/if (${Me.Pet.ID} && ${Me.Pet.PctHPs}<100 && !${AggroTargetID}) {
/delay 6s
/goto :WaitingOnPetHealth
}
}
}
}
/if (${Debug}) /echo \atDEBUG DoWeMed Leave \agLine#: ${Macro.CurLine}
/return