【问题标题】:Roblox: Data is Saving, But Fails when trying to load?Roblox:数据正在保存,但尝试加载时失败?
【发布时间】:2021-02-03 21:28:58
【问题描述】:

所以我一直在尝试将某个“文本”从 TextLabel 保存到 DataStore,数据保存成功,但是当尝试加载它时,它给了我一个“失败”,有什么帮助吗?

这是一个快速视频:https://www.youtube.com/watch?v=W-J6U8zmATk&feature=youtu.be

脚本:

local DataStoreService = game:GetService("DataStoreService")
local IDStorage = DataStoreService:GetDataStore("IDStorage3")

elseif Player.Team.Name == "Intelligence Agency" then
            if Player:IsInGroup(7503826) or Player:GetRankInGroup(7465879) >= 251 then
                Rank.User.Text = "[REDACTED]"
                Rank.User.Back.Text = "[REDACTED]"
                Rank.Rank.TextColor3 = Color3.new(0.827451, 0, 0)
            
                     
                game.ReplicatedStorage.NewID.OnServerEvent:Connect(function(player, playerToID, AssignedID)
                    if player:IsInGroup(7465879) then
                        local success, err = pcall(function()
                            IDStorage:SetAsync(playerToID, AssignedID)
                        end)
                            
                        if success then
                            print("Data Assigned") -- Data Works and Saves
                        else
                            warn("Failed to Save")
                        end
                    end
                end)
                
                
                local ID = IDStorage:GetAsync(Player)

                if ID then
                    print(ID) 
                else
                    warn("Failed") -- Always Returns me this.
                    Rank.Rank.Text = "0"
                end
                
                    Rank.User.Text = "[REDACTED]"
                    Rank.User.Back.Text = "[REDACTED]"
                end

【问题讨论】:

  • 当您调用IDStorage:SetAsync(key, value) 时,您使用什么参数作为密钥?
  • 键是用户名,值是ID(playerToID,AssignedID)。如果我正确理解了问题,我有一个 GUI 可以触发服务器并发送目标(playerToID)和一个 ID(例如:1234567890)来分配给用户(AssignedID)(两者都来自文本框)。 @Kylaaa

标签: roblox


【解决方案1】:

DataStore:GetAsync(key) 函数需要一个字符串作为键。看起来您传递的是 Player 对象,而不是玩家的用户名,您说这是存储数据的关键。

换行试试这个

local ID = IDStorage:GetAsync(Player)

为此:

local success, result = pcall(function()
    local key = Player.Name
    return IDStorage:GetAsync(key)
end
if success then
    print("Got Id : ", result)
    local ID = result
    if ID then
        -- do stuff with the result
    else
        -- looks like a new player with no saved data
    end
else
    warn("failed to get id with error :", result)
    -- do something to handle the error, like retry
end

保存数据时需要注意的一点是用户名可能会更改。如果我改了名字,下次我加入这个游戏时,我的所有进度都会消失,因为名字与保存的密钥不匹配。这就是为什么player's userId 往往是推荐键的原因。

【讨论】:

  • 脚本有效并且玩家被找到,但显然它说我没有“ID”,即使在我的新给定 ID 被保存/给出之后。使用“DataStore Editor”插件查看,我的 ID 已保存。但是当打印出来时它说Got Id : nil
  • 对不起,我看错了你之前的评论,你说你使用的是玩家的用户名,而不是用户名。我会调整答案。
猜你喜欢
  • 1970-01-01
  • 2016-07-17
  • 2017-06-10
  • 2014-09-05
  • 2022-08-15
  • 2017-05-15
  • 2020-11-19
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多