Dzen.ru Video Downloader

The easiest way to download Dzen.ru video, music, thumbnail without watermark or logo

Roblox Мастерская

676 10 месяцев назад

Сохранение данных в Roblox Studio | Сохраняем инвентарь, очки и деньги в игре

TIP! Right-click and select "Save link as..." to download.

Loading...
Разберём, как работает сохранение игровых данных в 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)