legioncmc

legioncmc

Любитель 3D печати https://t.me/legion_cmc
Пикабушник
Дата рождения: 01 ноября 1982
поставил 17739 плюсов и 3298 минусов
отредактировал 13 постов
проголосовал за 32 редактирования
Награды:
5 лет на Пикабу
26К рейтинг 345 подписчиков 43 подписки 63 поста 28 в горячем

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4

Квест WOTTEN, 10 - 24 августа 2020 года.

Изнутри и снаружи.


Начало этой истории вы можете найти здесь:

Первая часть

Вторая часть

Третья часть


Напомню, с чего все начиналось. Мы группой разработчиков подготовили квест для игроков в World of Tanks. Квест получился достаточно сложный и интересный, для любителей поломать голову. Подготовили мы его примерно за два месяца, и вот нам представилась возможность сравнить наши ожидания о том, как его будут проходить, с реальностью.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4 Arg, Квест, Квесты в реальности, Танки, Календарь, Компас, Длиннопост

10 августа

Датой запуска квеста было назначено 10 августа, именно в этот день должен был выйти в свет праздничный Ангар в Танках, однако точного времени его обновления мы не знали. В результате наш таймер досчитал до нуля ровно в 6 утра по Москве, примерно за 1 час до релиза праздничного Ангара.


А приблизительно через два часа мы поняли, что наш Программист забыл закрыть Swagger - это автоматически генерируемая карта-описание всех страниц сайта. Об том мы узнали, когда один из игроков воспользовался картой сайта и заполнил недоделанную форму отправки контактов победителя. Поскольку почти на каждом этапе квеста у нас были настроены скрипты-оповещалки, мы немедленно получили оповещение об этом и зафиксировали факт утечки информации примерно за 2 часа до того, как она появилась в общем доступе. Это не было большой проблемой, так как все, что попало в сеть, за исключением задачи с бинарным кодом, было мало пригодно для решения (на сайте хранилась также “пустая” пленка, из которой нельзя было получить пароль к архиву, и некоторое количество задачек, от реализации которых мы отказались на ранних этапах квеста). Несмотря на это, мы были расстроены тем, что линейность квеста и его логика была сломана. Хотя в дальнейшем оказалось, что утечка намного больше тормозила игроков, чем помогала им.


От формы обратной связи для победителя мы отказали, заменив ее на инструкцию к отправке sms на специально выделенный для этого номер.


11 августа

К 11 августа страницу wotten.babaev.ru посетило более ста тысяч человек. Ряд Youtube блогеров сделали видео на тему квеста, а все, чего игрокам удалось добиться - это выяснить, что страница со стрелкой (ее окрестили “компасом”) указывает на координаты Музея Шоколада в Москве. Один из танковых блогеров уже на второй день квеста записал два 4-х часовых стрима, посвященных нашим загадкам. Внимание людей было сильно рассредоточено по обрывкам данных, утекшим в сеть, все пытались понять, что нужно сделать на данном этапе. В официальном дискорде WOT CIS и на форуме Wargaming стихийно появились каналы и ветки обсуждения квеста, которые мы, разумеется, внимательно отслеживали. Мы стали замечать, что большинство людей сходу отметают необходимость физического посещения координат, предполагая, что квест 100% офлайн, и к вечеру 11 августа мы приняли решение вмешаться. Сначала мы рассматривали возможность передать информацию через модераторов Wargaming, однако нам показалась невероятно скучной идея того, что модератор напишет “вам надо сходить по указанным координатам и подключиться там к wi-fi точке”, и мы стали искать альтернативный способ связи с игроками.


Тут я вынужден отвлечься и рассказать о наших планах по взаимодействию с игроками. Все дело в том, что мы вдохновлялись квестами, которые практически не подразумевали никакого интерактива или коммуникации с игроками. По изначальной задумке мы хотели полностью предоставить игроков самим себе, но достаточно скоро стало понятно, что такой подход не подойдет, если мы хотим сохранить большее число участников до конца мероприятия. Тем не менее, мы не хотели вступать в диалог с игроками, и решили, что наше участие будет монологом. Хотя ограниченный интерактив с игроками планировался с самого начала (в виде мало значащего диалога пользователей с ботом), мы не хотели нарушать атмосферу таинственности и создавать двухсторонний канал общения с “Покровителем”. Мы долго думали о том, как передавать информацию всем игрокам, и я предложил попробовать разместить ее примерно так же, как спрятали часть мини-кодов - в исходном коде той самой страницы, которая к тому времени была изучена всеми вдоль и поперек. Опробовать эту странную коммуникацию мы решили во время одного из стримов, на котором игроки увлеченно и безуспешно пытались решить задание с компасом. Ближе к вечеру мы оставили в коде страницы первый комментарий. Мы обратились к набирающему популярность стримеру, написав ему, что нам нравится его стрим, но не нравится обилие брани. Первый коментарий не замечали около получаса, и мы почти отчаялись, когда кто-то из игроков попросил его заглянуть в исходный код страницы. Коммуникация удалась, и следующий комментарий, который предложил Покровитель: “Слушай Согота о Селене”. Этот комментарий - цитата из книги А.Ю. Пехова, в которой нищий дал главному герою совет, в котором порекомендовал не стоять на Селене, а идти ножками. В этот раз игроки обнаружили подсказку в течении двух минут (в последствии все подсказки на “компасе” игроки находили в среднем 1-2 минуты). Уже через пару минут игроки сумели отыскать оригинальный текст совета, однако стример воспринял этот совет не совсем так, как мы ожидали - он посчитал, что совет призывает его не использовать утечки информации, а пытаться решить квест самостоятельно. Нам очень понравился этот посыл, и мы ответили (снова через комментарий), что нам нравится его мысль, однако стоить послушать совета, так как он “стоил золотой”. Так мы пытались сказать, что, несмотря на правильную мысль, мы все же имели в виду буквальный поход по координатам “ножками”.


12 августа

На следующий день во всех доступных для мониторинга средствах коммуникации обсуждали появление новых комментариев на странице с компасом. Мы наблюдали, как на форуме WOT, в Дискорде и на ряде страниц ВКонтакте люди с жаром спорят о том, что может значить два наших послания, и стараются их интерпретировать. Единственное, что нас смущало - это массовое отрицание дословной интерпретации подсказки. Игроки были абсолютно уверены в том, что мы не станем делать физические места частью загадок, и каждый раз, когда мы видели предложение съездить к музею и поискать что-то на месте, другие игроки приводили множество аргументов против. Мы также постоянно мониторили логи подключения к Wi-Fi сети в магазине и с каждым часом, когда заходов не появлялось, понимали, что необходимо продолжить давать подсказки. Мы выбрали знакомого нам стримера (благо он настолько много времени проводил за решением нашего квеста, что мы могли совершенно спокойно обращаться к нему, а через него и к его аудитории, практически круглые сутки). На этот раз мы дождались момента, когда в чате стрима кто-то напишет предложение сходить по координатам, и в этот момент добавили очередной комментарий с намеком на то, что один из зрителей прислал ему верную идею. Мы просчитались, поскольку новый текст на “компасе” вызвал целый поток комментариев, который быстро похоронил здравую идею одного из пользователей. Кроме того, мы не оставили никакой подсказки о том какая идея была верной среди множества идей, высказанных игроками. Следующую попытку мы решили предпринять часом позже, и на этот раз обратились персонально к одному из игроков в голосовом канале Discord, посвященному решению квеста. Достаточно быстро мы услышали крайне здравую идею игрока под никнеймом “Antony”, который обратил внимание на наличие кафе “Вдохновение” в магазине “Аленка” на ул. Лобачика, и попытался уговорить сообщество отправиться туда, однако встретил жесткую критику своей идеи. Не мешкая, мы оставили новый комментарий на странице компаса: “Antony, ты глас вопиющего в пустыне”, давая понять ему и всей группе собравшихся, которых было около ста человек, что идея с посещением кафе была незаслуженно раскритикована. Мы предполагали, что игроков, не присутствующих в дискорде, придется продолжать информировать подобным же образом, однако достаточно быстро и наше обращение к Антонию и контекст этого обращения попало во все открытые источники информации по квесту, и вопрос решился сам собой.


В тот же день наш сайт начали яростно атаковать. Несмотря на то, что мы использовали Cloudflare CDN, позволяющий отсечь большинство простейших DDOS атак, нашлись люди, которых это не остановило. Кто-то достаточно упорно пытался программно перебрать все возможные комбинации “букв” на главной странице сайта. Ежесекундно мы получали несколько тысяч запросов, мимикрирующих под пользователей, даже не гнушающихся запуском скриптов. Чтобы немного усложнить им жизнь, мы вынуждены были организовать редирект со страницы 404 на известное видео Рика Эсли, после чего, практически сразу перебор url-ов прекратился. Также, Покровителю пришла в голову мысль о том, что страница 404 дает нам отличную возможность перенаправлять пользователей с нашего сайта в те места, где что-то будет происходить, и к вечеру мы решили с этим поэкспериментировать. Мы сверились с планами Юши (это один крупных танковых блогеров и стримеров) по стримам и незадолго до начала его стрима оставили в компасе комментарий:


“Юша, как скучно мы живем. В нас пропал дух авантюризма. Мы перестали лазить в окна к любимым стримерам. Мы перестали делать большие хорошие глупости на них”.


Мы выбрали именно Юшу, так как к тому моменту он выпустил уже 3 видео, посвященных квесту, и нам показалось, что интерактив на его стриме будет уместен. В начале стрима мы настроили редирект с 404 на его стрим, и стали ждать возможности оставить подсказку. Идеальным для нас был бы вариант спровоцировать Юшу отправиться на поиски подсказки прямо вместе со стримом, но услышав несколько раз фразы о том, что он сильно устал и неважно себя чувствует, мы отказались от этой идеи. Дождавшись окончания стрима Юши, мы переключились на другого крупного блогера, который тоже проявлял интерес к квесту - Вспышку.


По нашей информации Вспышка живет в Питере, поэтому мы не ожидали, что он отправится в магазин, но, несмотря на это, мы хотели дать ему и его подписчикам подсказку. Мы оставили Вспышке приветственный комментарий (цитату из песни группы “Машина времени”) и стали думать, что делать. Покровитель сам по себе - опытный игрок в танки (у него специфический никнейм в игре - LegionCMC), предложил дать Вспышке подсказку непосредственно в игре. Когда на стрим Вспышки пришло около 2000 тысяч человек, заинтересованных в загадке (это было хорошо видно по состоянию его чата), мы оставили еще один комментарий на “компасе”, намекающий на то, что стримеру надо зайти в тренировочную комнату, которую создаст Легион. Игроки достаточно быстро поняли нашу подсказку и буквально заполонили стрим комментарием о том, что в танках появилась тренировочная комната с игроком по имени Легион. Вспышка подыграл нам, и в комнате, в чате Покровитель дал ему подсказку, еще раз акцентируя внимание на том, что следует посетить магазин Аленка на ул. Лобачика: “EXIF, Inspiration, Shop”.


В этот же день мы продолжили активный мониторинг решения и стали замечать, что все больше и больше игроков начали принимать факт того, что придется искать нечто в реальном мире. Примерно в 14 часов по Москве в логах Raspberry Pi появилась первая запись о подключении к сети. Мы выждали несколько часов, давая фору игроку, который добрался до магазина и нашел сеть, и затем разместили следующую подсказку, дающую понять игрокам, что кто-то что-то нашел:


“Один ножками дошел... и теперь идет дальше”.


Это окончательно переломило недоверие к идее прогулки, и уже через несколько часов мы увидели сообщение в дискорде от игрока Dem о том, что он поехал к магазину. Мы решили отметить его и написали комментарий лично для него:


“Dem, so close!”


