Search code examples
luaurl-rewritinglua-table

Table rewrite by last in lua


I have a problem that I cannot solve.

If I execute the function 2 or 3 time whit this:

Core:CreateButton({ Name = "Spell__Slot", Slot = 1, OffSetY = 0, OffSetX = 0, }) Core:CreateButton({ Name = "Item__Slot", Slot = 2, OffSetY = 50, OffSetX = 0, }) Core:CreateButton({ Name = "Mount__Slot", Slot = 3, OffSetY = 0, OffSetX = 50, }) Core:CreateButton({ Name = "Pet__Slot", Slot = 4, OffSetY = 50, OffSetX = 50, })

all table "SavedData" is rewrite by the last:

http://i64.tinypic.com/35hegib.jpg

function Core:CreateButton(Saved)
-- Usage.
if type(Saved) ~= 'table' and type(Saved.Name) ~= 'string' and type(Saved.Slot) ~= 'number' then
    print("Core:CreateButton({Saved}): Button must have a valid Name[string] and Slot[number].")
    return
end
-- Create Table.
if not self.Region then self.Region = {} end
if not self.Region[Saved.Slot] then
    -- Unique Table.
    self.Region[Saved.Slot] = {}
    self.Region[Saved.Slot].Data = {}
    self.Region[Saved.Slot].Region = {}
    self.Region[Saved.Slot].SavedData = DefaultValue
    -- Table Merge.
    for key, value in pairs(Saved) do
        self.Region[Saved.Slot].SavedData[key] = value
    end
end end

Solution

  • Replace

       self.Region[Saved.Slot].SavedData = DefaultValue
       -- Table Merge.
       for key, value in pairs(Saved) do
           self.Region[Saved.Slot].SavedData[key] = value
       end
    

    with

       self.Region[Saved.Slot].SavedData = {}
       -- Table Merge.
       for key, value in pairs(DefaultValue) do
           self.Region[Saved.Slot].SavedData[key] = value
       end
       -- Table Merge.
       for key, value in pairs(Saved) do
           self.Region[Saved.Slot].SavedData[key] = value
       end