Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua:为什么我的表在移除一次后会恢复为零?_Lua_Saving Data - Fatal编程技术网

Lua:为什么我的表在移除一次后会恢复为零?

Lua:为什么我的表在移除一次后会恢复为零?,lua,saving-data,Lua,Saving Data,下面是我用来指示哪些项(在本例中是MUD中的MOB)不在我的表数据库中的脚本的一部分 if mqtable[1] == nil then Note("No mobs missing from database!") else if "%1" ~= "" then mindex = "%1" mdesc = mqtable[tonumber(mindex)] end if "%2" ~= "" then mlvl = "%2" end if "%3" ~= "" then m

下面是我用来指示哪些项(在本例中是MUD中的MOB)不在我的表数据库中的脚本的一部分

if mqtable[1] == nil then
  Note("No mobs missing from database!") 
else
  if "%1" ~= "" then
  mindex = "%1"
  mdesc = mqtable[tonumber(mindex)]  
end
if "%2" ~= "" then mlvl = "%2" end
if "%3" ~= "" then mkeyw = "%3" end
if not mindex and mqtable[1] then
  tprint(mqtable)
elseif mindex and not mlvl then
  Note(mdesc)
elseif mindex and mlvl and not mkeyw then
  Note("Syntax is: mqmob [index] [level] [keywords]")
else
  mobtable[mdesc]={level = mlvl, keywords = mkeyw}
  table.save(mobtable,savepath.."/Mobs/"..areazone..".tbl")
  Note(mqtable[tonumber(mindex)] .. " saved. Level: ".. mlvl .. " -- Keywords: " .. mkeyw)
  table.remove(mqtable, tonumber(mindex))
  mobtable = table.load(savepath .. "/Mobs/" .. areazone .. ".tbl")
  mlvl, mkeyw, mdesc = nil, nil, nil
end
假设所有未定义的功能都按预期工作,并且似乎不是根本原因。“%1”、“2”和“%3”是通过触发器传递的参数。本质上,如果这是一个函数,那么这三个参数将被称为foo(blah,bleh,blargh)

问题

如果我键入
mqmob
(触发上述脚本),它将在房间内显示哪些mob尚未添加到我的表中。然后我使用
mqmob
将mob添加到该表中。但是,一旦这样做了,脚本就会拒绝工作,并且不管表上原来有多少项,
mqmob
返回
nil
。为什么在存储了一点信息后,表会被完全擦除

示例

我在一个房间里看到以下情况:

A rat dwells here.
A mouse chases after some cheese.
A spider makes its home in the corner.
A flea leaps about playfully.
假设我只有
一只蜘蛛在角落里安家。
在数据库中。其余三个描述放在
mqtable
中,当我调用
mqmob
时,它显示:

1="A rat dwells here."
2="A mouse chases after some cheese."
3="A flea leaps about playfully."
现在,我键入
mqmob120rat
创建
mobtable[“一只老鼠住在这里。”]
{level=20,keywords=rat}
。但一旦我这样做了,如果我再次键入
mqmob
,它将返回
nil

变量解释

mobtable
只是一个表,其中包含
mob的描述
作为键,其相应的
级别
关键字
作为值。例如:

mobtable = {"A rat nibbles on some cheese." = {keyword = "rat", level = 20}}
mqtable
仅在
mobtable
中没有对应的匹配项时才会填充。本质上,触发器触发,与
mobtable
中的键进行比较,如果未找到,则填充
mqtable
。这有助于我避免在mobtable中添加已经存在的mob的不必要工作


我一直遇到的问题是,我将添加一个mob,但当我再次运行print命令时,它返回
nil
。但是,我仍然可以在
mqtable
中添加和查看各个索引。它似乎再也无法打印了。

您是如何运行它的?它是通过触发器设置的。我要扫视一下房间,看看描述。它在我的表中搜索,查看描述是否列为键。如果没有,它将把它存储到mqtable中,我用mqmob调用它。但是,即使表中有3项,执行“mqmob 1 123关键字”似乎会删除整个内容。不要让
tonumber(mindex)
无处不在,只执行一次:
mindex=tonumber(“%1”)
我注意到
mindex
在脚本末尾没有被清除。也许还有其他的代码在收拾剩余的
mindex
并做一些可怕的事情?尝试清除它,或者更好地,为
mindex
mlvl
mdesc
mkeyw
中的每一个使用局部变量。(还请注意,这些变量目前并没有在每个代码路径中清除。)我很难用实际编译的代码编写一个示例。缺少的变量太多,如
mdesc
,无法使其正常工作。请贴一张