Блог школы Роблоппа — Роблокс Студио, обучение, познавательные статьи и новости школы

Как сохранить уровень игрока в Роблокс Студио

2026-08-28 11:05 Документация
Если в игре есть система уровней, важно сохранить прогресс игрока. Иначе после выхода из игры его уровень снова станет начальным.
Например:
Игрок достиг 15 уровня → вышел → снова вошёл → уровень остался 15.
Для этого в Роблокс Студио используется DataStoreService.

🎮 Шаг 1. Создаём Level

Открой ServerScriptService → Script и добавь:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = 1
level.Parent = leaderstats
end)
Теперь у игрока появится:
Player
└── leaderstats
└── Level

💾 Шаг 2. Подключаем DataStore

В начало скрипта добавь:
local DataStoreService = game:GetService("DataStoreService")
local levelStore = DataStoreService:GetDataStore("PlayerLevels")
Здесь PlayerLevels — название хранилища.

📥 Шаг 3. Загружаем уровень

Когда игрок входит, получаем сохранённый уровень:
local success, savedLevel = pcall(function()
return levelStore:GetAsync(player.UserId)
end)
if success and savedLevel then
level.Value = savedLevel
end
Если сохранения ещё нет, останется:
Level = 1

💾 Шаг 4. Сохраняем уровень

Когда игрок выходит из игры:
Players.PlayerRemoving:Connect(function(player)
local level = player.leaderstats.Level.Value
local success, err = pcall(function()
levelStore:SetAsync(player.UserId, level)
end)
if success then
print("Уровень сохранён")
else
warn("Ошибка сохранения:", err)
end
end)
SetAsync() записывает текущий уровень игрока в DataStore.

🧩 Полный скрипт

Для начала можно использовать такой вариант:
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local levelStore = DataStoreService:GetDataStore("PlayerLevels")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = 1
level.Parent = leaderstats
local success, savedLevel = pcall(function()
return levelStore:GetAsync(player.UserId)
end)
if success and savedLevel then
level.Value = savedLevel
end
end)
Players.PlayerRemoving:Connect(function(player)
local level = player.leaderstats.Level.Value
local success, err = pcall(function()
levelStore:SetAsync(player.UserId, level)
end)
if success then
print("Уровень сохранён для " .. player.Name)
else
warn("Ошибка сохранения:", err)
end
end)

⭐ Как повысить уровень

Например, за прохождение задания:
player.leaderstats.Level.Value += 1
Если было:
Level = 4

станет:
Level = 5

И при выходе игрока новый уровень сохранится.

⚠️ Важный момент

DataStore должен использоваться в серверном Script, например в ServerScriptService, а не в LocalScript.
При тестировании сохранений в Роблокс Студио также нужно разрешить Studio доступ к API-сервисам для опубликованного опыта.
Для реальной игры желательно добавить автосохранение, а не полагаться только на сохранение при выходе игрока.

🏁 Итог

Чтобы сохранить уровень игрока:
Level → DataStore → GetAsync() → игра → изменение уровня → SetAsync()
Например:
Уровень 15 → игрок вышел → данные сохранились → игрок вернулся → уровень 15.
Эту систему можно расширить и сохранять вместе с уровнем XP, Coins, достижения, миссии и открытые зоны.

🔗 Полезные ссылки:

🚀 Хочешь научиться делать свои игры?

Переходи на roblo.ru и запишись на обучение Роблокс Студио!
И не забудь заглянуть в наш Telegram 👉 t.me/robloppo