← Все вопросы
Как сохранять данные игрока в Roblox, чтобы очки не сбрасывались (DataStore)?
8
Сделал очки через leaderstats, но при выходе и заходе обратно они обнуляются. Как сделать, чтобы прогресс сохранялся между сессиями? Слышал про DataStore, но это сложно?
2 ответа
11
✓ Принятый ответ — помог автору
Да, для постоянного сохранения нужен DataStore — это "облачная база" Roblox, привязанная к твоей игре. Базовая схема: при выходе сохраняем, при входе загружаем.
local DataStoreService = game:GetService("DataStoreService")
local store = DataStoreService:GetDataStore("PlayerData")
game.Players.PlayerAdded:Connect(function(player)
local stats = Instance.new("Folder")
stats.Name = "leaderstats"
stats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Очки"
points.Parent = stats
-- загрузка
local saved = store:GetAsync(player.UserId)
points.Value = saved or 0
end)
game.Players.PlayerRemoving:Connect(function(player)
store:SetAsync(player.UserId, player.leaderstats["Очки"].Value)
end)
Важные моменты для новичка:
- Ключ —
player.UserId(число, уникально и не меняется, в отличие от ника). - Нужно включить доступ:
Game Settings → Security → Enable Studio Access to API Services, иначе DataStore не работает в Studio. GetAsync/SetAsyncходят в сеть — оборачивай их вpcall, чтобы при сбое сети игра не падала.
4
Не сложно по структуре, но легко потерять данные, если делать наивно. Минимум — pcall:
local ok, err = pcall(function()
store:SetAsync(player.UserId, value)
end)
if not ok then warn("не сохранилось:", err) end
И помни: DataStore работает только в опубликованной/настоящей игре, в локальной "поиграть в файле" без публикации он не подключится.
Ваш ответ
Войдите, чтобы ответить на вопрос.