Решили: чужое наведение показывается кольцом под бойцом, покрашенным мейн-цветом того, кто навёл.
Цвет берётся из снимка палитры по имени USS-токена (--gm-color-player-N), а в кольцо приходит
параметром, а не новым состоянием.
Почему: мейн-цвета игроков жили только как USS-токены, а кольцо рисуется в мире через Shapes — UI
Toolkit туда не достаёт. Отвергнут второй набор цветов для мира: это ровно тот дубль, который
запрещает HARD-правило про единственного владельца цвета. Оказалось, моста уже достаточно — палитра и
есть снимок токенов по имени, и TryGet("--gm-color-player-1") работает без единой правки ассета.
Отвергнуто пятое состояние кольца: четыре существующих описывают МОЮ руку («навёл», «тащу», «сюда
можно»), а мейн-цвет — свойство чужого человека из состава сеанса. Загони его в перечисление, и цвет
игрока пришлось бы дублировать в показе.
Грабли: HoveredId ехал в пакете присутствия с самого начала и не отдавался наружу ни одному
потребителю — RemoteCursor его просто не нёс. Функция выглядела ненаписанной, хотя не хватало только
последнего звена; искать такое надо не по «где реализовано», а по «кто читает».
Владелец правды: Core/Players/IPresenceView.cs (RemoteCursor.HoveredId),
Game/DeploymentInteraction.cs (TintOfForeignHover), Presentation/DeploymentView.cs.