Sub DoWeMed
/if (!${MedOn}) /return
/if (!${MedCombat} && ${AggroTargetID}) /return
/if (${MedCombat} && !${Medding} && ${AggroTargetID}!=0 && ${AggroTargetID}==${MyTargetID}) /return
/if (${Debug}) /echo \atDEBUG DoWeMed Enter \agLine#: ${Macro.CurLine}
/declare Med2On int local 0
/declare MedForceOn int local 0
/declare MedStat1 string local ${MedStat}
/declare MedStop int local 100
/declare j int local 0
/if (${Select[${Zone.ID},795,796]}>0) /varset MedStop 70
/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 (${Group.MainAssist.ID} && ${Group.MainAssist.Sitting}) {
/if (!${MASitTime}) {
/varset MASitTime 300
} else /if (${MASitTime}<260) {
/varset MedForceOn 1
}
} else {
/varset MASitTime 0
}
/if (${Me.Pct${MedStat}}<${MedStart} || (${ChainPullHold}==2 && ${Me.Pct${MedStat}}<${MedStop}) || (${MedForceOn} && ${Me.Pct${MedStat}}<${If[${MedStop}==100,90,68]} && !${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. ${MedStat} ${Me.Pct${MedStat}} ${ChainPullHold} ${MedStop}"
| bards twisting while others fighting negate fast med
/if (${IAmABard} && ${AggroTargetID}) {
/if (${Twist}) /squelch /twist off
/delay 10
/squelch /twist ${TwistMed}
}
/if (${Medding}) /echo Medding until ${MedStat} ${MedStop}%
/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) {
/call DoWeMove
}
/if (!${Me.Mount.ID} && ${Me.Standing}) /sit
/if (${Debug}) /echo \atDEBUG ${MedStat} ${MedStat1} ${MedStat2} \agLine#: ${Macro.CurLine}
|/delay 10
|/call CheckCasting 50
/delay 10
/if (!${MedCombat}) {
/call WaitSubs
/call CheckForCombat 1 DoWeMed
/if (${AggroTargetID}) {
/if (${Med2On}) /varset MedStat ${MedStat1}
/varset Medding 0
/return
}
}
/if (${Me.Pct${MedStat}}<${MedStop}) /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 10
|/call CheckCasting 50
/delay 5
/if (!${MedCombat}) {
/call WaitSubs
/call CheckForCombat 1 DoWeMed
/if (${AggroTargetID}) {
/varset Medding 0
/return
}
}
/if (${Me.PctHPs}<${MedStop}) /goto :WaitFor100
/if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
}
/if (${Select[${Role},pullerpettank,hunterpettank]} && !${Me.Invis} && (${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}<${MedStop}) {
:WaitingOnPetHealth
/for j ${SingleHeal.Size} downto 1
/if (${SingleHeal[${j}].Arg[3,|].NotEqual[pet]} || !${SingleHeal[${j}].Length} || ${SingleHeal[${j}].Arg[2,|]}==0) /continue
/if (${Me.Pet.ID} && ${Me.Pet.Distance}<${Spell[${SingleHeal[${j}].Arg[1,|]}].Range}) {
/if (${Debug}) /echo \amDEBUG DoPetMedStuff (${SingleHeal[${j}].Arg[3,|].Find[PET]} && ${Me.Pet.PctHPs}<=${HealPct} && ${Me.Pet.ID} && ${Me.Pet.Distance}<${Spell[${SingleHeal[${j}].Arg[1,|]}].Range}) \agLine#: ${Macro.CurLine}
/call CastWhat "${SingleHeal[${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[${SingleHeal[${j}].Arg[1,|]}].Duration.TotalSeconds}*${DurationMod})*10
}
/break
}
|:NextPetHeal
/next j
/if (${Me.Pet.ID} && ${Me.Pet.PctHPs}<${MedStop} && !${AggroTargetID}) {
/delay 6s
/goto :WaitingOnPetHealth
}
}
}
}
/if (${Debug}) /echo \atDEBUG DoWeMed Leave \agLine#: ${Macro.CurLine}
/return