Построение таблицы ключ / значение в Lua

Я пытаюсь создать сценарий для MUD, в который я играю, который создаст таблицу для отслеживания среднего значения xp для каждого моба. У меня возникли проблемы с синтаксисом проверки, существует ли элемент в таблице, и если он не создается. Я пробовал что-то подобное, но продолжаю получать: attempt to index field '?' (a nil value)

mobz_buried = {
{mob = "troll", quantity = 2}
{mob = "warrior", quantity = 1}
{mob = "wizard", quantity = 1}} -- sample data

number_of_mobz_buried = 4 

xp_from_bury = 2000 -- another script generates these values, these are all just examples

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 for 'kill count', number of times killed 
            mobz[v].kc = mobz[v].kc + 1 -- if it exists increment kc
    else
        mobz[v].kc = 1 -- if it doesn't exist create a key value that matches the mobs name and make the kc 1
    end
    if type(mobz[v].xp) == "variable" then -- xp for average experience points
        mobz[v].xp = (((mobz[v].kc - 1) * mobz[v].xp + xp_per_corpse)/mobz[v].kc) -- just my formula to find the average xp over a range of differant buries
    else
            mobz[v].xp = xp_per_corpse -- if it doesn't exist create the table just like before
    end
end

Я пытаюсь закончить с mobz.troll = {kc, xp}, mobz.warrior = {kc, xp}, mobz.wizard = {kc, xp} и возможность добавлять больше ключевых значений на основе имен mobz_buried дает мне.

1 ответ

Решение

Судя по дополнительной информации из ваших комментариев, кажется, что вы не создали таблицу для 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
Другие вопросы по тегам