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

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

2026-08-21 20:40 Документация
Сохранение данных — одна из самых важных механик для полноценной игры. Благодаря DataStore игрок не теряет свой прогресс после выхода из игры.
Например, можно сохранять:
  • 🪙 количество монет;
  • ⭐ уровень;
  • ⚡ XP;
  • 🏆 достижения;
  • 📋 прогресс миссий;
  • 🔓 открытые зоны;
  • 🎒 купленные предметы.
Разберём простой и понятный пример сохранения монет, уровня и XP.

🧱 1. Создаём значения игрока

Сначала создадим данные, которые будем сохранять.
В ServerScriptService создай обычный Script:
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = 1
level.Parent = leaderstats
local xp = Instance.new("IntValue")
xp.Name = "XP"
xp.Value = 0
xp.Parent = player
end)
Теперь у игрока будут:
Player
├── leaderstats
│ ├── Coins
│ └── Level
└── XP

💾 2. Подключаем DataStoreService

В начале скрипта добавь:
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
PlayerData — название хранилища.
Его можно назвать, например:
GetDataStore("PlayerData")
или:
GetDataStore("GameData")

📥 3. Загружаем данные игрока

Когда игрок входит в игру, нужно проверить, есть ли для него сохранённые данные.
game.Players.PlayerAdded:Connect(function(player)
local success, data = pcall(function()
return playerDataStore:GetAsync(player.UserId)
end)
if success and data then
print("Данные игрока загружены")
else
print("Сохранённых данных нет")
end
end)
Здесь используется GetAsync().
Он получает данные из DataStore.

🪙 4. Загружаем монеты

Теперь перенесём сохранённые значения в leaderstats.
if success and data then
coins.Value = data.Coins or 0
level.Value = data.Level or 1
xp.Value = data.XP or 0
end
Конструкция:
data.Coins or 0
означает: если сохранённого значения нет, использовать 0.

💾 5. Сохраняем данные при выходе

Теперь самое главное — сохранить информацию, когда игрок покидает игру.
Используем:
game.Players.PlayerRemoving:Connect(function(player)
end)
Внутри получаем значения:
local data = {
Coins = player.leaderstats.Coins.Value,
Level = player.leaderstats.Level.Value,
XP = player.XP.Value
}
Получается таблица:
Coins → 2500
Level → 15
XP → 750

🔐 6. Записываем данные в DataStore

Для сохранения используем SetAsync():
local success, err = pcall(function()
playerDataStore:SetAsync(player.UserId, data)
end)
if success then
print("Данные сохранены")
else
warn("Ошибка сохранения:", err)
end
SetAsync() записывает данные игрока в хранилище.

🛡️ 7. Почему нужен pcall?

Работа с DataStore может завершиться ошибкой. Например, из-за временной проблемы соединения.
Поэтому запросы обычно помещают в:
pcall(function()
-- код DataStore
end)
Пример:
local success, err = pcall(function()
playerDataStore:SetAsync(player.UserId, data)
end)
if not success then
warn(err)
end
Так можно обработать ошибку, не ломая остальную игровую логику.

🔄 8. Готовый простой пример

Для начинающего разработчика можно собрать всё в один скрипт:
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = 1
level.Parent = leaderstats
local xp = Instance.new("IntValue")
xp.Name = "XP"
xp.Value = 0
xp.Parent = player
local success, data = pcall(function()
return playerDataStore:GetAsync(player.UserId)
end)
if success and data then
coins.Value = data.Coins or 0
level.Value = data.Level or 1
xp.Value = data.XP or 0
end
end)
Players.PlayerRemoving:Connect(function(player)
local data = {
Coins = player.leaderstats.Coins.Value,
Level = player.leaderstats.Level.Value,
XP = player.XP.Value
}
local success, err = pcall(function()
playerDataStore:SetAsync(player.UserId, data)
end)
if success then
print("Данные сохранены для " .. player.Name)
else
warn("Ошибка сохранения:", err)
end
end)
Теперь система умеет:
Вход игрока → загрузка → игра → изменение данных → выход → сохранение.

🧪 9. Как проверить сохранение

После написания скрипта запусти игру и измени значения.
Например:
Coins = 500
Level = 5
XP = 250
Затем выйди из игры и запусти её снова.
Если всё настроено правильно, значения должны загрузиться.

⚠️ 10. Важный момент при тестировании

При разработке в Roblox Studio доступ к API-сервисам для тестирования сохранений нужно разрешить в настройках опубликованного опыта.
Также DataStore предназначен для серверных скриптов, поэтому не стоит пытаться сохранять данные непосредственно из LocalScript.

🔄 11. Почему одного PlayerRemoving недостаточно

Для более надёжной игры не стоит рассчитывать только на:

PlayerRemoving

Например, сервер может неожиданно завершить работу.
Поэтому в полноценной системе используют периодическое автосохранение:
Игра
Изменение данных
Автосохранение
Изменение данных
Автосохранение
Игрок выходит
Финальное сохранение

Это значительно надёжнее для большого проекта.

🧠 12. Что ещё можно сохранять?

После освоения базовой системы можно расширить таблицу:
local data = {
Coins = 2500,
Level = 15,
XP = 750,
Wins = 12,
CompletedMissions = 8,
Pets = {
"Dog",
"Cat"
}
}
Таким способом можно хранить гораздо больше информации о прогрессе игрока.

🏁 Итог

Чтобы сохранить данные игрока в Роблокс Студио, используются четыре основных элемента:
DataStoreService → GetAsync() → SetAsync() → pcall()
Принцип работы простой:
Игрок входит → данные загружаются → игрок играет → прогресс изменяется → данные сохраняются.
Начните с сохранения Coins, Level и XP, а затем постепенно добавляйте достижения, миссии, предметы и другие элементы прогресса.

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

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

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