В общем доспав 2 часа ночи, которых меня лишили, а так же прочитав патчноуты и примеры в них, я подумал над всех этой реализацией, а так же зачем она нужна.
Предположим все спелы бы имели флайтаймы или фиксированные задержки, тогда каждый раз при использовании спела запускался свой отдельный таймер, в случае с флайтаймом время таймера бы зависело от расстояния.
Все это сильно грузило бы систему да и в принципе лишено смысла когда все это можно упростить.
Предположим мы разобьем время на равные промежутки по ~300мс, все эти промежутки будет считать один таймер, а не тысячи для каждого отдельного спела.
Назовем этот промежуток времени пакетом или Spell Batching.
Но введем такое понятие как приоритет.
Например:
Для фрост болта приоритет будет равен 1
Для винтерчила приоритет будет равен 2
Для пробуждения древних приоритет будет равен 4
Если игрок использовал спел, проводилась проверка на приоритетность заклинания, если у спела приоритет равен 0, то спел тут же обрабатывался, если приоритет отличался от 0, то он становился в очередь.
Затем, когда текущий пакет заканчивался, у всех спелов в очереди уменьшался приоритет на единицу и проводилась новая проверка на необходимость обработки в порядке очереди.
Таким образом:
урон фрост болта обрабатывался через 0 - 300 мс
наложение винтерчила проходило через 300 - 600 мс
пробуждение древних хилило через 1200 - 1500 мс
Все зависело в какой промежуток времени попадал игрок при использовании спела, ему могла повезти и он бы попал сразу перед началом нового пакета, либо наоборот не повезти если он попал сразу после его начала.
Разумеется это все грубо представлено, но думаю основная идея была именно такой, а именно - оптимизация.
Сейчас у близард более совершенные машины чем были раньше, и они могут уменьшить время таймера пакета.