Skip to content
E
Egmatic
лидерборд без сервератаблица рекордов в игрелидерборды SteamGoogle Play Gamesудержание игроковинди-разработка

Лидерборд без сервера: как добавить таблицу рекордов в игру

Лидерборд без своего сервера: личность игрока, запись очков и ранги уже держат Steam, Google Play, Game Center, Nakama или встроенные таблицы движка.

Vladislav Kovnerov11 сентября 2026 г.16 мин

Таблица рекордов — это три задачи: отличать игроков друг от друга, записывать результат так, чтобы он пережил закрытие вкладки, и показывать рейтинг. Ни одна из трёх не начинается со слов «поднять свой сервер». Если игра выходит в Steam, Google Play или App Store, всю работу уже ведёт платформа — вам остаётся вызывать её API. Если игра живёт в браузере, потребность закроют собственные сервисы движка или управляемый игровой бэкенд. Собственный бэкенд — четвёртый маршрут, и для большинства инди-игр он худший из четырёх.

Картина знакома каждому инди-форуму — и она же всплыла в нашей последней читке сообщества: разработчик доделывает веб-демо, хочет табличку лучших результатов и со вздохом садится «учить бэкенд» ради фичи, которая должна стоить один вечер. Ниже — четыре маршрута, существующие прямо сейчас: что каждый даёт, во что обходится, где ломается и сколько волноваться о читерах. (Честная оговорка сразу: этот блог принадлежит Egmatic, no-code 2D-редактору в статусе pre-alpha; где лидерборды стоят в наших собственных планах — в конце статьи.)

Короткий ответ

Где живёт играЧто братьПочему
Публикуетесь в SteamЛидерборды SteamБесплатно, входят в Steamworks, у каждого игрока уже есть аккаунт
Google Play или App StorePlay Games Services или Game CenterТаблицу держит платформа, а интерфейс игрокам знаком по другим играм
Веб-билд на itch.io или своём сайтеВстроенные лидерборды GDevelop либо бэкенд с REST- или JS-APIБраузерной игре не у кого спросить рейтинг — очкам нужен HTTP-адрес
Одна игра, несколько площадокИгровой бэкенд: Nakama, LootLocker, PlayFabОбщая учётная запись и одна таблица на всех сторах
Хочется разобраться в серверахСамописКак учебный проект — отлично, как продуктовое решение — дорого

Всю таблицу решает один вопрос: где ваши игроки уже вошли в аккаунт? Счёт имеет смысл ровно настолько, насколько можно доверять личности, которая за ним стоит. Игрок в Steam уже авторизован; у игрока на Android аккаунт Google в одном нажатии; аноним в браузере — никто, пока вы не дадите ему ник или вход. Выбирайте маршрут, которому уже принадлежат личности ваших игроков, — и львиная доля работы исчезает сама.

Что таблице рекордов действительно нужно

Полезно разложить фичу на четыре работы: каждый маршрут ниже — просто свой ответ на вопрос, кто их делает.

  1. Личность игрока. У каждого счёта есть владелец. Сторы закрывают вопрос готовым аккаунтом; веб-игре нужны ники, идентификаторы устройства или вход — и от этого выбора зависит, насколько серьёзно можно воспринимать рейтинг.
  2. Запись, которая переживает сессию. Когда забег окончен, число уходит с машины игрока туда, что живёт дольше вкладки. Это единственная часть, похожая на «бэкенд», — и на любом маршруте это один вызов API.
  3. Чтение с рангом. Экран меню запрашивает топ-50 и место самого игрока. Быстро сортировать миллионы строк — давно решённая задача, и решать её самому в пятницу вечером не нужно.
  4. Целостность. Очки, ушедшие с устройства игрока, можно подделать. Сторы дают защиту от подмены или запись только с сервера; бэкенды — серверные обработчики. Сколько этого нужно вашей игре — вопрос дизайна, он разобран ниже.

Заодно развеем миф: «без бэкенда» не значит «без серверов». Серверы есть во всех четырёх маршрутах. Вопрос в другом — чьи они и кого разбудят, когда они упадут.

Маршрут 1: стор уже всё сделал

Steam

