Если в игре есть система уровней, важно сохранить прогресс игрока. Иначе после выхода из игры его уровень снова станет начальным.
Например:
Игрок достиг 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
