Gamedev DarkPro1337
3 138

GameMaker: советы для новичков

Рекомендации, которые покажут, как надо или не надо делать.

В закладки

Попробуйте прочитать документацию

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

Документация GMS1

Документация GMS2

Не копируйте код, если вы его не понимаете

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

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

Различные значения для различных экземпляров

Предположим, вам нужно сделать пару врагов: первый с 4 HP и второй с 10 HP. Как новичок, вы подумаете, что нужно создать ещё один объект и изменять HP внутри него. Но этот вопрос можно решить проще.

Когда вы размещаете экземпляр внутри комнаты через редактор комнат, вы можете открыть окно «Код создания» (в GMS2 нужно кликнуть дважды) и писать код в нём. Таким образом вы можете задавать HP экземпляров внутри их кода создания.

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

Используйте place_meeting()

Функция place_meeting() может использоваться для проверки столкновений между объектами. Лучше использовать эту функцию в условии, чем использовать событие столкновения, так как вы сможете больше контролировать работу столкновений.

Первый и второй аргументы — это X и Y координаты, в которых будет проверятся столкновение. Третий аргумент — это объект, с которым будет проверятся столкновение.

Первый и второй аргументы функции обычно устанавливается X и Y соответственно. Предположим, что игрок находится в комнате, когда выполняется проверка на столкновение. Это полезно, потому что вы можете проверить, будет ли игрок сталкиваться с объектом, проверив его такими аргументами.

Лучший способ получения ввода (input)

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

Но есть более простой способ. Вот этот.

Вы знаете что keyboard_check() возвращает true если нажата определённая клавиша, или возвращает false если она не нажата. Но в GameMaker'е true становится — 1, а false — 0, это просто числа. Поэтому их можно использовать в таком уравнении.

Если нажата правая клавиша, то hsp будет равен 1.

Если нажата левая клавиша, то hsp будет равен -1.

И если ни одна клавиша не нажата, то hsp будет равен 0.

Тоже самое можно применить к вертикальному положению.

Событие Draw GUI для элементов HUD

Для отрисовки HUD некоторые люди используют объекты или отрисовывают их через событие Draw — добавляют их относительные позиции в координаты камеры/вьюпорта.

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

Как работают функции создания

В этом совете я обращусь к тому, что создает путаницу среди начинающих разработчиков.

Я говорю о функциях _create. Это функции, которые для создания чего-либо (поверхности, буфферов, структур данных и так далее) и сохраняет результат в переменную.

arg — аргумент

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

Если я создам список в локальной переменной, он исчезнет в конце события, потому что переменная является локальной. Ведь так?

На самом деле, это работает не так. Всякий раз, когда вы создаёте список, он создаёт его внутри памяти. Именно там он и существует. Функция просто возвращает указатель, на список внутри памяти. Таким образом, переменная, которую вы используете как «список», представляет собой просто указатель, который позволяет вам получить доступ к фактическому списку в памяти.

Даже если переменная является локальной — список не существует. Помните, что переменная — это просто указатель. Чтобы уничтожить список, вам надо использовать.

Эта функция удалит список из памяти

Кроме того, когда вы делаете так.

Вы не создаете другой список, называемый «list_2», который совпадает с « list_1». Вы просто копируете значение указателя в эту переменную, поэтому обе переменные указывают на тот же список в памяти.

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

Очистите поверхность, когда вы её создаёте

Когда вы создаете поверхность, она должна быть пустой, ведь так?

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

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

В раздел Gamedev попадают не только редакционные материалы, но и читательские тексты с пометкой «Блог». Вы можете нажать кнопку «Написать» и рассказать о своём опыте разработки. Подробнее о читательском контенте в разделе вы можете почитать тут.

#опыт

Материал дополнен редакцией
{ "author_name": "DarkPro1337", "author_type": "self", "tags": ["\u043e\u043f\u044b\u0442"], "comments": 72, "likes": 49, "favorites": 43, "is_advertisement": false, "subsite_label": "gamedev", "id": 10998, "is_wide": false }
{ "id": 10998, "author_id": 5455, "diff_limit": 1000, "urls": {"diff":"\/comments\/10998\/get","add":"\/comments\/10998\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/10998"}, "attach_limit": 2, "max_comment_text_length": 5000 }