А затем и для пользователя под ником Лимончик, который предложил в чате приехать в магазин и поискать там сигнал. Вскоре мы увидели массу новых подключений к wi-fi сети.


13 августа

Мы начали готовиться давать людям подсказки про спрятанную в роутере пленку. У нас даже был план выложить в общий доступ копию страницы с роутера, на случай, если никто не сделает это без нашего участия, однако увидев в сети несколько клонов нашей страницы, мы успокоились. Следующую подсказку мы хотели дать через стрим Джова (еще один крупный танковый блогер), но поскольку он не интересовался загадкой ангара, мы решили кинуть комментарий, адресованный ему заранее и назначить время “встречи”. В районе часа дня мы оставили ему приглашение в виде считалочки Фреди Крюгера из старого фильма ужасов. Не увидев ответа в его социальных сетях, мы перенесли время на час вперед. Однако, к вечеру Джов упорно игнорировал всех, кто писал на его стриме, да и стримил он вовсе не танки, поэтому мы отказались от дальнейших “заигрываний” с ним, оставив комментарий, что Джов - не торт.


В тот же день приключилась интересная история. Из ниоткуда на форуме кто-то запостил пароль от архива. Мы очень удивились коварству игроков, поскольку в общий доступ был выложен только пароль, но не само решение загадки. Игроки с удовольствием изучали содержимое архива, но мало кто пытался разобраться в том, как задача решалась. Мы были уверены, что это было сделано намерено, чтобы большинство игроков не получили один из мини-кодов, который можно было найти в процессе решения задачи с пленкой. Позже мы узнали, что человек, который это сделал, был членом команды, которая в итоге проиграла финальную гонку к победе, но со слов членов команды, то было сделано без злого умысла, а решение он не выложил просто по тому, что его не знал, за что и был исключен из команды. Без особого труда масса игроков разобрала картинку в спектрограмме звукового файла и получила доступ к боту, который отсчитывал миллисекунды до понедельника.


14-15-16 августа

К концу недели вся команда проекта находилась в полнейшем изнеможении. Постоянный мониторинг “эфира”, придумывание и обсуждение комментариев, борьба с атаками на сайт требовали 100% внимания с раннего утра и до поздней ночи. Мы были вымотаны, клевали носом, и нам надо было отдохнуть. Также в середине недели события в республике Беларусь стали принимать печальный оборот, и мы решили за выходные переделать одну из задач (поврежденное видео). В выходные мы отсняли новый, менее шокирующий видеоряд, добавили в него некоторое количество мемов, родившихся на неделе, немного почитали “эфир” и отдохнули, чтобы в понедельник в 6 утра снова отправиться в бой.


17 августа (первая встреча с ботом)

В 6 утра в понедельник мы были готовы к запуску основного телеграм бота. Я внимательно смотрел за логами, также был подключен телеграмм канал, который должен был дублировать для нас все сообщения пользователей (и позволять на них отвечать вручную, когда придет время). Однако очень быстро стало ясно, что функция дублирования сообщений в канал слишком сильно ограничивает бота в возможности отвечать пользователям, и ее почти сразу пришлось отключить, а неуемным пользователям - снизить ограничение по количеству сообщений в 15-ти минутный интервал со ста до пятнадцати. Когда это было сделано, задержки ответа бота снизились с 2-3х минут до нескольких секунд, а затем отправка стала практически мгновенной. В течение первого получаса мы наблюдали за тем, как пользователи обменяли через бота найденные до этого мини-коды на коды на золото, быстро разобравшись с этой механикой. Нас, разумеется, огорчало то, что коды достались не тем, кто их нашел первым, но основная задача найденных ранее кодов была в том, чтобы объяснить их ценность и значимость. Следующие коды по плану должны были достаться тем, кто уже понимает, как это работает, и обнаружит их первым. Так, в сущности, и получилось.


Мы не ожидали, но этап с ботом был пройден уже к 9 вечера, несмотря на то, что окна для считалочки появлялись редко и ненадолго из-за большого количества игроков. Игроки быстро сообразили, что боту надо отправлять числа, и подобрали алгоритм отправки, мешая друг другу. Позже, по логам, мы выяснили, что команда, которой удалось пройти бота, планомерно и целеустремленно старалась, начиная с двух часов дня до тех пор, пока им это не удалось. Через несколько минут после их победы мы оставили комментарий о том, что бот был пройден, давая остальным игрокам информацию о том, что бот работает корректно и его можно пройти.


К сожалению, у нас не было доступа к чату команды, прошедшей видео, и мы не могли наблюдать за их прогрессом, но очень скоро (буквально через несколько минут) мы увидели, что они поняли смысл подсказки бота и перешли к 10-ти часовому видео. Мы узнали об этом, когда они нашли мини-коды спрятанные в описании youtube канала и в метаданных самого видео. Теперь, когда в разгадке данного этапа были явные фавориты, мы решили дать им значительную фору, не публикуя никаких подсказок и осознавая сложность поиска кодов в 10-ти часовом ролике.


18 августа (проблема “сундука”)

В этот день мы стали замечать “усталость” игроков. Стали появляться идеи о том, что квест окончен, и приз забрали 15 человек, идущих вперед. В районе полудня мы решили отреагировать на это и разместили на компасе комментарий “послушай и сделай наоборот” со ссылкой на одного из блогеров, утверждающих то, что квест окончен.


Для тех, кто по каким-либо причинам не могут собрать 15 человек и решить бота, мы продумали альтернативную возможность прохождения, а именно, чуть меньше, чем через сутки после прохождения бота, должны были активироваться ответы бота на слова “сундук 1”, “сундук 2” и т.д. Когда время активации подошло, Покровитель стал тестировать ответы бота, и выяснилось, что я допустил ошибку. На все сообщения, содержащие слово “сундук” бот отвечал одним и тем же мини-кодом (по задумке ответы должны были приходить только на сундук+номер). Исправление бага заняло у меня в районе получаса, однако к тому времени игрокам удалось увидеть ответ на слово сундук, и они перешли к этапу 10-ти часового видео.


Когда заплатка была готова, бот перестал как-либо реагировать на слово “сундук” и отвечал только на заготовленные фразы: “сундук 1”, “сундук два”, “сундук 3”, “сундук четыре”, сундук пять и т. д. словами до пятнадцати. Первый и третий сундук надо было писать с числами, поскольку мой несовершенный алгоритм ответов считал “сундук один” и “сундук одиннадцать” одной и той же фразой. Я мог потратить некоторое время на решение и этой проблемы, но мы решили оставить это несовершенство, дабы еще больше не смущать игроков, которые успели найти и эти “сундуки”, сделав альтернативный путь получения мини-кодов бота чуть менее очевидным.


19 августа

К этому дню большая часть решающих квест решила пропустить задачу бота и переключиться на 10-ти часовое видео. К 11 утра был найден первый из спрятанных в видео указателей, и сомнения игроков в том, что надо искать спрятанный в видео контент рассеялись. Однако мы очень быстро заметили, что игроки посчитали, что в видео спрятан всего один код. Тогда мы приняли решение дать еще одну подсказку, указав на количество кодов и приблизительно отметить код, который был найден. В районе полудня разместили видео в общем доступе и изменили название видеоролика, добавив к нему шесть квадратиков, один из которых был закрашен, а также разместили комментарий в коде “компаса”, указывающий на приблизительный тайминг первого по счету кода. Это произвело практически мгновенный эффект, и к вечеру игрокам удалось обнаружить все шесть кодов. Каждый раз, когда люди находили очередной код, и мы видели ссылку на видео в общем доступе, публиковали видеоролик в доступ всем, а также обновляли “квадратики”, отмечая тем самым коды, которые были найдены и сужая зону поиска очередных кодов для игроков.


Видеоуказатели игроки расшифровали очень и очень быстро, сообразив, что каждое из 6 видео ведет к одному из магазинов “Аленка”, расположенным в Москве, Питере и Благовещенске. Первым магазином, который посетили игроки, была “Аленка” в Санкт-Петербурге. В каждом из магазинов была подсказка - логотип WoT, внизу которого напечатан Дот Код (разновидность 2D баркода), в котором было зашифровано всего лишь две буквы: “FM!!!”.


20 августа

Игроки быстро сообразили, что означает FM и отправились на ближайшие к ним магазины с радиоприемниками, прослушивая эфир. Специфика FM модуляторов состоит в том, что каждый передатчик имеет крайне малый радиус действия. Мы установили их таким образом, чтобы уверенный прием сигнала можно было гарантировать только в том месте, где расположена подсказка - буквально два-три шага в сторону могло означать, что сигнал поймать не удастся. Мы видели, как многие описывали свои бесплодные походы к магазину, в попытках поймать сигнал в окрестностях. Кто-то так же не справился с задачей поиска сигнала (т.к. каждую частоту мы выбирали таким образом, чтобы она была свободна от радиостанций). Несмотря на это, в районе 12 часов по Москве один за другим были найдены два кода из модуляторов. Как только их обнаружили, мы поставили на “компас” подсказки, оповещающие о том, что они были найдены (“Питер -10к” и “Афимол -10к”). К 3 часам дня все картинки 3д модуляторов, за исключением Благовещенского, были расшифрованы. Более того, несмотря на отсутствие детали пазла из Благовещенска, группе игроков удалось собрать обе фразы, зашифрованные в загадке и перейти на следующий этап квеста.


21 августа

У нас мало информации о том, что именно происходило в этот день. Мы видели затруднения игроков, которым удалось пройти 3д пазл и начать решать “испорченную запись” (в основном по комментариям, которые стали появляться под видео), однако в этот день решение найдено не было. Также не был найден последний кусочек пазла - из Благовещенска.


22 августа

В этот день, в 9 вечера был найден и расшифрован последний кусочек пазла, находящийся в Благовещенске. Позже, из бесед с игроками, мы узнали, что одна из групп игроков заказала услуги курьера, который обошел магазин с радиоприемником и сделал аудиозапись. Формально пазл был решен, но часть игроков поняли основную идею того, что финальный ключ надо будет собрать из всех мини-кодов. Они сообразили, что перескочить через Благовещенск не выйдет и нашли решение.


“Испорченная запись” оставалась не решенной. В этот день, кто-то из прошедших дальше отдал в Discord канале все элементы пазла, чтобы продвинуть массу игроков, и мы снова стали получать информацию о ходе решения. Также мы стали замечать, что интерес к мероприятию падает, и приняли решения дать еще одну подсказку на уже привычном всем месте - в коде страницы с “компасом” - там мы разместили текст “Страна Глухих”, набранный языком жестов.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4 Arg, Квест, Квесты в реальности, Танки, Календарь, Компас, Длиннопост

23 августа

В течение дня мы замечали, что очень многие правильно истолковали нашу подсказку и отправляют боту в значительной степени разгаданную фразу, которую надо было прочитать по губам. Однако полностью правильную фразу смогли подобрать только к девяти вечера этого дня. Фраза была “танк кролик расчет солнце апельсин шоколад”. Ответом на эту фразу был мини-код и очередная подсказка: “Что делать дальше - спросите благородного дона Румату”. Началась гонка к финалу, и с этого момента я ни на минуту не расставался со специально купленным телефоном с большой батарейкой, на который в любую минуту ждал sms победителя. Телефон меня периодически пугал sms рассылками.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4 Arg, Квест, Квесты в реальности, Танки, Календарь, Компас, Длиннопост

24 августа

