Roblox - 尝试索引字段 '?'(值为 nil)运行模块函数时出现问题

我正在尝试制作数据存储并更改玩家数据的值,但是我在运行函数的脚本时遇到了问题。我会粘贴我遇到问题的代码,并标记导致错误的行。对于任何新手错误,我表示歉意,这将是我第一次使用 Lua 和在 Roblox 中编程游戏。我认为可能是如何调用 statName 以及 "Wheat"statName 不存在的问题,但我不知道如何以另一种方式调用它,或者为什么它不存在。

这是来自 modulescript 中相关的内容:

function PlayerStatManager:ChangeStat(player, statName, value)

    local playerUserId = "Player_" .. player.UserId
    assert(typeof(sessionData[playerUserId][statName]) == typeof(value), "ChangeStat error: types do not match")  <--这一行
    if typeof(sessionData[playerUserId][statName]) == "number" then
        sessionData[playerUserId][statName] = sessionData[playerUserId][statName] + value
    else
        sessionData[playerUserId][statName] = value
    end

end

-- Function to add player to the 'sessionData' table

local function setupPlayerData(player)

    local playerUserId = "Player_" .. player.UserId
    local data
    local success, err = pcall(function()
        playerData:UpdateAsync(playerUserId, function(playerData)
            data = playerData
        end)
    end)

    if success then
        if data then
            -- Data exists for this player
            sessionData[playerUserId] = data
        else
            -- Data store is working, but no current data for this player
            sessionData[playerUserId] = {Money=0, Wheat=0, Silo=0, Feeders=0, Chickens=0}
        end
    else
        warn("Cannot set up data for player!")
    end
end

这是使用 modulescript 的脚本中相关的内容:

local SrvrStats = require(game.ServerStorage.moduleScript)

SrvrStats:ChangeStat(player, 'Wheat', playerWheat.Value) <--这一行
点赞
用户10823924
用户10823924

试试这个:

local PlayerStatManager = {}

PlayerStatManager.ChangeStat = function(player, statName, value)

    local playerUserId = "Player_" .. player.UserId
    assert(typeof(sessionData[playerUserId][statName]) == typeof(value), "ChangeStat error: types do not match")  <--这一行
    if typeof(sessionData[playerUserId][statName]) == "number" then
        sessionData[playerUserId][statName] = sessionData[playerUserId][statName] + value
    else
        sessionData[playerUserId][statName] = value
    end

end

-- 将玩家添加到 'sessionData' 表格的功能

PlayerStatManager.setupPlayerData = PlayerStatManager(player)

    local playerUserId = "Player_" .. player.UserId
    local data
    local success, err = pcall(function()
        playerData:UpdateAsync(playerUserId, function(playerData)
            data = playerData
        end)
    end)

    if success then
        if data then
            -- 数据存在于此玩家
            sessionData[playerUserId] = data
        else
            -- 数据存储正在工作,但没有为此玩家提供当前数据
            sessionData[playerUserId] = {Money=0, Wheat=0, Silo=0, Feeders=0, Chickens=0}
        end
    else
        warn("无法为玩家设置数据!")
    end
end

return PlayerStatManager
2019-01-23 12:56:52