72 комментария 72 комм.

Популярные

По порядку

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

sloa

8

#. Главная заноза GameMaker кроется в терминологии.
Потому что объектами в нем называется то, что в других языках зовется классами или типами, а сами объекты в игровом мире зовутся инстансами.

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

#. Вообще, язык GML - это такой особый велосипед, в котором далеко не все работает так, как от этого ожидаешь. И новички, я по крайней мере, привыкают обходить эти особенности, потому что просто так сидеть ждать нормальной реакции от языка - бессмысленно.
Есть other, но нет this. Нормально? Нормально.
Переменные можно объявлять в любом месте, но нет способа проверить, объявлена уже переменная, или нет. Нормально? Почему нет? This is GML!

#. Функции в GMS называются скриптами, и это тоже может создавать путаницу.
Я долгое время просто вызывал скрипты через script_execute(my_script), и даже не заморачивался с параметрами, настолько неуклюже выглядела эта конструкция.
Но потом оказалось, что их можно дергать просто как my_script(parameters);

Ответить

Kirill Zolovkin

sloa
5

«А когда инстансов станет несколько - начнутся проблемы. Потому что GMS в такой ситуации под капотом перебирает все инстансы, и выполняет с ними указанную операцию.»
Если вы храните id инстансов в переменной, и обращаетесь по нему, нет никаких проблем.
«Есть other, но нет this. Нормально? Нормально»
Есть self, который this
«Переменные можно объявлять в любом месте, но нет способа проверить, объявлена уже переменная, или нет. Нормально? Почему нет? This is GML!»
Зависит от того, как давно вы обновлялись. Если вы с ГМ давно знакомы, то в версии 8, например, эта функция была. Если недавно, то в ГМС2.1 эта функция есть =)

Ответить

Виктор

sloa
0

Звучит только как минусы. Или у GML есть свои плюсы? Вообще, велосипеды всегда не хорошо, как по мне...

Ответить

Kirill Zolovkin

Виктор
6

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

Например, поворот спрайта по курсору мыши в Unity:
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.rotation = Quaternion.LookRotation(Vector3.forward, mousePos - transform.position);

Поворот в GML:
image_angle = point_direction(x, y, mouse_x, mouse_y);

Ответить

Андрей Ланнистер

Виктор
4

Game Maker божественно простой для своих возможностей. Позволяет сделать абсолютно любую 2D игру.

Существенным минусом для меня стал абсолютно дерьмовый редактор сцены. Он тормозит, он дает очень мало информации, он не позволяет просматривать список объектов на сцене и организовывать их. Для игры, которую я сейчас делаю, мне пришлось делать свой редактор уровней на том же Game Maker.

Не так давно появился Game Maker 2, в котором эти проблемы вроде как полностью пофикшены, но мне тяжело на него переходить с первой версии.

Ответить

Kirill Zolovkin

Андрей
1

Эти проблемы пофикшены. Переходить надо.

Ответить

Kirill Zolovkin

Андрей
1

А можно узнать, почему тяжело переходить? Для меня главным минусом ГМС2 было то, что интерфейс тормозил, но сейчас перестал уже. И многие вещи из ГМС2 мне кажутся более комфортными теперь.

Ответить

Андрей Ланнистер

Kirill
0

Просто интерфейс мне показался не-интуитивным, вот и все. Я обязательно на него перейду после того, как закончу свой долгострой (или скорее ленивострой), а пока не хочу тратить силы на портирование проекта с предыдущей версии GM, оно проходит не очень гладко

Ответить

Maxim Nuriev

Андрей
0

Андрей , а у игры есть паблик/твитер?

Ответить

Андрей Ланнистер

Maxim
0

А вы с какой целью интересуетесь?

Есть эта, довольно устаревшая страничка. http://gamesjam.org/148/

Еще я на GM делал пару игр под андроид
https://play.google.com/store/apps/details?id=com.A.Petkevich.KillRow&hl=ru
https://play.google.com/store/apps/details?id=com.APetkevich.SilverfangInc&hl=ru

Ответить

Maxim Nuriev

Андрей
0

Ищем своих :)
Ниндзи-головастики, помним)

Ответить

sloa

Виктор
0

