Невидимый страж и баны, которые наконец сами всё объясняют 👁️
Некоторое время назад мы писали здесь о том, как игра задумана безопасной для детей: жалобы, обратная связь и бдительный взгляд. Честно говоря, бдительный взгляд был самой слабой частью: мы могли получать жалобы, но почти не могли заглянуть в то, что на самом деле происходит в мире. Именно над этим мы и поработали, и результат состоит из двух частей: режим наблюдателя для надзора и полностью переработанная система банов, которая наконец объясняет затронутым игрокам, что происходит.
Режим наблюдателя. Когда приходит жалоба («кто-то строит всякую ерунду», «кто-то пишет злые вещи»), мы теперь можем войти в этот мир, никому не мешая. И действительно невидимо, а не в духе «пожалуйста, не рисуй меня», который модифицированная игра просто проигнорировала бы. Сервер вообще никому не сообщает о наблюдателе: ни аватара, ни припаркованного корабля, ни занятой посадочной площадки, ни анимации посадки, ни питомцев, ни спидера, ни занятого игрового слота, ни изменения числа игроков. Для всех в этом мире там буквально никого нет. Летать можно сквозь стены (иначе в наглухо закрытую базу не попасть), существа не замечают наблюдателя, а стрелять он и так не может.
Наблюдать — значит наблюдать. Наблюдателю нельзя ничего трогать в мире, за одним исключением: он может добывать блоки. Это единственный рычаг, который реально убирает из мира оскорбительную постройку, и каждое такое удаление записывается в журнал. В чате наблюдатель заглушён; чтобы показаться намеренно, нужна отдельная команда. А на экране всё время висит табличка SPECTATOR — чтобы никогда не возникло ошибочного ощущения, будто играешь как обычно.
Почему всё устроено так строго. Два решения, снаружи невидимых, но важных для нас. Первое: роль наблюдателя не хранится в сохранении, она заново вычисляется из конфигурации сервера при каждом входе. Сохранения можно скачать и загрузить в другом месте: сохранённая роль надзирателя уехала бы вместе с ними, на чужие машины. Второе: это не опция мира. Владелец мира не должен иметь возможности отключить надзор за своим миром. Поэтому он и не привязан к настройке «админ-читы», которую миры и так по умолчанию держат выключенной.
Как найти, где что-то произошло. Для этого есть новые команды: /players показывает, кто в сети, — и всех, кто когда-либо играл в этом мире; /builds показывает, где кто строил; /where ведёт вас к игроку; /goto прыгает и между планетами (старый телепорт только задавал координаты и сбрасывал вас на не ту планету 🙈). Кроме того, обзорная страница в нашей админ-панели читает данные прямо из сохранения мира: игроки, постройки и «горячие точки строительства» — так можно найти даже дом, который кто-то без Сердца базы поставил где-то посреди пустоты. А каждая изменённая ячейка теперь помнит, кто её трогал последним и когда. Прежде чем встраивать это, мы измерили, сколько места это займёт: ни одной лишней строки в базе данных, потому что хранение и так идёт по ячейкам.
И в закрытых мирах тоже, за двойным замком. В первых версиях была нелепая дыра: невидимый наблюдатель мог попасть только в публичные миры без пароля, то есть именно туда, где происходит меньше всего. Дети почти всегда играют в закрытых мирах, пароль от которых передают друг другу друзья. Поэтому надзор теперь достаёт и до них. Чтобы это не превратилось в чёрный ход, доступ закрыт двойным замком: нужен аккаунт оператора, который можно создать, только предъявив секретный код, и специальное имя игрока для этого, зарезервированное во всей системе, которое никто другой не может зарегистрировать или использовать в игре. Не хватает любого из двух, и ничего не происходит.
А теперь баны. Раньше с этим было по-настоящему плохо: забаненный аккаунт мог спокойно входить, а стена появлялась только при входе в мир, и без причины, без даты и без возможности спросить. С точки зрения игрока, игра просто сломалась. Теперь уже при входе в аккаунт видно, как обстоят дела, и появился ящик входящих сообщений: «ваш мир удалён (причина)», «ваш бан снят». Это сообщение записывается в момент события: позже этой информации уже нет, ведь удалённый мир, как ни крути, исчез.
Тайм-аут вместо изгнания. Баны теперь в первую очередь временные: по умолчанию три дня. Истёкший тайм-аут считается «не забанен» на каждой проверке, так что «три дня отдыха» никогда не превратятся незаметно в вечное исключение. Запись при этом остаётся для истории. Причины даются фиксированными категориями (чат, грифинг, читерство, имя, другое), показываются переведёнными на немецкий и английский, а если человек что-то добавляет, это выводится дословно, как набрано. Самое важное во всём этом: в сообщении может быть назван день, с которого вам снова будут рады.
Владельцы миров теперь могут модерировать свой мир. Если у вас есть мир, вы получаете тот же рычаг для вашего мира: собственный список банов, который соблюдается так же надёжно, как наш. Он запоминает аккаунт (так что смена имени не поможет) и игровое имя (у аркадных гостей аккаунта нет вообще). Вы выбираете из списка людей, которые действительно заходили в мир: набирать имена вручную — как раз способ заблокировать не того ребёнка. А поскольку бан решает только следующий вход, есть ещё и возможность выгнать игрока: игрок сразу оказывается в меню, с причиной, на своём языке. Сообщение уходит до закрытия соединения, так что модифицированная игра не сможет просто его проигнорировать и играть дальше.
Чего мы сознательно не стали делать. Очевидным ходом против обхода банов было бы распознавание устройств («новый аккаунт, тот же компьютер»). Мы от него отказались по трём причинам: идентификатор меняется, как только вставляют USB-флешку или Windows делает большое обновление; модифицированная игра подделывает его за пять минут; а одинаково настроенные школьные компьютеры выглядели бы совершенно одинаково. Плюс юридическая сторона: чтение идентификатора устройства по немецкому праву требует согласия, которое дети младше 16 лет не могут дать с юридической силой. Надзор не должен превращаться в слежку. И ещё одно правило, записанное в коде: аккаунт оператора нельзя ни забанить, ни выкинуть, иначе надзор можно было бы отключить изнутри.
Всё это уже есть в коде и заработает с ближайшим обновлением сервера. Искренне надеемся, что нам это понадобится как можно реже. 🌟
Комментарии