Скрипт Roblox Studio. Сохранение инвентаря игрока
Я создаю игру в Roblox Studio, и столкнулся с тем что не могу написать рабочий скрипт для сохранения инвентаря игрока.
Мне нужен скрипт который будет сохранять инвентарь игрока в DataStore, после входа игрока на сервер выдавать предметы, но если игрок погибает то сохранённый инвентарь пропадает (т.е. предметы не выдаются и исчезают из данных)
Весь список предметов который будет сохраняет скрипт уже лежит в Game.ServerStorage.Tools
За помощь буду благодарен
За написания готового скрипта буду благодарен!
Помощь еще нужна? Прошло пару месяцев, кину скрипт. Вопросы будут - в ответ пиши.
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local ToolsDataStore = DataStoreService:GetDataStore("PlayerTools")
-- Штучка для загрузки инвентаря игрока
local function loadInventory(player)
local success, tools = pcall(function()
return ToolsDataStore:GetAsync(player.UserId)
end)
if success and tools then
for _, toolName in ipairs(tools) do
local tool = ServerStorage.Tools :FindFirstChild(toolName)
if tool then
local clonedTool = tool:Clone()
clonedTool.Parent = player.Backpack
end
end
end
end
-- Еще штучка для сохранения инвентаря игрока
local function saveInventory(player)
local tools = {}
for _, tool in ipairs(player.Backpack:GetChildren()) do
if tool:IsA("Tool") then
table.insert(tools, tool.Name )
end
end
local success, errorMessage = pcall(function()
ToolsDataStore:SetAsync(player.UserId, tools)
end)
-- Тут для output, если ошибки будут
if not success then
warn("Ошибка при сохранении инвентаря: " .. errorMessage)
end
end
-- Обработчик события присоединения игрока
Players.PlayerAdded:Connect(function(player)
loadInventory(player)
player.CharacterAdded:Connect(function(character)
character:WaitForChild("Humanoid").Died:Connect(function()
saveInventory(player) -- Сохраняем инвентарь при смерти
ToolsDataStore:RemoveAsync(player.UserId) -- Удаляем сохраненные данные
end)
end)
end)
-- Обработчик события выхода игрока
Players.PlayerRemoving:Connect(function(player)
saveInventory(player) -- Сохраняется инвентарь при выходе, готово ;3
end)
Вот как может выглядеть скрипт для сохранения инвентаря игрока в DataStore после входа на сервер и удаления предметов при гибели игрока:
Создание хранилища данных:
- Создайте хранилище данных (DataStore) в Roblox Studio.
- Дайте хранилищу уникальное имя, например, «PlayerInventory».
Получение идентификатора игрока:
- Получите уникальный идентификатор (PlayerId) текущего игрока.
- Это можно сделать с помощью события PlayerAdded или PlayerConnect.
Сохранение инвентаря в DataStore:
- Сохраните инвентарь игрока в хранилище данных.
- Для этого можно использовать метод SetAsync, который сохраняет данные асинхронно.
- В качестве ключа используйте идентификатор игрока.
- Сохраните список предметов, которые есть у игрока, например, в виде таблицы или массива.
Выдача предметов при входе на сервер:
- При входе игрока на сервер проверьте, есть ли его инвентарь в хранилище данных.
- Если есть, получите список предметов из DataStore.
- Создайте новые экземпляры предметов из Game.ServerStorage.Tools на основе полученного списка.
- Добавьте новые предметы в инвентарь игрока.
Удаление предметов при гибели игрока:
- Если игрок погибает, удалите его инвентарь из хранилища данных.
- Для этого можно использовать метод Remove или Destroy.
- Проверьте, что после удаления инвентаря из DataStore, предметы из инвентаря игрока также удалены.
Вот пример скрипта на Lua, который может реализовать описанный функционал:
Обратите внимание, что это всего лишь пример скрипта, и вам может потребоваться адаптировать его под свои нужды. Например, вы можете изменить способ сохранения и получения списка предметов, добавить проверку наличия предметов в инвентаре перед их созданием и т.д. Также учтите, что скрипт может потребовать некоторых настроек и доработок, чтобы работать корректно в вашей игре.