Я не знаю, как сейчас, но когда я только начинал, главным плюсом была возможность писать код самому. А всякие там Construct и Clickteam Fusion считали, что я должен до последнего тягать иконки.

Это если брать не движки а именно игровые конструкторы. Я очень не хотел кодить, но я хотел, чтобы такая возможность оставалась.

Ответить

sloa

sloa
1

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

Вот здесь можно почитать мнение профессионала о GM: http://moacube.com/blog/professional-developers-look-at-gamemaker/

Ответить

Андрей Ланнистер

sloa
3

Мнение 2012 года. С того момента упомянутые проблемы в основном были исправлены.

Ответить

sloa

Андрей
0

Важное уточнение.

Ответить

Patrick

sloa
1

Кагбе, "объект->экземпляр" ещё дедушка Вирт использовал. Один из популяризаторов ООП.
А то понапривыкали "класс->объект" и всё. ИМХО, вкусовщина.
Вот с переменными, похоже, действительно засада.

Ответить

sloa

Patrick
0

Да нет. Можно же кодить вокруг этих ограничений.

Я для таких случаев во все объекты кидаю ds_map под названием loose_vars, и вот там уже можно проверить наличие любого ключа с помощью ds_map_exists.
И там, где я не хочу засорять Create, я использую loose_vars.

Ответить

Kirill Zolovkin

sloa
1

«засорять Create» — а чем, собственно, вы его «засорять» не хотите?

Ответить

sloa

Kirill
0

Инициализацией переменных.
Я хочу, чтобы все нужные переменные сами появлялись в объекте, как только я засунул нужный мне скрипт в Step. Я не хочу таскаться в Create каждый раз, когда я что-то вынул/заменил/добавил.

Ответить

Maxim Nuriev

sloa
1

"...и игра даже будет работать"
Там много таких медвежьих услуг, которые зато делают вхождение в язык и его использование очень дружелюбным :)

Ответить

Никита Ефимов

3

Не копируйте код, если вы его не понимаете

хех...

Ответить

Neko Natum

Никита
2

Действительно, как будто что-то плохое.

Ответить

Andrey Burmistrov

Никита
0

...потому что это прерогатива разработчиков на C++.

Ответить

Никита Ефимов

Andrey
0

Ну, я с этого ещё на action script'e, хосспаде помилуй, начинал

Ответить

sloa

0

#9. Если вы выложите что-либо на Game Maker маркет, вам скорее всего нихрена не заплатят, потому что платежи ниже $100 YoYo оставляет себе.

Ответить

Kirill Zolovkin

sloa
5

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

Ответить

Kirill Zolovkin

Kirill
1

На накопление у вас есть 3 месяца. Как только вы заработали 100+$, вам в срочном порядке перекидывают деньги на PayPal.
https://help.yoyogames.com/hc/en-us/articles/217380797-Publisher-When-will-I-get-my-money-

Ответить

sloa

Kirill
0

То то я смотрю, у меня Final Payment в квитанциях не растет нифига.
Хорошо, платежи ниже $130 за период в три месяца YoYo оставляет себе.

Хрен редьки, как бы.

Ответить

Kirill Zolovkin

sloa
5

Объясняю: он их не оставляет себе, деньги — ваши. Просто их переводят трашнами от $100+. Если вы в указанный период (в конце каждого месяца) не накопили $100+ (за три прошедших месяца), вам их переведут, когда накопите. Например, в следующий период.

Ответить

sloa

Kirill
0

Вы меня почти убедили. Попробую.

Ответить

Dmitry Mamaev

2