Лидерборды Steam входят в Steamworks и бесплатны вместе с аккаунтом разработчика. Создаются в App Admin — либо игра заводит их на лету через FindOrCreateLeaderboard, так дешевле всего делать таблицу на каждый уровень. У каждой таблицы есть порядок сортировки (по возрастанию — забеги на время, по убыванию — хайскор), тип отображения (число, секунды, миллисекунды) и правило загрузки: keep-best, когда Steam сам хранит лучший результат игрока, или force-update.

Две детали стоят отдельного внимания. Первая: таблице можно присвоить флаг Trusted — тогда клиенты писать в неё не могут вовсе, и очки принимаются только через Web API SetLeaderboardScore с вашего сервера; если результат считается на серверной стороне, это самый чистый путь античита. Вторая: к записям крепится пользовательский контент — так в играх делают призраков повторов: побил рекорд — гоняйся с повтором, который его поставил. Для инди это механика удержания, притворившаяся технической мелочью.

Google Play Games Services

На Android лидерборды Play Games Services настраиваются в Play Console (Grow users → Play Games Services → Setup and management → Leaderboards), живут в статусе черновика, пока вы тестируете, и публикуются вместе с игрой. Два эксплуатационных факта важнее любых деталей API. Первый: сбросить прогресс из консоли можно, только пока таблица — черновик; после публикации за очистку берётся Management API — политику сбросов решайте до релиза, а не после первого балансного патча. Второй: в сервис встроена tamper protection, автоматически скрывающая подозрительные очки. Для новых лидербордов она включена по умолчанию, работает только на Android, вступает в силу до суток и задним числом не применяется. Документированный случай, когда её выключают, — игра выходит ещё и в вебе и делит таблицы между платформами.

Apple Game Center

На iOS и macOS таблицы хранит сам Game Center: GKLeaderboard — тип GameKit, с которым разговаривает ваш код, а настраиваются борды в App Store Connect. Игрок уже вошёл в Apple ID, таблицы друзей достаются бесплатно, и обслуживать нечего. Для первой игры на iOS это и есть весь ответ.

Общее ограничение всех трёх: это замкнутые миры. Очко из Steam не встретится с очком из Google Play в одной таблице. Если игра выходит на нескольких сторах и игроки должны соревноваться между всеми — нужен следующий маршрут.

Маршрут 2: игровой бэкенд-сервис

Управляемый игровой бэкенд — сервис, чей продукт и есть те четыре работы: личность, записи, чтение и целостность, с SDK, заточенными под игры. Для веб-билдов это ответ по умолчанию: itch.io раздаёт вашу HTML5-игру как набор статических файлов и серверной части не предлагает вовсе.

СервисЧто этоПро лидербордыИз чего складывается цена
NakamaОткрытый игровой сервер под Apache-2.0; свой хостинг или облакоОператоры на таблицу: set, best, increment, decrement; сбросы по cron; одна запись на владельца; SDK для Unity, Unreal, Godot 3 и 4, JavaScript, Defold и других, плюс чистый RESTСамохостинг бесплатен, эксплуатация на вас
LootLockerОблачный бэкенд для индиЛидерборды плюс аккаунты; вход через Steam, Google, Apple, Epic, Xbox, PlayStation, NintendoТриал 30 дней с потолком 1 000 MAU; бесплатная некоммерческая лицензия; дальше $0,015 за дополнительного MAU
PlayFabИгровая платформа MicrosoftВерсионированные лидерборды: сброс подъёмом версии, события на конец версииПо метрикам использования

Nakama заслуживает отдельного слова для двух аудиторий. Если для вас важна независимость от поставщика — это действительно открытый код: весь сервер под Apache-2.0, а операторы лидербордов (set, best, increment, decrement) и сбросы по cron — возможности первого класса, а не пристройка сбоку. Если важна честность очков — валидация живёт в серверном рантайме: счёт проверяется вашим кодом прежде, чем попасть в таблицу. LootLocker — противоположность по духу: он сделан для тех, кому аккаунты, лидерборды и внутриигровые покупки нужны сегодня, входы через консоли уже подключены, а некоммерческая лицензия делает его фактически бесплатным, пока игра не доросла до продаж.

Маршрут для no-code: движок уже умеет

