2011-09-22 46 views
1

我正在尝试为魔兽世界创建一个简单的插件,它可以记录我的杀手。 我已经没有相当远的地方,除了写一个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 

Ofcourse有更多的代码,但是这是唯一重要的代码(只要我知道)。

如果我看一下这个,我会期待每创建一个新的数组部件,并输入数值。然而,对于我在魔兽世界中的每一次杀戮,其中的每一件物品都会得到最后一次杀戮的结果。

的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]是正确writen唯一的一个。难道我做错了什么?

回答

3

的问题是在这里:你杀

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() 
+0

@levisaxos:您必须创建一个新表和deepcopy的它。 Lua表是引用,从不隐式复制。 – Puppy

+0

非常感谢! –

+2

对于部落! –

相关问题