"Wow插件无法与数组配合使用"

我正在尝试创建一个简单的魔兽世界插件来记录我的击杀情况。我已经做得相当好了,只是在编写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

当然还有更多代码,但这是唯一的重要代码(据我所知)。

如果我看这个,我应该期望为每个新击杀制作一个新的数组部分并输入值。但是,对于我在魔兽世界中进行的每个击杀,其中的每个单独项目都将获得最后一个击杀的结果。

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] 是唯一正确编写的部分。我做错了什么吗?

原文链接 https://stackoverflow.com/questions/7512095

点赞
stackoverflow用户32203
stackoverflow用户32203

问题出在这里:

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()
2011-09-22 08:58:36