Я пытался создать собственный сценарий инвентаризации, при создании серверных сценариев я столкнулся со странной проблемой. Вот что происходит, когда игрок присоединяется: запускается функция playeradded в серверном скрипте, которая затем запрашивает хранилище данных инвентаря игрока из скрипта модуля. Если загрузчик хранилища данных обнаруживает ошибку, он пинает игрока, чтобы предотвратить переопределение данных. В противном случае, если хранилище данных не существует, создается новый список с 32 нулями. Теперь, когда у него есть список предметов инвентаря игрока, серверный скрипт говорит скрипту модуля сохранить данные инвентаря в списке внутри скрипта модуля. Когда игрок уходит, серверный скрипт запрашивает данные инвентаризации и говорит модульному скрипту сохранить их в хранилище данных. Все здесь, кажется, работает нормально, кроме фактического сохранения хранилища данных. Я поместил зацикленную функцию печати в функцию module.SetDataStore (), и она содержит правильные данные. Но когда я загружаю новую игру, хранилище данных все еще пусто. Что я здесь не так делаю? (У меня студийный доступ к хранилищу данных включен) Вот мой код:
Обычный скрипт
local module = require(script.Parent.ServerModule)
local DataStoreService = game:GetService("DataStoreService")
game.Players.PlayerAdded:Connect(function(plr)
local plrdata = module.GetDataStore(plr.UserId.."-inventory")
if plrdata then
if plrdata == {} then
plr:Kick("Failed to load data; please rejoin the game")
end
else
plrdata = {}
for i=1, 32 do
print("Creating new data")
plrdata[i] = 1
end
end
module.SetPlayerData(plr.Name,plrdata)
for i=1,32 do
print(plrdata[i])
end
end)
game.Players.PlayerRemoving:Connect(function(plr)
local plrdata = module.GetPlayerData(plr.Name)
module.SetDataStore(plr.UserId.."-inventory",plrdata)
end)
Скрипт модуля
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("MainDataStore")
local plrdata = {}
local module = {}
function module.GetDataStore(datastoreid)
local value
local success, err = pcall(function()
value = DataStore:GetAsync(datastoreid)
end)
if success then
return value
else
warn(err)
return {}
end
end
function module.SetDataStore(datastoreid, value)
for i=1, 32 do
print(value[i])
end
local success, err = pcall(function()
DataStore:SetAsync(datastoreid,value)
end)
if success then
return true
else
warn(err)
end
end
function module.UpdateDataStore(datastoreid, value)
local success, err = pcall(function()
DataStore:UpdateAsync(datastoreid,value)
end)
if success then
return true
else
warn(err)
end
end
function module.RemoveDataStore(datastoreid)
pcall(function()
DataStore:RemoveAsync(datastoreid)
end)
end
function module.SetPlayerData(id,newvalue)
plrdata[id] = newvalue
end
function module.GetPlayerData(id)
local data = plrdata[id]
return data
end
return module