У меня нулевое знание программирования. Да и желания учить его особо нет. Поэтому для первого простого проекта я искал движок, в котором оно не нужно. Узнал, что в GameMaker2 есть система Drag'n'Drop. Скачал программу, ну, думаю, отлично. Но не тут то было) Туториалов по этой системе - раз, два и обчёлся. Даже на сайте разработчика ничего особо нет об этой системе. Покопался в движке, попробовал методом научного тыка - не заработало. Тогда я начал искать другой движок. И наткнулся на Construct 2 (https://www.scirra.com/). Оказалось, он интуитивно простой. Туториалов по нему навалом, плюс, форум довольно живой (т.е. можно задать там интересующие вас вопросы и вам ответят местные энтузиасты или сами разработчики). Потестил бесплатную версию, а потом приобрёл и полную лицензию (можно купить через стим http://store.steampowered.com/app/227240/Construct_2/). Вот уже с июля сижу, пилю платформер в C2. Если вы хотите сделать относительно простой 2D проект, но по какой-то причине не хотите учить языки программирования - советую попробовать Construct 2.

Ответить

Андрей Ланнистер

Dmitry
1

В GM дохрена встроенных туториалов по всем темам.

Ответить

Dmitry Mamaev

Андрей
2

Когда я проверял, нормальных туториалов для системы drag'n'drop не было. Может, конечно, сейчас добавили. P.S. Я про GM2, если что.

Ответить

Евгений Кондратенко

Dmitry
4

По-моему, в GMS код проще, чем Drag'n'Drop =)

Ответить

Kirill Zolovkin

Dmitry
1

Дмитрий, поищите туториалы по DnD в GMS, GMS2 только интерфейсно отличается, а также наличием большего числа блоков DnD. Принципы и функции все те же.

Ответить

Maxim Nuriev

Kirill
0

товарищ уже в C2 ) доктор, мы его потеряли

Ответить

Dmitry Mamaev

Kirill
0

Искал же) Просто так не стал бы писать. Почти все годные туториалы с использованием GML. Про DnD систему количество материала крайне скудное. По крайней мере так было в июне-июле этого года.

Ответить

Андрей Ланнистер

Dmitry
1

Ну да, вы правы, туторы в основном не про drag&drop

Ответить

Александр Тим

1

Ура, наконец-то на любимом игровом сайте статья про любимый игровой движок (конструктор?) юности :) Сейчас пойдут вопросы: что лучше, GM или Unity? Unity или Unreal? GM или Renpy?

Ответить

sloa

Александр
3

GM лучше юнити для прототипирования.
Unreal лучше юнити для готового результата.
Renpy лучше для визуальных новелл, хотя некоторые умудряются.

Ответить

sloa

sloa
2

Хотя, если в вашей новелле будут игровые секции, то лучше опять GM, потому что для RenPy в этой ситуации понадобится таки знание питона, а в GM можно накидать графически иконками. Если процесс несложный.

Ответить

Anastasia Jesso

sloa
0

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

Ответить

sloa

Anastasia
3

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

Ответить

Александр Тим

sloa
0

Только если не захочешь на том же RenPy реализовать пошаговые бои ^^

Ответить

Forest Swamp

sloa
0

А Unity для чего лучше?

Ответить

sloa

Forest
0

Для прототипирования в 3D, кросплатформы, мобилок и небольших проектов, наверное.

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

Ответить

Forest Swamp

sloa
0

Помню когда-то видел завлекаловки в духе "Unity - создай игру без программирования", но сейчас по факту выходит, что нужно шарить в шарпе или js, плюс изучить Shaderlab и Cg для шейдеров (если недостаточно стандартных).

Еще слышал, что Unity ужасен в сетевом коде. Как пример - Albion Online, где лагает по-черному в PvP-замесах. В то же время, знающие программисты утверждают, что лаги Albion Online - заслуга разработчиков, и в Unity можно организовать адекватный сетевой код с шустрой сериализацией.

Ответить

Александр Болуженков

Forest
0

Думаю что создатели Escape from Tarkov и Калибр с вами не согласятся

Ответить

Forest Swamp

Александр
0

Не я это утверждаю, поэтому не со мной нужно соглашаться/не соглашаться.)
У создателей этих игр были проблемы с сетью?

Ответить

Александр Болуженков

Forest
0

У первых были и есть. Причем они вида - не плохо/хорошо что-то работает, а работает порой совсем не понятно как и подобных багов в других игра я не видел ни разу. Ну и они сами говорили уже что выбор Юнити был ошибкой.
А для вторых по слухам сами разрабы юнити будут писать сетевую часть под заказ. Что скорее всего, говорит о том что юнити из коробки такие задачи решить не может.
По мне так вообще, если у тебя шутер и к тому же сетевой, то выбора кроме unreal на сегодня попросту нет. Если только там юридические/финансовые моменты решают

Ответить

Forest Swamp

Александр
0

