2014-04-05 1 views
1

이것은 프로그래밍으로는 아니지만 Lua으로 작업 한 것은 처음입니다. Java, Action Script 및 HTML에 대한 경험이 있습니다. Elder Scroll Online에 대해 addon을 생성하려고합니다. 나는 다음과 같은 링크에서 ESO API을 찾기 위해 관리 :Elder Scroll Online Addon

http://wiki.esoui.com/API#Player_Escorting

나는 각 길드 회원이 은행에 기탁 얼마나 많은 항목의 수를 반환하는 함수를 만들려고 노력하고 있습니다. 내가 지금까지 가지고있는 코드는 다음과 같습니다.

function members() 
    for i=0, GetNumGuildEvents(3, GUILD_EVENT_BANKITEM_ADDED) 
    do 
     GetGuildEventInfo(3, GUILD_EVENT_BANKITEM_ADDED, i) 
    end 

특정 보증금을 만드는 캐릭터를 참조하는 데 문제가 있습니다. 일단 내가 할 수있게되면 연결된 이름을 저장하는 연결된 목록과 예치 된 항목의 수를 나타내는 integer/double 카운터를 만들 수 있습니다. 누군가가 주어진 예금에 대한 캐릭터를 참조하는 방법에 대한 아이디어가 있다면 많은 도움이 될 것입니다.

답변

3

테스트 할 게임이없고 API 설명서가 희박하므로 추측 된 추측/팁/힌트 (내가 루아를 잘 알고 있고 수년간 프로그래밍 된 와우를 알고 있음)가 무엇인지 알아보십시오.

루아는 다중 할당을 지원하고 기능은 여러 값을 반환 할 수 있습니다, 내가 기대하는이 기능은 여러 길드 이벤트 유형에 적용

eventType, secsSinceEvent, param1, param2, param3, param4, param5 

을 감안할 때 :

function foo() 
     return 1, "two", print 
    end 
    local a, b, c = foo() 
    c(a,b) -- output: 1, "two" 

GetGuildEventInfo는 다음과 같은 반환 말한다 param1부터 param5까지는 쿼리하는 특정 이벤트에만 적용됩니다. 그냥 인쇄하여 얻은 것을보십시오.

print(GetGuildEventInfo(3,GUILD_EVENT_BANKITEM_ADDED,i)) 

은 모든 반환 값을 인쇄하려면 : 당신이 루아의 표준 인쇄 기능과 같이 작동 가능한 print 기능이있는 경우, 당신이 할 수있는 간단한 쓰기 (즉 여러 인수를 받아 모두 인쇄).

print이없는 경우 작성해야합니다. 내가 LogChatText 함수가 의심스럽게 당신의 채팅 창에 텍스트를 쓰는 것처럼 보이는 것을 본다.

function print(...) 
    LogChatText(table.concat({...}, ' ')) 
end 

당신이 말하는, PARAM1이 입금 플레이어의 이름, 당신의 실험에서 찾아내는 경우에, 당신은 쓸 수 있습니다 :

그렇다면, 당신은이 같은 루아 - 억양 인쇄 기능을 쓸 수 있습니다
local eventType, secsSinceEvent, playerName = GetGuildEventInfo(3,GUILD_EVENT_BANKITEM_ADDED, i) 

예를 들어, 입금 된 항목 수에 대한 문자 이름과 정수/더블 카운터를 저장하는 링크 된 목록을 만들 수 있습니다.

링크 된 목록 (Lua, Java 및 ActionScript 제외)을 사용하고 싶지는 않습니다. 루아는 루아에서 매우 강력하고 일반화 된 해쉬 테이블 (일명 '테이블')을 기반으로 키 또는 값으로 모든 유형을 사용할 수 있습니다.

local playerEvents = {} -- this creates a table 
playerEvents["The Dude"] = 0 -- this associates the string "The Dude" with the value 0 
print(playerEvents["The Dude"]) -- retrieve the value associated with the string "The Dude" 
playerEvents["The Dude"] = playerEvents["The Dude"] + 1 -- this adds 1 to whatever was previous associated with The Dude 

당신이 인덱스에 기록되지 않은 키 테이블을 경우, 다시 nil 얻을 것이다. 이것을 사용하여 플레이어에 대한 항목을 아직 만들지 결정할 수 있습니다.

param1에 플레이어 이름이 포함되어있는 것처럼 가장합니다. 이 실제로 위치하고 위치를 찾을 때이 문제를 해결 :

local itemsAdded = {} 
function members() 
    for i=0, GetNumGuildEvents(3, GUILD_EVENT_BANKITEM_ADDED) do 
     local eventType, secsSinceEvent, playerName = GetGuildEventInfo(3, GUILD_EVENT_BANKITEM_ADDED, i) 
     itemsAdded[playerName] = (itemsAdded[playerName] or 0) + 1 
    end 
end 

itemsAdded 이제 각 플레이어가 추가 된 항목의 수를 포함합니다. 인쇄하려면 다음을 수행하십시오.

for name, count in pairs(itemsAdded) do 
    print(string.format("Player %s has added %d items to the bank.", name, count)) 
end 
+0

대단히 감사합니다. 구현하고 테스트 해 보겠습니다. 그것을 테스트하려면 개미를 내 보내어 게임에 설치하고 올바르게 진행되는지 확인하십시오. – Uberpwonage101