Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Analyze by Kinesis

Mabinogi Client - db/achievementcategorytable.xml File Analyze. 본문

Game Client Analyzes/Mabinogi Online

Mabinogi Client - db/achievementcategorytable.xml File Analyze.

Kinesis 2010. 6. 4. 02:03
Mabinogi Client - db/achievementcategorytable.xml File Analyze.
마비노기 클라이언트 - db/achievementcategorytable.xml 파일 분석.




이 글은 온라인 게임 마비노기 클라이언트를 분석한 자료 입니다.
これは Online Game - Mabinogi を分析したことです。
This is anlyzed the mabinogi client.

2004년 6월경 정식서비스를 시작한 Nexon 에서 서비스하고 Devcat 팀에서 개발한 온라인 게임 마비노기 는 현재까지 서비스가 이루어지고 있는 온라인 게임 중 하나이다.

이 카테고리 에서는 이 마비노기에 대한 분석 내용을 정리하도록 한다.

※ 일부 틀리는 곳이 존재할 수도 있습니다.
※ 자료 분석은 한국 클라이언트를 바탕으로 합니다.

※ 주의! 본 자료는 순수히 학구적인 클라이언트 분석의 목적으로 작성된 글로서 개인의 이익을 위해 이용함으로 인해 발생되는 사고에 관하여는 책임지지 않습니다.



게시물 작성일 : 2010. 06. 04.
게시물 작성자 : by Kinesis (김해광)

참고 자료 - Null
게시물 수정내용 - null



! achievementcategorytable.xml File Source View
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<!-- DO NOT EDIT THIS FILE! -->
<Root>
 <Categories>
  <Category ID="1" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.1]" />
  <Category ID="2" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.2]" />
  <Category ID="3" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.3]" />
  <Category ID="4" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.4]" />
  <Category ID="5" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.5]" />
  <Category ID="6" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.6]" />
  <Category ID="7" Generation="11" Season="1" Subseason="0" Name="_LT[xml.achievementcategorytable.7]" />
 </Categories>
</Root>

achievementcategorytable.xml

! achievementcategorytable.xml File Analyze

Location : data/db/
File : achievementcategorytable.xml
Type : xml
Function : 저널 분류 카테고리

achievementcategorytable.xml 파일은 확장자에서도 볼 수 있듯이 XML 문서 형식으로 저장된 파일이다. 형식은 위의 Source View 에서 본 것과 같은 형태를 취하고 있다.

Root 라는 Element 하위로 Categories 라는 Element(엘리먼트/원소) 가 존재하고 그 밑으로 Category 라는 Element 가 위치하는 구조를 가지고 있다.

중요하게 바라볼 부분은 Cagegory 라는 Element 부분인데, ID, Generation, Season, Subseason, Name 이라는 Attribute(어트리뷰트/속성) 를 보유한다.

ID는 Category 라는 Elements 를 식별하기 위해 필요한 키라고 바라볼 때, Generation 라는 Attribute는 추가된 제너레이션을 의미하는 것으로 추정해 볼 수 있다고 추론할때 Season은 제너레이션의 시즌을 의미한다고 바라볼 수 있고, Name 은 이 Cagegory 의 ID 에 따른 이름이라는 것을 예상 해 볼 수 있다.

_LT[xml.achievementcategorytable.1]

위는 Name 부분에 작성되어 있는 형태중 첫번재를 예로 든 것이다. 단연 이 achievementcategorytable.xml 파일만을 바라보는 것이 아니라 같은 db folder 내의 다른 xml 파일을 참고해 보면, Name 이라는 Attribute 마다 다음과 같은 형태를 띄고 있는 것을 확인할 수 있는데,

EX) _LT[xml.FileName.Number]

바로 이와같이 FileName 부분과 Number 부분이 달라지는 것을 바탕으로 어떠한 방향을 지명하는 것으로 예측할 수 있다.

이와 같은 과정을 거치면서 xml.FileName.Number 가 어떠한 곳을 지시하는 것이라는 것을 유추해 낸 것을 잠시 접고 보면 사실상 프로그래밍의 함수를 이미징 해 볼 때, xml.FileName.Number 라는 것은 함수에 대한 인자값과 닮은 형태를 띄고 있다는 것을 알 수 있다.

그렇다면 xml.FileName.Number 가 위치를 가르키는 인자의 역할을 한다면 실질적 기능을 담는 함수와 같은 역할(의미)은 _LT 가 가지고 있다 라고 바라볼 수 있다. 그렇다면 _LT 라는 글자가 의미하고 있는 것은 무엇인가? 정확하지는 않지만 개발시에 길어지는 글을 줄이기 위해 약어 또는 약자를 쓰는 부분을 고려해 볼때

_LT = _LocalText

