在Lua中构建键值表

我正在尝试构建一个用于我玩的MUD的脚本,它将创建一个表格来跟踪每个mob的平均经验值。我在检查表格中的元素是否存在以及如果不存在则创建它的语法方面遇到了问题。我尝试了类似这样的东西,但是一直提示“尝试索引字段'?'(零值)”

mobz_buried = {
{mob = "troll", quantity = 2}
{mob = "warrior", quantity = 1}
{mob = "wizard", quantity = 1}} -- 示例数据

number_of_mobz_buried = 4

xp_from_bury = 2000 --另一个脚本会生成这些值,这些都只是示例

xp_per_corpse = xp_from_bury / number_of_mobz_buried

for _, v in ipairs(mobz_buried) do
    if type(mobz[v].kc) == "variable" then -- kc表示'击杀数量',即被杀死的次数
            mobz[v].kc = mobz[v].kc + 1 --如果存在,则增加kc值
    else
        mobz[v].kc = 1 --如果不存在,则创建一个与mob名称匹配的键值,并使kc为1
    end
    if type(mobz[v].xp) == "variable" then -- xp表示平均经验值
        mobz[v].xp = (((mobz[v].kc - 1) * mobz[v].xp + xp_per_corpse)/mobz[v].kc) --只是我找到不同埋藏的平均经验值的公式
    else
            mobz[v].xp = xp_per_corpse --如果不存在,则像之前一样创建表格
    end
end

我希望最终得到mobz.troll = {kc,xp},mobz.warrior = {kc,xp},mobz.wizard = {kc,xp}并且可以根据mobz_buried给我的名称添加更多键值对。

点赞
用户234175
用户234175

根据你的评论提供的额外信息,看起来你没有为 mobz 构建一张表格。尝试这样做:

local mobz = {}
for _, v in ipairs(mobz_buried) do
    mobz[v.mob] = mobz[v.mob] or {}
    mobz[v.mob].kc = (mobz[v.mob].kc or 0) + 1

    -- etc...
end
2015-01-08 04:14:32