Изолированная таблица лидеров
Разделить рекорды по областям видимости можно с помощью изолированных таблиц лидеров.
Обзор
Изолированные таблицы помогают разделить рекорды по разным областям видимости. Все области видимости хранятся по имени варианта. Имя может быть любым. Несколько примеров использования и примеров тегов для сохранения очков:
- Уровни. Свой рейтинг на каждый уровень.
LEVEL_15
,LEVEL_35
- Временные диапазоны. Таблицы лучших игроков за сегодня / неделю / месяц.
DAY_01/31/2022
,WEEK_4/2022
,MONTH_1/2022
- Именные разделения. Лучшие в локации, клане, расе, гильдии.
LOC_FOREST
,GUILD_NAGIBATORbl
,RACE_ORC
- Эвенты. Лучшие в событии, турнире.
EVENT_HALLOWEEN
,TOURNAMENT_POKER_1871
Вы не ограничены этим списком, это всего лишь теги. Можно придумать свои подходы к построению вариантов лидербордов.
Глобальная таблица рейтингов по своей структуре повторяет изолированную таблицу. К ней можно получить доступ по тегу в формате global@key1,key2,key3
, например global@score
, global@level,exp
Открыть таблицу
Чтобы не реализовывать на своей стороне отображение таблицы рекордов, её можно просто открыть во внутриигровом оверлее.
gp.leaderboard.openScoped();
По умолчанию выводится топ, отсортированный по очкам игрока, но можно кастомизировать всё.
gp.leaderboard.openScoped({
// ID таблицы
id: 17,
// Tag таблицы
tag: 'LEVELS',
// Название области видимости
variant: 'level_15',
// Сортировка DESC / ASC, по умолчанию значение лидерборда
order: 'DESC',
// Количество игроков в списке, max - 100, по умолчанию значение лидерборда
limit: 10,
// Включить список полей игрока для отображения в таблице, помимо полей таблицы
includeFields: ['rank'],
// Вывести только нужные поля по очереди
displayFields: ['rank', 'level'],
/**
* Показывать ли текущего игрока в списке, если он не попал в топ
* none — не показывать
* first — показать первым
* last — показать последним
*/
withMe: 'first'
});
Примеры:
// Показать лидерборд для нужного уровня
function openLevelRecords (level) {
gp.leaderboard.openScoped({
tag: 'LEVELS',
variant: `LEVEL_${level}`,
});
}
// Показать лучших за сегодня
gp.leaderboard.openScoped({
tag: 'BEST_DAY',
// 01/31/2022
variant: new Date().toLocaleString('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
}),
});
Получить таблицу
Если есть потребность отрисовывать список самому, то можно просто получить список игроков.
const result = await gp.leaderboard.fetchScoped({
// ID таблицы
id: 17,
// Tag таблицы
tag: 'LEVELS',
// Название области видимости
variant: 'level_15',
// Сортировка DESC / ASC, по умолчанию значение лидерборда
order: 'DESC',
// Количество игроков в списке, max - 100, по умолчанию значение лидерборда
limit: 10,
// Включить список полей игрока для отображения в таблице, помимо полей таблицы
includeFields: ['rank'],
/**
* Показывать ли текущего игрока в списке, если он не попал в топ
* none — не показывать
* first — показать первым
* last — показать последним
*/
withMe: 'first'
});
// Результат получения
const { leaderboard, players, fields } = result;
Публикация рекорда игрока
Чтобы игрок увидел себя в таблице, нужно опубликовать его рекорд для нужного варианта таблицы.
Глобальные таблицы сами синхронизируют рекорды игрока после его сохранения на сервере, не нужно вручную публиковать рекорды.
const result = await gp.leaderboard.publishRecord({
// ID таблицы
id: 17,
// Tag таблицы
tag: 'LEVELS',
// Название области видимости
variant: 'level_15',
// Перезаписать макисмальный рекорд?
// По-умолчанию рекорд будет обновлен, если он побил предыдущий
override: true,
// Рекорд игрока, установите значения нужных полей лидерборда
record: {
score: myScore,
level: myLevel,
exp: myExp,
},
});
// Результат публикации
const { record, fields } = result;
Примеры:
// Опубликовать очки для нужного уровня
function saveLevelRecord (level, myScore) {
gp.leaderboard.publishRecord({
tag: 'LEVELS',
variant: `LEVEL_${level}`,
record: {
score: myScore
},
});
}
// Опубликовать рекорд за сегодня
gp.leaderboard.publishRecord({
tag: 'BEST_DAY',
// 01/31/2022
variant: new Date().toLocaleString('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
}),
record: {
score: 15781
},
});
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!