Приветствую!
Ранее я уже писал тему о проблеме снайпа, которая демотивирует многих игроков.
В ответ была реализована фича с отображением локации "Неизвестно" при нахождении игрока на кросс-сервере.
Глобально это проблему не решило так как по самому факту смены статуса легко понять, что человек зашёл в арену, и по таймингу можно отследить конец боя.
Предложение:
Добавить задержку обновления локации в списке друзей при переходе на кросс-сервер или при смене зоны внутри него.
После входа в кросс-сервер (или смены арены внутри него) локация игрока остаётся прежней ещё 60 секунд, а потом уже обновляется на "Неизвестно" или на реальную арену.
Пример:
Игрок заходит из Даларана в арену Награнд →
в течение 60 секунд в списке друзей всё ещё отображается «Даларан»,
и только после минуты меняется на «Неизвестно» (или «Арена Награнда»).
Так как система уже умеет подменять строку "Неизвестно", доработку можно сделать прямо в том же месте, где сервер отправляет обновление статуса друзьям (SMSG_FRIEND_STATUS или аналогичная функция в PlayerSocial).
Логика примерно такая:
Код:if (player->IsInCrossServer()) { time_t now = time(nullptr); if (now - player->GetLastZoneChangeTime() < 60) locationString = player->GetLastKnownZoneName(); // показываем предыдущую зону else locationString = "Unknown"; // или реальную арену }
То есть вместо мгновенной замены — просто добавляется таймер в 60 секунд.
Никаких глобальных изменений или лишней нагрузки это не создаёт.
Преимущества:
• Полностью устраняет возможность отслеживать находится ли игрок на арене
• Не ломает функционал списка друзей.
• Легко реализуется — текущее решение уже затрагивает вывод локации.
• Не требует изменения клиентской части.




Ответить с цитированием
