я примерно похожий алгоритм придумал, правда пока отложил эту задачу на потом, но поделюсь своими мыслями:
"на бумаге" у меня конструкция примерно такая:
if(combatReadyPerson() == "имя нужного героя")
получить данные о существах врага через GetCreatures() и GetCreatureNumber()
потом нужно узнать, что ход героя кончился:
repeat
current_mana = GetUnitManaPoints("имя нужного героя")
until(isCreature(combatReadyPerson())
дальше смотрим, изменилось ли число маны и существ врага, на основе этого делаем вывод, было ли сотворено заклинание и какой от него был эффект
не уверен, насколько верны мои предположения, т.к. пока реально подзабил на эту задачу в пользу более понятных для себя вещей)