2012-04-01 7 views
1

私は、時間、日、週、月、年、レベル、クラス、および層ごとにレポートする情報を収集する、追跡データベースを作成しています。このように、テーブルのサブセットで構成されたtrackerというテーブルがあり、異なるレポート(つまり、table["ThisHour"]など)が反映されています。本当に同じ情報を追加しているこれらすべての行を統合する方法があるのだろうかと思います。Lua:同じ情報を複数のサブテーブルに追加する方が簡単ですか?

function exp_update(xp, gold, str, con, dex, wis, int, luck, bpracs, btrains, pracs, trains, qp) 
local xtable = tracker[playername]["Exp"] 
addto(xtable["ThisHour"],"Exp",xp) 
addto(xtable["ThisHour"],"Gold",gold) 
addto(xtable["ThisHour"],"BonusStr",str) 
addto(xtable["ThisHour"],"BonusCon",con) 
addto(xtable["ThisHour"],"BonusDex",dex) 
addto(xtable["ThisHour"],"BonusWis",wis) 
addto(xtable["ThisHour"],"BonusInt",int) 
addto(xtable["ThisHour"],"BonusLuck",luck) 
addto(xtable["ThisHour"],"BonusPracs",bpracs) 
addto(xtable["ThisHour"],"BonusTrains",btrains) 
addto(xtable["ThisHour"],"Pracs",pracs) 
addto(xtable["ThisHour"],"Trains",trains) 
addto(xtable["ThisHour"],"Qp",qp) 
addto(xtable["ThisHour"],"Quests") 
addto(xtable["ThisLevel"],"Exp",xp) 
addto(xtable["ThisLevel"],"Gold",gold) 
addto(xtable["ThisLevel"],"BonusStr",str) 
addto(xtable["ThisLevel"],"BonusCon",con) 
addto(xtable["ThisLevel"],"BonusDex",dex) 
addto(xtable["ThisLevel"],"BonusWis",wis) 
addto(xtable["ThisLevel"],"BonusInt",int) 
addto(xtable["ThisLevel"],"BonusLuck",luck) 
addto(xtable["ThisLevel"],"BonusPracs",bpracs) 
addto(xtable["ThisLevel"],"BonusTrains",btrains) 
addto(xtable["ThisLevel"],"Pracs",pracs) 
addto(xtable["ThisLevel"],"Trains",trains) 
addto(xtable["ThisLevel"],"Qp",qp) 
addto(xtable["ThisLevel"],"Quests") 
end 

あなたが見ることができるように、それはちょうど2つのサブテーブルの行のかなりの数はすでにです:ここで私はちょうど2つのサブテーブル(代わりの8 Iは、上記している)と一緒に、使用している機能です。これは、各サブテーブルのコード行が14行であるか、またはそれらをすべて入れた場合、できるだけ統合したくない112行のコード行です。定義は、場合にあなたがそれを必要と

ADDTO機能は次のとおりです。

function addto(t,k,v) 
t[k] = t[k] + (v or 1) 
end 

答えて

3

私はこれを行うに言うと思います:

local function exp_update_actual(vars) 
    local blocks = {"ThisHour", "ThisLevel"} --Add others as needed. 
    local xtable = tracker[playername]["Exp"] 

    for i, block in ipairs(blocks) do 
    for key, value in pairs(vars) do 
     addto(xtable[block], key, value) 
    end 
    end 
end 

function exp_update(xp, gold, str, con, dex, wis, int, luck, bpracs, btrains, pracs, trains, qp) 
    local vars = 
    { 
    Exp = xp or false, --nil keys won't exist. false ones will. 
    Gold = gold or false, 
    BonusStr = str or false, 
    BonusCon = con or false, 
    BonusDex = dex or false, 
    BonusWis = wis or false, 
    BonusInt = int or false, 
    BonusLuck = luck or false, 
    BonusPracs = bpracs or false, 
    BonusTrains = btrains or false, 
    Pracs = pracs or false, 
    Trains = trains or false, 
    Qp = qp or false, 
    Quests = false, 
    } 
    exp_update_actual(vars); 
end 
+0

私が探していたまさに。ありがとう! – Josh

関連する問題