Что произошло с прошлого вызова: unit.appeared / unit.died / unit.removed / unit.damaged / order.changed /
hero.levelup / owner.changed / item.appeared / item.removed / game.started (получаются сравнением публикаций, точность = период публикации 50 ms),
а также damage / killed уровня движка (рантайм записывает их прямо в игровом потоке в момент удара, событие есть на **каждый удар**):
damage: handle = кого ударили, .source_addr = кто ударил (превратить в юнит — snapshot().unit_by_addr), .value = фактически снятое здоровье,
.raw_damage = урон до учёта брони, .attack_type (normal/pierce/siege/magic/chaos/hero/spell), .damage_type
killed: этот удар добил цель, .source_addr = убийца
а также production.done, который рантайм получает, отслеживая таблицу производства (точность = период публикации): юнит = здание, .done_code = четырёхсимвольный код готового,
.done_kind = 'training' (войска/герой/воскрешение) / 'research' / 'construction' (здание построено) / 'upgrade' (улучшение ратуши/башни), .value = сколько игровых секунд заняло
Добавлено 09-25:
spell.cast: юнит = заклинатель, .spell — четырёхсимвольный код способности, b — уровень, value — перезарядка в секундах, x,y — точка применения (распознаётся, когда способность уходит на перезарядку; точность = период публикации)
player.left: .player — номер игрока, который вышел / удалён после поражения; game.ended: выход из матча
selection.changed: изменилось выделение локального игрока (юнитов берите через g.selection())
message: строка в окне сообщений на экране (подсказка игры, чат, системное сообщение): .text — полный текст, .frame — номер окна сообщений,
.chat = {'channel', 'sender', 'text'} (если это чат; то, что игрок пишет в чат, читается именно отсюда)
ui.click / ui.hover / hotkey / mouse.world: интерфейс и ввод (g.ui), .key — key на холсте / запись горячей клавиши
Каждое — Event(seq, kind, clock, addr, handle, type, owner, a, b, x, y, value, extra).
В честном режиме (fair=True) приходят только: события своих юнитов, события юнитов, видимых прямо сейчас (или ещё видимых в течение последней 1 секунды), урон по нам и урон, нанесённый нами,
а также локальные события интерфейса / сообщений / матча.
Механизм Кольцо событий Local\War3Events_<pid> (сравнение публикаций + события урона, которые фиксирует рантайм)