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]
Желаем вам успехов!