Как я подключила SDK Яндекса к Construct 3 через JavaScript
Где-то месяц назад я начала изучать JavaScript. И, конечно, еще не дочитав учебник до конца, я решила подключать SDK Яндекса к своей новой игре. С чего это я вдруг спросите вы, если есть такой удобный Game Push и плагин от самого Яндекса? А я отвечу, что в моей игре нужны были супер частые сохранения (читай минус все деньги, если использовать запросы Game Push), а вот плагин от Яндекса у меня почему-то не захотел работать нормально, как я ни старалась. И поэтому, обладая лишь двухнедельными знаниями о JS, я решила, что я вполне могу подключить это ваш SDK.
Спойлер: каким-то магическим образом у меня это получилось, и если вам лень читать, то вот ссылка на игру и сам скрипт, можете покопаться в файлах консоли.
Загрузка SDK
Итак, начнем с загрузки самого SDK, чтобы у нас была возможность использовать его методы в игре. Создаем новый документ в папке "Scripts", главное тут включить импорт данных в Event Sheets, а то наши переменные и функции не будут доступны в самом Construct.
Дальше надо добавить загрузку SDK, я использовала примеры из документации Яндекса по установке. Выглядит это вот так:
UPD: теперь асинхронный вызов SDK немного изменили, он есть на втором фото, в остальном все должно работать также.
Делаю я это еще до загрузки проекта, так как нам надо успеть все скачать, а это может занять некоторое время, особенно, если кто-то решил поиграть в вашу игру на картофелине где-то в пустыне.
Первая функция грузит скрипт с данными SDK, а вторая же инициализирует YaGames и возвращает объект ysdk, который мы и будем использовать для вызова всех функций. Плюс я задаю переменной sdk значение true, чтобы в игре можно было понять, в какой момент все загрузилось.
Сразу скажу, что идея промисов и объектов для меня новая, поэтому скорее всего в коде есть какие-то косяки, так что пишите, если что-то можно улучшить, но все работает, так что я довольный пирожок.
Дальше нам надо проверить, загрузился ли ysdk, чтобы можно было юзать его в events. Я долго думала, как сделать это лучше, и пришла к такому варианту:
В коде Construct есть волшебное слово runtime, через которое можно получать доступ к переменным и функциям из events. Тут я передаю информацию из скрипта в events через глобальную переменную sdk_loaded, чтобы можно было вызывать наш код только один раз, а не каждый тик.
Когда sdk загрузился, мы вызываем рекламу, подгружаем игрока, получаем язык и грузим очки, если они есть. Вот так выглядят эти функции в скрипте:
Сохранение данных игрока
Теперь займемся тем, ради чего все и начиналось. Сохранять численные данные игрока Яндекс дает не чаще чем раз в секунду, а если нужно сохранить что-то посложней, то вам дают лишь 100 запросов за 5 минут. Для моих нужд сохранение раз в секунду вполне подойдет:
Тут же можно отправить эти данные в лидерборд, который должен быть предварительно создан в консоли разработчика:
Rewarded Ads - Реклама с вознаграждением
Тут все довольно просто - используем callbacks для вызова наград. У меня в игре три разных бонуса за просмотр рекламы, поэтому при вызове функции я посылаю тип нужной награды.
Пример того, как можно вызвать такой показ рекламы:
Сохранение игры
Ну и как бонус поделюсь, как легко можно сохранить данные игры без Яндекса. В моем случае это сохранение позиций кристаллов, которые записываются в файл JSON, а затем сохраняются на девайсе пользователя. Выглядит это так:
На создание игры и подключение sdk у меня ушел где-то месяц. Я работала в свободное время где-то пару часов в день.
Надеюсь, кому-то этот туториал был полезным. Всем 💜