怪物出生不正常,无法修复错误

我正在制作一个游戏的 lua 脚本,需要帮助。

    addhook("ms100", "MONSTERms100")
function MONSTERms100()
    t = t + 1
    if t % 100 == 0 then
        while #MONSTERS < CONFIG.MAXMONSTERS do
            local rand, spawnNo, mapName
            while true do
                rand = math.random(#CONFIG.MONSTERS)
                mapName = CONFIG.MONSTERS[rand].spawn[map'name'] and map'name' or CONFIG.DEFAULTMAP
                spawnNo = math.random(#CONFIG.MONSTERS[rand].spawn[mapName])
                if math.random(0, 100) < CONFIG.MONSTERS[rand].spawnchance[mapName][spawnNo] then
                    break
                end

LUA 错误: sys/lua/waffle/monsters.lua:411: 企图获取字段 '?' 的长度(一个空值) -> sys/lua/waffle/monsters.lua:411: in function

我已经检查了多次,找不出解决方案。我在这个文件之前没有遇到过这个错误,并且我没有编辑过它。它是在我更新游戏时开始出现的。所以我现在尝试控制怪物的出生,但是它们现在根本不会出生。这是我第一次寻求帮助,如果我忘记了一些细节,请见谅。如果您愿意帮我解决这个问题,我会非常感激,因为我很傻。

点赞
用户2858170
用户2858170

错误信息

sys/lua/waffle/monsters.lua:411: attempt to get length of field '?' (a nil value) -> sys/lua/waffle/monsters.lua:411: in function

告诉你正在尝试获取文件 monsters.lua 第411行处一个 nil 值的长度。

while #MONSTERS < CONFIG.MAXMONSTERS do

#长度运算符

来自 Lua 参考手册 5.3 - 3.4.7 长度运算符

应用在表上的长度运算符返回该表的边界。 表 t 上的边界是满足以下条件的任意自然数:

(border == 0 or t[border] ~= nil) and t[border + 1] == nil 换言之,边界是表中满足非 nil 值后是 nil 值(或者索引1是 nil 时为零)的任意(自然)索引。

一个恰好有一个边界的表被称为顺序表。例如,表 {10, 20, 30, 40, 50} 是一个顺序表,因为它只有一个边界(5)。表 {10, 20, 30, nil, 50} 有两个边界(3 和 5),因此不是顺序表。表 {nil, 20, 30, nil, nil, 60, nil} 有三个边界(0、3 和 6),因此也不是顺序表。表 {} 是一个边界为0的顺序表。请注意,非自然键不会影响表是否为顺序表的判断。

t 是一个顺序表时,#t 将返回它的唯一边界,这对应即为该顺序表的长度的直观概念。当 t 不是顺序表时,#t 可以返回它任意一个边界(具体取决于表的内部表示方式的细节,这又取决于表是如何构建和非数值键的内存地址)。

对于表长度的计算保证了其最坏的运行时间是O(log n),其中n是表中最大的自然键值。

所以简单来说, MONSTERS 还没有被定义。因此你无法得到它的元素数量。由于你在之后的几行中使用了 CONFIG.MONSTERS,所以我猜测使用 #CONFIG.MONSTERS 可以解决问题,因为那是你实际想要使用的表。但是,如果不知道你代码的其余部分,我只能猜测。

2017-12-11 09:30:37