Было бы интересно почитать на эти темы статьи на DTF. У меня были мысли сделать простенький сетевой шутер на Unity. Хотелось бы узнать конкретные проблемы, которые могут возникнуть.

Ответить

Александр Болуженков

Forest
0

На ютюбе полно видео где делают на блупринтах сетевой шутер, от и до )

Ответить

Forest Swamp

Александр
0

Мне больше нравится писать код.)

Ответить

Александр Болуженков

sloa
0

Почему Unreal плох для прототипирования? Если там есть блупринты и для прототипа программисты впринципе не нужны даже. Некоторым и для готовый игры хватило блупринтов

Ответить

sloa

Александр
0

Эээ. Не знаю.

У Unreal репутация движка для которого нужна серьезная экспертиза, я по ней и сужу.

А так то и для Unity есть специальная примочка, которая превращает ее в почти что гейм мейкер. Дорогая только, зараза.

Ответить

Александр Болуженков

sloa
0

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

Ответить

sloa

Александр
0

Скорее всего из-за того, что Unreal использует плюсы. Язык, книгой по которому можно без особых усилий проломить кому-нибудь голову.

Ответить

Александр Болуженков

sloa
0

Некоторые проекты, включая мобильные, люди делали вообще без плюсов. Если нет сетевой части и сложных операций, то почти все или даже все можно сделать нодами blueprint.

Ответить

evilnw

0

Цены на движок просто конские. Когда-то рассматривал GM для создание игры, но остановился на Cocos2D-x.

Ответить

Kirill Zolovkin

evilnw
1

YoYo Games часто устраивает распродажи. Например, GMS с тремя экспортными модулями (Web, Mobile, PC) и кучей сорцом я брал на хамбле за $15. ГМС2 покупал на Стиме с 40% скидкой за 3 тыс рублей. Смотрите цены на Стиме, там часто распродажи.

Ответить

sloa

evilnw
0

Я ищу альтернативу GM сейчас, и пока что посматриваю в сторону Godot.

Ответить

mitya1234

sloa
0

Для 2d игр подходит очень хорошо, но пока что надо уметь писать скрипты

Ответить

Forest Swamp

0

Что насчет сериализации? Возможна ли реализация Protocol Buffers?

Ответить

DarkPro1337

Forest
1

Возможно, конечно. Но я не думаю, что он встроен в GMS.

Ответить

sloa

0

Если вы используете первую версию Game Maker Studio, то быстро заметите, что цветовая схема в ней весьма вырвиглазная. А белый фон нравится не всем.

В этом случае можно попробовать вот такой скин:
https://jaylanart.deviantart.com/art/JayLan-GMSkin-psDark-364524240

Ответить

Андрей Ланнистер

sloa
0

Я всегда юзаю HTML 5

Ответить

sloa

Андрей
0

Ух, не мое. Либо psDark, либо, если нету, GM8.

Ответить

Ilya Hinzburh

0

Я купил себе Game Maker, но никогда его не юзал: RPG Maker MV победил :) Причем в основном благодаря шикарным ассетам, а также HTML 5 (хоть я его и знаю плохо).

Ответить

Витя Буторин

Ilya
0

Помню, работал с RPG Maker VX Ace. Намучался там с параллельными событиями для создания сложных кат-сцен, это сводило с ума :D

Ответить

Ilya Hinzburh

Витя
0

Там не было HTML, только Ruby вроде. Меня и самого эти события достают :)

Ответить

Витя Буторин

Ilya
0

Да, там был Ruby, но с ним особо проблем не возникло.

Ответить

Александр Тим

0

А если рассматривать GM и Unity для создания простой 2D игры (или в изометрии) с элементами RPG (прокачка, задания с разными ветками прохождения и влияния выбора на дальнейший сюжет), то что приоритетнее?

Лет 5-6 назад собирал простейшие аркады на GM, Unity привлекает своим коммьюнити сейчас.

С программированием туговато, писал только квесты на RenPy (т.е. изучал базу Питона для сложных логик). JS не пошёл (точнее не уделял ему время).

Чтобы не упираться в потолок готовых ассетов из Unity нужно начинать изучать C#. На GM язык, по моему, чуть проще, но не скажется ли это в будущем на масштабировании игры?

Ответить
0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "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", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "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": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&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": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]