What happened since the last call: unit.appeared / unit.died / unit.removed / unit.damaged / order.changed /
hero.levelup / owner.changed / item.appeared / item.removed / game.started (these come from diffing publishes; precision = publish period 50 ms),
plus the engine-level damage / killed (the runtime records them on the game thread as they happen, so there's one for **every single hit**):
damage: handle = the unit being hit, .source_addr = who hit it (snapshot().unit_by_addr turns it into a unit), .value = actual HP lost,
.raw_damage = pre-armor damage, .attack_type (normal/pierce/siege/magic/chaos/hero/spell), .damage_type
killed: this hit killed it, .source_addr = the killer
plus production.done, derived by the runtime tracking the production table (precision = publish period): unit = the building, .done_code = four-character code of what finished,
.done_kind = 'training' (units/heroes/revives) / 'research' / 'construction' (building completed) / 'upgrade' (tier-up/tower upgrade), .value = game seconds taken
Added 09-25:
spell.cast: unit = the caster, .spell spell four-character code, b level, value cooldown seconds, x,y cast point (recognized when the spell's cooldown starts; precision = publish period)
player.left: .player the number of the player who left / was removed after being defeated; game.ended: left the game
selection.changed: the local player's selection changed (get the units with g.selection())
message: a line in an on-screen message frame (game hints, chat, system): .text full text, .frame message frame number,
.chat = {'channel', 'sender', 'text'} (when it's chat; this is where you read what the player typed in the chat box)
ui.click / ui.hover / hotkey / mouse.world: UI & input (g.ui); .key is the canvas key / hotkey string
Each one is Event(seq, kind, clock, addr, handle, type, owner, a, b, x, y, value, extra).
Fair mode (fair=True) only gives: events for your own units, events for units visible right now (or still visible within the last 1 second), damage dealt to us or by us,
and local UI / message / game events.
Mechanism Event ring Local\War3Events_<pid> (publish diffing + damage events captured by the runtime)