2012-04-01 1 views
1

시간, 일별, 주별, 월별, 연도 별, 수준별, 클래스 별, 계층별로보고 할 정보를 수집하는 추적 데이터베이스를 만듭니다. 따라서 다른 보고서 (예 : table["ThisHour"] 등)를 반영하는 표의 하위 집합으로 구성된 tracker이라는 표가 있습니다. 나는 정말로 똑같은 정보를 추가하고있는 모든 라인을 통합하는 방법이 있는지 궁금합니다.루아 : 동일한 정보를 여러 서브 테이블에 추가하는 것이 더 쉬운 방법일까요?

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 

당신이 볼 수 있듯이, 그 두 서브 테이블에 대한 행 확실히 다수가 이미 : 여기에 내가 두 서브 테이블 (대신 8 내가 위에 열거 한)와 함께 사용하고 기능입니다. 그것은 각 하위 테이블에 대해 14 줄의 코드입니다. 또는 모든 코드를 넣으면 112 줄의 코드를 가능한 한 적게 통합하고 싶습니다.

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

을 내가 찾던 정확히 무엇을

addto 기능은 경우에 당신이 그것을 필요로 정의 같다. 감사! – Josh