{}const=>[]async()letfn</>var
LuaПрактика

leaderstats в Roblox: таблица лидеров с монетами и победами

Создаём встроенную таблицу лидеров Roblox через папку leaderstats, IntValue и серверный Script, настраиваем порядок столбцов и связь с сохранением.

К

Кодик

Автор

6 мин чтения

Чтобы создать таблицу лидеров Roblox, добавьте серверный Script в ServerScriptService, при входе игрока создайте Folder с точным именем leaderstats и поместите внутрь IntValue. Roblox автоматически покажет эти значения в стандартном списке игроков.

leaderstats не является глобальным рейтингом между серверами. Это специальная папка внутри текущего Player, которую стандартный интерфейс Roblox читает и показывает рядом с именем. Значения удобно использовать для монет, побед, очков или времени. Если нужно сохранить их между сессиями, отдельно подключается DataStore. Если нужен мировой топ, используется OrderedDataStore и собственный интерфейс. Поэтому сначала решите, кому и как долго должен быть виден показатель, а уже потом выбирайте способ хранения.

1Имя папки

Только leaderstats строчными буквами.

2Тип значения

IntValue для целых чисел, StringValue для текста.

3Место кода

ServerScriptService, чтобы сервер создавал и менял статистику.

Путь от PlayerAdded до строки Wins и Coins в списке игроков
Порядок сборки строки игрока: серверный Script ловит PlayerAdded, создаёт Folder с именем leaderstats, кладёт внутрь IntValue Wins и Coins и только последним действием ставит Parent игроку.

leaderstats Roblox: таблица лидеров из двух показателей

Код создаёт столбцы Coins и Wins. Значение Priority помогает поставить Wins перед Coins. Roblox также поддерживает BoolValue с именем IsPrimary, но для нескольких столбцов числовой приоритет понятнее. Все объекты создаются до присвоения Parent игроку, чтобы дерево появилось в готовом виде.

local Players = game:GetService("Players")

local function createStat(name, value, priority, parent)
    local stat = Instance.new("IntValue")
    stat.Name = name
    stat.Value = value

    local order = Instance.new("NumberValue")
    order.Name = "Priority"
    order.Value = priority
    order.Parent = stat

    stat.Parent = parent
    return stat
end

