lua:是否尝试索引字段'';(零值)

lua:是否尝试索引字段'';(零值),lua,Lua,现在我遇到了一个障碍,在下面的代码中不断出现这个错误 box.lua:31:尝试索引字段“?”(一个空值) 我试图纠正这个错误,但失败了 下面是所有完整的代码 function ChatSystem(event, player, msg, Type, lang) local Guid = player:GetGUIDLow() if flag[Guid] ~= 0 then local daan = quiz["box&q

现在我遇到了一个障碍,在下面的代码中不断出现这个错误

box.lua:31:尝试索引字段“?”(一个空值)

我试图纠正这个错误,但失败了

下面是所有完整的代码

    function ChatSystem(event, player, msg, Type, lang)
        local Guid = player:GetGUIDLow()
        if flag[Guid] ~= 0 then
            local daan = quiz["box"][flag[Guid]][2];
            local t = msg;
            if (t+1 == daan+1) then
                player:SendBroadcastMessage("[Notice]correct")
                SetPlayerFlag(player, 0)
                SetPlayererror(player, 0)
            else
                cuowu[Guid] = error[Guid] + 1;
                if cuowu[Guid] >= quiz["frequency"] then
                    SetPlayererror(player, 0)
                    Kick( player )
                else
                    player:SendBroadcastMessage("[Notice]  error"..cuowu[Guid].."   "..quiz["box"][flag[Guid]][1].."");
                end
            end
        end
    end
    
    
    function Start (event, player, item, count)
        local datigailv = math.random(1, 100)
        if (datigailv <= quiz["Chance"])then
            local select = math.random(1, 5)
            local Guid = player:GetGUIDLow()
            SetPlayerFlag(player, select)
            SetPlayererror(player, 0)
            player:SendBroadcastMessage("[Notice]answer my question:"..quiz["box"][flag[Guid]][1].."");
        end
    end
    
    RegisterPlayerEvent(32, Start) 
    RegisterPlayerEvent(18, ChatSystem);
功能聊天系统(事件、播放器、消息、类型、语言)
本地Guid=player:GetGUIDLow()
如果标志[Guid]~=0,则
本地daan=quick[“box”][flag[Guid][2];
局部t=msg;
如果(t+1==daan+1),则
播放机:发送广播消息(“[通知]正确”)
SetPlayerFlag(播放器,0)
SetPlayeError(播放器,0)
其他的
错无[Guid]=错误[Guid]+1;
如果cuowu[Guid]>=测验[“频率”],则
SetPlayeError(播放器,0)
踢(球员)
其他的
播放器:SendBroadcastMessage(“[Notice]error”“.cuowu[Guid]..”..测验[“box”][flag[Guid]][1]..”);
结束
结束
结束
结束
功能启动(事件、玩家、项目、计数)
本地datigailv=math.random(1100)

如果(datigailvAs array in array error)难以跟踪,如果可能,请尝试避免它或添加一些断言,如
assert(quick[“box”][flag[Guid]])
,以检查您是否有这样的数组值

在lua中,您可以删除带有
标志[Guid]=nil的值,而不是
标志[Guid]=0

不带数组和动态问题生成的我的版本:

本地测验={
机会=2,
频率=3
}
本地测验_标志={}
功能聊天系统(事件、播放器、消息、类型、语言)
本地测验\信息=测验\标志[玩家:GetGUIDLow()]
如果你知道你的信息
如果tonumber(msg)=测验信息,则回答
播放机:发送广播消息(“[通知]正确”)
quick_flags[player:GetGUIDLow()]=nil——删除标志信息
elseif quick_info.count>=quick.frequency然后
quick_flags[player:GetGUIDLow()]=nil——删除标志信息
踢(球员)
其他的
播放机:SendBroadcastMessage(“[注意]错误”…测验信息计数…”,“…测验信息问题…”
测验信息计数=测验信息计数+1
结束
结束
结束
功能启动(事件、玩家、项目、计数)

如果math.random(1100)出现此错误后,您有什么发现吗?
quick[“box”]
quick[“box”][flag[Guid]]
为零顺便说一下,Guid的低位部分不是Guid。您甚至可能有两个播放器具有相同的低位部分。逻辑错误为:
如果flag[Guid]~=0,则
。如果
flag[Guid]
nil
则始终为真,将其更改为:
if(flag[Guid]或0)~=0
在:
if(t+1==daan+1)处再出现一个逻辑错误,然后
。如果
t
值为非数字字符串或空字符串,则会引发错误。更改为:
if tonumber(t)==daan then
。非常感谢您的提示,您的提示对我帮助很大,我解决了这个错误