Sub CastWhat(string castWhat,int WhatID,string sentFrom,int CastOnCorpse)
/if (${Debug}) /echo CastWhat Enter Line#: ${castWhat} ${WhatID} ${sentFrom} ${Macro.CurLine}
/declare ReadyToCast int local 0
/varset CastResult CAST_NO_RESULT
/if (${Me.AltAbility[${castWhat}]} || ${Me.CombatAbility[${castWhat}]} || ${FindItem[=${castWhat}].ID} || ${Me.Ability[${castWhat}]} || ${Me.Book[${castWhat}]}) {
/if (${IAmABard}) {
/varset ReadyToCast ${Select[TRUE,${Me.ItemReady[=${castWhat}]},${Me.AltAbilityReady[${castWhat}]},${Me.CombatAbilityReady[${castWhat}]},${Me.AbilityReady[${castWhat}]},${If[${Me.Gem[${castWhat}]} && !${Me.GemTimer[${castWhat}]},TRUE,FALSE]}]}
} else {
/varset ReadyToCast ${Select[TRUE,${Me.ItemReady[=${castWhat}]},${Me.AltAbilityReady[${castWhat}]},${Me.CombatAbilityReady[${castWhat}]},${Me.AbilityReady[${castWhat}]},${Me.SpellReady[${castWhat}]}]}
}
/if (${ReadyToCast}) {
/if (${ReadyToCast}==1 && ${Me.ItemReady[=${castWhat}]}) /call CastItem "${castWhat}" ${WhatID} 0
/if (${ReadyToCast}==2 && ${Me.AltAbilityReady[${castWhat}]} && !${FindItem[=${castWhat}].ID}) /call CastAA "${castWhat}" ${WhatID} ${CastOnCorpse}
/if (${ReadyToCast}==3 && ${Me.CombatAbilityReady[${castWhat}]} && ${Spell[${castWhat}].EnduranceCost}<${Me.Endurance}) /call CastDisc "${castWhat}" ${WhatID} ${CastOnCorpse}
/if (${ReadyToCast}==4 && ${Me.AbilityReady[${castWhat}]}) /call CastSkill "${castWhat}" ${WhatID} 0
/if (${ReadyToCast}==5 && ${Me.SpellReady[${castWhat}]} && ${Me.Book[${castWhat}]} && ${Spell[${castWhat}].Mana}<${Me.CurrentMana}) /call CastSpell "${castWhat}" ${WhatID} ${sentFrom} ${CastOnCorpse}
} else {
/if (!${FindItem[=${castWhat}].ID} && ${Me.Book[${castWhat}]} && !${Me.Gem[${castWhat}]} && ${ReadyToCast}==0) {
/call CastMem "${castWhat}" ${sentFrom}
/if (${Macro.Return.NotEqual[notready]} && ${Me.Gem[${castWhat}]}!=0) {
/varset ReadyToCast 6
/call CastSpell "${castWhat}" ${WhatID} ${sentFrom} ${CastOnCorpse}
}
}
}
}
/if (${Macro.Return.Equal[CAST_SUCCESS]}) /doevents
/if (${MedCombat}==2) /varset SitToMedTimer ${SitToMedTimer.OriginalValue}
|Remem spell originally in Miscgem slot except if combat or just rezd
/if (${MiscGemRemem} && ${ReadyToCast}==6) /call CastReMem
/if (${Debug}) /echo CastWhat Leave Line#: ${Macro.CurLine}
/return ${CastResult}