Сохранение данных в Roblox Studio | Сохраняем инвентарь, очки и деньги в игре
TIP! Right-click and select "Save link as..." to download.
Разберём, как работает сохранение игровых данных в Roblox Studio и зачем нужны API сервисы. Также напишем скрипты для сохранения предметов в инвентаре игрока и данных из таблицы лидеров в игре – «leaderstats».
Содержание:
00:00 - Почему долго не было видео и о чём это видео?
00:46 - Как работает сохранение данных в Roblox Studio?
03:39 - Включение API сервисов
05:21 - Сохранение данных из «leaderstats»
18:59 - Сохранение инвентаря
СКРИПТ ДЛЯ СОХРАНЕНИЯ ИНВЕНТАРЯ
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves ")
-- Функция для сохранения инвентаря в отдельную таблицу:
function PlayerInventory(player)
local playerInventory = {}
for _, tool in pairs(player.Backpack:GetChildren()) do
if tool then
table.insert(playerInventory, tool.Name) --запись в таблицу названий предметов из инвентаря
end
end
return playerInventory
end
-- Функция для загрузки инвентаря:
function LoadPlayerInventory(player, data)
for _, tool in pairs(data) do
local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool)
local toolInBackpack = player.Backpack:FindFirstChild(tool)
local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
--Если в ServerStorage есть предмет из сохранения и его еще нет у игрока:
if toolInStorage and toolInBackpack == nil and toolInStarterGear == nil then
toolInStorage:Clone().Parent = player.Backpack --копируем предмет в рюкзак игрока
toolInStorage:Clone().Parent = player.StarterGear --копируем предмет в стартовый набор игрока
end
end
end
-- Когда игрок выходит из игры:
function PlayerRemoving(player)
--Когда персонаж выходит из игры:
player.CharacterRemoving:Connect(function(character)
character:WaitForChild("Humanoid"):UnequipTools() --убираем экипированные предметы
--Сохранение данных в хранилище:
local playerInventory = PlayerInventory(player) --создание таблицы с предметами из инвентаря
local setSuccess, errorMessage = pcall(function()
DataStore:SetAsync(player.UserId, playerInventory)
end)
--Проверка сохранения данных игрока:
if setSuccess then
print("Данные сохранены в хранилище", DataStore.Name)
else
warn(errorMessage)
end
end)
end
--Сохранение данных при выходе из игры:
game.Players.PlayerRemoving:Connect(PlayerRemoving)
-- Когда игрок заходит в игру:
function PlayerAdded(player)
--Получение данных из хранилища:
local getSuccess, savedData = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
--Проверка доступа к хранилищу:
if getSuccess then
print("Подключено хранилище", DataStore.Name)
else
warn("Не удалось подключиться к хранилищу", DataStore.Name)
end
--Проверка сохраненных данных игрока:
if savedData then
LoadPlayerInventory(player, savedData) --вызов функции для загрузки инвентаря
print("Данные загружены из хранилища", DataStore.Name)
else
warn("Нет сохраненных данных в", DataStore.Name)
end
end
--Загрузка данных при заходе в игру:
game.Players.PlayerAdded:Connect(PlayerAdded)
-- Резервное сохранение данных:
game:BindToClose(function(player)
task.wait(1)
PlayerRemoving(player) --вызов функции для сохранения данных
end)