Если вы собираете игру в GDevelop, ответ уже встроен в редактор. Лидерборды в GDevelop есть из коробки и управляются из дашборда игр: таблица создаётся там же, очки отправляются действием «Save connected player score» — или «Save player score» для анонимов с ником, — а показывается таблица готовым действием. Документация советует подключённых игроков: их аккаунты потом понесут будущие возможности вроде ачивок, и сервис рассчитан расти от маленьких игр вверх. Для no-code-разработчика вопрос закрыт целиком: ни сервера, ни REST-обвязки — одно действие.

У остальных no-code-движков встроенных таблиц нет, и тут честность важнее утешения. У Construct нет собственного лидерборда, но его события пишутся на JavaScript и умеют дергать любой REST API, так что маршрут 2 подходит напрямую. У Godot — фирменные клиенты Nakama под версии 3 и 4 или тот же REST. Везде работа выглядит одинаково: отправить число, забрать список, показать его игроку.

Сколько на самом деле стоит самопис

Лёгкий путь обманчив: одна таблица, один эндпоинт, insert и select, сорок строк на бесплатном тарифе Postgres. А потом выходит игра — и вместе с ней приезжает настоящий продукт:

  • аутентификация: у очков должны быть владельцы, и один игрок не должен занимать весь топ-100;
  • атомарные записи: двое, отправившие счёт в одну и ту же секунду, должны получить разные места;
  • лимиты запросов — до того, как кто-нибудь обнаружит, что незащищённый эндпоинт принимает десять тысяч очков в минуту;
  • модерация: в публичной таблице ники рано или поздно будут содержать слова, которые вы не выбирали;
  • сбросы и сезоны: им нужен дизайн, а не просто DELETE;
  • мониторинг, бэкапы и вопрос, что случится с очками, когда кончится бесплатный тариф или на минуту мигнёт регион базы.

Ничто из этого не сложно по отдельности; всё вместе — это внимание. Разумное правило такое: пишите сервер сами, когда сервер — часть игры, которую вы делаете; во всех остальных случаях берите маршрут 1 или 2. Экономия счёта за MAU, которого у вас ещё нет, — не причина становиться инженером эксплуатации.

Практикум: таблица рекордов за неделю

  1. Решите, где живут игроки. Сторовые сборки — маршрут 1; веб — маршрут 2 или встроенные возможности движка; одна игра на нескольких сторах — маршрут 2.
  2. Создавайте таблицу обдуманно. Название, порядок сортировки, правило загрузки, политика сбросов. В Google Play сброс после публикации перестаёт быть галочкой в консоли; в Nakama оператор (best или increment) после создания не меняется. Некоторые из этих решений — двери, открывающиеся только в одну сторону: перечитайте их дважды.
  3. Подключите ровно два вызова. Отправка — по концу забега; чтение — при открытии меню, топ и место игрока. Не синхронизируйте очки посреди забега: режимов отказа станет вдвое больше, а игрок не увидит ни одного нового.
  4. Погоняйте черновик на «грязном» устройстве. Отправьте счёт с чистой установки, от вернувшегося игрока и один заведомо абсурдный. Третий тест — единственный, который покажет, настоящая ли у вас защита.
  5. Проверьте, сработало ли. Лидерборд — фича удержания: если D1 и D7 не сдвинулись, таблица — украшение меню. Какие числа смотреть, разобрано в руководстве по аналитике для инди, а недельный цикл чтения отчётов — в материале о стратегии после запуска.

Читы: сколько внимания им платить

Каждое очко, ушедшее с устройства игрока, подделываемо: редакторы памяти и подменяющие прокси существуют столько же, сколько сами таблицы рекордов. Платформы об этом знают: tamper protection в Play Games прячет подозрительные результаты автоматически, Trusted в Steam переносит запись целиком на сервер, Nakama проверяет отправку в серверных обработчиках, которые вы контролируете. Дизайнерский вопрос — на какой ступени защиты живёт ваша игра:

  • Первая ступень — друзья и джемы. Очки с клиента, без защиты. На кону ностальгия.
  • Вторая — публичная таблица, которая вам дорога. Защиты платформы включены, запись через сервер там, где стор её даёт, плюс здравый потолок: максимальное очко, которое правила игры в принципе способны породить. Ловит ленивых читеров — а это большинство.
  • Третья — на кону призы. Результат авторитетен только с сервера: очко считается на сервере из входных данных забега, или повтор проверяется до того, как попадёт в рейтинг. Настоящая работа; окупается, только когда есть что терять.

