(Roblox) Почему мое хранилище данных не сохраняет данные? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытался создать собственный сценарий инвентаризации, при создании серверных сценариев я столкнулся со странной проблемой. Вот что происходит, когда игрок присоединяется: запускается функция 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...