Оффтоп Лера Михайлова
5 304

Как устроена работа инди-команды: опыт авторов ATOM RPG

Усердие и немного удачи.

В закладки

ATOM RPG — постапокалиптическая ролевая игра от российской студии Atom Team. Летом 2017 года разработчики вышли со своим проектом на Kickstarter, где им удалось собрать в два раза больше требуемой суммы — $33 тысячи против 15 тысяч.

Сейчас игра находится в раннем доступе в Steam, а её релиз, по словам авторов, уже не за горами. Разработчики из Atom Team написали для DTF колонку о своей команде и о том, как устроен рабочий процесс в ней.

ATOM RPG — независимая ролевая игра, вдохновлённая сериями Fallout, Wasteland, S.T.A.L.K.E.R. и много ещё чем, которая разрабатывается нашей небольшой командой Atom Team с 2015 года. Впрочем, первые серьёзные шаги к завершению проекта были совершены только год назад. В этой статье мы хотели бы рассказать о процессе разработки, о тонкостях работы в автономном инди-коллективе, о финансовом вопросе, ну и о своих впечатлениях от всего этого.

Почему инди

Как разработчики, мы успели получить опыт в разных компаниях, и со временем решили создать собственную инди-команду. Благодаря опыту в геймдеве по найму, мы знали, как не стоит делать, поэтому решили создать свою экосистему — команду, в которой нет директоров, лидов и прочих высоких должностей, где каждый, а не только «избранные», являются большим, чем просто винтиками.

Мы помогаем, страхуем, делимся опытом друг с другом, как в дружной семье. У нас все равны. Каждый понимает, что от него зависит успех проекта, поэтому никто не опаздывает, не отлынивает, и, несмотря на то, что команда у нас международная, работающая из нескольких стран (России, Украины, Латвии, Польши), координация у нас настроена идеально. После прохождения Greenlight и Kickstarter, можем уверенно сказать, что такая схема построения команды отлично подходит для инди-разработчиков.

Почему Unity

В данный момент над проектом активно работают два программиста: Дима и Сергей. Сейчас к команде подключается ещё третий программист — Константин. Вся история разработки проекта началась с прототипа игры на собственном движке.

Однако ввиду постоянной необходимости дорабатывать движок и нехватки личного времени, вскоре было принято решение отказаться от собственных наработок в пользу движка Unity. Теперь, после нескольких лет практики, мы можем уверенно утверждать, что это было на 100% правильное решение для игры.

Мы, наконец-то, смогли полностью отдать себя разработке игры, забыв, что нужно постоянно дорабатывать движок. Более того, Unity помог нам ускорить работу. Мы шли по пути наименьшего сопротивления — раз уж взяли Unity, то и будем использовать его стек технологий. Это оказалось правильным решением, ведь как показал опыт, нагромождение «своих» движков поверх Unity — это лишняя прослойка, которую нужно ещё и поддерживать.

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

Мы используем внутренний контроль версии Collab. Это позволяет всегда поддерживать проект в «здоровом» состоянии и подключать сборки «облачных» билдов. Личный git — это дело каждого, но важно, что мы все работаем через одну «трубу».

Рефакторинг. Нам повезло — мы используем Unity по прямому назначению, так что за три года кода рефакторинг у нас только по требованию. Также мы стали исповедовать идеологию «идеальный код и суровая реальность». Нам это позволяет больше сосредоточиться на игре. Однако есть и технический долг, который мы стараемся закрывать.

Планирование. Схема очень простая: мы используем Trello, где каждый выкладывает в Backlog разные задачи, являющиеся, по его мнению, полезными. Также мы преобразуем в задачи фидбек который приходит из «ВКонтакте», Steam и Facebook. Когда задачи накапливаются, мы созваниваемся по Skype. В среднем, это случается каждые две недели. В ходе общения вместе с командой решаем, какие задачи берем на следующие две недели разработки.

Оптимизация. Изначально мы заложили нужные нам требования под железо и следуем им. У нас нет нареканий к Unity (ведь не зря мы купили всем лицензии).

Наш вывод: уделяйте много времени утилитам, если повторяете операцию больше пяти раз. Мы очень многое автоматизировали в игре, написали больше 40 разных утилит. Автоматизация труда — это очень большая (лучше сказать «гигантская») экономия времени.

Особенности арта и дизайна

Наши художник Ярослав и дизайнер Владимир рассказали, как устроена их работа.

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

Интерес к играм давно пропал, но игроман во мне всё ещё жив и находится в постоянном поиске чего-то интересного. Поэтому когда подвернулся шанс стать частью команды независимых энтузиастов и сделать что-то действительно значимое, я не стал его упускать и подготовил детальный проект логотипа игры, чем и завоевал шанс стать частью Atom Team.

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

