Загрузка данных — это вторая важная часть системы сохранения. Если мы ранее сохранили Coins, Level, XP или другие данные через DataStoreService, то при следующем входе игрока нужно получить их и вернуть в игру.
Например:
Игрок вышел с 2500 Coins и 15 Level → снова вошёл → игра загрузила эти значения из DataStore.
🎮 Как работает загрузка
Схема очень простая:
Игрок входит → PlayerAdded → GetAsync() → получаем данные → устанавливаем значения игрока.
🧱 1. Создаём значения игрока
В ServerScriptService создай Script:
local Players = game:GetService("Players")
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. Подключаем DataStore
В начале скрипта добавь:
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")Название "PlayerData" должно соответствовать тому хранилищу, в которое были записаны данные.
📥 3. Получаем данные через GetAsync()
Теперь используем GetAsync():
local success, data = pcall(function()
return playerDataStore:GetAsync(player.UserId)
end)player.UserId используется как уникальный ключ игрока.
Если данные найдены, переменная data будет содержать сохранённую информацию.
Например:
data.Coins
data.Level
data.XP🔄 4. Устанавливаем загруженные значения
После получения данных нужно перенести их в значения игрока:
if success and data then
coins.Value = data.Coins or 0
level.Value = data.Level or 1
xp.Value = data.XP or 0
endНапример, DataStore содержит:
Coins = 2500
Level = 15
XP = 750После загрузки игрок получит:
🪙 Coins: 2500
⭐ Level: 15
⚡ XP: 750
🛡️ 5. Обрабатываем ошибки
При работе с DataStore возможны ошибки, поэтому запрос нужно выполнять через pcall().
local success, data = pcall(function()
return playerDataStore:GetAsync(player.UserId)
end)
if success then
if data then
print("Данные успешно загружены")
else
print("У игрока пока нет сохранённых данных")
end
else
warn("Ошибка загрузки данных:", data)
endЭто позволяет понять, успешно ли прошла загрузка.
🧩 6. Полный пример загрузки
Вот готовый простой вариант:
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
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
print("Данные загружены для " .. player.Name)
elseif not success then
warn("Не удалось загрузить данные игрока:", data)
else
print("Новых сохранённых данных нет")
end
end)💡 7. Зачем нужны значения по умолчанию?
Обрати внимание на:
coins.Value = data.Coins or 0
level.Value = data.Level or 1
xp.Value = data.XP or 0Если игрок новый и сохранённых данных ещё нет, игра использует стандартные значения:
Coins → 0
Level → 1
XP → 0
Так новый игрок сможет нормально начать игру.
🔗 8. Загрузка и сохранение должны использовать одно хранилище
Например, если сохраняем:
local playerDataStore = DataStoreService:GetDataStore("PlayerData")то загружать нужно из этого же хранилища:
local playerDataStore = DataStoreService:GetDataStore("PlayerData")Если случайно написать другое название:
GetDataStore("OtherData")игра будет обращаться уже к другому хранилищу.
📊 9. Можно загружать больше данных
Например, сохранить и загрузить:
local data = {
Coins = 2500,
Level = 15,
XP = 750,
Wins = 12
}При загрузке:
coins.Value = data.Coins or 0
level.Value = data.Level or 1
xp.Value = data.XP or 0
wins.Value = data.Wins or 0Таким образом одна система может восстанавливать практически весь прогресс игрока.
⚠️ 10. Не создавайте новые значения после загрузки
Важно сначала создать Coins, Level, XP, а затем загрузить в них данные.
Правильный порядок:
Игрок вошёл
↓
Создали значения
↓
GetAsync()
↓
Получили данные
↓
Установили значения
↓
Игрок начинает игру
Если сделать наоборот, можно столкнуться с ошибками или неправильными значениями.
🧪 11. Как проверить загрузку
Для тестирования:
- Запусти опубликованный опыт.
- Получи, например, 500 Coins.
- Повышай уровень.
- Выйди из игры.
- Снова зайди.
После загрузки должно быть примерно:
🪙 Coins: 500
⭐ Level: 5
⚡ XP: 300
Если значения вернулись — загрузка работает.
🏁 Итог
Чтобы загрузить данные игрока в Роблокс Студио, используются:
DataStoreService → GetAsync() → player.UserId → установка значений.
Главная идея:
игрок вошёл → получили сохранение → проверили данные → восстановили Coins, Level, XP и другие значения.
В полноценной игре загрузку лучше объединять с надёжной системой сохранения и автосохранением, чтобы прогресс игрока не терялся.
🔗 Полезные ссылки:
🚀 Хочешь научиться делать свои игры?
Переходи на roblo.ru и запишись на обучение Роблокс Студио!
И не забудь заглянуть в наш Telegram 👉 t.me/robloppo
