시작하기
이미 돌아가는 스크립트를 분석하는 것이 가장 좋은 방법입니다.
가장 먼저 알아야 할 것은 스크립트와 프레임이 어떻게 불리느냐 하느 ㄴ것입니다.
기본적으로 3가지 파일형태가 관련됩니다. 주로 건드리게 될 화일은 .xml과 .lua화일입니다.
.xml화일이 윈도우/패널/프레임 과 버튼의 구조를 결정하고, 다양한 이벤트 처리기(event
handler)를 설정하고 .lua화일을 참조(reference)합니다. .lua는 기능을 제공하는 스크
립트/코드 화일입니다. FramXML.toc화일이 게임 시작시나 reloadui명령어로 불려질 화일
들의 목록을 저장합니다. 또한 binding.xml화일이 존재합니다. 이 화일은 특이한 구조를 가
지며, 새로운 단축키 설정(key binding)을 제공하기 위해 사용됩니다.
ui엔진이 불려질때(loads) 이 엔진은 Interface\FrameXML\FreameXML.toc화일을 찾
습니다. 이 화일에 쓰여진 각 화일이 불려집니다. #으로 시작하는 줄은 주석처리되며 해당 화일
은 불려지지 않습니다.
ui가 부르는 각 화일마다(FrameXML.toc화일을 포함해서) ui 엔진은 여러 지점에서 검색을
시작하는 듯 합니다. 우선 이것은 wow주 디렉토리에 상대경로를 가진 화일을 검색합니다. 예를
들어 이는 Interface\FrameXML.toc화일을 찾습니다.-예를들어 내컴퓨터에서는 f:
\World of Warcraft\Interface\FrameXML를 가장 먼저 찾아봅니다. 그 후에 게임 자
체에 내장된, 혹은 블리자드에서 제공된 화일을 찾습니다. 사실 이게 의미하는건
interface\framexml디렉토리만 건드리는한 별 문제는 없을 것이라는 점입니다. 하지만 이
화일 검색 알고리즘이 당신에게 의미하는 바는, 각 화일단위로 기본설정값(게임에 내장된) 을
덮어 써야 하기 때문에(override) 동시에 여러가지 mod를 받아서 돌리려고하면 문제가 생길
수 있다는 것입니다.
새로운 ui 패널을 만들고 싶다면 새로운 .xml화일을 만들고 그 이름과 경로를 framexml.
toc화일의 맨 밑에 추가 하십시오. 순서는 중요하지 않지만, 제일 밑에 추가하셔야 다른 사람들
이 보기 편합니다.
새로운 .lua화일을 부르기 위해서는 .xml에서 참조(reference) 해야 합니다. <ui></ui>
중간에 아래와 같은 것을 child node를 추가하십시오. (혹은 이미 있는 줄을 수정하십시오)
<Script file="myMod.lua"/>
이는 myMod.lua화일이 불려지게 할 것입니다.
UI 기본구조
.xml화일에 정의된 ui요소는 회귀적(recursive) 구조를 가집니다. 구조의 각 main 레벨
에 다음과 같은 형태를 볼 수 있습니다.(몇몇 요소는 생략가능합니다.)
<Frame name="..." ...>\
<Size>...</Size>
<Anchors>...</Anchors>
<Layers>...</Layers>
<Frames>...</Frames>
<Scripts>...</Scripts>
</Frame>
버튼 혹은 체크박스는 같은 형태를 지니지만 노드의 이름이 frame대신 button이나
checkbutton이 됩니다.
Size 보면 알수 있습니다. 프레임/버튼의 크기를 정합니다.
Anchors 다른 프레임과의 관계에서 위치를 정해주는 <anchor>노드의 목록을 지닙니다.
anchor는 2개의 기준점을 설정합니다(말그대로 점은 아닙니다) 하나의 점은 정의 중인 프레임
/버튼위에, 다른 하나는 다른 플레임/버튼 이나 global한 기준점에 있게 됩니다. 그리고
anchor는 이 두 점이 어떻게 관련될지(상대적인 위치) 를 설정합니다. ui엔진이 당신의 프레
임/버튼을 정해진 위치에 보여줄 것입니다.
Layers 윈도우 가장자리, 윈도우 배경, 기타등등에 사용될 텍스쳐를 정합니다. 일반적으로
레이어는 3개 있습니다. background(배경), border(가생이), artwork(도판). 각 프레임
은 이전 프래임 위에 보여집니다(border는 background위에, artwork는 border위에)
Frames 여기서 recursive한 성질이 보입니다. 이 노드의 자식(children)은 모두 프
레임 혹은 버튼이며, 각각의 프레임/버튼은 지금 여기서 설명되는 것과 동일한 구조를 가집니
다.
Scripts 이벤트 처리기(event handler) 가 들어갑니다. 가장 일반적인 것은
xxOnclick,OnEnter,OnLEave,xxOnload,OnEvent,Onupdate입니다. 첫 3개는 마우스 관
련된 처리기입니다. xxOnload는 UI가 시작되거나 재시작될때 불려집니다. Onevent는 게임 이
벤트가 일어날때마다 불립니다(예;채팅 메시지 도착, 피나 마나양의 변화, 기타등등등등).
onupdate는 "idle"이벤트이며, 거의 계속 불려진다고 보면 됩니다-아마도 화면이 바뀔때마
다(초당 10~60번) 한번씩. 이 함수의 첫번째 인수(arg1)은 초 단위로, 이전에 이 함수가 불
린지 시간이 얼마나 지났는지를 알려줍니다.
한가지 주의해야할 중요한 사실은 스크립트 블럭에서는 --(한줄 주석처리) 가 제대로 작동하지
않는듯해 보인다는 접입니다. 반드시 --[[~~ ]]를 사용해서 주석처리 하시기 바랍니다.
팁
- framexml.toc화일의 마지막은 반드시 캐리지 리턴(엔터) 로 끝나야합니다. 캐리지 리턴이
없으면 마지막줄은 불려지지 않습니다.
- wow를 재시작하지 않아도, 콘솔 창을 열고(`) reloadUI라고 치면 모든 ui가 다시 불려
집니다. 알트텝-화일수정-리로드 는 매우 편리합니다.
- http://www.lua.org/manual/5.0/ 에서 공식 lua메뉴얼을 참조하세요
- c나 그 비슷한 언어의 사용자라면 if나 for에서 then이나 do를 조심하세요.
- 변수명에서 대문자를 주의하세요. lua는 이런 경우에 새로운 변수를 만들어 버립니다.
- 불리안 변수: 참/거짓을 위해 0/1을 사용하지 마세요. 모든 숫자 변수(0을 포함) 은 참 으
로 취급됩니다. 거짓으로 취급되는것은 nil(값 없음) 과 불리안 변수의 거짓 값 뿐입니다.
- 주석처리 -- (한줄주석) 과 --[[ 주석 ]] (여러줄 주석) 이 있습니다. ]]--의 사용에 주
의하세요.
- 마지막에 일어난 에러만 popup창을 띄워준다는것을 기억하세요.
- 새로운 화일을 추가하거나 화일을 완전히 바?f을 때, wow를 다시시작해야만 제대로 로드 될
수 있습니다. reloadui는 FrameXML.toc를 다시 부르지 않습니다.
이미 돌아가는 스크립트를 분석하는 것이 가장 좋은 방법입니다.
가장 먼저 알아야 할 것은 스크립트와 프레임이 어떻게 불리느냐 하느 ㄴ것입니다.
기본적으로 3가지 파일형태가 관련됩니다. 주로 건드리게 될 화일은 .xml과 .lua화일입니다.
.xml화일이 윈도우/패널/프레임 과 버튼의 구조를 결정하고, 다양한 이벤트 처리기(event
handler)를 설정하고 .lua화일을 참조(reference)합니다. .lua는 기능을 제공하는 스크
립트/코드 화일입니다. FramXML.toc화일이 게임 시작시나 reloadui명령어로 불려질 화일
들의 목록을 저장합니다. 또한 binding.xml화일이 존재합니다. 이 화일은 특이한 구조를 가
지며, 새로운 단축키 설정(key binding)을 제공하기 위해 사용됩니다.
ui엔진이 불려질때(loads) 이 엔진은 Interface\FrameXML\FreameXML.toc화일을 찾
습니다. 이 화일에 쓰여진 각 화일이 불려집니다. #으로 시작하는 줄은 주석처리되며 해당 화일
은 불려지지 않습니다.
ui가 부르는 각 화일마다(FrameXML.toc화일을 포함해서) ui 엔진은 여러 지점에서 검색을
시작하는 듯 합니다. 우선 이것은 wow주 디렉토리에 상대경로를 가진 화일을 검색합니다. 예를
들어 이는 Interface\FrameXML.toc화일을 찾습니다.-예를들어 내컴퓨터에서는 f:
\World of Warcraft\Interface\FrameXML를 가장 먼저 찾아봅니다. 그 후에 게임 자
체에 내장된, 혹은 블리자드에서 제공된 화일을 찾습니다. 사실 이게 의미하는건
interface\framexml디렉토리만 건드리는한 별 문제는 없을 것이라는 점입니다. 하지만 이
화일 검색 알고리즘이 당신에게 의미하는 바는, 각 화일단위로 기본설정값(게임에 내장된) 을
덮어 써야 하기 때문에(override) 동시에 여러가지 mod를 받아서 돌리려고하면 문제가 생길
수 있다는 것입니다.
새로운 ui 패널을 만들고 싶다면 새로운 .xml화일을 만들고 그 이름과 경로를 framexml.
toc화일의 맨 밑에 추가 하십시오. 순서는 중요하지 않지만, 제일 밑에 추가하셔야 다른 사람들
이 보기 편합니다.
새로운 .lua화일을 부르기 위해서는 .xml에서 참조(reference) 해야 합니다. <ui></ui>
중간에 아래와 같은 것을 child node를 추가하십시오. (혹은 이미 있는 줄을 수정하십시오)
<Script file="myMod.lua"/>
이는 myMod.lua화일이 불려지게 할 것입니다.
UI 기본구조
.xml화일에 정의된 ui요소는 회귀적(recursive) 구조를 가집니다. 구조의 각 main 레벨
에 다음과 같은 형태를 볼 수 있습니다.(몇몇 요소는 생략가능합니다.)
<Frame name="..." ...>\
<Size>...</Size>
<Anchors>...</Anchors>
<Layers>...</Layers>
<Frames>...</Frames>
<Scripts>...</Scripts>
</Frame>
버튼 혹은 체크박스는 같은 형태를 지니지만 노드의 이름이 frame대신 button이나
checkbutton이 됩니다.
Size 보면 알수 있습니다. 프레임/버튼의 크기를 정합니다.
Anchors 다른 프레임과의 관계에서 위치를 정해주는 <anchor>노드의 목록을 지닙니다.
anchor는 2개의 기준점을 설정합니다(말그대로 점은 아닙니다) 하나의 점은 정의 중인 프레임
/버튼위에, 다른 하나는 다른 플레임/버튼 이나 global한 기준점에 있게 됩니다. 그리고
anchor는 이 두 점이 어떻게 관련될지(상대적인 위치) 를 설정합니다. ui엔진이 당신의 프레
임/버튼을 정해진 위치에 보여줄 것입니다.
Layers 윈도우 가장자리, 윈도우 배경, 기타등등에 사용될 텍스쳐를 정합니다. 일반적으로
레이어는 3개 있습니다. background(배경), border(가생이), artwork(도판). 각 프레임
은 이전 프래임 위에 보여집니다(border는 background위에, artwork는 border위에)
Frames 여기서 recursive한 성질이 보입니다. 이 노드의 자식(children)은 모두 프
레임 혹은 버튼이며, 각각의 프레임/버튼은 지금 여기서 설명되는 것과 동일한 구조를 가집니
다.
Scripts 이벤트 처리기(event handler) 가 들어갑니다. 가장 일반적인 것은
xxOnclick,OnEnter,OnLEave,xxOnload,OnEvent,Onupdate입니다. 첫 3개는 마우스 관
련된 처리기입니다. xxOnload는 UI가 시작되거나 재시작될때 불려집니다. Onevent는 게임 이
벤트가 일어날때마다 불립니다(예;채팅 메시지 도착, 피나 마나양의 변화, 기타등등등등).
onupdate는 "idle"이벤트이며, 거의 계속 불려진다고 보면 됩니다-아마도 화면이 바뀔때마
다(초당 10~60번) 한번씩. 이 함수의 첫번째 인수(arg1)은 초 단위로, 이전에 이 함수가 불
린지 시간이 얼마나 지났는지를 알려줍니다.
한가지 주의해야할 중요한 사실은 스크립트 블럭에서는 --(한줄 주석처리) 가 제대로 작동하지
않는듯해 보인다는 접입니다. 반드시 --[[~~ ]]를 사용해서 주석처리 하시기 바랍니다.
팁
- framexml.toc화일의 마지막은 반드시 캐리지 리턴(엔터) 로 끝나야합니다. 캐리지 리턴이
없으면 마지막줄은 불려지지 않습니다.
- wow를 재시작하지 않아도, 콘솔 창을 열고(`) reloadUI라고 치면 모든 ui가 다시 불려
집니다. 알트텝-화일수정-리로드 는 매우 편리합니다.
- http://www.lua.org/manual/5.0/ 에서 공식 lua메뉴얼을 참조하세요
- c나 그 비슷한 언어의 사용자라면 if나 for에서 then이나 do를 조심하세요.
- 변수명에서 대문자를 주의하세요. lua는 이런 경우에 새로운 변수를 만들어 버립니다.
- 불리안 변수: 참/거짓을 위해 0/1을 사용하지 마세요. 모든 숫자 변수(0을 포함) 은 참 으
로 취급됩니다. 거짓으로 취급되는것은 nil(값 없음) 과 불리안 변수의 거짓 값 뿐입니다.
- 주석처리 -- (한줄주석) 과 --[[ 주석 ]] (여러줄 주석) 이 있습니다. ]]--의 사용에 주
의하세요.
- 마지막에 일어난 에러만 popup창을 띄워준다는것을 기억하세요.
- 새로운 화일을 추가하거나 화일을 완전히 바?f을 때, wow를 다시시작해야만 제대로 로드 될
수 있습니다. reloadui는 FrameXML.toc를 다시 부르지 않습니다.
다음검색