안녕하세요. 와우메카 무무입니다.
월드 오브 워크래프트는 게이머가 직접 사용자 인터페이스(UI: User Interface)를 원하는 대로 디자인할 수 있습니다. 메뉴 바의 위치 설정이나 재배치, 인터페이스 스킨 설정, 각 오브젝트의 속성을 게임 내 인터페이스에서 어떻게 다룰 것인지에 대한 정의 외에도 기존 게임 내에선 활용되지 않고 있던 오브젝트별 추가 속성의 처리를 정의하거나 직접적인 인터페이스의 확장도 가능합니다.
이러한 것이 가능한데는 월드 오브 워크래프트의 UI 구조가 XML과 Lua 스크립트의 연동을 통해 구현되도록 설계되었기 때문입니다.
XML은 HTML의 확장된 규격으로 HTML이 단순히 이미 가공된 정보를 테이블과 표, 태그를 이용하여 단순히 보여주는 기능을 가진데 반해 XML은 DB로부터 능동적으로 데이터를 받아 가공할 수 있는 구조입니다.
즉, 일방적인 데이터 표시가 아닌 데이터 교환을 목적으로 제정된 것이 XML입니다. HTML이 어떻게 보이는가에 대해 기술하는 언어라면, XML은 데이터와 텍스트를 구별하여 다르게 처리하느냐에 초점이 맞춰져 있죠. 때문에 게임 내에서 플레이어에게 전달되는 모든 정보는 XML형태로 가공될 수 있으며, Lua 스크립트를 통해 이를 자동화할 수 있는 것입니다.
이 기사는 과거 카키104님이 번역하여 올려주신 월드 오브 워크래프트 인터페이스 제작 팁을 정리/ 보완한 것입니다.
---------------------------------------------------------------------------------------------
스크립트 제작을 시작할 때 몇 가지 기본 단계가 있는데, 내가 시작할 때 도움을 받았던 몇 가지 팁을 소개한다. 나는 경험이 더 많은 수정자들에 도움이 되었으면 하는 바람이다.
일단 당신이 제작에 들어가기에 앞서서 인터페이스 수정 가이드라인을 읽어보기를 권장한다.
그 가이드라인에는 당신이 버그를 피하는데 도움이 되지는 않으나 그것은 다른 사람이 작성한 스크립트를 이해하고 당신이 스크립트를 작성하는 데는 많은 도움이 될 것이다.
시작하기
스크립트를 이해하는 가장 최선의 방법은 기존의 스크립트를 읽어보는 것이다. 그것은 UI 스크립트 엔진의 힘과 유연성을 보여주고 코드에서 어떤 함수를 사용해야 하는지를 찾는데 도움을 줄 것이다.
눈으로 한번 보거나 코드를 무엇을 할 수 있는 준비가 되면 다음을 본다.
처음으로 생각하는 것은 어떻게 스크립트와 프레임을 불러들이는지 알고 싶을 것이다.
거기에는 3가지 기본적인 파일형태가 필요하다. 두 가지 파일은 .xml파일과 .lua파일이다.
.xml파일은 윈도우/패널/프레임/버튼의 구조를 정의하고 이벤트 핸들러를 지정하며, .lua 스크립트와의 연결을 설정한다.
.lua파일은 당신이 필요한 새로운 함수를 제공하는 스크립트/코드를 제공한다.
마지막으로 FrameXML.toc 파일이 필요한데 이 파일에는 인터페이스의 모든 목록이 포함되어 있고 게임이 시작될 때 불러들인다. 또한 bindings.xml파일도 불러들이는데 이 파일에는 특정 구조와 당신이 자신의 스크립트에서 사용할 수 있는 키 항목들이 들어있다.
UI엔진을 불러들일 때, 엔진은 InterfaceFrameXMLFrameXML.toc파일을 살펴보고, 리스트의 각 항목들을 불러온다. 리스트의 시작이 "#"일 경우에는 주석으로 처리하지 않는다.
UI를 불러들일 때, FrameXML.toc파일도 포함되고, 여러 지역에서 검색을 하는 코드가 보일 것이다. 우선은 와우가 설치되어 있는 폴더의 상대 경로를 찾아본다. 예를 들어 InterfaceFrameXML.toc를 찾는다고 했을 때 처음에는 내 컴퓨터의 드라이브:World of WarcraftInterfaceFrameXML을 검색한다. 이는 당신이 InterfaceFrameXML폴더를 만들고, 당신이 만든 파일을 그곳에 넣어야함을 말한다. 왜 검색 알고리즘을 알고 있어야 하는가는 당신이 원하는 인터페이스를 다운로드 받아서 실행하고자 할 때 FrameXML.toc파일과 bindings.xml파일을 덮어써야할지도 모르기 때문이다.
그래서 만약 당신이 새로운 UI패널을 만들길 원한다면, 새로운 .xml파일을 만들고 FrameXML.toc파일의 맨 끝에 추가해야한다. 비록 어디에 추가하는 지가 중요하지는 않지만 다른 사람들이 어떤 스크립트를 추가했는지, 어떤 것이 변경되었는지를 쉽게 파악하여 또 다른 사람의 스크립트와 합치는 작업 등 을 하기가 쉬워진다.
.lua파일을 로드하기 위해서는 .xml파일에 연결이 되어있어야 한다. 메인 윈도우에 버튼을 추가 할 때 <Ui></Ui>를 .xml파일에 추가한다.
<Script file="myMod.lua"/>
위와 같은 방법으로 당신의 파일을 불러 올 수 있다.
UI 구성요소의 구조
UI의 구성은 .xml파일에 되부름 구조로 정의되어 있다. 각 `main`은 다음과 같은 구조를 가진다.(어떤 구성요소는 선택사항이다)
<Frame name="..." ...>
<Size>...</Size>
<Anchors>...</Anchors>
<Layers>...</Layers>
<Frames>...</Frames>
<Scripts>...</Scripts>
</Frame>
크기(Size)는 프레임과 버튼의 크기를 지정한다.
앵커(Anchor:위치 고정 값)는 <anchor>란 항목에 있으며, 프레임에서의 상대적인 위치를 지정한다. 앵커는 2가지 값을 가지는데 하나는 당신이 정의한 프레임/버튼 위에서의 위치이고 다른 하나는 전체적인 프레임/버튼 위에서의 위치이다. 2가지 값은 두 위치가 어떻게 관련되는지와 UI엔진이 당신의 컨트롤을 어떤 위치에 배치할지를 나타낸다.
레이어(Layer)는 당신이 윈도우 앵글에 당신의 택스처, 배경, 기타를 정의하는 곳이다. 그 것은 BACKGROUND, BORDER, 그리고 ARTWORK의 3종류로 구성된다. 각 각은 서로의 위에 표시된다. (역자 : BACKGROUND -> BORDER -> ARTWORK 순서로 표시)
프레임(Frames)
프레임은 되부름 구조를 가지고 있다. 이 노드는 모든 프레임이나 버튼의 자식이고, 서로는 동일한 구조를 가지고 있다. 슬프게도 이 구조의 XML파일은 텍스트 에디터로 읽을 수 있지만 보기가 어렵다.
스크립트(Scripts)
스크립트는 당신의 이벤트 핸들러를 입력하는 곳이다. 일반 적으로 핸들러는 OnClick, OnEnter, OnLeave, OnLoad, OnEvent와 OnUpdate이다.
처음 3개의 이벤트는 마우스관련 핸들러이다.
OnEvent는 어느 대나 게임의 이벤트를 발생 시킨다(채팅 메시지를 받거나, 마나나 체력이 변경되거나 등등).
OnUpdate는 `idle`이벤트를 계속 호출하는데 아마도 프레임을 표시할 때 한번 발생 할 것 같다. 첫 번째 인수는 이것이 얼마나 오래 되었는지를 말하며 두 번째 인수는 언제 마지막으로 호출되었는지를 이야기한다.
이외에도 많은 이벤트가 있고, 샘플 스크립트파일을 읽어 보면 각 이벤트 핸들러는 자신이 사용될 때 번역되어 실행되며, 그래서 당신의 이벤트 핸들링이 매우 간단하여 Lua파일을 추가로 필요로 하지 않을 것이다.
한 가지 중요한 것은 주석을 적을 때 적은 양의 주석은 "--"를 이용하고 많은 양의 주석은 "--[[ 주석 ]]"을 이용해야 한다는 것이다.
이 가이드라인은 몇 명의 개발자들이 함께 알파 버전을 연구하여 스크립트를 작성하는 방법과 수정하는 방법에 대한 내용을 다루고 있다. 그들은 서로가 유기적으로 결합되고, 수정할 수 있고, 좀 더 나은 구성을 가질 수 있도록 하는 간단한 방법을 추천한다. 나는 새로운 가이드라인을 갱신할 것이다.
가이드라인
당신이 사용하는 변수에는 `local`이라는 선행자를 붙여라. 함수의 외부에서 선언할 때 `local`의 의미는 이 변수는 현재의 스크립트 파일 내부에만 존재한다는 의미를 가진다.
getglobal()함수와 현재 스크립트 파일의 외부의 변수의 사용을 피해야 한다. 만약 당신이 전역변수를 필요로 한다면 선행자는 당신의 스크립트 파일이름을 사용하라.
예)
QuestShare_VarName or QS_VarName
전역변수 이름의 첫 문자는 대문자로 시작하고, 지역변수를 선언 할 때는 소문자로 시작하라. 이것이 두 가지를 구분하기 쉬울 것이다.
예)
전역변수: QuestShare_PlayerData = "x";
지역변수: local countLoop = 1
설명을 시작할 때 당신의 스크립트 이름을 입력한다.
예)
-- begin Quest Share v2.2 - Adding config check
QuestShareStuff();
-- end Quest Share v2.2
Lua에서 설명 블럭은 --[[와 ]]-- 사이를 이야기하며 그 사이에서는 여러 줄이 설명이 된다.
예)
--[[ Quest Share v2.2 - Block Comment
for i=1,10,1 do
DoSomething();
end
]]--
모든 스크립트는 `enabled`란 전역 값을 가진다. 이 값은 모든 스크립트 환경설정작업을 쉽게 할 수 있도록 하며, 당신의 스크립트를 On 시키거나 Off 시키는 작업이 가능하다.
형식은 자신의 스크립트이름_ModEnabled 이다.
예)
if (QS_ModEnabled == true) then
-- mod code here
end
다른 모든 코딩은 블리자드의 공식 UI코딩을 따르면 된다.
---------------------------------------------------------------------------------------------
다음으로는 Lua 언어의 스크립트를 실제로 적용하여 구현되는 코스모스 와우 모드의 설치 및 동작에 대해 알아보겠습니다.
설치하기(EXE파일)
프로그램을 실행시킨다. 그리고 월드 오브 워크레프트가 설치된 폴더를 지정한다. 프로그램이 설치되어 있어야지만 설치가 가능하다.
ZIP파일
윈도우 유저가 아닌 분들을 위한 선택사항이다.
첫째로, 월드 오브 워크레프트 폴더에 "Interface"란 이름의 폴더를 만든다.
다음 unzip을 이용해 해당 폴더에 압축을 해제한다. 아마도 "Interface"란 폴더에 "Bindings.xml"파일이 보일 것이며 그것을 월드 오브 워크레프트 폴더로 복사한다.
특징
코스모스는 아래와 같은 여러 함수 모듈을 포함하고 있다.
퀘스트 쉐어 (Quest Share)
퀘스트 쉐어는 그룹의 플레어들의 상호작용이 용이하게 하는 모듈이다. 당신이 파티에 참여하고 그 파티원이 퀘스트 쉐어를 사용한다면 그가 가지고 있는 퀘스트 중 당신이 수행 가능한 퀘스트의 상세정보가 퀘스트 쉐어의 윈도우를 통해서 출력된다. 퀘스트 쉐어의 윈도우는 당신이 사용하는 퀘스트 정보 화면에 "Quest Share"라는 이름의 버튼이 있다.
아마 퀘스트 쉐어는 당신이 속한 파티 구성원들의 퀘스트 목록을 맨 위에서 볼 것이다. 이것은 당신이 퀘스트를 수행하기 위해 이동하는데 도움을 줄 것이다. 물론 그룹의 구성원들이 수행하지 않았을 경우에만!
컴벳헬퍼 (Combat Helper)
컴벳헬퍼는 플레이어의 전투를 지원하기 위해 디자인된 모듈이다. 이것은 상당히 하기 싫은 일들을 자동으로 수행하는 것을 지원한다. 또한 이것은 명령어를 입력하는 방식으로 사용할 수 있다. 간단한 명령어를 채팅 윈도우에 입력하면 사용이 가능하다.
명령과 동작 설명
/noyells : 소리치는 메시지를 듣지 않는다.
/allowyells : 소리치는 메시지를 듣는다.
/timedcast N spell : 지정된 마법을 N초마다 시전한다. 예) /timedcast 170 Find Herbs
/autoloot [on|off] : 자동 루팅을 키거나 끌 수 있다. 루팅할 대상을 클릭하면 자동으로 내용물을 가방에 넣는다.
/autocast spell : 해당 마법이 사라지면 자동으로 마법을 시전한다. 이것은 전투 메시지 창에 해당 이름의 마법이 사라진다는 메시지가 나와야한다.
예) /autocast Lightning Shield (rank 2)
/stopcast spell : 자동 시전 마법 기능의 사용을 중지한다. 몇 단계인지는 표시할 필요가 없다.
/autobuff target spell : 타겟으로 지정된 플레이어에게 자동으로 마법을 시전하며 해당 마법 효과가 사라지면 다시 시전한다. 타겟의 이름은 케릭터의 이름이나 "player",
"party1".."party5", "target" 등을 사용할 수 있다.
예) /autobuff Xiphoris Seal of Might
/stopbuff target [spell] : 자동 버프마법 사용 기능을 중지한다. 마법의 이름은 지정하지 않으면 모든 마법사용이 중지 된다.
/setreserve spell amt : 마나를 채우는 마법을 자동으로 시전 한다. 만약 자동으로 마법이 시전 되지 않으면 아직 충분한 마나가 있기 때문이다. 몇 단계인지는 필요하지 않다.
/acclear : 모든 자동 시전 마법사용을 지운다. 자동 루팅에는 적용되지 않는다.
/acsave : 현제 자동 시전 목록을 저장한다(자동루팅 상태도 저장된다).
/achelp : 사용할 수 있는 모든 목록과 도움말이 제공된다.
킬로그 (Kill Log)
킬로그는 기본적인 키가 적용되는 모든 윈도우에 작용하여 당신이 공격한 것, 죽인 것, 당신을 죽인 모든 정보를 유지한다. 이것은 몬스터로 부터 얻을 수 있는 경험치와 타입, 당신이 몬스터를 평균적으로 얼마만큼 공격했는지 등의 당신이 생각할 수 있는 모든 것들을 포함한다. 이런 정보는 매우 유용할 것이다.
트레이트스킬 모드(Tradeskill Mod)
다수의 어떤 기술스킬도 완수하나 다량의 제련 기술은 그렇지 못하다. 기술스킬 윈도우를 보면 버튼 위에 마우스를 대면 설명 보게 될 것이다. 해당 스킬을 반복하기 원하는 수를 선택하고, 생성을 누른다. 트레이드스킬모드는 당신을 지겨워하지 않도록 돌봐줄 것이다.
센트럴라이즈 컨피그레이션(Centralized Configuration)
코스모스는 당시의 게임메뉴 오른쪽에 환경설정이 있고 단지 Escape를 누르면 된다. 이것은 하나의 윈도우의 모든 권한을 사용자에게 제공한다. (역자 : 윈도우의 위치 크기 등이 설정 가능하게 하는 것 같다). 추가적으로 이것은 어떤 모듈이라도 지원가능 하게 만들어 져있어서 미래에 프로그래머가 시스템에 영향을 줄 것이다.
기타 UI 강화(Various Other UI Enhancements)
귀찮은 녹색배경에 흰색 글씨체는 더 이상 문제가 되지 않는다. 왜냐하면 모든 문자 표시 윈도우는 배경을 가지기 때문이다.
타겟(Target) 윈도우는 오른쪽 아래에서 화면 상단 가운데로 이동 했다.
퀘스트 문자 표시는 문자의 스크롤이 즉시 되도록 만들었다.
스킬바의 단축키를 추가했다. Ctrl+1부터 9까지를 누르면 해당 스킬바로 이동한다.
- 플랫폼
- 온라인
- 장르
- MMORPG
- 제작사
- 블리자드
- 게임소개
- '월드 오브 워크래프트'는 '워크래프트' 세계관을 토대로 개발된 온라인게임이다. '워크래프트 3: 프로즌 쓰론'의 4년이 지난 후를 배경으로 삼은 '월드 오브 워크래프트'에서 플레이어는 얼라이언스와 호드, 두 진... 자세히
- "약속 위반" 엔씨, 아이온2 P2W 상품 논란 일자 철회
- 타르코프 스팀판 환불하니, 기존 계정까지 차단 당했다?
- 몬길 PD와 사업부장, 프란시스와 린 코스프레 약속
- 최대 96%, 다이렉트 게임즈 ‘블랙 프라이데이’ 할인 시작
- 게임 과금에 '배송 실패'가 웬 말? 아이온2의 미숙한 오픈
- 출시 2일 만에 PvP ‘뉴비 제초’ 문제 터진 아이온2
- 콘코드 팬 복원 프로젝트, SIE에 의해 중지
- [순정남] '대책 없는 쓰레기'지만, 평가는 좋은 악당 TOP 5
- 모바일 '불가능'·PC '실망', 두 마리 모두 놓친 아이온2
- 국산 서브컬처의 희망, 육성 RPG '스타세이비어'
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|



















.jpg)