Большинство инди-игр принадлежит второй ступени и остаётся в ней навсегда. Гнаться за третьей без призового фонда — строить охрану для таблицы, в которую заглядывают четыре человека.

Частые ошибки

  • Релиз до решения о сбросах. В Google Play сброс — роскошь черновика; после публикации галочка превращается в проект с Management API.
  • Одна глобальная таблица в игре с прогрессией. Если верхнюю тысячу занимают игроки эндгейма, новичок узнаёт, что проиграл, раньше, чем начал. Таблицы по уровням (дёшево в Steam и Nakama) держат борьбу победимой.
  • Порядок сортировки выбрали поздно. Смена направления пересобирает весь рейтинг вокруг другого смысла слова «лучше»; решайте до первого настоящего счёта — сами записи под новую сортировку не переедут.
  • Доверять клиенту и тревожиться об этом постоянно. Выберите ступень защиты из раздела выше и перестаньте думать о ней. Промежуточное состояние — нервное и беззащитное — хуже обоих крайних.
  • Сбросить молча. Сезон, который начинается с того, что игроки обнаруживают пропавшие очки, — рана на удержании. Сбросы объявляйте заранее; ещё лучше — сделайте их событием, которого ждут.
  • Строить бэкенд раньше, чем у игры появились игроки. Таблица, в которой никто не соревнуется, — самая дешёвая инфраструктура, о которой вы будете жалеть. Сначала игра: на этом этапе количество игроков двигают руководство по первой мобильной игре и плейбук сообщества до релиза.
  • Забыть про сохранения по соседству. Таблица рекордов без системы сохранений, которым игроки верят, зовёт соревноваться в игре, которая сама забывает игрока. В ожиданиях игроков обе фичи приезжают вместе.

Где здесь Egmatic

О стадии скажем прямо: Egmatic — no-code 2D-редактор и движок, построенный на ИИ, сейчас в pre-alpha. Статья про лидерборды вообще появилась на нашем блоге не случайно: в читках сообщества, которые мы проводим, лидерборды и сохранение прогресса для веб-демо — один из самых повторяющихся запросов, и звучит он обычно как смирение с неизбежной серверной работой. Этот спрос стоит в нашем роадмапе внутри слоя публикации — стороны редактора, отвечающей за выпуск игры, — потому что сервисы, живущие рядом с публикацией, — ровно то, что no-code-разработчик не должен собирать руками. Дату мы здесь не анонсируем: честность pre-alpha означает, что даты появляются, когда мы можем их сдержать.

Рамка, к которой мы строим, — та же, что и во всей статье: вы направляете игру, инструментарий исполняет обвязку, результат принадлежит вам. Если вы ждёте 2D-редактор, чей слой публикации включает лидерборды и облачные сохранения, — смотрите, как он обретает форму, в листе ожидания на egmatic.com.

Источники

  1. Документация Steamworks — Leaderboards: создание в App Admin или через FindOrCreateLeaderboard, типы сортировки и отображения, keep-best и force-update, флаг Trusted и Web API SetLeaderboardScore, крепление пользовательского контента к записям
  2. Android Developers — Play Games Services leaderboards: настройка в Play Console, сброс только для черновиков, методы Management API, поведение tamper protection (обновление июнь 2026)
  3. Apple Developer — GKLeaderboard: «A leaderboard for a game that Game Center stores»
  4. Heroic Labs — Nakama leaderboards: операторы set, best, increment, decrement, сбросы по cron, одна запись на владельца, список клиентских SDK; GitHub — heroiclabs/nakama, лицензия Apache-2.0
  5. LootLocker — Pricing: триал 30 дней с потолком 1 000 MAU, бесплатная некоммерческая лицензия, $0,015 за дополнительного MAU; документация — SDK для Unity, Unreal и Godot, входы через платформы
  6. GDevelop Wiki — Leaderboards: создание и управление из дашборда игр, очки подключённых и анонимных игроков
  7. Microsoft Learn — PlayFab leaderboards API: версионированные определения лидербордов и операции подъёма версии

Похожие статьи