Перейти к основному содержимому

Construct 3 - Создание ежедневных лидербордов

В GamePush реализованы лидерборды - персонализированные соревновательные таблицы, которые можно показывать на странице игры. На примере Constract 3 разберем создание ежедневного лидерборда с показом личного рекорда игрока. В такую таблицу лидеров можно выводить «топ за сегодня», увеличивая тем самым вовлеченность игроков.

Создание лидерборда

Создаем лидерборд в панели управления GamePush. Переходим во вкладку Лидерборды, жмем кнопку “Добавить” и заполняем поля:

Добавление полей

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

После заполнения полей кнопка Добавить лидерборд станет активна. Нажмите её, чтобы завершить создание таблицы. Финальная настройка лидерборда приведена на рисунке ниже:

Сохранение рекорда

Сохранить рекорд за сегодня в таблицу. В лидербордах разделение рекордов осуществляется через параметр variant. Variant - это любая строка, по которой можно получить срез лидерборда и сохранить результаты в этот срез. Например, variant может быть строкой даты 19.12.2022, номером уровня 123 или названием состязания arena3x3. Разработчик волен выбирать любое название, по которому выполняется срез.

Для построения ежедневных лидербородов будем использовать дату. Чтобы сделать таблицы не пересекающимися, достаточно сохранить variant в формате текущей даты, например 19.12.2022. Например, “сегодня” все игроки сохраняют рекорды в variant 19.12.2022 а “завтра” будут сохранять в variant 20.12.2022. Для получения текущей даты в Construct 3 воспользуемся скриптом:

Создали переменную variantName, и при старте игры записали в неё текущую дату в формате 19/20/2022:

localVars.variantName = new Date().toLocaleString('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
});

При прохождении уровня сохраняем текущие очки игрока и публикуем рекорд:

Сохраняем результат:

Публикуем рекорд:

Топ "за сегодня"

Открываем топ за сегодня. По желанию добавляем остальные поля в лидерборд, например вывести рядом с рекордом класс игрока или наличие VIP статуса. Для этого в панели управления можно создать соответствующие поля class и vip.

Личный рекорд

Чтобы показать личный рекорд игрока, в меню можно запросить рейтинг с сервера:

В отловленном событии доступна текущая позиция в рейтинге и значения полей рекорда. Отлавливаем событие получения рейтинга. Ждем срабатывания события загрузки рейтинга:

Чтобы получить:

  • текущую позицию: нужно считать выражение GamePush.LeaderboardPlayerPosition.
  • значение любых полей: можем считать выражение GamePush.LeaderboardCurPlayerField("score"), передав туда ключ поля (в нашем примере это score).

Начисление награды

Начисляем игроку награду за первые места по рейтингу вчерашней даты. Начисление награды состоит из пяти шагов:

  • создание поля игрока для отслеживания дня начисления награды - lastRewardedDay;
  • создание переменной для хранения даты прошедшего дня - lastDate;
  • сравнение переменной lastRewardedDay с датой текущего дня variantName. Если lastRewardedDay != variantName - происходит начисление награды;
  • cравнивание позиции игрока в рейтинге и начисление награды;
  • cохранение данных игрока.

Создадим в полях игрока переменную, которая позволит отслеживать день последнего начисления награды - lastRewardedDay. В панели управления переходим во вкладку Игроки - Добавить поле:

При получении рейтинга добавляем еще одну проверку:

Узнаем дату вчерашнего дня и запишем в переменную lastDate:

let date = new Date();
date.setDate(date.getDate() - 1);
localVars.lastDate = date.toLocaleString('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
});

Следующим шагом добавим сравнение: если еще не получали награду за вчера, — то начисляем награду. Для этого сравниваем переменную lastRewardedDay, она не должна быть равна текущему дню variantName.

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

Сохраняем игрока после получения награды.

Оставайтесь на связи

С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: [email protected]

Желаем вам успехов!