만역 여러분의 애드온 세팅이 지금도 누군가에 의해 아주 잘 관리되고 있다면 (통합애드온) 읽을 필요 없다.



소판다를 앞두고 아직까지 베타나 PTR 중 아무 것이라도 설치하고 애드온을 관리하지 않은 잉여라면

이제 곧 몇 시간 뒤 패치로 인해 오만 잡상 애드온의 오작동과 엄청난 렉,

그리고 (메시지 표시를 켜뒀다면) 끝없이 뜨는 Lua 에러 메시지에 엌소리가 날 것이다.



후회하면 뭐하나. 이미 늦은걸. (그것도 그렇지만 사실 격변 막판에 애드온 업뎃이 끊긴 게 좀 많다 ㅡ,.ㅡ)

급한 불부터 꺼야겠다면 다음 가이드를 참조한다.




1. 백업은 필수. Interface, WTF 둘 다 백업한다.


2. 매 패치마다 그렇듯 와우를 실행하고 구버전 애드온 활성화를 해준다.


3. 실행하고 잠시간 수많은 애드온 에러에 범벅이 된 화면을 음미한다. 애드온게이라면 더더욱 향이 짙을 것이다.


4. 인터페이스 설정으로 가서 도움말에서 Lua 메시지를 표시하도록 체크한다.


5. 모든 애드온 코드에서 Search & Replace를 수행할 수 있는 에디터가 필요하다. Notepad++라면 족할 것이다.
다음 문자열을 애드온 폴더의 모든 *.lua와 *.xml 파일에서 찾아 바꿔준다.

*애드온 에러메시지를 보고 코드를 열어 그 부분만 수정해줘도 좋고, 확 다 돌려버려도 웬만하면 문제는 없을 것이다
*Lua는 대소문자를 가린다는 점에 유의. 복붙하자.
*에러메시지 뜰때마다 보고 해당하는 문자열만 전체 파일 바꾸기로 바꿔주는 게 가장 편하다.
*WTF 폴더의 내용물은 보통 안 돌려도 되지만 필요하다면 돌린다. 가끔 WTF에 코드를 넣는 변태 애드온들이 있다.



GetActiveTalentGroup → GetActiveSpecGroup
SetActiveTalentGroup → SetActiveSpecGroup
GetNumTalentGroups → GetNumSpecGroups
GetPrimaryTalentTree → GetSpecialization
GetUnspentTalentPoints → GetNumUnspentTalents
GetNumTalentTabs → GetNumSpecializations
GetTalentTabInfo → GetSpecializationInfo
GetTalentTreeRoles → GetSpecializationRole
IsRaidLeader → UnitIsGroupLeader
IsPartyLeader → UnitIsGroupLeader
UnitIsPartyLeader → UnitIsGroupLeader
IsRaidOfficer → UnitIsGroupAssistant
UnitIsRaidOfficer → UnitIsGroupAssistant
GetNumPartyMembers → GetNumSubgroupMembers
GetRealNumPartyMembers → GetNumSubgroupMembers
GetNumRaidMembers → GetNumGroupMembers
GetRealNumRaidMembers → GetNumGroupMembers
RAID_ROSTER_UPDATE → GROUP_ROSTER_UPDATE
PARTY_MEMBERS_CHANGED → GROUP_ROSTER_UPDATE
LootSlotIsItem → LootSlotHasItem
UIPanelButtonTemplate2 → UIPanelButtonTemplate



6. 와우를 끄고 켠다. 리로드를 해도 되긴 하다.

이 외에 해당하는 문제 (특히 특성별 GetSpellInfo 계열 Invalid spell slot 에러)는 애드온 업데이트를 기대하자.

남은 잡 애드온들이 에러를 뿜는다면 일단 꺼두는 게 좋다.








아래는 참을성 없는 분을 위한 수정 경험담.

Invalid spell slot 에러가 나는 애드온이 한두개가 아니라서 (RangeDisplay, ForteXorcist, Prat)
나중에 수정할 일을 대비해 기록보관도 할 겸 수정방법을 적는다. 직접 수정하려면 Lua 지식이 필요하다.

문제가 되는 함수(군)의 레퍼런스는 아래 링크에 있다.


대개 스펠 나열 코드에서 문제가 일어난다. 딱히 이 API에서 변화에 블포 언급이 없었던 걸로 알고 있지만,
구글링해보니 격변에서는 잘못된 슬롯 (첫번째 인자)에 nil을 뱐환하나 이젠 에러를 일으키는 것으로 변경된 듯 하다.

(덕분인지 모르겠지만 특성 기술 3개를 매크로로 묶어도 글쿨에 걸려 시전 안되는 일이 없는 건 좋다 ㅎㅎ)



예제로 RangeDisplay는 다음 코드에서 에러를 뿜는다.


local spell, rank = GetSpellName(i, BOOKTYPE_SPELL);


이걸 다음과 같이 수정하면 해결할 수 있다. (pcall은 구글링하기 바람)


local spell, rank
pcall(function() spell, rank = GetSpellName(i, BOOKTYPE_SPELL); end))


pcall 안에 lambda function이 들어가기에 local 선언을 바깥으로 빼줘야 한다.
(예문으로 든 spell, rank는 어차피 nil로 초기화된다)

비단 GetSpellName 뿐 아니라 GetSpellInfo, GetSpellBookItemInfo 등 수많은 기술 조회 API들이 이런 변경을 겪었기 때문에, 에러가 날때마다 Invalid spell slot 에러면 이렇게 뗌빵해놓을 것을 추천한다.