Players.PlayerAdded:Connect(function(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"

    createStat("Wins", 0, 20, leaderstats)
    createStat("Coins", 100, 10, leaderstats)

    leaderstats.Parent = player
end)
Ожидаемый результат
  • В списке игроков появляются Wins и Coins
  • Wins располагается раньше благодаря Priority 20

Функция возвращает созданный IntValue, поэтому ссылку можно сохранить и менять при событии. Не ищите значение через весь Workspace. Получите игрока, затем player.leaderstats.Coins или безопасный FindFirstChild(). Для бизнес-логики полезно держать полный профиль отдельно, а leaderstats использовать как отображение выбранных чисел.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Что хранить в leaderstats

ЭлементЧто означаетЧто делать
CoinsIntValueТекущий баланс для показа
WinsIntValueКоличество побед
BestTimeNumberValueЛучшее время с дробной частью
RankStringValueТекстовый ранг
InventoryНе хранить здесьСложные данные держать в профиле

Показывайте только показатели, которые помогают игроку понять соревнование или прогресс. Десять столбцов превращают список в шум и плохо помещаются на мобильном экране. Для подробной статистики лучше ScreenGui. Помните, что клиент может визуально изменить локальные объекты, поэтому начисление наград и проверка побед должны оставаться на сервере.

leaderstats, DataStore и OrderedDataStore: что и как долго хранится
Три способа хранения одного числа: leaderstats показывает его в текущей сессии, DataStore возвращает при следующем входе, OrderedDataStore нужен для общего топа со своим ScreenGui.

Практика: соберите leaderstats с Coins и Wins и начислите победу

Соберите таблицу лидеров с нуля в пустом месте Studio, а не в текущем проекте. Успехом считайте два столбца рядом с ником: Wins стоит первым благодаря Priority 20, Coins стартует со 100. В конце значение Coins должно меняться серверной командой, а не кликом клиента.

  1. Script в ServerScriptService. Создайте пустое место и добавьте серверный Script с именем LeaderstatsSetup в ServerScriptService. В Explorer он должен лежать именно там: из Workspace или StarterPlayer статистика не появится.
  2. Folder leaderstats на PlayerAdded. Подпишитесь на Players.PlayerAdded и внутри создайте Folder с именем leaderstats строчными буквами. Нажмите Play: в Explorer внутри своего объекта в Players появится эта папка.
  3. IntValue Wins и Coins. Через функцию createStat добавьте IntValue Wins со значением 0 и IntValue Coins со значением 100, каждому вложите NumberValue Priority со значениями 20 и 10. После запуска в списке игроков справа сверху видно два столбца, Wins левее Coins.
  4. Начисление серверной командой. Откройте Command Bar, переключите контекст на Server и выполните game.Players.ВашНик.leaderstats.Coins.Value += 50. Число в списке игроков обновится сразу, без перезапуска сессии.
  5. Проверка на двух игроках. Запустите Test в режиме двух клиентов и начислите Wins только одному из них. У второго значение остаётся нулевым: это подтверждает, что папка leaderstats создаётся отдельно для каждого Player.

Переименуйте папку в LeaderStats с заглавной буквы и запустите снова. Столбцы Wins и Coins исчезнут из списка игроков, при этом в Output не будет ни одной ошибки: встроенный интерфейс просто не найдёт папку с точным именем leaderstats. Верните строчное имя и убедитесь, что оба столбца вернулись на место.

Критерий готовности. Готово, когда вы показываете в Explorer цепочку Players, ник игрока, leaderstats, Coins и объясняете, почему Wins стоит первым. Подтверждение: Coins меняется после команды с сервера и остаётся равным 100 у второго игрока. Обнуление после перезахода тоже ожидаемо, пока не подключён DataStore.

Дальше свяжите Coins с DataStore и сохраняйте только число из свойства Value, а не сам объект IntValue. Затем добавьте кнопку покупки через RemoteEvent, чтобы цену и списание считал сервер, а клиент только отправлял запрос. Для мирового топа понадобится OrderedDataStore и собственный ScreenGui: leaderstats показывает результаты только текущего сервера.

Частые ошибки и почему они появляются

Если столбцы не появились, почти всегда неверно написано имя папки или код выполняется не на сервере. Если значения сбрасываются при новом входе, это нормальное поведение без DataStore. Если монеты можно накрутить кнопкой, значит сервер доверяет числу от клиента вместо самостоятельной проверки события и цены.

LeaderStats с заглавной буквы

Системное имя чувствительно к регистру. Используйте ровно leaderstats.

Создание в LocalScript

Локальная папка не является надёжным источником общего результата. Создавайте показатели на сервере.

Сохранять Instance в DataStore

DataStore хранит сериализуемые данные, а не объекты. Сохраняйте числа и строки из Value.

Самопроверка

Почему столбцы leaderstats не появляются в списке игроков?

Столбцы leaderstats не появляются в двух случаях: имя папки написано неточно или код выполняется не на сервере. Имя чувствительно к регистру, подходит только leaderstats строчными буквами, а создавать Folder должен серверный Script из ServerScriptService.

Сохраняются ли значения leaderstats между сессиями?

Значения leaderstats не сохраняются: папка живёт внутри объекта Player и исчезает вместе с ним при выходе. Чтобы монеты вернулись при следующем входе, подключите DataStore и сохраняйте числа из свойства Value.

Как поставить Wins перед Coins в таблице лидеров?

Порядок столбцов задаёт вложенный в IntValue объект NumberValue с именем Priority: у Wins поставьте 20, у Coins 10. Больший приоритет ставит столбец раньше. Roblox понимает и BoolValue с именем IsPrimary, но с несколькими столбцами числовой приоритет читается понятнее.

Какой тип значения выбрать для leaderstats?

В leaderstats кладут IntValue для целых чисел вроде монет и побед, NumberValue для дробного лучшего времени и StringValue для текстового ранга. Инвентарь и сложные структуры в эту папку не помещают, их держат в отдельном профиле игрока.

Можно ли начислять монеты из LocalScript?

Начислять монеты из LocalScript нельзя: клиент меняет только свою копию объекта, и сервер этих чисел не увидит. Проверку условия и само начисление держите в серверном Script, иначе баланс легко накрутить кнопкой.

Чем leaderstats отличается от глобального рейтинга?

leaderstats показывает значения только игрокам текущего сервера и живёт одну сессию. Мировой топ собирают на OrderedDataStore с собственным интерфейсом, потому что стандартный список игроков не читает данные с других серверов.

Что делать дальше

Соберите два столбца, измените их из серверной команды и проверьте двух игроков. Затем свяжите Coins с DataStore, а кнопку покупки с RemoteEvent. Таблицы, функции и события можно потренировать на курсе Lua. Такой порядок отделяет отображение, сохранение и правило начисления, поэтому каждую часть легче тестировать.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты