2015-01-08 8 views
2

나는 각 mob에 대한 평균 xp를 추적하는 테이블을 생성하는 MUD 스크립트를 작성하려고합니다. 테이블의 요소가 존재하는지 여부를 확인하는 구문에 문제가 있습니다. 나는 이런 식으로 뭔가를 시도했지만 점점 계속 : 나는 mobz.troll = {kc, xp}, mobz.warrior = {kc, xp}, mobz.wizard = {kc, xp}mobz_buried 저를주는 이름을 기반으로 더 키 값을 추가 할 수있는 기능으로 끝낼려고 attempt to index field '?' (a nil value)루아에서 키/값 테이블 구성

mobz_buried = { 
{mob = "troll", quantity = 2} 
{mob = "warrior", quantity = 1} 
{mob = "wizard", quantity = 1}} -- sample data 

number_of_mobz_buried = 4 

xp_from_bury = 2000 -- another script generates these values, these are all just examples 

xp_per_corpse = xp_from_bury/number_of_mobz_buried 

for _, v in ipairs(mobz_buried) do 
    if type(mobz[v].kc) == "variable" then -- kc for 'kill count', number of times killed 
      mobz[v].kc = mobz[v].kc + 1 -- if it exists increment kc 
    else 
     mobz[v].kc = 1 -- if it doesn't exist create a key value that matches the mobs name and make the kc 1 
    end 
    if type(mobz[v].xp) == "variable" then -- xp for average experience points 
     mobz[v].xp = (((mobz[v].kc - 1) * mobz[v].xp + xp_per_corpse)/mobz[v].kc) -- just my formula to find the average xp over a range of differant buries 
    else 
      mobz[v].xp = xp_per_corpse -- if it doesn't exist create the table just like before 
    end 
end 

. 당신이 mobz을위한 테이블을 구성하지 않은 것처럼

+0

'mobz_buried' 및'mobz '테이블의 간단한 예제를 제공하십시오. –

+1

[최소 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve)을 참조하십시오. 현재 예제가 완전하지 않습니다. –

+0

당신의'mobz_buried' 테이블은'mobz '에 대응하는 요소를 가지고 있지 않은 값을 가지고 있습니다. 그래서'mobz [v]'를 사용하려고 할 때 그 값으로 색인을 만들려고하면 값이 없으므로이 오류가 발생합니다 . https://eval.in/private/88f083da483307 –

답변

0

귀하의 의견에서 추가 정보를 바탕으로 들린다. 이것을 시도하십시오 :

local mobz = {} 
for _, v in ipairs(mobz_buried) do 
    mobz[v.mob] = mobz[v.mob] or {} 
    mobz[v.mob].kc = (mobz[v.mob].kc or 0) + 1 

    -- etc... 
end 
+0

나는 이것을 이해하려고 애 쓰고있다. 3 번 줄에는 '이 요소가있는 그대로 존재한다면, 그렇지 않으면 빈 요소로 생성하지 않을까요?'라고 말합니다. –

+0

@EliBell 어디서나 게시 된 코드에 해당 댓글이 표시되지 않습니다. 더 많이 들리거나, 요소를 하나씩 늘리거나 존재하지 않는 경우 하나를 만들고 초기화하십시오. – greatwolf

+0

양해 해 주셔서 감사 드리며 이해하겠습니다. 하지만 지금은 테이블 값을 할당 할 때 '또는'을 사용하는 것이 내가 누락 된 것이 었음을 알 수 있습니다. –