А, да, ну и алгоритм на словах (посмотрел, вспомнил).
При вызове useMagic не сразу вываливаемся, если использование магии запрещено, а запоминаем параметры скилла.
Когда же скилл сработал и происходит разрешение работы новых скиллов, то проверяем "заначку". Если есть запомненный скилл - активируем его вызов. Тут нужно быть осторожнее, т.к. нужно посмотреть, не сбрасывается ли к тому времени состояние атака, если да - установить заново. Если нет - не дать сброситься потом.
Вообще, раньше механизм статусов был проще и надёжнее, ИМХО