Lua:为什么我的表在移除一次后会恢复为零?
下面是我用来指示哪些项(在本例中是MUD中的MOB)不在我的表数据库中的脚本的一部分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
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
,无法使其正常工作。请贴一张