Sub CombatCast
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast Enter
/declare i int local 0
/declare DPSText string local
/declare DPSAt int local ${AssistAt}
/declare DPSTargetID int local ${MyTargetID}
/declare DPSItem string local
/for i 1 to ${DPS.Size}
/doevents
/call CombatTargetCheck
/if (${Spawn[${MyTargetID}].Type.Equal[Corpse]} || !${Spawn[${MyTargetID}].ID}) {
/if (${DebugCombat}) /echo CombatCast: Return from CombatCast cause my target is a corpse or dead.
/return
}
/if (${DPSPaused}) {
/if (${DebugCombat}) /echo CombatCast: Return from CombatCast cause DPSPaused is ${DPSPaused}
/return
}
/call WriteDebuffs
|--- only call code for GroupEscape kick off.
/if (${GroupEscapeOn} && ${Select[${Me.Class.ShortName},WIZ,DRU]} && (${Raid.Members}==0)) /call GroupEscape
/if (${MezOn}) /call DoMezStuff
/if (${HealsOn}) /call CheckHealth
/if (${CuresOn}) /call CheckCures
/varset DebugTimer2 600
/if (${DebuffOn}) /call DoDebuffStuff ${MyTargetID}
/if (${DebugCombat}) /echo Time Spent in DoDebuffStuff 2 : ${Math.Calc[(600-${DebugTimer2})/10]}
/if (${Spawn[${MyTargetID}].Type.Equal[Corpse]}) /return
/if (${Target.Mezzed.ID} && ${MainAssist.NotEqual[${Me}]} && ${Spell[${DPS[${i}].Arg[1,|]}].Category.NotEqual[Utility Detrimental]}) {
/if (${DebugCombat}) /echo Skipping spell in CombatCast because target is mezzed and I.m not mainassist and it will wake up the mob.
/goto :skipcast
}
/if (!${DPS[${i}].Length}) {
/if (${DebugCombat}) CombatCast: /echo im skipping in CombatCast cause there is no spell: DPS${i}
/goto :skipcast
}
/if (${MercOn} && !${MercAssisting} && ${MyTargetID} && ${Mercenary.State.Equal[Active]}) /call MercsDoWhat
/if (${AEOn}) /call AECheck
/if (${AggroOn}) /call AggroCheck
/if (${PetOn} && ${PetCombatOn}) /call CombatPet
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast ${DPS[${i}]} ${DPS[${i}].Arg[1,|]} ${DPS[${i}].Arg[2,|]} ${DPS[${i}].Arg[3,|]}
| - Check for 2nd value in dps for mob health
/if (${DPS[${i}].Arg[2,|].Length}) {
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast /echo ${DPS[${i}]}
/varset DPSText ${DPS[${i}]}
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast /echo ${DPSText}
/varset DPS[${i}] ${DPSText.Arg[1,|]}
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast /echo ${DPS[${i}]}
/varset DPSAt ${DPSText.Arg[2,|]}
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast /echo ${DPSAt}
/if (${DPSText.Arg[3,|].Find[MA]}) /varset DPSTargetID ${Spawn[=${MainAssist}].ID}
/if (${DPSText.Arg[3,|].Find[Me]} || ${DPSText.Arg[3,|].Find[Feign]}) /varset DPSTargetID ${Me.ID}
}
/if (${Me.Class.Name.Equal[Cleric]} && ${DPS[${i}].Find[Hammer]} && ${Me.Pet.ID}) /goto :skipcast
/if (${Me.Class.Name.Equal[Wizard]} && ${Me.Pet.ID} && (${DPS[${i}].Find[sword]} || ${DPS[${i}].Find[blade]})) /goto :skipcast
/if (${Spawn[${DPSTargetID}].PctHPs}<${DPSSkip} || ${DPS[${i}].Equal[NULL]} || ${ABTimer${i}} || ${DPSTimer${i}} || ${FDTimer${i}} || (!${Select[${EverQuest.Server},zek]} && ${Spawn[${DPSTargetID}].Type.NotEqual[NPC]} && ${Spawn[${DPSTargetID}].Master.Type.NotEqual[NPC]})) /goto :skipcast
/if (${MainAssist.Equal[${Me}]} && ${DPSOn}==1) /varset DPSOn 2
/if (${Spawn[${DPSTargetID}].PctHPs}>${DPSAt} && ${DPSOn}==1) /goto :skipcast
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast Spell: ${DPS[${i}]} Target: ${DPSTargetID}=${Target.ID} Timer: ${DPSTimer${i}} DPSOn: ${DPSOn}
/if (${Select[${DPSText.Arg[3,|]},Me,MA]} && ${Me.Combat} && ${MainAssist.NotEqual[${Me}]}) {
/attack off
/delay 10 !${Me.Combat}
}
| Only cast spells with weave tag during global cooldown
/if (${DPSText.Arg[3,|].Find[weave]} && !${IAmABard} && !${Me.SpellReady[${castWhat}]} && !${Me.SpellReady[${Me.Gem[1].Name}]} && !${Me.SpellReady[${Me.Gem[3].Name}]} && !${Me.SpellReady[${Me.Gem[5].Name}]} && !${Me.SpellReady[${Me.Gem[7].Name}]}) {
/call CastWhat "${DPS[${i}]}" ${DPSTargetID} DPS
} else /if (${DPSText.Arg[3,|].Find[weave]}) {
/goto :skipcast
} else {
/call CastWhat "${DPS[${i}]}" ${DPSTargetID} DPS
}
/if (${Macro.Return.Equal[CAST_RESIST]}) {
/echo ** ${DPS[${i}]} on >> ${Spawn[${DPSTargetID}].CleanName} << - RESISTED
/if (${DPSText.Arg[3,|].Length} && ${DPSText.Arg[3,|].Find[once]}) {
/varset DPSTimer${i} 5m
/goto :skipcast
}
}
/if (${Macro.Return.Equal[CAST_TAKEHOLD]}) {
/echo ** ${DPS[${i}]} on >> ${Spawn[${DPSTargetID}].CleanName} << - DID NOT TAKE HOLD
/varset DPSTimer${i} 5m
/goto :skipcast
}
/if (${Macro.Return.Equal[CAST_SUCCESS]}) {
/echo ** ${DPS[${i}]} on >> ${Spawn[${DPSTargetID}].CleanName} <<
| Set timer for spells labeled once 5m
/if (${DPSText.Arg[3,|].Length} && ${DPSText.Arg[3,|].Find[once]}) {
/varset DPSTimer${i} 5m
/goto :skipcast
| Timers for items
} else /if (${FindItemCount[=${DPS[${i}]}]}) {
/varcalc DPSTimer${i} ${FindItem[=${DPS[${i}]}].Spell.Duration.TotalSeconds}*10
/goto :skipcast
| FD to lose aggro
} else /if (${Select[${Me.Class.ShortName},MNK,NEC,SHD]} && ${DPSText.Arg[3,|].Find[Feign]}) {
/delay 30 ${Me.State.Equal[FEIGN]}
/varset FDTimer${i} 60s
/delay 10s ${Me.State.NotEqual[FEIGN]}
/if (${Me.State.Equal[FEIGN]} && !${Me.Sitting}) /stand
| Timers for spells
} else /if (${Me.Book[${DPS[${i}]}]}) {
| - Attack Buff Timers are seperate. DPS timers are cleared after every fight.
/if (${Select[${DPSTargetID},${Me.ID},${Spawn[=${MainAssist}].ID}]}) {
/varcalc ABTimer${i} (${Spell[${DPS[${i}]}].Duration.TotalSeconds}*${DurationMod})*10
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast Spell: ${DPS[${i}]} Timer: ABTimer${i} {ABTimer${i}}
/goto :skipcast
| - Custom timer for counterbias
} else /if (${Me.Class.Name.Equal[Shaman]} && ${DPS[${i}].Find[counterbias]}) {
/varset DPSTimer${i} 1.5m
/goto :skipcast
| Custom timer for Chanter suffocation
} else /if (${Me.Class.Name.Equal[enchanter]} && ${DPS[${i}].Find[suffocation]}) {
/varset DPSTimer${i} 1m
/goto :skipcast
| Custom timer for Beastlord Feralgia Timer
} else /if (${Me.Class.Name.Equal[Beastlord]} && ${DPS[${i}].Find[feralgia]}) {
/varset DPSTimer${i} 1.5m
/goto :skipcast
| Regular spells
} else /if (${Spell[${DPS[${i}]}].Duration}>0) {
/varcalc DPSTimer${i} ${Spell[${DPS[${i}]}].Duration.TotalSeconds}*10
/goto :skipcast
| Spells with no timers assign DPS interval
} else {
/varset DPSTimer${i} ${DPSInterval}s
/goto :skipcast
}
| AA and disc timers
} else /if (${Spell[${DPS[${i}]}].Duration}>0) {
/varcalc DPSTimer${i} ${Spell[${DPS[${i}]}].Duration.TotalSeconds}*10
/goto :skipcast
| AA and disc with no timers assign DPS interval
} else {
/varset DPSTimer${i} ${DPSInterval}s
/goto :skipcast
}
}
:skipcast
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast ${DPS[${i}]} ${Macro.Return} DPSTimer${i} ${DPSTimer${i}}
/if (${Select[${DPSText.Arg[3,|]},Me,MA]}) /call CombatTargetCheck
| Reset values if 2nd value in dps for mob health exists
/if (${DPSText.Arg[2,|].Length}) {
/varset DPS[${i}] ${DPSText}
/varset DPSAt ${AssistAt}
/varset DPSText
/varset DPSTargetID ${MyTargetID}
}
/next i
/if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast: Leave
/return