를 줄인 말이 아닐까 라는 짐짓을 해볼 수 있다.

(물론 _LT 라는 것이 함수 자체는 아닐 것이나, 클라이언트가 xml 을 read 하면서 _LT[인자] 를 찾아 어떠한 기능을 수행하도록 되어 있다면 _LT 는 함수로 바라 볼 수도 있다 라는 의미를 가지고 이야기 한 것이다.)

이러한 예상을 바탕으로 Package File 의 트리구조를 다시 바라보면


위의 그림과 같은 위치에 실질적으로 local/xml 에 achievementcategorytable.korea.txt 가 존재하는 것을 확인할 수 있다.
 
여기서 멈추지 않고 예상한 것을 굳히기 위한 일환으로, 이러한 경로적 위치에서 local.xml.achievementcategorytable.korea.txt 에서 korea 라는 국가적 분류만을 제외하면 local.xml.achievementcategorytable.txt 가 남는데 text를 의미하는 txt의 위치를 local의 뒤에 위치시킨다면

_LocalText[xml.achievementcategorytable.Number]

와 같은 형태가 성립된다. 결국 _LT 란 Local 내에 들어 있는 Text 를 찾으라는 의미라고 결론지을 수 있고, xml 은 local 안의 하위 폴더를, 그 뒤의 achievementcategorytable 은 참고할 FileName , Number는 해당 파일 안에 들어 있는 번호의 텍스트를 참고하라 로 결론지을 수 있다.


중요한 것은 지금까지는 단순히 xml 파일만을 바탕으로 예상하고, 추론하고, 유추한 과정에서 크게 벗어나지 못한다. 이것을 보다 확실하게 하려면 _LT 가 지시하고 있는 File의 내용을 참고하고 변조와 확인을 통해 증명해볼 필요가 있다.
1	일반
2	전투
3	탐험
4	커뮤니티
5	스킬
6	컨텐츠
7	특수

위는 data/local/xml/achievementcategorytable.korea.txt 의 내용이다. 앞에 유추했던 것을 바탕으로 _LT[xml.achievementcategorytable.1] 를 해석하면 마지막 1은 achievementcategorytable.korea.txt 파일 내의 1 이 지시하고 있는 『 일반 』 과 매치가 된다. 그렇다면 1을 제외한 『 일반 』이라는 글자를 바꾸면 게임내에서 변화가 이루어 질까?
1	테스트
확인을 위해 위와 같이 변형을 해서 클라이언트를 실행하여 접속해 보았다.

after / Number 2 Tab Name is "테스트" / You look at big size? Cilck here!

before / Number 2 Tab Name is "일반" / You look at big size? Cilck here!



결과는 성공적이었다. 변경전의 2번째 저널 탭이 "일반" 이었던 것에 반해 변경후는 2번째 저널 탭이 "테스트" 로 바뀐 것을 확인할 수 있었다.

이번에는 _LT[xml.achievementcategorytable.1] 에서의 xml 이 하위 xml 폴더를 의미하는 것인지를 확인하기 위해 다음과 같이 코드를 바꾼 뒤, achievementcategorytable.korea.txt 의 위치를 바꾸어 확인 실험을 해보았다.
  <Category ID="1" Generation="11" Season="1" Subseason="0" Name="_LT[code.achievementcategorytable.1]" />
이번 역시 "테스트" 로 바뀌어져 있는 성공적인 결과를 확인할 수 있었다.



! Conclusion.
결론적으로 db/achievementcategorytable.xml 에 대한 Analyze 는 다음과 같다.

achievementcategorytable.xml 는 저널 카테고리를 분류하기 위한 테이블 xml 파일이다.
Root / Categories / Category 라는 Element 의 구성으로 작성되어 있다.
Category 라는 Element 만이 유일하게 Attribute 를 보유한다.

< Attribute 값 참조 >
ID = Category 의 식별자. Category 를 식별하기 위해 사용된다.
Generation = 추가된 제너레이션을 가리키는 것으로 예상된다.
Season = 해당 제너레이션의 몇번 째 시즌인지를 가리키는 것으로 예상된다.
Subseason = 해당 시즌의 하위 시즌을 가리키는 것으로 예상된다.
Name = 해당 카테고리의 이름을 가리킨다.

< _LT[folder.filename.number] 의 해석 >
_LT = _LocalText 혹은 _LocalTxt 의 약자로 예상할 수 있으며, data/local 폴더 안의 txt 파일을 지시한다.
folder = data/local 폴더 안의 하위 폴더를 지시한다
filename = 지시된 폴더 안에서 읽어올 filename 을 지시한다.
     filename 을 지시하면 filename.local.txt 의 형태의 파일을 가리키는 것이 된다.
number = 지시된 파일 안의 해당 번호 값을 지시한다.




Comments