Мне было странно, что задачу Дона Руматы не решили в первый же день, ведь на форуме и в дискорде я несколько раз видел правильные версии решения задачи, но каждый раз кто-то ошибался хотя бы на один символ. В 9 вечера мы разместили последнюю подсказку на “компасе”: “из нулей легкО сделать цепь. One man no man”, а через два часа около десятка игроков сумели собрать все 42 кода. Телеграм бот был настроен так, что я получал уведомление каждый раз, когда очередной игрок пробует прислать полный финальный ключ. Последним шагом был поиск необходимого аддона, позволяющего расшифровать балерину, и я был уверен, что те, кто зашел так далеко, справятся с этим максимум за час. Однако я снова ошибся. Прошел час, затем два, затем три. К четырем я уснул и через час снова проснулся, удивившись тому, что sms до сих пор никто не прислал.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4 Arg, Квест, Квесты в реальности, Танки, Календарь, Компас, Длиннопост

Я (в десятый раз) перепроверил, что нигде не ошибся и продолжил ждать. Тем временем, количество игроков, добравшихся до финальной загадки, перевалило за два десятка. Наконец, в 7 часов 51 минуту я получил sms. И практически одновременно с ней - еще с десяток сообщений. Первую sms (ту, что на скриншоте) я проигнорировал, т.к. текст не соответствовал условиям задачи. И ответил на вторую. Я (в десятый раз) перепроверил, что нигде не ошибся и продолжил ждать. Тем временем, количество игроков, добравшихся до финальной загадки, перевалило за два десятка. Наконец, в 7 часов 51 минуту я получил sms. И практически одновременно с ней - еще с десяток сообщений. Первую sms (ту, что на скриншоте) я проигнорировал, т.к. текст не соответствовал условиям задачи. И ответил на вторую.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4 Arg, Квест, Квесты в реальности, Танки, Календарь, Компас, Длиннопост

Текст моего ответа был примерно такой:


“Привет. Не выключай телефон. Покровитель скоро с тобой свяжется. Когда он тебе позвонит, спроси у него пароль - он ответит тебе "ФУНДУК". Так ты поймешь, что тебе звонит Покровитель”. Я предполагал, что команда победителей может подшутить над тем, кому я отвечу, поэтому оставил победителю еще один способ отличить нас от Шутника.


Ну, а что было дальше - вы и так знаете. Мы связались с победителем и его командой, передали приз и провели длинный эфир с Юшей и Вспышкой. И написали этот лонгрид =)


Эпилог

В заключении я хочу сказать вам большое спасибо - всем игравшим. Помните, что я пробежал этот путь дважды. Первый раз во время разработки, а второй с вами. Я считал буквы в Ангаре и прожимал ВХОД миллион раз. Я по сто раз на дню заглядывал в сорсы на “компасе”. Я “ножками” ездил на улицу Лобачика и подключался к вай фаю. Я слушал морзянку и искал пропущенные элементы таблицы Менделеева, я разматывал пленку и по сто раз на дню писал боту разную добрую чушь. Я смотрел часами на катящийся по полю танк, ездил в Афимолл на Арбат и на Болотный остров, а в Питер и Благовещенск отправлял посылки. Я клеил пазл и перечитывал Стругацких, я скрупулезно, вручную, кадр за кадром собирал сообщения морзянки. Я слушал вас в Дискорде, читал на форуме и ВКонтакте и я благодарен Вам за все, что слышал о себе. Спасибо! Надеюсь, еще увидимся.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора - как все было. Часть 4 Arg, Квест, Квесты в реальности, Танки, Календарь, Компас, Длиннопост

Макет пазла, кстати, можно скачать в полной версии этого текста, распечатать и склеить =)


Постскриптум и планы на будущее

Это был первый опыт для всех нас. Мы видели почти всю критику в наш адрес, и значительная ее часть была вполне оправдана и заслужена. Мы многое поняли, многому научились и многих ошибок не повторим. Следующий квест уже в планах. Не отписывайтесь от бота. И помните, мы читаем очень многое из того, что вы ему пишите. А если вам будут приходить крутые идеи для загадок - добавляйте в сообщение “%%%” =)


В качестве дополнительных материалов я сделаю еще один пост – дневник главного героя нашего квеста, рассказ, который связывает всю историю воедино.

Показать полностью 6

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3

Квест WOTTEN, 10 - 24 августа 2020 года.

Изнутри и снаружи.


Начало этой истории вы можете найти здесь:

Первая часть

Вторая часть


Видеоуказатели

Эта задачка очень сильно тормозила всю цепочку производства, поскольку без ее реализации невозможно было скомпоновать 10-ти часовое видео, а значит, невозможно было зашить в бота ответ пятнадцати игрокам, которые его решат. Дело усложнялось тем, что, когда я готовил видео, указывающие на расположение FM модуляторов, я знал, что там будут FM модуляторы, но понятия не имел, что именно будет в модуляторах (именно поэтому тематика видео максимально схематична и оторвана от любого мыслимого контекста, помимо танков). Поначалу я планировал сделать одно шаблонное видео, которое будет похожим образом указывать на 6 разных мест (первое место, по которому я сделал видео был Благовещенск - глобус был взят из Google Earth Pro, записан виндовой программой захвата экрана - нажмите Windows+G если у вас Windows 10).

Мне показалось, что делать все видео одинаковыми будет скучно, и я стал думать, как обозначить места. После Благовещенска я стал кодировать Арбат. Изначально идея была дать точки в местах расположения известных танковых памятников (Танковое сражение в Белгороде, Памятник танку в Челябинске и какой-нибудь еще мемориал). Кроме фотографий мемориала я собирался дать расстояние от мемориала в метрах и заставить игроков триангулировать магазин. Однако эта идея с треском провалилась из-за того, что на таких расстояниях разные общедоступные карты давали погрешность в несколько километров. Идею пришлось упростить. Так появилась видео с азимутами - в этом видео в качестве подсказок я нарисовал схематичное изображение Поклонной горы и 15 Андреевских флагов, которые намекают на памятник Петру в Москве (на нем как раз установлено 15 Андреевских флагов):

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Прохождение:

По найденным в 10-ти часовом видео кодам находилось 6 видео на YouTube.


https://youtu.be/dKRfNqJjp3w В видео было указание на фабрику Рот Фронт. Где-то в середине есть вставка с google maps с общим планом района, по которому игроки нашли точное место.


https://youtu.be/Kop1qkrHKeo В видео изображена подводная лодка “Красный Октябрь” из книги Тома Клэнси “Охота за красным Октябрем”. Узнать, что это именно Красный октябрь, можно по имени капитана подлодки и одного из главных героев книги - “М.А. Рамиуса”. Видео дает понять, что подсказку следует искать на Болотном острове, где расположен магазин “Аленка”.


https://youtu.be/IVCJmuj96wM В видео изображены 15 Андреевских флагов и надпись “Азимут 339”, а затем схематичное изображение Поклонной горы и надпись “Азимут 68,75”. 15 Андреевских флагов указывают на памятник Петру I в Москве, а схема изображает Поклонную гору. Если от Петра и стелы провести соответствующие азимутальные линии, они пересекутся точно на здании, в котором расположен магазин Аленка на ул. Арбат.


https://youtu.be/DAHIrc2Pyyw В видео камера падает на землю в район г. Благовещенск - прямехонько в магазин “Аленка” на ул. Ленина.


https://youtu.be/heCbEvHj570 В видео показано очень узнаваемое здание - доходный дом графа Шувалова на Невском проспекте в Санкт-Петербурге. Если бы камера продолжала опускаться, и видео не оборвалось, показался бы магазин “Аленка” на Невском.


https://youtu.be/1N51VwYWy6c В видео показаны небоскребы Москва-Сити и чертеж реактивного снаряда, похожий на схему ТЦ Афимолл (вернее схема ТЦ, отдаленно напоминающая реактивный снаряд). На чертеже красным крестом отмечено место, где расположен магазин “Аленка”.


FM модуляторы

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

До того, как начать загадывать загадки про шоколад и танки, я 6 лет проработал в области радиосвязи. В 2012 году мне посчастливилось поучаствовать во вводе в эксплуатацию первой в России LTE сети (“Йота”). Я неплохо знаю законодательство в этой области и правила вещания, поэтому мог с уверенностью проектировать задачку с радиостанцией. Первые идеи были очень разные, связанные в основном с вещанием на частотах радиолюбителей. Сначала мы хотели задействовать как можно больше локаций в городах РФ (был даже вариант разместить станцию в Рыльске в Курской области), но быстро стало понятно, что впятером мы не сможем проконтролировать постоянную круглосуточную работу радиостанций на такой территории. Именно этим объясняется то, что большая часть финальных точек расположена в Москве. В качестве радиостанций я использовал самые простые автомобильные FM модуляторы, которые были установлены под стойками касс в магазинах сети “Аленка”. Когда мне пришла в голову идея с модуляторами, я сходил и купил модулятор и радио в ближайшем магазине М-Видео (не реклама). Сначала я хотел записать на каждый голосовое сообщение, но мне показалось это скучным, да и голосовое сообщение игроки могли легко спутать с эфирным радио. Эта мысль очень долго отлеживалась в голове. Когда я окончательно отказался от идеи голосового сообщения, я стал искать способы кодирования изображения в звуке и достаточно быстро вышел на распространенный у радиолюбителей метод SSTV https://en.wikipedia.org/wiki/Slow-scan_television. Я записал на пробу картинку в модулятор (для записи я использовал программу SSTV Signal Generator), специально вышел на шумную улицу, поймал сигнал приемником, записал звук на диктофон и попробовал расшифровать, чтобы узнать приблизительно какой результат могут получить игроки. Вот картинки с первых тестов (расшифровку я осуществлял программой RX-SSTV и дополнительно обращался к коллегам с просьбой дублировать тестирование приложением Robot36 для Android):

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Результат превзошел все ожидания. Мы определились с локациями, я купил еще 5 модуляторов и стал думать над тем, что, собственно, в них записать.


Прохождение:

По разгаданным из видео местоположениям находились 5 магазинов “Аленка”, а также Кот, выглядывающий из-за решетки окна в здании фабрики “Рот Фронт” в Москве.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

В каждой из локаций была размещена картинка, в нижней части которой был размещен dot code. При расшифровке доткода сканером, который можно скачать на смартфон, появлялось слово “FM!!!”

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Если подойти к картинам с обыкновенным радиоприемником (или с телефоном, имеющим радиоприемник), на FM частотах можно было поймать трансляции вот этих звуков: https://soundcloud.com/red-wojak/sets/shokoladnyy-rok


Данные звуки на самом деле являются картинками, зашифрованными по стандарту кодирования SSTV (Slow Scan TV). С помощью программы Robot36 для андроид, эти звуки можно было дешифровать и получить 6 картинок.


3D Пазл

Я очень долго размышлял над тем, что можно записать в модуляторы. Мы определились с тем, что локаций должно быть шесть, что записаны будут картинки, и на этом все. Я хотел сделать задачу, которая была бы разделена на 6 частей, причем таким образом, чтобы без какой-либо из этих частей она не решалась. Сначала Покровитель предложил сделать ребус, в котором будет зашифровано слово из 6 слогов, но подумав над этой идеей пару дней и не найдя ни одного толкового варианта, мы отбросили эту идею, и я стал думать дальше. Почти с самого начала меня не покидала мысль о том, что хотя мы не можем наградить всех участников, хотелось бы сделать так, чтобы у тех, кто зайдет достаточно далеко, остался какой-нибудь сувенир на память. Мы долго обсуждали идею геокэшей, но мне это показалось слишком ненадежным способом. Кроме того, мы вряд ли успели бы произвести достаточно сувениров, да и хотелось исключить нежелательные коннотации с сами знаете чем. Идея с геометрической фигурой пришла ко мне из детства: в школе на уроках черчения нас заставляли склеивать икосаэдры, и тогда это казалось мне достаточно мучительным. Я подобрал выкройку посложнее и покрасивее, разрезал на 6 частей и стал думать, что на ней зашифровать. Короткое слово не подходило, а писать очередной бессмысленный набор букв мне казалось слишком пресным и не эстетичным. Чтобы было сложно по смыслу разгадать надпись, не имея всех кусков, я стал рассматривать фразы на разных языках и в итоге остановился на латинской фразе:


