*잠이 안오고 할일하기 싫어서 작성 시작




애드온, 위크오라 제작 가이드1 - API와 EVENT



당장 쉽게 만드는 방법은 가이드가 많기에 이 글은 위크오라에서 사용할 사용자 함수, 애드온 제작 및 수정에 쓰일 LUA코드를 주로 다룰겁니다. 위크오라와 애드온의 동작이 궁금하고, 직접 뜯어보고, 만들어 보고 싶은 분들이 보셨으면 합니다.


준비물 :
 Notepad++ - lua코드를 편하게 편집하기 위한 툴 정도로 보시면 됩니다. 메모장을 열어서 코드작성하셔도 전혀 문제되지 않습니다.


 https://wowpedia.fandom.com/wiki/World_of_Warcraft_API - 와우의 API들이 정리되어있는 페이지입니다. 코드를 작성하며 계속 참고하게 될거에요.


 https://wowwiki-archive.fandom.com/wiki/Events_A-Z_(full_list) - 와우의 이벤트들이 정리되어 있습니다. 특정 동작을 실행하는 트리거로 쓰입니다.




- API의 역할


코드를 작성하기에 앞서 API가 무슨 역할을 하는지 알았으면 합니다. 
우리가 만들고자 하는 애드온(위크오라)은 결국 게임 내의 데이터를 가공하여 보기 좋게 만드는겁니다. 일단 데이터를 받아올 수 있어야 무언가 가공할 수 있겠죠. 


처리 과정 중 첫번째인 데이터 받아오기를 이 API가 도와줄겁니다.
이 API는 블리자드에서 이미 만들어 놓았어요. 우리는 필요한 데이터를 리턴시켜줄 API명을 찾아서 골라쓰기만 하면 됩니다.
혹시 게임 내 채팅창에서 /dump로 시작하는 명령어를 쳐보신 적 있으신가요? 없다면 지금 쳐보세요.

/dump GetTime() --현재 시간을 리턴합니다. 
/dump UnitAura("player", 1) -- 플레이어의 첫번째 Aura를 리턴합니다. 
/dump AuraUtil.FindAuraByName("속박 풀린 변신수", "player") 
--플레이어의 버프 중 '속박 풀린 변신수'를 리턴합니다. 
현재는 dump로 불러왔기에 채팅창에 위에서 불러온 리턴값들이 차례대로 출력되는걸 확인하실 수 있을겁니다.
실제로 애드온을 만들때는 우리가 선언한 변수에 필요한 리턴값을 넣고 가공하게 될겁니다.




ex) 제가 작성한 애드온 중 일부입니다. 리턴값을 변수에 저장한 후 사용합니다.

name7, image7, _, _, duration7, time7 = AuraUtil.FindAuraByName("속박 풀린 변신수", "player") 
if name7 == "속박 풀린 변신수" then 
       ??
end
(lua의 문법은 구글링 하시는것을 추천드립니다. 저도 주로 쓰는 언어가 아니기에 애매한 부분은 매번 구글링하여 작성합니다.)




- Event의 역할


lua와 toc파일을 작성하고 명령어를 넣는다고 해서 특정 이벤트가 발생했을 때 해당 코드가 자동으로 뿅하고 실행되는 일은 없을거에요. 프로그램은 최초 로딩시에만 명령어들을 실행시킬거에요. 
단순 인터페이스 변경이라면 최초 한번만 실행되어도 문제가 없겠죠? (매크로로 인터페이스 바꾸기 가이드 글 https://www.inven.co.kr/board/wow/17/36985)


이벤트는 일반적으로 우리가 작성한 코드를 실행하는 트리거로 쓰이게 될거에요.
(플레이어가 특정 스킬을 사용했을 때 실행시키고 싶어요, 전투 로그를 감시하고 싶어요 등)


local Partyupdate = CreateFrame("Frame")
Partyupdate:RegisterEvent("GROUP_ROSTER_UPDATE")
Partyupdate:SetScript("OnEvent", function(self,event,...)
       ???
end)
위 코드는 파티의 인원이 변경될때마다 ??를 실행시킬거에요. 이벤트는 보통 이런식으로 쓰입니다.




저는 이런 이벤트들을 주로 써요.
"COMBAT_LOG_EVENT_UNFILTERED" --전투 기록이 발생할 때
"PLAYER_ENTERING_WORLD" -- 로딩 화면이 나타날 때
"GROUP_ROSTER_UPDATE" -- 파티 구성이 변경되었을 때
"UNIT_AURA" -- 버프나 디버프를 얻거나 잃을 때
"PLAYER_REGEN_DISABLED" -- 전투 시작
"PLAYER_REGEN_ENABLED" -- 전투 종료


이제 API로 받아온 데이터를 특정 상황에 꺼내서 사용할 수 있습니다.