Решили: жесты (лайк, «чокнуться») едут полем в пакете присутствия, а не своим каналом. Отправитель держит жест 0.4 с, гаснет он сам.
Почему: жест ничего не сообщает механике, и потеря пакета стоит одной незамеченной иконки — то есть ровно тот класс данных, для которого присутствие и заведено. Главное же в том, что присутствие уже раздаётся хозяином всем своим и уже отбирается по сторонам: свой канал повторил бы и раздачу, и отбор, а значит завёл бы второго владельца правила «кому это видно» — и разошёлся бы с первым в PvP, где цена ошибки самая высокая. Отвергнут надёжный канал жестов: надёжность здесь покупает доставку иконки ценой второго механизма раздачи. Удержание жеста в нескольких пакетах решает ту же задачу даром.
Грабли: жест обязан гаснуть сам по времени, а не сниматься вторым вызовом. Пара «показать / убрать» дала бы одному факту двух владельцев, и первый же пропущенный «убрать» оставил бы игрока с вечным лайком у курсора. Версия пакета присутствия поднята до 2: он вырос на байт на игрока, и старая сборка обязана отказаться его читать, а не разобрать со сдвигом.
Владелец правды: Net/Presence/PresenceState.cs (PresenceGesture),
Net/Presence/PresenceSender.cs (Show, GestureHoldSeconds), Net/Presence/PresenceCodec.cs.