Решили: место игрока (PlayerWhere) едет составом сеанса надёжным каналом и обновляется на
смену, а не в пакете присутствия. Считается по тому, что уже знают навигатор и показ; подписывается в
списке участников словом.
Почему: присутствие идёт ненадёжным каналом и отправляется по движению курсора — а стоящий в меню игрок курсором не двигает. Место, положенное туда, замерло бы на последнем известном и врало бы именно в тех случаях, ради которых заводилось («он в настройках», «он отошёл»). Отвергнут свой флаг «я на карте» у каждого места: это второй владелец факта, и разойдётся он в день, когда карту начнут открывать вторым способом. Каждый признак спрашивается у владельца — экраны у навигатора, карта и двор у своих швов присутствия, арена у часов боя. Отвергнуты значки: восемь состояний — восемь иконок, которые читаются хуже короткого слова и путаются между собой.
Сказано: «рядом с ником игрока указано где находится игрок (стейт завести?) (ESC меню, Карта, Инвентарь (если над UI карты), Боевая Арена)» (Макс, 07.08.2026, сессия 9c0cf5ea). Скобка про инвентарь и задала приоритет: он поверх карты, и значит игрок смотрит в него.
Грабли: порядок проверок — это и есть ответ, и «отошёл» обязан стоять первым: свёрнутое окно не
место, а его отсутствие, и показывать такого игрока «на карте» значит ждать от него ответа.
Свёртка списка участников считается по полям строки — без места в ней панель не перерисовалась бы на
переход, потому что имя и цвет не менялись.
UiNavigator и UiScreen лежат в папке Navigation, но в пространстве имён Guildmaster.UI: путь
подсказывает неверное имя, и ссылка UI.Navigation.* не компилируется.
Владелец правды: Core/Players/PlayerWhere.cs, Game/Session/LocalWhereabouts.cs,
Game/Session/Net/HostSessionRoster.cs, UI/Presence/ParticipantsPanelView.cs.