Моя система хранения данных не работает, думал, я получу успешно сохраненное сообщение. Roblox

#lua #roblox

#lua #roblox

Вопрос:

Поэтому я создал систему хранения данных, которая экономит серебро. Я использовал pcalls, и всякий раз, когда игрок уходит, я либо не получаю сообщения, либо просто успешно сохранен, странно, что я никогда не получаю никаких ошибок.

Однако это не работает. Я пытался сделать это в самом Roblox, а не только в Studio. Не работает. Это серверный скрипт в ServerScriptService.

Пожалуйста, помогите: D

 local dataStore = game:GetService("DataStoreService"):GetDataStore("myDataStore")


game.Players.PlayerAdded:Connect(function(plr)
    
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = plr
    
    local silver = Instance.new("IntValue")
    silver.Name = "Silver"
    silver.Parent = leaderstats
    
    local playerUserId = "Player_"..plr.UserId
    
    local data
    local success, errormessage = pcall(function()
        data = dataStore:GetAsync(playerUserId)
    end)
    
    if success then
        silver.Value = data
    end
    

end)


game.Players.PlayerRemoving:Connect(function(plr)
    local playerUserId = "Player_"..plr.UserId
    
    local data = plr.leaderstats.Silver.Value
    
    local success, errormessage = pcall(function()
        dataStore:SetAsync(playerUserId, data)
    end)
    
    if success then
        print("Data successfully saved.")
    else
        print("Error when saving data.")
        warn(errormessage)
    end
end)```
 

Ответ №1:

Для хранилищ данных требуется строка в качестве ключа. Вы передаете целое число в SetAsync, вам нужно будет преобразовать его в строку с помощью tostring() функции.

Ваш исправленный код должен выглядеть следующим образом.

 local dataStore = game:GetService("DataStoreService"):GetDataStore("myDataStore")


game.Players.PlayerAdded:Connect(function(plr)
    
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = plr
    
    local silver = Instance.new("IntValue")
    silver.Name = "Silver"
    silver.Parent = leaderstats
    
    local playerUserId = "Player_"..plr.UserId
    
    local data
    local success, errormessage = pcall(function()
        data = dataStore:GetAsync(tostring(playerUserId))
    end)
    
    if success then
        silver.Value = data
    end
    

end)


game.Players.PlayerRemoving:Connect(function(plr)
    local playerUserId = "Player_"..plr.UserId
    
    local data = plr.leaderstats.Silver.Value
    
    local success, errormessage = pcall(function()
        dataStore:SetAsync(tostring(playerUserId), data)
    end)
    
    if success then
        print("Data successfully saved.")
    else
        print("Error when saving data.")
        warn(errormessage)
    end
end)