Wow аддон не работает с массивом - PullRequest
1 голос
/ 22 сентября 2011

Я пытаюсь создать простой аддон для World of Warcraft, который записывает мои убийства.Я уже достаточно далеко за исключением того, что есть проблема с записью массива lua.

Код, который у меня есть до сих пор

local CharacterDefaults = { 
    kills = {},
    totalkills = 0
}
local killDefaults = {
    DBtimeofday = 0,
    DBplayer = 0,
    DBenemyname = 0,
    DBenemyid = 0,
    DBzone = 0,
    DBkilltype = 0
}

Следующая часть находится внутри событиякоторый проверяет наличие избыточного количества

if not KillCount then
    KillCount = CharacterDefaults
end         

if not KillCount.totalkills then
    KillCount.totalkills = 0
end 
KillCount.enemy[KillCount.totalkills] = destName                        
KillCount.kills[KillCount.totalkills] = killDefaults 
KillCount.kills[KillCount.totalkills].DBtimeofday = stamp
KillCount.kills[KillCount.totalkills].DBzone = zone 
KillCount.kills[KillCount.totalkills].DBkilltype = killtype 
KillCount.kills[KillCount.totalkills].DBenemyid = unitId 
KillCount.kills[KillCount.totalkills].DBenemyname = destName 
KillCount.kills[KillCount.totalkills].DBplayer = playerName 
KillCount.totalkills = KillCount.totalkills + 1 

Конечно, есть больше кода, но это единственный важный код (насколько я знаю).

Если я посмотрю на это, я ожидаю, что для каждого новогоубить новый массив, часть сделана и значения введены.Тем не менее, за каждое убийство, которое я совершаю в World of Warcraft, каждый отдельный элемент в нем получит результаты последнего убийства.

Сохраненный файл переменных lua:

KillCount = {
    ["kills"] = {
        {
            ["DBplayer"] = "MyName",
            ["DBzone"] = "Blackrock Depths",
            ["DBkilltype"] = 0,
            ["DBenemyname"] = "Grim Patron",
            ["DBenemyid"] = 9545,
            ["DBtimeofday"] = "11-09-22 10:45:23",
        }, -- [1]
        {
            ["DBplayer"] = "MyName",
            ["DBzone"] = "Blackrock Depths",
            ["DBkilltype"] = 0,
            ["DBenemyname"] = "Grim Patron",
            ["DBenemyid"] = 9545,
            ["DBtimeofday"] = "11-09-22 10:45:23",
        }, -- [2]
        [0] = {
            ["DBplayer"] = "MyName",
            ["DBzone"] = "Blackrock Depths",
            ["DBkilltype"] = 0,
            ["DBenemyname"] = "Grim Patron",
            ["DBenemyid"] = 9545,
            ["DBtimeofday"] = "11-09-22 10:45:23",
        },
    },
    ["totalkills"] = 3,
}

можно увидеть, что [0] является единственным, который должен быть правильно написан.Я что-то не так делаю?

1 Ответ

3 голосов
/ 22 сентября 2011

Проблема здесь:

KillCount.kills[KillCount.totalkills] = killDefaults

Каждый раз, когда вы убиваете, вы указываете KillCount.kills [KillCount.totalkills] на killDefaults, затем модифицируете killDefaults. Проблема в том, что вы используете один и тот же killDefaults каждый раз. Поэтому, когда вы обновляете значения killDefaults позже, это влияет на каждую ссылку на killDefaults, которую вы уже создали.

Попробуйте что-то вроде:

function GetDefaultKills()
    return {
        DBtimeofday = 0,
        DBplayer = 0,
        DBenemyname = 0,
        DBenemyid = 0,
        DBzone = 0,
        DBkilltype = 0
    };
end

KillCount.kills[KillCount.totalkills] = GetDefaultKills()
...