Ducunt volentem fata, nolentem trahunt - желающего идти судьба ведет, нежелающего — влачит.


Эта фраза мне казалась максимально близкой к идее квеста и имела намек на дух соревнования. Мне нравилось, как она отделяет пассивных наблюдателей от активных участников. Я нанес необходимые буквы на грани развертки, но обнаружил, что на фигуре остается большое количество места, а некоторые части развертки содержат всего 2-3 буквы. Тогда я подобрал еще одну фразу, чуть короче:


Mors omnia solvit - смерть решает все проблемы.

Я даже успел нанести эту фразу на фигуру, но упоминание смерти показалось нам слишком мрачным. Я попробовал заменить слово “смерть” на “шоколад”, но в латыни не оказалось подходящего слова, поэтому я заменил всю фразу на чуть более светлую:

Fors omnia versas - слепой случай меняет все.

Эта фраза отлично перекликалась с духом великого рандома в играх и должна была настроить и успокоить игроков, которые по тем или иным прихотям рандома не смогли получить приз. Надеюсь, этот паззл и воспоминания об эмоциях, полученных в процессе решения моих загадок, станут вашим сувениром.

Для тех, кто опоздал, оригинальные выкройки я разместил в конце своего рассказа.


Прохождение:

Найденные картинки представляют из себя развертку трехмерной фигуры Great Dodecahedron.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Если правильно склеить выкройку, по красной линии, начерченной на гранях можно было прочитать две латинские фразы: “DUCUNT VOLENTEM FATA, NOLENTEM TRAHUNT” - “Желающего идти судьба ведет, нежелающего - влачит” и “FORS OMNIA VERSAS” - “Слепой случай меняет все”. На эти фразы бот возвращал коды, QXyCmb и Jk99o, которые складываются в ID видео со следующей задачей на Youtube.


Откровение Деда Мишлен

Как вы, наверное, догадались, сделать все в срок мы не успели. Именно этим и объясняется второй таймер, который мы установили в телеграм бота. Задача с чтением по губам - одна из первых, которую предложил Покровитель в самом начале, но по факту оказалась последней, которую мы собирали. Оригинальная концепция была в том, чтобы сделать анимированный ролик, в котором Аленка (та самая - с шоколада) читает сообщение, которое надо прочесть по губам. Для анимации Аленки я использовал нейросеть, выложенную в открытый доступ https://github.com/AliaksandrSiarohin/first-order-model. Поскольку я баловался с этой моделью задолго до квеста, мне не составило труда сделать прототип говорящей Аленки. Однако при тестировании выяснилось, что прочесть по губам анимации ничего не выходит (с тестированием нам помогала Котенок, т.к. через знакомых она нашла девушку, отменно читающую по губам). Тем не менее, идею решили воплотить. Мы попросили Мечтателя снять ролик (он любезно согласился сам срежиссировать ролик и сняться в нем). Изначально мы предлагали ему завязать глаза, чтобы сохранить анонимность, но он отказался. Покровитель предложил сдвинуть звуковую дорожку, чтобы плохой липсинк на эпизодах, где Мечтатель читает кодовую фразу, не так сильно бросался в глаза, и добавить дефектов, что я и сделал при монтаже видео. К моменту съемок и монтажа сообщество любезно подкинуло нам великолепный мем про Деда Мишлен, и мы его с удовольствием вставили в описание к видео. В правом верхнем углу видео красной лампочкой (морзянкой) была выбита следующая фраза:


“Селена в созвездии Коперника Сагот ножками по компасу Цой Лимночика Рик Асли Юша Учитель Антония Вспышка Джов не торт а дед Мишлен”


Это некая компиляция мемов, образовавшихся в форумах и чатах тех, кто решал наши задачки, на первой неделе квеста, которые нам больше всего понравились, и которые хотелось закрепить в сознании игроков. Так же видеозапись имела явную отсылку на сайт alenka.ru, и с нашей стороны было бы преступлением не разместить там что-нибудь. Я нашел в сети midi вариант Never Gonna Give You Up, декомпилировал его в текст, убрал заголовок, и мы разместили его в комментарии на сайте.


Прохождение:

По адресу https://youtu.be/QXyCmbJk99o игроки нашли видео, звуковая дорожка в котором не соответствует тому, что говорит человек. Заметно, что два куска из середины записаны позже и врезаны в видео отдельно (т.к. он на них человек без бороды, а все остальное время - с бородой).

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

По губам можно прочитать фразу "Покровитель предал меня, спасите золото" в первой вклейке и "тридцать тире танк кролик расчет солнце апельсин шоколад".

Указание на Аленка.ру - ложный путь. В комментарии на сайте alenka.ru стоит декомпилированный на ASCII midi файл (разумеется - “Рикролл”).


Из файла специально убраны заголовки, чтобы его чуть сложнее было собрать обратно в миди.


Красная точка REC в левом верхнем углу мигает морзянкой и отбивает текст:


"Селена в созвездии Коперника Сагот ножками по компасу Цой Лимночика Рик Асли Юша Учитель Антония Вспышка Джов не торт а дед мишлен" - это набор мемов, которые игроки придумали в ходе квеста. Морзянку писали вручную, возможно есть опечатки.


После прохождения видео, боту надо было отправить слова "тридцать тире танк кролик расчет солнце апельсин шоколад" - на это он отвечал: "?? - Ig83LQ Что делать дальше - спроси благородного дона Румату".


Дон Румата Эсторский - герой книги “Трудно быть богом братьев Стругацких”. Его настоящее имя в книге - Антон. Сочетание имени и подложной фамилии "Антон Эсторский" при отправке боту давало набор букв, который представляет из себя url, который надо дописать к wotten.babaev.ru чтобы "легально" перейти на загадку с двоичным кодом.


Бинарный код

К моменту, когда я составлял загадку с бинарным кодом, моя фантазия практически иссякла. Мне постоянно приходилось себя одергивать, чтобы не начать повторяться. Единственным из стандартного арсенала интернет-загадок, что мы не использовали, оставался бинарный код. Но, учитывая обилие всевозможных загадок с бинарными кодами, было непросто придумать что-то оригинальное. Сначала мне пришла в голову мысль комбинировать ASCII art и бинарный код, и я нарисовал логотип “Бабаевского”, составленный из нулей и единиц. Потом мне подумалось, что неплохо было бы придать нулям и единицам смысл, и я закодировал ими текст из “Евгения Онегина” Пушкина (обычно я использую его для проверки текстовых полей на сайтах, которые мы разрабатываем), но позже, я заменил Онегина моим любимым отрывком из повести “Трудно быть Богом” братьев Стругацких. Так как он явно лучше соответствует духу квеста. Эта загадка получилась сама собой, когда я подумал о том, что в бинарный код влез достаточно большой отрывок, чтобы вписать туда еще один бинарный код. Я заменил некоторые буквы “о” в тексте на латинские, так, чтобы, приняв русские “о” за 0, а латинские “о” за 1, при дешифровке получился ID видео с финальным мини-кодом, и задача была готова.


Прохождение:

В бинароном коде, которым изображен логотип “Бабаевского”, расположенный по адресу: https://wotten2.babaev.ru/azhrkzxtoougr9cdclqst5du5lmmso, зашифрован текст - отрывок из книги “Трудно быть Богом”.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Часть букв “о” в тексте заменены с русских на латинские. Если принять русские буквы за “0”, латинские за “1”, а остальные буквы и символы в тексте удалить, то при дешифровке получится строка:


0101001000110111010110000101100001000101010011110100100101100001001100100101100001001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


Любым онлайн дешифратором эта строка превращается в ID видео на Youtube - R7XXEOIa2XI.


LastCode42

С самого начала было известно, что главным призом квеста будет 1 млн. золота для WoT, а также у нас будет запас в 150 тысяч золота на промежуточные призы.


Некоторое время мы обсуждали, каким же образом будет вручаться главный приз, и пришли к мысли, что такое безумное количество золота вряд ли будет нужно одному единственному игроку. Мы договорились с WG о том, что по просьбе победителя (если таковая поступит), код на 1 млн голды будет разбит на несколько частей, чтобы он мог поделиться золотом с друзьями (учитывая, что многие задачки обязывают игроков работать в команде).


Из-за волокиты с оформлением документов на закупку, сами коды мы получили практически в последний день перед стартом. Когда стало понятно, что быстро мы их не получим, я решил сделать свои собственные мини-коды и механизм, который будет раздавать промежуточные призы.


Первыми были сгенерированы коды, которые попали в модуляторы. Тогда мне было неизвестно, сколько всего получится загадок, поэтому мы перестраховались и взяли первое число, которое пришло в голову - 42. Вы, наверное, заметили множество отсылок к литературе, и эта, конечно же, тоже не исключение.


Телеграм бот идеально подходил для реализации механизма раздачи промокодов. Я сгенерировал 42 коротких кода, каждый со своим номером, которые были разбросаны по всему квесту в случайном порядке, чтобы не отображать явную индикацию прогресса, но давать туманное представление об общем количестве кодов.


В процессе работы над 3D пазлом я понял, что квесту необходимо нечто, что будет сшивать все загадки в единое целое и являться ключом, открывающим финал. Покровителю, да и мне тоже, не хотелось отдавать приз тому, кто решит только одну - последнюю загадку.

Мне хотелось, чтобы по ходу решения человек собирал некие кусочки, которые надо сложить вместе и получить ключик, который даст доступ к финальному “сундуку”. Были идеи сделать огромный сейф с паролем на главной странице квеста, но делать нечто настолько очевидное показалось мне не в духе квеста. Все мини-коды были пронумерованы, и для получения финальной подсказки их нужно было отправить боту.


Прохождение:

Видео доступно по ссылке https://youtu.be/R7XXEOIa2XI. В тегах к нему лежит код номер 17, а на самом видео сквозь помехи написан последний код 42 - LastCodE42.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Стеганография

До финальной подсказки нужно было еще дойти. Когда я окончательно сломал себе голову, как мне его зашифровать, Покровитель подкинул идею со стеганографией (это метод скрытого размещения информации в графике путем изменения последнего бита в картинке на значащую информацию). Есть много различных методов стеганографии, например, метод наложения двух картинок друг на друга, все, что я нашел, имело различные алгоритмы. Я подобрал более менее удобный, локальный софт для стеганографии (то самое расширение к Chrome - PassLok Image Steganography). Этот метод был применен к картинке с балетной парой, размещенной на самой первой странице квеста wotten.babaev.ru. По плану финальное сообщение, зашифрованное в ней, давало спрятанную на сайте ссылку на форму, которую должен был заполнить победитель, после чего мы должны были связаться с ним. Впоследствии мы изменили метод связи на SMS.


Чтобы привести игроков на изначальную страницу и помочь им разобраться, что делать дальше, мы сделали подсказку в предыдущей задаче. Видео, которое открывалось по ссылке после разгадки бинарного кода, содержало в себе не только LastCode42. Если присмотреться к помехам, то они появлялись морзянкой. На этот раз латиницей было выбито слово PassLok Image (тот самый софт для стеганографии).


А при отправке всех 42 кодов боту, игрок получал сообщение:

“Да. Пришло время вернуться в начало. Ты тут первый. Остался последний шаг - поспеши, тебе дышат в спину!”, если он был первым, а всем последующим на финальный код бот отвечал: “Да, но ты тут не первый. Вернись в начало, возможно, все еще есть шанс успеть! Финал уже рядом.”


Это намекало ему на необходимость отправится назад, на самую первую страницу, и расшифровать послание, закодированное в картинке с балетной парой.


Прохождение:

Необходимо собрать в строчку все 42 кода и отправить их боту. Получить в ответ намек на то, что нужно вернуться на стартовую страницу квеста https://wotten2.babaev.ru/.


Расшифровать морзянку, которая изображена помехами в видео предыдущего этапа, и получить подсказку “PassLok Image”. Со стартовой страницы взять картинку с балетной парой и расшифровать закодированное в ней послание с помощью PassLok Image Steganography. В послании были инструкции для связи с Покровителем для получения главного приза (отправить sms с определенным текстом на указанный номер).

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 3 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Стеганография, Азбука Морзе, Азимут, Длиннопост

Мы предполагали, что квест будет проходиться именно так.


А как все вышло на самом деле?


Об этом в следующем посте =)

Показать полностью 10

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2

Квест WOTTEN, 10 - 24 августа 2020 года.


Изнутри и снаружи.

Начало этой истории вы можете найти здесь:

Первая часть: https://pikabu.ru/story/kak_nayti_vagon_na_million_wotten_otkrovenie_arkhitektora_chast_1_7826939


Разгадка предыдущего этапа привела игроков на локальный веб сайт

https://wotten2.babaev.ru/c926f54c7f55157c55bb13eecf0fbe5e8da6619a54392c09c2c21b9632668444

, где размещена интерактивная картинка очень длинной фотопленки, которую можно разматывать из катушки.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Прохождение:

В середине фотопленки на кадрах можно найти два кода: dQw4w9WgXcQ - это ID видео “Рикролла” и dHutBcloaSnq. По ссылке https://wotten2.babaev.ru/dHutBcloaSnq скачивался архив recipe.rar, который защищен паролем.