Кроме того, я часто участвую в обсуждении сюжета игры, активно выдвигаю свои предложения по развитию сюжета и отдельных заданий. А ещё я послужил вдохновением для первого в игре NPC. В общем, если вы играли в ATOM RPG, то мы наверняка уже встречались.

Ярослав: Я занимаю должность дизайнера, иллюстратора, концепт артиста и UI\UX-художника, ассистента геймдизайнера и левелдизайнера. Я очень полюбил работу в этих направлениях на факультете дизайна. В состав команды вошёл ещё «зелёным» — в декабре 2015 года, когда на форуме gamedev.ru искал команду, к которой можно примкнуть с моим-то скиллом.

Там мне посчастливилось встретить Atom Team. Хоть я и не был великим художником и разработчиков, но всё же имел большое желание создавать игры и использовать все свои навыки: изобретателя, игрока и художника. Видимо, ребята это почувствовали.

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

Я использую референсы реальных объектов и строений. На «облаке» нашей команды есть несколько тысяч ранее снятых (в Припяти) или специально подобранных фотографий, на которые мы часто опираемся при создании локаций, предметов, экипировки или моделей.

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

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

После этого изображение проходит постобработку и проверку в интерфейсе (не выделяется ли за счёт цветов и контраста, не сливается ли с интерфейсом). Обычно тест происходит на мониторах разного типа IPS\TN.

Как один человек может создать все локации

Так исторически сложилось, что созданием всех локаций для нашей игры занимается только один человек — Иван. Вот как он описывает свой труд.

Иван: Сначала, идёт совместное со сценаристами обсуждение и формирование самой сути локации. Достигаем общего понимания того, что это будет за локация. Создается её схематический план и описание. Дальше определяемся, какие 3D-модели требуются для наполнения локации. На этой стадии активно используется фотореференс и наше воображение.

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

Как мы создаём 3D-модели

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

На каждую 3D-модель создается свой дизайн-документ. Далее, если это нужно, работа выполняется Иваном или распределяется среди наёмных 3D-моделлеров. После того, как модель готова, она проходит QA. И либо идет в проект, либо на доработку.

О графике

Так как дело происходит на территории постъядерного СССР, на графическое исполнение огромное влияние имели такие игры, как S.T.A.L.K.E.R., серия «Метро 2033», и так и не вышедший «Новый Союз». Очень много было почёрпнуто в плане визуального вдохновения из Wasteland 2 и легендарной серии Fallout.

Мы постоянно ищем в интернете фотографии заброшенных мест, заводов, бункеров и военных объектов СССР. Недавняя поездка в Чернобыльскую зону отчуждения, дала огромный толчок в плане идей по графическому наполнению локаций. Было сделано огромное количество качественных фотографий и видеоматериалов, которые уже в работе и здорово помогают.

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

Анимация и звук

Удача иногда играет решительную роль. Именно благодаря ней, нам удалось найти Леонида (аниматора) и Евгения (звукорежиссёра). Пара слов от них.

Леонид: Я попал на проект благодаря чистой случайности, увидел обзор на АТОМ, скачал Kickstarter-демо, и меня зацепило. Я связался с командой и предложил свою помощь в разработке. Они мигом согласились.

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

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

Евгений: Я присоединился к проекту АТОМ, как мне кажется, по счастливой случайности. Собственно, меня не должно было быть совсем в игровой индустрии, но так уж вышло. И сейчас я этому искренне рад.

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

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

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

Правда, сначала мне приходилось выкручиваться сторонними библиотеками и стоком, но сейчас всё стало проще. Благодаря бюджету игры, мы приобрели профессиональный микрофон и рекордер, так что многие вещи я теперь пишу сам. Дальше, я надеюсь, дела пойдут ещё лучше и в итоге у нас появится и своё помещение для foley-студии!

Из игроков в координаторы: история нашего QA

Координатор наших тестеров, Александр, начинал как обычный игрок. Его внимательность и упорство, с которым он информировал нас о найденных в игре проблемах и собственных решениях по балансу и улучшению игрового процесса, привели его в команду в роли координатора QA.

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

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

Кроме того, Александр в меру своих сил помогает нашим сценаристам в разработке заданий и диалогов. Вот как он комментирует свою деятельность: «Если пришла пора убить какого-то важного персонажа или добавить безысходности в и так не блещущий надеждой мир, то прихожу я. Так что, если вы увидите, как важный персонаж сидит весь изрешечённый пулями рядом с горящим автомобилем — вы знаете, кого винить».

От мозгового червя до семейной драмы: опыт сценаристов

Хотя идеи по квестам время от времени предлагают все члены команды (порой даже наши игроки), главных сценаристов у нас двое: Антон и Александр.

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

