글이 길어서 답글로 쓰려했지만 매크로게시판은 답글쓰기가 안되네요.

애드온 쓰라는 말 하지말라고 하셨는데 결론 부터 말씀드리면 애드온이 아닌 매크로로는 해결 불가능합니다. 매크로의 한계점이라고 보시면 됩니다.

예를 들어주신 매크로들을 보면 /run 으로 시작하는 코드가 있는데 이것은 매크로속에 넣은 스크립트 코드일 뿐 사실 매크로라고 보긴 좀 힘듭니다. 관점에 따라 어짜피 매크로 속에 있으니 매크로가 맞다고 할 수도 있긴 합니다.

애드온 속의 코드들과 매크로 속의 코드와의 가장 큰 차이점이라면 애드온속의 코드는 메모리속에 상주하면서 어떤 스킬이 성공적으로 시전되거나 실패시 발생하는 이벤트를 주기적으로 체크해서 메시지를 출력하는 등등의 동작을 할수 있지만 매크로속의 코드는 한번 실행이 되고 사라집니다.

예를 들어주신 매크로 (1)번을 설명드리면 /run으로 시작하는 코드가 하는 일은 현재 무쇠껍질이 쿨중이 아니면(시전이 가능하면) 귓말을 보내는 역활입니다. 현재 무쇠껍질이 쿨중(시전이 불가능하면)이면 귓말을 보내지 않습니다. /cast로 시작하는 매크로 파트는 아시는 바와 같이 스킬을 시전하는 역활입니다.

결과적으로 보면 /run 파트는 대상이 사거리 밖이라던가 잘못된 대상(아군에게 시전해야 되지만 적군을 대상으로 잡고 있다던가 등등)이라도 스킬이 쿨중이 아니면 실제 스킬의 시전 여부와는 관계없이 귓말을 보내겠죠. 또 다른 문제점으로는 스킬이 쿨중이 아니고 사거리도 되고 적정한 대상을 타겟으로 잡고 있다고 하더라도 귓말을 보낸 직후 스킬을 시전하는 과정(즉시 시전 스킬이라고 하더라도 high ping에 의한 약간의 시차가 발생할수 있기에)중에 차단을 당한다던가 시전자가 메즈를 당한다던가 등등의 어떤 이유로 스킬시전이 실패할 가능성도 충분히 있습니다. 결론적으로 매크로는 의도했던 동작을 하지 못하게 되는 거지요.

가장 좋은 방법은 매크로가 스킬 시전이 성공적으로 완료되었는지를 체크할수 있으면 좋겠지만 아쉽게도 방법이 없습니다. 그래서 편법으로 최대한 원하는 동작을 할수있게 만든게 예를 들어주신 (1)번 매크로입니다. 물론 여기에 IsSpellInRange("무쇠껍질,"target")을 추가해서 대상이 사거리 밖에 있는 경우는 제외되게 할수는 있지만 그렇더라도 100%완벽한 동작은 보장하지 못합니다.

정확하게 스킬시전이 완료된 경우에만 메시지를 출력하는 애드온(예를 들면, nnCast등)의 경우 메시지 출력하는 과정을 보면 이렇습니다. 메모리에 상주하고 있는 이벤트 핸들러라고 하는 코드가 제작자가 지정해 놓은 특정 이벤트가 발생하면 원하는 그 다음 동작을 실행하게 하는 방식입니다. 애드온은 필터가 되지 않은 모든 전투로그를 살펴보고 있다가 애드온에서 지정한 특정 스킬에 대한 SPELL_CAST_SUCCESS 이벤트가 발생하면 메시지를 보내는 코드 부분을 실행하고 다시 동일한 이벤트가 발생할 때까지 대기 하는 과정을 와우가 실행되고 있는 동안 무한 반복합니다.

매크로는 이 무한 반복과정을 할수가 없습니다. 그리고 (1)번 매크로에서 보듯이 코드를 먼저 실행해서 메시지를 보내고 다음에 스킬을 시전하는데 반대로 스킬시전을 먼저하고 메시지를 나중에 보내면 해결이 될까요? 전혀 해결책이 못되죠. 스킬을 먼저 시전해 버리면 쿨이 돌기 때문에 코드 파트는 메시지는 보낼수 없게 됩니다.

그래도 반드시 100%스킬이 시전되었을 경우에만 귓말을 보내고 싶다면 해결책은 애드온뿐입니다. 이미 만들어진 애드온을 받아 쓰던지, 받은 애드온을 적당히 자신의 의도대로 수정하던지, 새로 자신이 만들어 쓰던지 셋중 하나입니다. 다행히 위와 같은 기능은 단 몇줄만의 코드로 애드온을 만드는게 가능합니다.

간단히 애드온을 만들어 보겠습니다.

Addons 폴더내에 MySpellCastSuccess라는 폴더를 만듭니다. 예를 들면 아래와 같은 구조로 폴더가 만들어 지겠죠.

C:/Program Files/World of Warcraft/Interface/AddOns/MySpellCastSuccess

메모장을 열어서



위 처럼 입력 하시고 MySpellCastSuccess.lua라는 이름으로 위에서 만들어 놓은 폴더에 저장하세요.

다시 메모장에



위 처럼 입력하시고 MySpellCastSuccess.toc라는 이름으로 위에 만들어 놓은 폴더에 저장하세요. 자 그럼 이제 MySpellCastSuccess폴더 안에

MySpellCastSuccess.lua
MySpellCastSuccess.toc

이렇게 두개의 파일이 있습니다.

와우를 실행하고 애드온 목록에 MySpellCastSuccess항목이 체크 되어 있나 확인하시고 접속을 하신후 희생의 손길을 쓰시면 쓴 대상에게 귓말을 갈겁니다.

게임내에서 쓰는 매크로는 아래의 예처럼 /run코드 부분없이 순수한 매크로로 만드시면 됩니다. 조건은 원하시는 데로 알맞게 추가하거나 수정하세요.

/시전 [@mouseover,help][help] 희생의 손길

MySpellCastSuccess는 원하시는 이름으로 변경하셔도 됩니다. 단, 폴더명, lua 파일명, toc 파일명, toc 파일 내에 포함된 MySpellCastSuccess.lua 부분 이렇게 4곳의 이름은 반드시 동일해야 합니다.

파일 생성이 귀찮으시면 첨부파일 받으세요. 이상 없겠지만 혹시 모르니 바이러스 체크하시고요.