wow EVENT, API

Hisop·2023년 4월 11일
0

WOW Addon Dev

목록 보기
7/9
post-thumbnail

이전 글을 마지막으로 Ace3.0은 더이상 깊게 분석할 필요가 없었다.
내가 만들고자 하는 애드온은 위 기능으로 충분했고 wow에서 제공하는 API, 트리거가 될 event 분석, lua의 문법에 적응하는 단계만 남았다.


EVENT

wow클라이언트에선 대부분의 행위가 이벤트를 발생시킨다. 마우스의 움직임, 키보드 키 하나하나가 모두 이벤트다. 당연히 모든 이벤트를 볼순 없다. 10초만 지나도 1만개가 넘는 이벤트가 쏟아져나온다.
수많은 이벤트들 중 내가 필요한 이벤트만 골라서 써야했다.

wowwiki - Events A-Z 와우위키의 이벤트 페이지
wowpedia - Events 와우피디아의 이벤트 페이지
EventTracker 인게임에서 발생하는 이벤트를 볼 수 있는 애드온

위 페이지와 애드온을 참고하여 내 코드를 작성할 수 있었다.

RegisterEvent("RAID_INSTANCE_WELCOME")

function HAH:RAID_INSTANCE_WELCOME()
	~
end

RegisterEvent를 통해 찾고자 하는 Event를 설정할 수 있었고, 함수 형태로 해당 이벤트를 만들어 원하는 코드를 실행할 수 있었다.
(일단은 이걸 오버라이딩이라고 이해하고 넘어갔다...)

LOOT_HISTORY_AUTO_SHOW - LootHistory Frame에 정보를 전달한 후 해당 index를 Show 해야할 때 실행된다.

ENCOUNTER_LOOT_RECEIVED - 현재 확장팩에선 루팅 방식이 수정되어 쓰이지 않는 방식으로 옛 레이드 던전에서 아이템을 루팅할 때 실행

RAID_INSTANCE_WELCOME - 레이드 인스턴스에 진입 시
TRADE_SHOW - 거래창을 띄울 때
TRADE_PLAYER_ITEM_CHANGED - 거래창에서 player가 아이템을 올릴 때 
UI_INFO_MESSAGE - 시스템 메시지 중 UI_INFO에 관련된 메시지
PLAYER_MONEY - 플레이어의 소지금이 변경될 때 
BOSS_KILL - 보스를 쓰러트렸을 때

위의 이벤트들을 사용했다.
원래는 아이템 드랍을 감지하는데 LOOT_ITEM_AVAILABLE을 사용하고자 했으나 해당 이벤트가 매개변수를 제대로 전달하지 못하는 문제가 있어 LOOT_HISTORY_AUTO_SHOW를 사용하게 되었다.

LOOT_HISTORY_AUTO_SHOW는 단순히 LootHistory Frame이 표시해야하는 index의 정보만을 담고 있는 이벤트라 추가적으로 API를 사용해 아이템의 정보를 가져와야했다.


API

대부분 클라이언트에 있는 정보(아이템 혹은 플레이어의 정보)를 가져오거나 메세지를 출력해야할 때 사용했다.

SendChatMessage(message, channel)
GetItemInfo(itemname)
C_LootHistory.GetItem(index)
GetTradePlayerItemInfo(index)
GetGameTime()
GetMoney()
UnitName(unitname)

위의 API를 사용했다. (역시 와우위키와 와우피디아를 참고)
대부분 직관적인 이름과 직관적인 리턴값을 가지고 있었다. 변수에 적절하게 넣어서 처리해주었다.


만들고자 하는 목표가 간단해서 구현 자체는 전혀 부담되지 않았으나 이 부분이 발목을 잡았다.

와우위키와 와우피디아 모두 공식페이지가 아닌 팬페이지여서 API에 대한 업데이트가 되어있지 않는 경우도 빈번했고 정보를 얻을 다른 수단은 거의 없었다.
해외 애드온 포럼 정도? 국내 애드온 포럼은 없다. 그냥 없다.

결국 대부분 인게임에서 어떤 이벤트가 발생하는지 모니터하고 테스트해서 적용시켰다.

profile
42seoul - C, C++ / YagomAcademy - Swift

0개의 댓글