Система представляет собой совокупность маркированных блоков текста, выстроенных в логической последовательности. К примеру, фраза которой персонаж в игре приветствует нашего героя будет обозначена как А1, а ответы на неё — А2, А3, А4 и так далее. Каждый из них ведёт к своему собственному блоку текста. В общем, выглядит как интерактивная книга. Такая система легка для программистов и полезна для тестеров, которые могут взглянуть на дизайн нарратива и сравнить его с тем, как диалог имплементировали в саму игру.

Александр в своей работе концентрируется на создании внутриигровых текстов, диалогов и побочных заданий.

Александр: Создание внутриигровой литературы для меня одно из самых любимых занятий (несмотря на то, что никто её не читает). Здесь я могу практиковаться в разных формах и жанрах — например, написать рассказ по канонам шолоховского соцреализма, слушок с отсылкой на Заболоцкого, статью с использованием штампов советской журналистики, модернистское стихотворение с закосом под Готтфрида Бенна, древний манускрипт на лавкрафтианский манер, или сухую хронику какого-нибудь события.

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

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

Для создания концовок я включаю своего внутреннего Алехандро Ходоровски: игрок или остаётся с ещё большим количеством вопросов, чем были у него в начале квеста, или получает неожиданный твист. Если я пишу слухи, то они, скорее всего, будут связаны с необъяснимыми, жуткими или, наоборот, комичными явлениями.

С одной стороны спектра — проходящая через весь нарратив игры загадочная Чигирь-звезда, с другой — лубочные оборотни-пионеры, пугающие колхозников по ночам. В общем, моя деятельность хороша в меру, в малых дозах. Ребята делают крепкую, серьёзную игру. Но произведение искусства, излишне упивающееся своим суровым реализмом, выглядит смешно, ведь это, в конце концов, игра, развлечение, а не математически точный симулятор действительности. Потому я и разбавляю эту серьёзность, когда нужно. А когда нужно — сгущаю её. В общем, Solve et Coagula, как и завещали нам древние мудрецы.

#игры

{ "author_name": "Лера Михайлова", "author_type": "editor", "tags": ["\u0438\u0433\u0440\u044b"], "comments": 19, "likes": 31, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 40713, "is_wide": true }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15388' + '59599') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 40713, "author_id": 78969, "diff_limit": 1000, "urls": {"diff":"\/comments\/40713\/get","add":"\/comments\/40713\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/40713"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

19 комментариев 19 комм.

Популярные

По порядку

Написать комментарий...
5

Паша Техник то в курсе, что вы его в игру засунули? )

Ответить
4

Интересно, а как юридически оформляются взаимоотношения и выгодоприобретатели в инди-командах?

Ответить
3

о, кривой клон фолла с неработающей боевкой? слышали слышали, даже купили

Ответить
0

а что с системой боя ? так бы я в фол поиграл бы

Ответить
0

она просто убита навыком "опрокидывание" которое у противника срабатывает через 2-3 удара и это тупо убивает всю игру. А так игра норм

Ответить
0

Ну и как общие впечатления?

Ответить
0

игра нормальная,если бы не убогая боевка

Ответить
0

Я сдал обратно, играть не интересно совсем. Локации пустые.

Ответить
0

ну да, до нормальной игры ей далеко, но.. ждем, что еще остается

Ответить
1

Ребята настоящие монстры.. такой классныйпроект запиливать такими малыми ресурсами. Жаль, что так мало подняли денег. Печально, что игровая индустрия в России не поддерживается на уровне госсударства. Напишите https://vc.ru/24014-ifunny-funcubator, они смогут помочь с ресурсами и маркетингом, если потребуется.

Ответить
0

Это разве для игр акселлератор?

Ответить
1

100% утверждать не могу. Но по моему, они тоже смотрят игровые проекты. В конце-концов кто-то в России этим должен заниматься :-)

Ответить
1

пускай просят денег с помощью майнинга, как на boomstarter. у нас донатят плохо и мало кто знает как и где, поэтому все средства хороши.

Ответить
1

Почему-то забыли про:
- Санитары Подземелий
- Край Мира
- Горький-17: Запретная зона

Ответить
0

Опять сталкер, сколько можно

Ответить
1

Пока я свой не сделаю, не закончится)

Ответить
0

Делали бы эту игру для мобильников, она бы сразу хитом стала. Но на пк и приставках это уже нонсенс. Большинство игроков просто не станет играть в пошаговую игру на домашней платформе. Да и технически она устарела. Яркий пример Wasteland 2. Какой бы классной и технологичной не была, продалась так себе. XCOM свою нишу заняла. Классная, но рекордов по продажам тоже не поставила.

Ответить
0

Похожа на Silent Storm, даже подумал что на их движке сделано.

Кто играл,скажите, боевка сильно отличается от Silent Storm? ИМХО там была идеальная.

Ответить

Комментарий удален

Комментарий удален

0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления