lua:是否尝试索引字段'';(零值)
现在我遇到了一个障碍,在下面的代码中不断出现这个错误 box.lua:31:尝试索引字段“?”(一个空值) 我试图纠正这个错误,但失败了 下面是所有完整的代码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
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
。非常感谢您的提示,您的提示对我帮助很大,我解决了这个错误