Хм, действительно. Раньше я по заветам мануалов давал ману и ставил задержку sleep(1), но вызов каста после этого не проходил. Увеличил задержку на порядок - мана у существа появилась и заклинание прошло. Но рассинхронизация поле боя и ATB-шкалы при этом такая же как я описывал.
Упрощенный код:
function DefenderCreatureMove(unit)
local last_mana = GetUnitManaPoints(unit);
SetUnitManaPoints(unit, 100);
sleep(30);
local player_units = GetCreatures(ATTACKER);
UnitCastAimedSpell(unit, SPELL_BLIND, player_units[0]);
sleep(1);
SetUnitManaPoints(unit, last_mana);
end
Добавлено через 22 минуты
Хотя похоже что тут какая-то более общая фишка механики - когда я накладываю обычное заклинание героем, оставшаяся длительность его действия тоже различается если смотреть через существо на поле и через иконку на шкале. Но периодически оно синхронизируется.