Roblox - попытка индексировать поле '?' (нулевое значение) Проблема с запуском функции модуля - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь создать хранилище данных и изменить значение данных игрока, но у меня возникла проблема с получением скрипта для запуска функции. Я вставлю код, с которым у меня возникли проблемы, и отмечу строки с ошибками. Я прошу прощения за любые ошибки новичка, это будет мой первый раз, программируя игру с Lua и на Roblox. Я думаю, что это может быть проблема с тем, как я называю statName и как statName из "Wheat" не существует, но я не знаю, как это назвать иначе, или почему его там нет.

Это релевантный материал из модульного сценария:

function PlayerStatManager:ChangeStat(player, statName, value)

    local playerUserId = "Player_" .. player.UserId
    assert(typeof(sessionData[playerUserId][statName]) == typeof(value), "ChangeStat error: types do not match")  <--this line
    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

Это соответствующий материал из сценария, использующий модульcriptcript:

local SrvrStats = require(game.ServerStorage.moduleScript)

SrvrStats:ChangeStat(player, 'Wheat', playerWheat.Value) <-- this line

1 Ответ

0 голосов
/ 23 января 2019

Попробуйте:

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")  <--this line
    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

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
            -- 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

return PlayerStatManager
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...