В этой статье мы вспомним уязвимости, которые удалось устранить, и поговорим о том, как внесенные изменения повлияют на игровой процесс в будущем.
ХРОНОЛОГИЯ
11–12 МАЯ
- В начале мая сообщество обнаружило три уязвимости — в работе щита Clash, мин и стационарных щитов.
- Пронаблюдав за развитием ситуации в течение выходных, команда установила высокий приоритет для исправления неполадок.
13 МАЯ
- Команда начала анализировать уязвимости. Сначала разработчики постарались многократно воспроизвести неполадки, чтобы установить проблему и начать поиски причин.
- Изначальный анализ показал, что команде потребуется время для определения масштабов проблемы, которую точно нельзя решить быстро.
- Уязвимостями стали пользоваться все чаще, в связи с чем разработчики стали обсуждать варианты краткосрочного снижения их влияния на игровой процесс.
15 МАЯ
- Управляющие проектом Rainbow Six Осада собрались, чтобы обсудить ситуацию. Требовалось в численном виде определить точный масштаб проблемы и ее влияние на игру.
16 МАЯ
- Утром после изучения данных было принято решение заблокировать Clash, мины и стационарные щиты.
- Различные отделы на время приостановили свою обычную работу и стали искать способы реализации этой задумки.
- Каждый возможный вариант был протестирован. Разработчики выбрали пять потенциальных способов и после нескольких неудачных попыток смогли определить рабочий.
17 МАЯ
- После двух быстрых и успешных сессий тестирования в качестве вынужденной меры Clash, мины и стационарные щиты были заблокированы.
24 МАЯ
- Команда определила, что для устранения уязвимостей понадобится больше времени, так как они затрагивают основные процессы — преимущественно порядок отправки пакетов на сервер. Понимая, что блокировка Clash и ключевых устройств негативно сказывается на игровом процессе, разработчики параллельно стали искать безопасные временные решения.
ИЮНЬ
- Через несколько недель появились новые отзывы об уязвимостях.
- Так как временные решения внедрили заранее, разработчикам удалось быстро среагировать и заблокировать Clash и IQ.
- К этому моменту у команды уже было готово полное рабочее решение исходных неполадок. Внутренние тесты прошли успешно, но перед обновлением основной игры требовалось опробовать изменения на тестовом сервере, чтобы получить больше данных.
ИЮНЬ–ИЮЛЬ
- В конце июня общее упорядочение было внедрено в PC-версию, а в июле — в версию для консолей.
- Сейчас разработчики следят за развитием ситуации и проводят проверки на предмет регрессии.
ВРЕМЕННЫЕ РЕШЕНИЯ
Пока одна часть команды работала над итоговым исправлением, другая разрабатывала решения, которые впоследствии позволили бы временно стабилизировать ситуацию. Разработчики понимали, какое влияние на «здоровье» игры оказывает блокировка Clash и двух устройств, и потому искали способы воспрепятствовать воспроизведению уязвимостей. Вскоре эти решения были внедрены в основную версию игры, а сообщество призвали сообщать о случаях возникновения аналогичных неполадок.
Отважиться на блокировку оперативников было нелегко. Команда ценит время и усилия, которые игроки тратят на разблокирование внутриигрового контента, и осознает, насколько такие действия могут изменить экосистему и ключевые механики в Rainbow Six Осада. Но в этом случае дожидаться итогового решения также было рискованно: требовалось как можно быстрее устранить способы воспроизведения уязвимостей и нормализовать игровой процесс.
Временные решения должны были удовлетворять нескольким требованиям: точечность — во избежание возникновения регрессии или сопутствующих неполадок; модифицируемость — для быстрых исправлений; простота — для минимального тестирования перед внедрением. В результате разработчики смогли быстро заблокировать уязвимости, осознавая, что текущие меры — лишь временные и вынужденные.
ЧТО ТАКОЕ «ОБЩЕЕ УПОРЯДОЧЕНИЕ»?
Оперативник, устройство, граната, щит, камера, стена, растение — все это объекты. Когда выполняется какое-то действие, каждый объект в Rainbow Six Осада отправляет «сообщение» (пакет данных) на сервер. Например, при использовании гаджета оперативник поочередно отправляет сообщения «Я достаю устройство» или «Я применяю устройство». Параллельно этому сам гаджет также поочередно отправляет сообщения «Устройство активировано» и «Устройство использовано». От сервера эти пакеты данных получают другие игроки, участвующие в бою.
Ранее порядок, в котором отправляются сообщения, был определен только для объекта. В связи с этим иногда пакеты терялись или сервер получал их хаотически. Ошибка в сетевом протоколе и привела к возникновению уязвимостей: при одновременном и многократном воспроизведении процессов увеличивалась вероятность того, что сервер получит неверные данные. В результате в играх отдельных пользователей те или иные действия отображались некорректно.
Нашим решением стало общее упорядочение — изменение сетевого движка с целью создать стандартизированный порядок отправки всех сообщений. Более того, для надежности теперь отправляется сразу несколько пакетов. В итоге каждая версия игры получает сообщения в одинаковой последовательности, а действия воспроизводятся синхронно для всех игроков.
Когда стало понятно, что все уязвимости связаны с этим базовым процессом, разработчики очень аккуратно подошли к подготовке решения. Следовало убедиться, что у него не будет нежелательных последствий. В конечном счете, несмотря на нагрузку на канал передачи, положительный эффект от общего упорядочения убедил команду внедрить именно это изменение.
ВЛИЯНИЕ В БУДУЩЕМ
Благодаря общему упорядочению каждое действие в игре будет воспроизводиться одинаково для всех игроков, так как последовательность сообщений выстраивается на универсальном, а не клиентском уровне. Разработчики оценили нагрузку на канал передачи данных и могут заверить, что ее увеличение не скажется на игровом процессе. Итоговое изменение позволит избежать случаев некорректной отправки пакетов и возникновения схожих уязвимостей.
Неполадки и их влияние на сообщество показали, насколько важны механизмы контроля над оперативниками и устройствами в основной версии игры. Команда стала выделять больше ресурсов на создание способов блокировки, чтобы была возможность быстро отреагировать на возникновение уязвимостей.