Файл с фотопленкой является не только картинкой, но также и rar архивом. Если изменить расширения файла с .jpg на .rar, то ее можно открыть как архив, внутри которого расположен звуковой файл (https://soundcloud.com/red-wojak/anagram) и мини-код на голду:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Расшифровав азбуку морзе игроки обнаружили строку:


«sbUhbUpbUqbUtbUbbUubUnbUeuUgOsTvLcMlFhNnCgRsDtMsHhBgSbDfRrLoNdMmFsEfCkBmCmAuPpNUaPhTcAaRrFnRtAoPiBbPlTgHuAtPrIsOeRWaTfHuLbYmToHyDbTdGuEmSmPdNrPeCaLaBsCeXIeTbSnSnIdCgAdPhRuRcToMbNrZYrSbRrKrBeSsAeGaGnZeFnMrCViTcSaCKrAlCiSlAgMaNeNFONCBeBiLeHH»


Прочитав эту строку наоборот можно было увидеть, что в строке перечислены элементы таблицы Менделеева. Внимательно посмотрев на них, видно, что некоторые элементы - пропущены, а именно Co - кобальт, P - фосфор, Er - Эрбий, Ni - Никель, Cu - Медь S - сера. Обозначения этих элементов составляют слово CoPErNiCuS, которое является паролем к архиву recipe.rar.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Запароленный архив

Несмотря на то, что запароленный архив, по сути, является частью предыдущей задачи, его содержимое содержит в себе свою мини-загадку, а именно звуковой файл, в спектрограмме которого закодирован адрес телеграм бота. В то время, когда я готовил прототип этой задачи, сюжета как такового не было, поэтому я делал элементы достаточно бессвязно - держа в уме только две тематики - Шоколад и Танки. А что может быть спрятано в запароленном архиве? Конечно рецепт шоколада! Так архив получил свое название - recipe.rar. Сам звуковой файл я сгенерировал с помощью TTS Яндекса, затем наложил сверху шум. Программа, которую я использовал для вставки картинки в спектрограмму, называется Coagula Light (скачать можно по ссылке http://www.hitsquad.com/smm/programs/Coagula_win32/).


Эта задача, как и все перечисленные, родилась в моей голове и совершенно не задумывалась как задача, способная удержать игроков - а скорее, как просто еще один шаг, который добавит немного атмосферы таинственности. Ну не писать же, в самом деле, прямым текстом: “Так, ребята, теперь вам сюда”. Изначально я рассчитывал, что вышеперечисленные задания будут всего лишь разогревом, игроки пройдут их с наскока, на энтузиазме, и приступят к по-настоящему интересным и сложным задачам, но все сложилось иначе.


Прохождение:

В запароленном архиве лежит аудиозапись - рассказ о шоколаде женским голосом, с помехами, а затем явная морзянка: https://soundcloud.com/red-wojak/recipe.

Если открыть спектрограмму аудиозаписи, то выяснится, что в ней есть текст:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

@WrGqHPPYbot - это адрес телеграмм бота - https://t.me/WrGqHPPYbot.

С 10 по 24 августа бот отвечал на сообщение /start числом, равным количеству миллисекунд, оставшихся до 6 утра понедельника, когда можно было возобновить разгадку квеста, после небольшой паузы.

На данный момент бот используется для общения с игроками и проведения новых розыгрышей.


Телеграм бот

Идея сделать интерактивную задачку на несколько игроков пришла мне в голову практически сразу. Телеграм бот идеально подходит для этой цели по нескольким позициям:

1. Телеграм отлично держит нагрузку.

2. У телеграма великолепное API и документация.

3. Огромное количество пользователей телеграма дает возможность быть уверенным, что люди не бросят решение из-за того, что им придется устанавливать что-то непонятное и разбираться - все давно привыкли к “телеге”.


Вообще, в первые дни, вчитываясь в документацию, я предлагал сделать телеграм бота основным хабом квеста, доступным практически с самого начала. Меня в этой идее привлекало то, что телеграм дает нам канал обратной связи с игроками, а также механизм наблюдения за их продвижением: бесплатные оповещения о прогрессе разрозненных групп игроков, автоматизацию раздачи наград и все такое. Но Покровитель выразил сомнение, что стоит пускать массы игроков в телеграм сразу, и повышать порог вхождения для игроков. Так вместо второго задания, телеграмм бот переехал на пятое (или шестое, смотря как считать). Вообще, на момент принятия решений по реализации механик задач, мы предполагали, что квест сам по себе не соберет широкую аудиторию и станет нишевой акцией для узкого круга любителей решать головоломки, а до бота доберется от силы пара десятков человек - в частности, поэтому  телеграм бот стал таким, каким вы его увидели.


Основой задачки в телеграм боте была командная работа. Мне вспомнилась старая игра, которую любили на популярных месседж бордах в начале нулевых. Суть заключается в том, чтобы посчитать от 1 до 15, не сбившись. Веселая свалка, которая может продолжаться несколько часов, но, если к ней отнестись серьезно, дает интересные результаты: с течением времени видно, как разрозненные группы людей начинают взаимодействовать и организовываться, выстраивая систему и иерархию.


Я сравнивал эту идею с темной комнатой с запертым в ней неизвестным количеством людей, которые должны сплотиться и найти альтернативное средство коммуникации, для того, чтобы обсудить и проверить свои теории и предположения.


Как я понимаю, финальный принцип работы бота до сих пор для многих остается не ясен, поэтому постараюсь описать его максимально подробно.


У каждого пользователя есть “Боезапас” - ограниченное количество сообщений (изначально это число было равно 100, но затем его пришлось снизить до 20, а позже и до 15). Этот боезапас пополняется через 15 минут после первого сообщения, отправленного боту. После того, как отправлено последнее, бот отвечает “ПОРАЖЕНИЕ!”, позволяет обращаться к нему еще 1 раз и затем игнорирует все дальнейшие попытки ему написать, до тех пор, пока не закончится пятнадцатиминутный отрезок с первого сделанного выстрела. То есть, получив “Поражение”, резонно было отвлечься и поразмыслить. Это было сделано для того, чтобы максимально затруднить жизнь любителям брутфорса и просто флудерам. Поскольку сам по себе бэкэнд бота способен обрабатывать в тысячи раз больше сообщений, чем позволяет отправлять API телеграмма, бот продолжал читать сообщения пользователей и обрабатывать их даже после того, как пользователь получал “Поражение!”. Например, если пользователь продолжал, не взирая ни на что, флудить бота, бот постепенно уменьшал боезапас пользователя вплоть до нуля, делая взаимодействие с ботом невозможным до тех пор, пока пользователь не прекратит флуд как минимум на 15 минут. Этот механизм работал невероятно эффективно, создавая желающим быть цивилизованным и смышленым достаточно большие окна для решения основной задачи даже в моменты пиковой нагрузки (первая группа людей, победивших бота, сумела пройти его приблизительно за 6 часов упорных попыток).


Я мог бы запрограммировать бота таким образом, чтобы он давал людям информацию о том, сколько у них “выстрелов” или сколько им осталось ждать до пополнения боезапаса, но меня не покидала идея “темной комнаты”, поэтому я решил оставить минимум информации, надеясь, что это сподвигнет игроков больше экспериментировать, строить гипотезы и проверять их. Обратной стороной минимума информации стало то, что многие просто не понимали, почему бот внезапно замолкал и переставал отвечать, считая, что он “упал под нагрузкой”. Бот не падал! Пару раз он упирался в ограничения телеграмма по скорости отправки сообщений и из-за буферизации бот отвечал с опозданием.


Забавно, что изначально я хотел сделать условием досчитать от 1 до 100, но коллеги меня отговорили. Они мотивировали это тем, что до бота доберется, как я писал выше, от силы 20-30 человек.


Также в боте есть функция, которую никто так и не увидел: до тех пор, пока количество людей, которые написали боту, не станет равно 15, он отвечает мемом из мультфильма “Падал прошлогодний снег”:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Вот функция, которая отвечала за задачу бота:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Она вызывалась каждый раз, когда пользователь присылал боту нечто, ему не знакомое.


Помимо этого, бот умел отвечать на два типа других сообщений. У нас была заготовлена огромная таблица стандартных запросов вроде “Привет”, “Подсказка” и т. п. Алгоритм поиска этих сообщений был написан ближе к середине июля и сделан на скорую руку (т.к. бот - это только одна из задачек, которые надо было подготовить). Из-за топорной реализации бот просто на просто проверял наличие стандартного запроса в сообщении, присланном пользователем. Учитывая то, что стандартных запросов было немного (меньше сотни), я позволил себе просто пробегать по всем ответам и сравнивать наши заготовки на наличие их в тексте (разработчики поймут, почему так не надо делать в нормальных проектах), но, к сожалению, на реализацию контекстного поиска не было времени.


Вторым типом сообщений (который появился существенно позже) были мини-коды, о которых я напишу отдельную главу. Каждый мини-код возвращал уникальный код WoT на игровое золото. Мне показалось, что будет честно, если я буду сообщать игрокам, что они первые (или не первые) добрались до каждого кода, поэтому первому, нашедшему код, приходило сообщение о том, что он нашел сундук, набитый золотом. Остальным о том, что сундук пуст. Тем не менее, код на золото я отправлял всем, на тот случай, если по какой-то причине сообщение первому, приславшему мини-код, не дойдет, или двое отправят сообщения слишком быстро и получат почти одновременный ответ. Так же из-за того, что мини-коды я сделал достаточно короткие, я предпринял меры, исключающие всякую возможность перебора. Бот не рассматривал сообщения с кодами чаще, чем 1 раз в 5 минут, и следил за длиной сообщения, исключая и пресекая все попытки перебора. Также все, кто верно решил загадку бота, получали инструкцию о том, что код надо присылать боту не раньше, чем через 5-10 минут после решения загадки.


Вначале я планировал сделать веб сайт, на котором бы отображались все сообщения, которые пользователи присылают боту. Благо GoLang, на котором я писал бота, позволяет сделать веб сервер без особых проблем. Но дело уперлось в то, что я банально не успевал написать frontend, а поток сообщений требовал реализации веб сокета или другого варианта постоянного соединения и веб интерфейса к нему, что вызывало понятные трудности из-за приближающегося дедлайна. Поэтому вместо вебсайта с логом сообщений я сделал простейший форвард всех сообщений в секретный канал в том же телеграмме, чтобы все члены команды могли спокойно наблюдать за чатом. Разумеется, в первую же минуту работы бота эту функцию пришлось отключить из-за того, что на логирование в телеграм уходила половина квоты сообщений, которые телеграмм позволяет отправлять боту. К этой функции я добавил возможность отвечать пользователям, используя админский канал. Я мог просто “ответить” на сообщение из лога, и бот переправлял пользователям мои слова. Это был мой задел на “интерактив”.


Впоследствии, когда количество сообщений боту упало до 1-2 в секунду, я несколько раз включал эту функцию по вечерам и отвечал пользователям на самые интересные комментарии и фразы, смущая и пугая людей, которые пишут боту.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

В последние дни июля мы хотели слегка усложнить задачу расчета пользователей, добавив туда немного рандома. Идея была такая - начиная с 4го, наш бот должен был иногда выдавать людям “черные метки”, т.е. с некоторой вероятностью отвечать людям словами “ты мне не подходишь”, что должно было побудить игроков, начиная с пятого, менять свой номер, в зависимости от того, принял бот предыдущий ответ или нет. Теперь я понимаю, что сделай мы так, бот вряд ли был бы пройден до сегодняшнего дня, но отказались мы не поэтому. Дело в том, что алгоритм выдачи “черных меток” я хотел сделать основанным на рандоме, причем таким образом, что выдается не меньше и не больше пяти “черных меток” в произвольных местах расчета после четверки (т.е. победителей должно быть все-равно ровно 15, но считают при этом до 10). Алгоритм я разработал на языке Python, им же я сделал большое количество симуляций и тестов, которые давали стабильный и достаточно равномерный результат. Но после переноса алгоритма на Go потребовалось сделать боевой тест, для которого нужно было либо 15 человек, либо 15 аккаунтов в телеграмме (что позволило бы провести автоматическое тестирование). Я заказал на работе 15 рабочих сим карт, что не мало напрягло наш отдел связи. И только тогда, когда я получил эти 15 симок и начал регистрировать API телеграмма, выяснилось, что буквально после второго сообщения, отправляемого скриптом, телеграмм без всякого предупреждения банит сим карту. “Потеряв” три из 15 тестовых сим карт, я отчаялся и отключил логику “черных меток” (я не стал вырезать ее из кода, а всего лишь приравнял вероятность выпадения “черной метки” к нулю). Этим и объясняется “черная магия”, оставшаяся в коде.


Что же касается ответов бота на фразы (как я понимаю, больше всего волнуют картинки кота и собаки), тут - все просто. В последний момент перед запуском я обнаружил, что бот ничего не отвечает на слово “Покровитель”. Не долго думая, я схватил своего кота, положил его на футболку со Дня Физика (не помню какого года), на которой нарисован маяк, сфотографировал его и загрузил в базу бота в качестве ответа:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост
Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Кот (а затем и собака) - это отсылка к секретной концовке SIlent Hill 2 (Dog ending https://www.youtube.com/watch?v=GUDcSeUvkOw). Где-то через час, когда игроки насмотрелись на кота, мы поменяли его на Собаку Покровителя (это колли, а не бордер-колли, как предположили многие). Таинственный маяк и вещи, расставленные вокруг собаки, не значат ровным счетом ничего, нам просто было любопытно, какое объяснения игроки вложат в эти предметы. Если вы часами не могли понять смысл этих изображений - простите! После Собаки должен был быть еще попугай, корги и игрушечный осьминог, но, когда основная масса игроков перешла от бота к другим загадкам, мы не стали заморачиваться и добавлять новый контент, чтобы не смущать их.


Прохождение:

Когда таймер бота дошел до нуля, включилась основная механика бота, которая состояла в том, что разные игроки, не сбившись, должны были по порядку отправить боту числа от 1 до 15. При этом они могли мешать друг другу (если прислать число, идущее не по порядку). Игроки, отправившие НЕ число, получившие “Поражение” или отправившие число менее минуты назад - не могли вмешаться в расчет и помешать считалочке.


Все игроки, которые участвовали в считалочке и смогли посчитать до 15 получали уникальный мини-код, а также сообщение: “Молодцы, вы все сделали правильно. То, что вы ищете спрятано тут: a2beESF4zEc”.


a2beESF4zEc - это ID видео на YouTube - https://youtu.be/a2beESF4zEc.


10-ти часовое видео

Несмотря на то, что идея с 10-ти часовым видео принадлежит Программисту, я не могу снять с себя ответственность за ее реализацию. Идея проста как дважды два - сделать очень длинное видео, в котором на короткие промежутки времени появляется код или пароль для прохождения дальше. Задачка, так сказать, на выносливость. Программист снял небольшое (около 2х минут) видео танка, катящегося по ржаному полю (визуальный вкус у него всегда был лучше, чем у меня). Затем я обрезал его до 24-х секунд, постаравшись сделать момент склейки максимально плавным. Дальше оставалась самая малость: придумать, что зашифровать в этом видео. Раз уж мы перевели квест на ютуб, то почему бы не зашифровать в видео - ID других видео? Тут я столкнулся с проблемой. Youtube присваивает видеороликам ID сам и не позволяет изменить ролик, сохранив ID. А значит прежде, чем собирать 10 часовое видео, я должен был сначала собрать остальные по цепочке в обратном порядке. Идею пришлось отложить на две недели, пока не будут полностью готовы видео, указывающие на расположения FM модуляторов (о них речь пойдет ниже). Когда они были готовы, перепроверены и залиты - я приступил к сборке десятичасового ролика. Для сборки я использовал программу ffmpeg (так как любой визуальный редактор видео безбожно виснет уже при попытке импорта видео длинной в 10 часов). С помощью ffmpeg, сутки помучавшись с кодеками, я смог собрать видео из 13 кусков (6 коротких кусков с кодами и 7 гигантских кусков вокруг них). Проблемы с ним мне подкинул ютуб, так как оказалось, что тайминг файла не соответствовал таймингу видео после заливки на Youtube, и мне ни в какую не удавалось сделать так, чтобы видео было ровно 10 часов. Так же все осложнялось тем фактом, что на сборку уходило около пяти часов (час на сборку, час на заливку и около трех часов на обработку видео самим ютубом). В итоге, после пяти или шести попыток мне удалось методом перебора угадать с таймингом, и видео после заливки получилось ровно 10 часов. Вернее, 10 часов отображалось в админке Youtube. Как выяснилось чуть позже - для тех кто смотрит - тайминг был 9.59.59. Результат всех устроил, мы плюнули на потерянную секунду и стали проверять. И именно при проверке я понял, на что мы обрекли вас, Игроки. Поясню. Я, разумеется, знал тайминги вставок (они были выбраны совершенно от балды - я долго ломал голову над тем, какой бы смысл вложить в них, но мне не хватило фантазии, и я забил), но из-за того, что ютуб непредсказуемо изменяет тайминг видео - мои тайминги поплыли. Вдвоем с Программистом мы около часа вглядывались в видео в поисках кодов, которые никак не желали появляться в положенном месте, постепенно увеличивая радиус поиска. Единственным эффективным способом поиска, который мы придумали, было составление таблицы и распределение участков между пользователями. Так при аудитории в 600 человек, каждому было бы достаточно внимательно изучить всего одну минуту видео, чтобы найти все подсказки. Проблема была только в том, что посвященных, а значит, и допущенных к проверке людей было всего пятеро, и нам тоже пришлось прилично поломать глаза во время тестирования задачки.


Прохождение:

https://www.youtube.com/watch?v=a2beESF4zEc&feature=youtu.be

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

В определенные моменты на 1 секунду на видео появляются коды:


● 0:52:22 - правый нижний угол во ржи;

● 2:45:25 - справа сверху над облаком;

● 3:32:31 - слева сверху над колесом;

● 4:48:48 - справа снизу во ржи (почти как 1й);

● 6:13:00 - справа снизу во ржи, но чуть ниже;

● 8:36:21 - слева снизу почти в углу.


Каждый из кодов - ID другого скрытого видео:

https://youtu.be/dKRfNqJjp3w

https://youtu.be/Kop1qkrHKeo

https://youtu.be/IVCJmuj96wM

https://youtu.be/DAHIrc2Pyyw

https://youtu.be/heCbEvHj570

https://youtu.be/1N51VwYWy6c


И что же в них зашифровано?

Об этом я расскажу в следующей статье.

Показать полностью 10

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1

Квест WOTTEN, 10 - 24 августа 2020 года.


Изнутри и снаружи.

О себе


Привет, я Архитектор. Разработчик интерактивного квеста WOTTEN, который наша команда делала для игроков в World of Tanks летом 2020 года. WoT в этом году отмечали свое десятилетие и со своей стороны так же готовили ряд праздничных мероприятий.


Если вы проходили этот квест, то, вероятнее всего, я именно тот человек, которого вы так сильно ругали, так как именно я отвечал за механику большинства загадок, которые вы так страстно и здорово решали. Я понимаю и принимаю все комментарии, адресованные мне, и не могу выразить ничего, кроме глубокого почтения и благодарности за то, что вы их разгадывали. Как всегда, вы оказались во многом смышленее меня, и те задачи, которые я сам считал сложными, вы проходили невероятно быстро.


Многие из игроков просили меня рассказать, как создавался квест WOTTEN, и, не скрою, просьбы многих из них я слышал сам (Привет всем!). Я постарался подготовить максимально подробный рассказ, чтобы он был интересен и понятен и тем из вас, кто о данной игре раньше не слышал.


По образованию я физик, работаю руководителем небольшой группы разработчиков, которая занимается нескучными проектами в серьезной компании, которая производит кондитерские изделия, включая шоколад «Бабаевский». Мне 36 лет, у меня взрослый кот, двое сыновей и жена. Я не сумасшедший (вопреки сложившемуся мнению большинства), просто очень и очень люблю сложные и нетривиальные загадки. Люблю их решать и, как оказалось, еще больше - придумывать.


Начало

В начале я расскажу, как появилась идея квеста. Для тех, кто не любит читать много текста, я приведу несколько сухих фактов и цифр:

● Подготовка проекта началась в последние дни мая. Т.е. фактически на все про все у нас было 2 месяца и 10 дней. За это время был сделан весь квест - от концепции до его финального вида.

● Команда проекта изначально состояла из 4х человек - Покровитель, Архитектор, Программист и Котенок. Чуть позже, где-то через неделю после начала работы, к нам присоединился Мечтатель, в качестве автора сюжета и художника. К этому моменту была готова механика более чем половины задач. Полный сюжет квеста приведен отдельно, в конце этого рассказа.

● Все задачи квеста, кроме телеграмм бота, одной недоделанной задачи, были доступны игрокам с самого начала - с утра 10-го августа.

● Мы внимательно следили за происходящим на форуме WoT, в дискорде (в дискордах), ВКонтакте и бог знает где еще.

● Мы ни разу не вступали в прямой диалог с игроками, все общение происходило с помощью размещения комментариев в исходном коде страницы “компаса”, переход на которую был с https://wotten.babaev.ru/, через телеграм бота https://t.me/WrGqHPPYbot и пары комментариев на стриме Вспышки (Vspishka) от нашего ютуб канала УВБ-2020. Все наши сообщения можно было легко идентифицировать.

● Ни одно предположение игроков о том, кто именно их “слушал”, не оказалось верным.

● Никто, ни сотрудники компании Wargaming (хотя некоторые этапы квеста мы все же согласовывали с WG), ни модераторы, ни операторы колл центров, ни сотрудники магазинов не имели ни малейшего понятия о том, как решаются задачи. Полный доступ ко всем задачам и их разгадкам был только у пятерки организаторов квеста. Все причастные получили скрипт стандартного ответа на любые вопросы по квесту. Продавцы и охранники были проинструктированы не обращать внимания на людей с радиоприемниками, и на любой вопрос отвечать: “Мы ничего не знаем”.


Это иллюстрация, изображающая создателей квеста:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Слева направо:

Котенок - координатор квеста и наблюдатель, занималась мониторингом сообществ, вычиткой и редактурой текстов, проверкой и перепроверкой идей, держала связь с WG и вообще была здравым смыслом всей акции.

Мечтатель - тот самый человек с видео, который взял нагромождение бессвязных задачек, собрал и сшил сюжет, подготовил тексты и нарисовал почти всю графику включая и эту иллюстрацию. Автор видеоряда “Поврежденная запись”

Покровитель - инициировал и продюсировал акцию в целом, практически единолично выступал голосом “компаса”. Принимал все решения по интерактивным взаимодействиям со стримерами. Автор идеи загадки в Ангаре, финальной задачи со стеганографией и задачи с чтением по губам. Танкист с большим стажем.

Архитектор - придумал и собрал большую часть задач в квесте (придумывал механики, монтировал все видеоролики, кодировал модуляторы, клеил и резал додекаэдр). Автор телеграм бота. Несколько раз вступал в контакт с аудиторией отвечая на сообщения с помощью телеграм бота.

Программист - верстал и разрабатывал сайт wotten.babaev.ru, отбивал атаки ддосеров, админил и деплоил, ставил коментарии по просьбе покровителя. Парсил логи телеграмм бота. Автор идеи 10 часового видео, автор видеоряда “раш на Малиновке (Воля и Выдержка)”.


Победителем квеста является Wolfer8888 из команды «MICHELIN Team»:


_ANALitik / DED MICHELIN, DonQuichotte / Lemon, Gatkey, SheriWoT, Nearrr, LaggerLoL, the_GRin, Sirokovanton5 / Antoniy, Russian_soldiers / dem, ifirb, Be3un4ikLviv, 4elovekVtan4ike, vlads005 / Voin_AkTepa, PyJI0H_O6oeB, kosterka173, Da_pont, bansICH / UtKA, Wolfer8888, cros_boec, YakOFF19, snl123 / Толик, Itbak4 и один игрок, попросивший не разглашать его ник. Среди игроков – жители разных городов РФ и других стран СНГ. По просьбе победителя организаторы приняли решение разделить 1 000 000 голды на части и передать Wolfer8888 23 кода на игровое золото.


А теперь - тот самый лонгрид, которого так долго ждали.

В последние дни мая на одном из рабочих совещаний Покровитель попросил меня и Котенка придумать небольшую игру, в которой мы разыграем миллион танкового золота. Что-то вроде квеста с загадками, который будет доступен через пасхалку, размещенную в юбилейном Ангаре в World of Tanks. В свое время (лет 15 назад) я очень увлекался подобными играми и загадками особенно нашумевшего тогда www.notpron.com, который мне посчастливилось пройти от начала и до конца, хоть и не без помощи друзей. Однако оказалось, что придумывать механику задач далеко не так просто, как решать загадки, составленные другими людьми. Сразу же вспомнились ARG Portal 2, Цикада, Trials Evolution, No players online, Battlefield и другие (кстати, любителям таких штук советую канал LukassKane - он делает отменные постмортем подобных проектов).


Очень быстро стало понятно, что сделать нечто, сравнимое по масштабу, за 2 месяца будет практически невозможно. Глядя и анализируя механики других проектов, я скорее не черпал вдохновение™, а вычеркивал идеи. Несколько дней ушло только на то, чтобы сформулировать правила игры (не те, по которым играли вы, а те, по которым я составлял задания для вас). Все или почти все эти правила, я впоследствии нарушил. Вот эти правила:


1. Задания не должны требовать сверх-специальных знаний, недоступных гуглением (это правило было нарушено в задаче с чтением по губам, до которой на момент написания этих строк игроки еще не дошли, но об этом позже).

2. Задания не должны повторяться (это правило я нарушил, используя морзянку).

3. Задания должны иметь проверяемый правильный ответ (к сожалению, это правило было нарушено в задаче с телеграм ботом, т.к. проверить правильность догадки про расчет оказалось по силам очень немногим).

4. Решение задания должно быть вознаграждено (это правило, к сожалению, пришлось нарушать чаще всех).

5. Каждое задание должно однозначно давать все необходимые данные для его решения (с этим, пожалуй, я справился).

6. Задачи должны усложняться по мере прохождения.


Для разработки я использовал несколько инструментов, а именно:

Графический редактор Figma - для создания почти всех графических элементов заданий (не путайте с графикой, которую вы видели на страницах - дизайн макеты делал Мечтатель).

Sony Vegas Pro v.16 - для создания всех видеоматериалов, кроме 10-ти часового видео.

FFMpeg - для создания 10-ти часового видео.

IDE Goland - для разработки телеграмм бота.

Pycharm - для написания скриптов, тестов и помощников (например, скриптов, которые считали буквы, кодировали или декодировали загадки, а так же скриптов для анализа логов телеграмм бота).

Robot36, RXSSTV - для тестирования SSTV.

Coagula Light - для добавления картинки в спектрограмму звука.


Загадка в Ангаре

Первым дедлайном была входная точка квеста - стартовая задача, которую все увидели в Ангаре - ее надо было придумать за 2 дня и передать Wargaming, после чего их разработчики уже не могли вносить туда изменения. WG пошли нам навстречу, разрешив разместить в игре нечто, на первый взгляд, “странное”. Их ограничение заключалось в том, что можно было разместить только текст длиной не более 400 символов.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Наша цель была придумать текст таким образом, чтобы вовлечь людей в игру, которая проходит за пределами WoT. Котенку пришла в голову идея заменить часть букв в тексте на латинские и составить из них адрес сайта. Но это оказалось слишком бросающимся в глаза. Я предложил вариант с заменой части символов на латинские, однако быстро выяснилось, что из клиента игры скопировать текст нельзя, и такая “пасхалка” будет крайне незаметной. Немного обсудив идеи, мы сошлись на том, что хотим сделать бросающийся в глаза элемент - латинские буквы, и при этом сделать отгадку не столь очевидной. Я предложил самое простое - указать под текстом номера букв, из которых сложится слово - адрес сайта. Так мы и сделали. Текст послания был взят из Википедии по слову “Вдохновение” (это бренд шоколада от “Кондитерского концерна Бабаевский”), я написал простенький скрипт, который распечатал номера букв, встречающихся в тексте. При первой же проверке загадки вручную номера букв не сошлись. Разумеется, дело оказалось в том, что мой скрипт нумеровал буквы, начиная с нуля, а я считал буквы в тексте по привычке - с единицы. Посоветовавшись с остальными, мы решили оставить задачку, как есть, с нумерацией, начинающейся с нуля, чтобы сделать решение чуть сложнее. Много споров так же вызывало и то, стоит ли делать первую букву фразы заглавной (заглавными буквы решили сделать из-за того, что строчная буква о в русском и английском написании выглядит идентично, и нужно дополнительно привлечь к ней внимание). Самым сложным моментом при проработке этой загадки оказалась финальная проверка макета, присланного нам коллегами из Wargaming. Мне пришлось полностью пройти этот путь самому. 

Выглядело это так:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Прохождение:

Задача расположена внутри игры - в Ангаре на столике, за которым сидит девочка, лежит шоколадка, при наведении на нее курсора всплывает табличка с текстом (на данным момент Ангар уже снова обновлен, и данная пасхалка не видна).

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост
Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

На табличке расположен текст: “Вдохноwение — Oсобое сосТояние человека, коTорое характЕризуется высокой производительnостью, огромным подъёмом и концентрацией сил человека. Как эмоциональный концепт это состояние является типичной чертой и составным элементом творческой деятельности. Нередко оно воспринимается как явление, существующее отдельно от своего носителя, которое приходит ему извне.

362 17 50 17 275 255 286 362 96 355”


Часть букв заменена на латинские, и собираются в “wotten”. Вторая часть букв зашифрована в числах под текстом. Каждое число соответствует позиции символов в тексте (счет начинается с нуля). Если сложить вместе wotten и буквы из расшифровки чисел – получится адрес лендинга wotten.бабаев.ру. Для перехода на следующий этап необходимо зайти на страницу https://wotten.babaev.ru/ (к моменту прочтения этой статьи на данной странице уже может быть размещена другая игра, поэтому в изначальном виде она сохранена по ссылке https://wotten2.babaev.ru/).


Вдохновение™

Когда мы определились с точкой входа, сама по себе возникла необходимость создания сайта. 

Сначала я хотел продублировать на сайте текст из Ангара, чтобы человек, оказавшийся на сайте, не потерял контекст, и попадал в следующую задачу, являющуюся логическим продолжением первой. Сайт я представлял себе черным с крупным словом ВДОХНОВЕНИЕ посередине. Под буквами должен был быть продублирован текст из Википедии, без опечаток. Я предложил механику прокликивания анаграмм, с помощью которого можно было переходить дальше. Помимо правильного ответа разные анаграммы давали нам возможность сделать множество тупиков.

Ниже представлен список анаграмм и адресов, на которые они вели (заменяю ссылки на wotten2.babaev.ru, чтобы вы могли по ним пройтись):

Вдох https://wotten2.babaev.ru/inhale

https://wotten2.babaev.ru/exhale

Ввод https://wotten2.babaev.ru/input

Один https://wotten2.babaev.ru/one

Двое https://wotten2.babaev.ru/two

https://wotten2.babaev.ru/five

https://wotten2.babaev.ru/six

https://wotten2.babaev.ru/ten

ЕДИНОЕ https://wotten2.babaev.ru/one

ВИДЕО https://www.youtube.com/watch?v=dQw4w9WgXcQ

НЕВОД https://wotten2.babaev.ru/net

НОВОЕ https://wotten2.babaev.ru/new

ВДНХ https://wotten2.babaev.ru/vdnh

ВИНО https://wotten2.babaev.ru/wine

ВОИН https://wotten2.babaev.ru/warrior

ИНОЕ https://wotten2.babaev.ru/other

ОДНИ https://wotten2.babaev.ru/one

ОДНО https://wotten2.babaev.ru/one


Идея понравилась и практически не претерпела изменений до релиза. Покровитель попросил нас сделать так, чтобы ссылкой на разгадку нельзя было поделиться, и логика прокликивания была не видна в коде сайта. Именно поэтому Программист, который отвечал за реализацию механизма прокликивания букв, сделал так, чтобы каждую минуту ссылка на вход менялась.


Тут я сделаю оговорку для людей причастных к IT - в нашей работе до этого проекта, чаще всего мы разрабатывали клиентское API сами, редко пользуясь сторонними инструментами, однако из-за недостатка времени и острой нехватки рук (по сути о проекте в компании знали 7-8 человек, из которых прилично писал код только Программист, и, кое-как - я), мы решили отказаться от создании своего API и использовать максимально простой фреймворк для python - fast API, чтобы не тратить время на отладку и поиск багов, а делать бэкэнд “из коробки”. Механика квеста (как абсолютно правильно рассказал пользователь Argon в Дискорд канале WOT CIS) сводилась к тому, что при нажатии буквы на сервер отправлялся post запрос, содержащий число. На сервере мы вели хэш таблицу с ip адресами от каждого запроса и массивом из 10 элементов - цифры, которые нам присылали. Когда цифры складывались в последовательность, содержащую заготовленное число, алгоритм понимал, что человек прожал буквы в определенной последовательности, и возвращал на последний отправленный запрос ссылку для перехода. Если цифры в число не складывались - возвращался ноль.


Ссылка на страницу с компасом действительно была временной, и работала ровно минуту. Из-за этого некоторые люди, получившие ссылку в самом конце ее жизни, не успевали увидеть содержимое. Такое происходило крайне редко, но мы зафиксировали несколько случаев на форуме.


Сама страница wotten.babaev.ru содержала в себе простенький JavaScript, который отвечал за автоматический переход по той ссылке, которая вернется с бэкэнда, и за общее отображение html страницы. Финальный макет нарисовал Мечтатель, первоначальную верстку делал я (так как чуть-чуть знаю CSS), а отлаживал и доводил до ума ее уже Программист. И хотя идея самой задачи появилась почти в самом начале работы над квестом - финальная версия страницы, которую вы видели на wotten.babaev.ru, увидела свет только в самом конце работы над квестом.

“Вход” был (по моему мнению) исключительно простой загадкой и единственной интерактивной на всем сайте. Вначале было еще несколько идей интерактивных задач (пятнашки, сборка пазла, перетаскивание геометрических фигур), но все их пришлось отбросить из-за сложности в реализации или сложности в решении (все ненавидят пятнашки).


Прохождение:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Необходимо в правильном порядке прожать буквы ВХОД в слове “ВДОХНОВЕНИЕ”, расположенном под балетной парой на страничке https://wotten2.babaev.ru/, что приведет игрока на страницу с “компасом”. Все другие комбинации приводят в тупики с различным текстом, например, ВОИН:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Компас

Ресурсы компании, в которой я работаю, позволяли реализовать механики очень сильно разбросанные географически. В какой-то момент обсуждалась возможность отправить игроков не только в Благовещенск, но и в Рыльск, на Сейшелы и Тенерифе. Мы также обращались к Wargaming с просьбой разместить часть загадок в Минске, но в итоге ограничились территорией РФ. После простой загадки с прокликиванием букв мы решили сделать задачку чуть сложнее, именно она должна была стать первой загадкой для перехода в Реал.


Вопрос о том, отправлять ли людей по физически существующим местам, изначально не стоял - мы осознавали, что квест не будет доступен всем, но хотели вовлечь максимально большую аудиторию, при этом было ясно, что из дома решатся выйти лишь единицы. Очевидным для нас способом преодолеть это ограничение, было образование команд игроков и их общение в сети.


Первый макет страницы с компасом действительно содержал в себе логотип вай фая (к тому моменту мне было понятно, что в одной из загадок мы разместим Wi-Fi точку с внутренним сайтом на одном из объектов):

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Пароль и название сети сначала хотели разместить обычным текстом под картинкой, но ближе к запуску передумали, так как у квеста появился сюжет, для текста которого тоже требовалось место. Название сети и пароль переехали в exif “столбиков”. Я сознательно использовал именно слова Name и Password, чтобы дать игрокам понять, что не надо искать Login на каком-то сайте, а стоит искать что-то с названием и паролем. Сами пароли генерировались случайным образом в программе KeePass. Задание казалось мне предельно простым - координаты, по которым изображено сразу несколько объектов, прямо связанных с фабрикой и, вдобавок, кафе Вдохновение. Поэтому логотип Wi-Fi в финальной версии мы заменили на компас, а файл назвали Signal, намекая на то, что надо искать некий сигнал. Чтобы географические координаты читались однозначно, в качестве очередной подсказки картинки я назвал summitatem (верх, т.е. север) и lus (право, т.е. восток). Это также должно было указывать на то, что первый набор чисел - это северная широта, а второй - восточная долгота.

Прохождение:

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Столбики на картинках имеют строгую высоту в пикселях. Если записать высоты по порядку, получатся координаты: 55°47'11" и 37°39'32".

Эти координаты указывают на магазин “Аленка” на ул. Лобачика. В метаданных картинок есть записи “Name: Inspiration” и “Password: TEmjYrpW“.


Wi-Fi точка

С технической точки зрения, вай фай точка была собрана и настроена Программистом. У нас не было времени оформлять официальную закупку оборудования и покупать роутер, рискуя не справиться с его настройкой, поэтому мы пошли путем, который наверняка даст результат - купили Raspberry Pi с Wi-Fi модулем, и Программист настроил его таким образом, чтобы при подключении к нему, попытка зайти на любой интернет сайт вела на страницу, которую мы называли “длинная картинка”, а потом стали называть “пленка”. Также Raspberry был подключен к интернету для удаленного управления. Программист написал скрипт, который оповещал нас каждый раз о том, что кто-то подключился к сети, поэтому мы сразу узнали, когда первый игрок дошел до точки и нашел сеть. После этого мы дали ему фору в несколько часов и разместили комментарий: “Первый ножками дошел”. Изначально я предлагал сделать сеть скрытой, но Покровитель уговорил меня этого не делать. Я и Программист сами ездили на “Бабаевскую фабрику”, ул. Лобачика, 1, и проверяли работоспособность сети. Сигнал достаточно стабильно ловился вплоть до ступенек магазина “Аленка”, и, теоретически, его могли поймать от дверей даже в ночное время. Поэтому мы и удивлялись, когда видели сообщения о том, что игроки приезжали искать Wi-Fi, но не могли найти сеть. Этим же и объясняется комментарий, который отдает бот, если ему написать “Юша”. Мы видели много сообщений о том, что Юша приехал ночью к магазину, но вай фай не нашел. Я подумал, что он просто стоял чуть дальше, чем дверь магазина, поставили ответ бота “Юша малость не дошел до двери” наудачу.


Пленка

Ранние эскизы задачи с пленкой (или как вы ее окрестили - “диафильм”) были совсем не похожи на финальный вид. Размеры картинки в пикселях, которые так никто и не расшифровал, составляли слово “АРХИВ”. Изображение размером 118 х 23103 при наложении номеров букв на алфавит давало 1 18 23 10 3 или, если посмотреть на номера букв в алфавите, Архив. Это была подсказка для тех, кто не стал бы заморачиваться поиском указателей внутри файла, а искал бы объяснение на поверхности. То, что вы видели как пленку, изначально было черной картинкой, на которой в паре мест было написано “НА КАРТИНКЕ ПОДСКАЗОК НЕТ”. Позже, в процессе разработки сюжета, Мечтатель нарисовал красивую пленку и катушку, из которой она разматывалась. Прототип этой задачи я сделал за пару часов. Слить архив и картинку в один файл не представляло труда. Вы можете сами это проделать с помощью командной строки WIndows, картинки и любого файла:


copy /B film.png+anagram.rar casette.png


В результате файлы film.png и anagram.rar будут слеплены в файле casette.png, который прекрасно открывается и как картинка, и как архив.

Пленка-архив сама по себе служила контейнером для другой загадки. С самого начала я понимал, несмотря на то, что морзянка - шифр всем известный и часто используемый, мне никуда не уйти от его использования. Именно из-за популярности как морзянки, так и ее дешифраторов, в интернете я не рассчитывал, что игроки будут долго искать способ ее расшифровки, а просто улыбнутся, прогонят аудиофайл через дешифратор и получат ответ. Именно ответом я и планировал поставить всех в тупик. Морзянкой я зашифровал строку следующего содержания:


sbUhbUpbUqbUtbUbbUubUnbUeuUgOsTvLcMlFhNnCgRsDtMsHhBgSbDfRrLoNdMmFsEfCkBmCmAuPpNUaPhTcAaRrFnRtAoPiBbPlTgHuAtPrIsOeRWaTfHuLbYmToHyDbTdGuEmSmPdNrPeCaLaBsCeXIeTbSnSnIdCgAdPhRuRcToMbNrZYrSbRrKrBeSsAeGaGnZeFnMrCViTcSaCKrAlCiSlAgMaNeNFONCBeBiLeHH


Это, как вы знаете, таблица Менделеева, написанная задом наперед. Сначала я хотел использовать в задании элементы, входящие в состав шоколада, но из них не получалось путно и достаточно длинной анаграммы, поэтому я нашел красивую и на мой взгляд таинственную анаграмму CoPErNiCuS, удалил из строки соответствующие элементы и решил, что именно это станет ответом на загадку. Так же слово Copernicus я вставил метаданными вместо автора композиции звукового файла, чтобы немного потроллить человека, решившего задачу и увидевшего, что пароль все время был доступен, и надо было лишь верно выставить регистр букв. Слово CoPErNiCuS отлично подходило в качестве пароля, который достаточно тяжело брутфорсить (подбирать методом полного перебора комбинаций букв), именно поэтому я и решил, что это слово станет паролем к другому архиву, в котором будет лежать следующая загадка.


В ранних макетах над пленкой была расположена кнопка СКАЧАТЬ АРХИВ, которая позволяла выкачать запароленный архив (всем известный recipe.rar) только тем, кто поедет посетить Wi-Fi, но ближе к запуску я решил, что архив должен быть доступен всем, а на точке должен быть спрятан только пароль. Тогда мы заменили кнопку “Скачать” на общедоступный url, по которому любой желающий мог скачать recipe.rar. Мечтатель спрятал этот url на одном из кадров пленки. Тогда же появилась идея вставить на другой кадр рикролла, чтобы пошутить над тем, кто будет аккуратно и усердно разматывать пленку и рассматривать кадры. Так и сделали - на одном из кадров появлялся id видео Never Gonna Give You Up а на другом - url архива recipe.rar. Также на многие кадры были нанесены ничего не значащие слова “бачок”, “сцепка”, “опора” и т. п.


Внешний вид и верстку страницы с пленкой мы тестировали на сайте акции, однако “боевую” пленку заливали сразу на Raspberri и тестировали только там. Именно поэтому мы не сильно расстроились, когда содержимое сайта утекло в сеть - успевшие увидеть пленку все равно не имели возможности решить задачу и открыть архив, они только лишь отвлекались (и зачастую отвлекали других) от реального решения, ломая голову над нерешаемой головоломкой.


Финальный вид пленки выглядел шикарно - png с прозрачными элементами, сквозь которые просвечивает мерцающий glow фона. Однако с прозрачностью вышел конфуз - в последний момент выяснилось, что попытка слепить png с прозрачностью и архив приводит к порче файла, поэтому, в конце концов, вместо png пришлось использовать jpeg, а прозрачность реализовали методом css. Механику разматывания пленки полностью реализовал Программист, т.к. моего навыка и знания css оказалось для этого недостаточно.


Мне и Покровителю задача с пленкой казалась сложной, но, когда до нее добралась масса игроков, она продержалась всего лишь около часа.


Прохождение:

В магазине “Аленка” или в кафе “Вдохновение” на ул. Лобачика в Москве можно было поймать wi-fi сеть с названием Inspiration. К этой сети можно подключиться, используя пароль, найденный в метаданных картинки lus.jpg - TEmjYrpW.


После подключения к сети можно было зайти на локальный веб сайт https://wotten2.babaev.ru/c926f54c7f55157c55bb13eecf0fbe5e8da6619a54392c09c2c21b9632668444, где размещена интерактивная картинка очень длинной фотопленки, которую можно разматывать из катушки.

Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 1 Arg, Квест, Квесты в реальности, Шоколад, World of Tanks, Танки, Длиннопост

Остается только понять, что с ней делать дальше.

Продолжение: Как найти Вагон на миллион (WOTTEN). Откровение Архитектора. Часть 2

Показать полностью 10

Лучший собеседник

Лучший собеседник

Москва - культурная столица

Москва - культурная столица Москва, Пушкин
Показать полностью 1

Московский марафон

Ну вот и пройден второй раз московский марафон!
Улучшил к прошлому году на 8 минут.
Про погоду отдельная история... Ледяной дождь, +6, сильный ветер

Московский марафон Москва, Марафон, Московский марафон

Итоговое время 4:17

Почему то нет тега Марафон

Показать полностью 1

Новые технологии японского автопрома по очистке стекол

Новые технологии японского автопрома по очистке стекол
Отличная работа, все прочитано!