|
HanLP and JURASSIC PARK EDIT 1.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create by MaGuN : magun4u@hanmail.net [ 1998, 10, 20 ]
Open Version [ 2004, 01, 27 ]
설명서 작성 [ 2004, 01, 28 ]
========================================================================
1. HanLP 제작기(Zone editer) 소개.
이 HanLP 제작기는 원래는 제가 제작하는 머드에서 노가다를 조금 줄여 보고자
만들어서 사용하고 있었습니다만.. HanLP 제작자들의 강력한 요청(협박ㅠㅠ)에
의해서 어쩔수 없이 공개를 하게 되었습니다. ( 정말 애석한 일입니다. ㅠㅠ )
루틴을 자세히 보시면 알겠지만.. 여기저기에서 군더더기와 형편없는 코드들을
발견할 수 있으실겁니다.( 부끄럽습니다. ㅠㅠ )
언제 시간이 되면 깔끔한 루틴으로 다시 만들려고 했습니다만.. 제가 사용하는
데는 별로 지장이 없다는 이유로 인해서 현재까지도 수정없이 사용하고 있습니
다. -_-;;
형편없는 코드들입니다만 부디 머드를 제작하시는데 도움이 되었으면 합니다.
========================================================================
2. 사용가능한 환경.
이 제작기는 현재 리눅스 버젼에서만 정상적인 동작을 합니다. 윈도우 버젼은
파일을 세이브하고 불러들이는 부분의 이상으로 인하여 심각한 오동작이 일어
날 수 있습니다.
예전에 만들었던 윈도우용 driver의 소스를 날리는 바람에 윈도우용 driver를
수정할수가 없는 형편입니다. 윈도우용을 처음부터 다시 만들 생각을 하면...
(으윽..) 아직 엄두가 나지 않습니다. 언제고 시간이 허락하면 제대로된 윈도
우 버젼을 만들어 보도록 하겠습니다. ㅠㅠ
========================================================================
3. 라이브러리 호환성.
이 제작기는 이미 공개한 JURASSIC PARK에서 사용하던 여러 제작 명령들중에서
Zone 제작에 필요한 기초적인 명령들만을 따로 간추려서 하나의 아이템 파일로
만든것입니다.
제가 사용하고 있는 제작 루틴의 거의 90% 정도를 포함시켰고, 이 제작기 만으
로도 제법 많은 부분의 노가다를 줄여 줄 수 있으리라 예상합니다.
다만... JURASSIC PARK용으로 만들어졌기 때문에 JURASSIC PARK 1.5 버젼 이상
의 라이브러리에서만 수정없이 사용을 할 수 있습니다.
만약... 십웅기, 던젼엔드레곤, 대항해시대, 야망 등의 엘리시안전기 라이브러
리를 수정한 파운데이션 베이스 라면 거의 호환되지 않는다고 보시면 됩니다.
누군가 호환을 위해서 컨버팅 작업을 한다면, 거의 새로 제작하는 정도의 상당
한 수정을 해야 할 것이고... 제가 파운데이션 라이브러리에 익숙하지 않기 때
문에 이 부분에 대해서는 지원은 하지 않습니다.
그러나... 기존의 HanLP 라이브러리를 바탕으로 머드를 제작중이거나 제작하려
고 한다면 다음의 몇 몇의 부분만을 수정해 주는것으로 사용이 가능합니다.
----------------
1) lib/std/room.c 에서 create() 함수 부분을 다음과 같이 수정합니다.
void create() {
string roomname, tmp1, tmp2;
int tmp3;
__INIT();
set('총부피', 10000000, MASTER_ONLY);
set('총무게', 10000000, MASTER_ONLY);
roomname = file_name(this_object());
set('파일이름',roomname);
if( sscanf(roomname,'/d/%s/%s',tmp1,tmp2) == 2 ||
sscanf(roomname,'/d/%s/%d',tmp1,tmp3) == 2 ) {
set('지역',tmp1);
}
}
----------------
2) lib/std/room.c 에서 valid_exit() 함수 부분을 다음과 같이 수정합니다.
int valid_exit(string dir) {
if (ob_data['exits'] && ob_data['exits'][dir]) return 1;
if (ob_data['비밀문'] && ob_data['비밀문'][dir]) return 1;
}
----------------
3) lib/std/living.c 에서 go_exit() 함수 부분을 다음과 같이 수정합니다.
기존 :
exits = env->query('exits');
if(!mapp(exits) || member_array(dir, keys(exits)) == -1) return 0;
변경 :
exits = env->query('exits');
if(!mapp(exits) || member_array(dir, keys(exits)) == -1) {
exits = env->query('비밀문');
if(!mapp(exits) || member_array(dir, keys(exits)) == -1) return 0;
}
----------------
4) 제작기.c 의 5번째 라인을 다음과 같이 수정합니다.
JURASSIC PARK 1.5 라이브러리인 경우에는 아래와 같이 합니다.
#define EXIT_CH '출구'
HanLP 인 경우에는 아래와 같이 수정합니다.
#define EXIT_CH 'exits'
----------------
5) 제작기.c 의 6번째 라인을 다음과 같이 수정합니다.
JURASSIC PARK 1.5 라이브러리인 경우에는 아래와 같이 합니다.
#define OBJE_CH '오브젝트'
HanLP 인 경우에는 아래와 같이 수정합니다.
#define OBJE_CH 'objects'
========================================================================
4. JURASSIC PARK 또는 HanLP에 설치 방법.
'lib/obj/아이템/특수' 또는 'lib/obj/특수'등 자신이 관리하기에 적당하다고
판단되는 디렉토리에 제작기.c 파일을 카피해 넣습니다.
머드를 실행하고 게임에 접속하여 '/obj/특수/제작기 창조' 를 입력해서 제작
기를 만듭니다.
제작기 봐 하면 사용할수 있는 제작명령이 출력됩니다.
========================================================================
5. 일반 사용자에게 제작 권한 주기.
운영자(wizard)이상의 캐릭터면 제한 없이 제작기를 사용할 수 있습니다.
그러나, 만약 운영자는 아니지만 존을 제작해 주는 사람들이 있을 경우도 간
혹 있습니다. 일명 존제작자 라고 불려지는 사람들로, 운영자를 꿈꾸거나 운
영자와 친밀한 관계이거나, 혹은 운영자의 협박(^_^)에 마지 못해서 하는 경
우등이 있는데요. 이런 경우 게임의 모든 지역을 수정할수 있는 제작기를 준
다는것은 사뭇 위험한 일이 될수도 있습니다.
물론 그럴리야 거의 없겠지만.. 잘 지내던 존제작자가 갑자기 돌변해서 게임
내의 룸들과 몹들을 마구 건드린다면.. 정상적으로 백업을 하지 않는 경우라
면 게임의 문을 닫아야 되는 심각한 사태까지도 갈 수 있기 때문입니다.
----------------
그런일을 미연에 방지하고자 제작기를 사용할때는 wizard인지 아니면 존제작
을 허락 받은 사람인지, 또 존제작을 할 수 있는 지역인지를 검사하게 해 두
었습니다.
예를 들어서 마군이라는 일반 사용자에게 /d/초보존 이라는 디렉토리에 저장
될 '초보존' 이라는 이름의 지역을 만들수 있게 하려고 한다고 가정합시다.
1) 게임상에서 마군이 접속하면 제작기를 만들어서 소지품에 넣어 줍니다.
2) 그런 다음,아래와 같이 셋팅을 해 줍니다.
마군;set;존제작/초보존;1 call
3) 지도변환 명령을 이용해서 '초보존' 이라는 지역의 룸들을 생성해 주거나
/d/초보존 디렉토리를 만들고 기본이 되는룸( 예를 들어 2020.c )을 하나
만들어 줍니다. ( 확장 명령으로 룸을 넓혀 나갈수 있습니다. )
4) 마군은 자신이 제작할 수 있는 지역에 가서 맘껏 제작을 합니다.
========================================================================
6. 사용가능한 제작 명령의 목록.
- 지도변환 : 지도로 만든 파일을 한꺼번에 룸으로 만드는 명령입니다.
- 타이틀 : 룸의 짧은 설명을 바꿀수 있습니다.
- 방설명 : 룸의 긴 설명을 바꿀수 있습니다.
- 출구추가 : 새로운 출구를 추가 합니다.
- 출구삭제 : 룸의 출구를 삭제 합니다.
- 출구변경 : 룸의 출구명을 변경합니다.
- 출구숨김 : 룸의 출구를 보이지 않게 숨깁니다. ( 숨겨진 출구 )
- 출구보임 : 숨긴 출구를 다시 보이게 합니다.
- 설명추가 : 룸에 설명을 추가 합니다.
- 설명삭제 : 룸에 설명을 삭제 합니다.
- 설명검색 : 룸에 들어간 설명들을 검색합니다.
- 리젠 : 현재 룸을 리젠 시킵니다.
- 몹생성 : 현재 지역에 들어갈 Mob을 생성시킵니다.
- 몹넣기 : 현재 룸에 Mob을 넣습니다.
- 몹빼기 : 현재 룸에서 Mob을 뺍니다.
- 몹목록 : 현재 지역에 넣을수 있는 Mob의 목록을 봅니다.
- 확장 : 좌표에 따라 새로운 룸을 만들고 연결합니다.
- 특수확장 : 좌표와 상관 없는 새로운 룸을 만들고 연결합니다.
- 방넘버 : 현재룸의 파일명을 봅니다.
- 방이동 : 파일명으로 직접 이동을 합니다.
- 방삭제 : 현재 지역에 있는 룸 파일을 삭제합니다.
========================================================================
7. 각 제작 명령의 사용법.
- 지도변환 : <파일명> <생성할디렉토리명> 지도변환
지도변환 명령은 지도로 만든 파일을 한꺼번에 룸으로 만드는 명령입니다.
지도파일은 lib/text/map 디렉토리에 넣어 주어야 하며, 디렉토리가 없다면
디렉토리를 생성하시기 바랍니다.
지도파일 작성요령은 다음과 같습니다.
○─○─○ ○─○─○
│ │ │ │ │ │
○─○─○─○─○─○─○─○─○
│ │ │ │ │ │ │ │ │
○─○─○─○─○─○─○─○─○
│ │ │ │ │ │
○─○─○─○─○─○
│ │ │ │ │ │
○─○─○─○─○─○─○─○─○
│ │ │ │ │ │ │ │ │
○─○─○─○─○─○─○─○─○
│ │ │
○─○─○
위와 같은 형식으로 지도를 만들어서 lib/text/map 디렉토리에 적당한 이름
으로 저장합니다. ( 예를 들어서 test.map 파일로 저장을 했다고 가정을 합
시다. )
게임에서 'test.map 테스트 지도변환' 이라고 입력을 합니다.
lib/d/테스트 디렉토리에 가서 보면 각각의 룸 51개가 만들어 져 있고 지도
에 따라 각 룸들의 출구들까지 연결되어 있음을 보실수 있습니다.
'/d/테스트/0101 가' 라고 입력해서 새로 생성된 지역으로 이동한 다음, 각
각의 룸들의 타이틀 및 설명 등을 수정하면 됩니다.
주의 : 지도를 만들때 이야기의 그림문자 1번을 사용하면 안됩니다. 이야기
의 그림문자 1번은 공식적인 그림문자가 아닌 이야기에서만 되는 그
림문자이기 때문입니다.
참고 : 룸들이 생성될때 X축과 Y축에 따라 좌표에 따라, 자동으로 파일명이
결정 됩니다.
------------------------------------------------------------------------
- 타이틀 : <설명> 타이틀
현재 룸의 짧은 설명을 바꾸는 명령입니다.
게임상에서 몇 번 사용해 보면 금방 알수 있는 명령이라서, 따로 설명은 하
지 않겠습니다. 직접 사용해 보세요.
------------------------------------------------------------------------
- 방설명 : 방설명
현재 룸의 긴 설명을 바꾸는 명령입니다.
역시 게임상에서 직접 해 보시면 쉽게 알수 있습니다.
------------------------------------------------------------------------
- 출구추가 : <출구이름> <방번호> 출구추가
현재 룸에서 새로운 출구를 추가합니다.
만약 0505 번의 룸에서 0909룸을 남쪽으로 연결하고 싶다면, 0505룸에서 다
음과 같이 입력합니다.
'남 0909 출구추가'
일반 사용자가 아닌 운영진(wizard)이라면 다음과 같이 전체 경로명을 사용
할 수 있습니다.
'남 /d/테스트/0909 출구추가'
현재 출구추가 명령에서 사용하는 출구명은 한글로만 사용할 수 있도록 해
놓았습니다, 영문들의 출구를 지원하려면 제작기의 루틴을 수정 하시기 바
랍니다.
------------------------------------------------------------------------
- 출구삭제 : <출구이름> 출구삭제
현재 룸에서 출구를 삭제 합니다.
남쪽 출구를 삭제한다면 '남 출구삭제' 라고 하여 출구를 삭제할 수 있습니
다.
------------------------------------------------------------------------
- 출구변경 : <현재출구명> <바꿀출구명> 출구변경
현재 룸에서 출구명을 변경할때 사용합니다.
'남'으로 되어 있는 출구를 '위'로 바꾼다면 '남 위 출구변경' 이라고 하면
됩니다.
------------------------------------------------------------------------
- 출구숨김 : <숨길출구명> 출구숨김
현재 룸에서 출구명을 숨길때 사용합니다.
숨긴 출구는 보이지는 않지만 이동이 가능합니다.
가령 룸의 긴 설명이 다음과 같다고 가정합시다.
: 몹시 어두운곳이다. /동굴/쪽에서 서늘한 바람이 불어온다.
긴설명에 이렇게 해 놓고 출구에는 없지만 동굴이라고 치면 이동할 수 있게
하고 싶은 경우가 있습니다. 이럴때 유용하게 사용할 수 있습니다.
------------------------------------------------------------------------
- 출구보임 : <보일출구명> 출구보임
현재 룸에서 숨겨진 출구명을 다시 보이게 합니다.
------------------------------------------------------------------------
- 설명추가 : <설명이름> 설명추가
현재 룸에서 설명을 추가 합니다.
예를 들어 룸의 긴 설명이 다음과 같다고 가정합시다.
: 넓은 광장이다. 한쪽에 /석상/이 보인다.
실제로 석상이라는 아이템을 만들어 놓을 수도 있습니다만, 그냥 설명만 출
력해 주면 되는데, 석상이라는 아이템을 만들어 두는것이 낭비일 수도 있습
니다.
이럴때 '석상 설명추가' 해서 석상을 보면 나올 말을 미리 만들어 둘 수 있
습니다.
또는 룸의 설명에 안내판이 있다고 적어 두고 실제 안내판이라는 아이템을
만들지 않고, 안내판 봐 하면 설명이 보이게 하고 싶을 때 등에도 사용 할
수 있습니다.
'안내판 설명추가'
또한 만약 룸에 북이라는 출구가 있고 사용자가 '북 봐' 라고 하면 실제의
북쪽 룸을 보여주지 않고 다른 설명을 보여주고 싶을때가 있습니다. 이런
경우에도 유용하게 사용할 수 있습니다.
'북 설명추가'
------------------------------------------------------------------------
- 설명검색 : 설명검색
설명추가로 룸에 넣어 놓은 설명들의 목록을 출력합니다.
직접 룸 파일을 열어 보아도 됩니다만.. 가끔은 게임에서 추가하고 무엇 무
엇을 추가하였는지 확인해 보고싶을때가 있기 때문에 ^^;;;;
------------------------------------------------------------------------
- 설명삭제 : <삭제할설명> 설명삭제
룸에 설명추가로 넣어 놓은 추가 설명을 삭제 합니다.
------------------------------------------------------------------------
- 몹생성 : <몹이름> 몹생성
현재 지역의 새로운 몹(Mob)을 생성합니다.
가장 기본이 되는 부분만을 가지고 몹(Mob)이 생성됩니다. 추가적인 루틴등
의 수정을 직접 파일을 수정하여야 합니다.
만약 /d/테스트 지역에서 몹생성을 한다면 /obj/몬스터/테스트 라는 디렉토
리에 몹파일이 저장이 됩니다.
------------------------------------------------------------------------
- 몹넣기 : <몹이름> 몹넣기
현재 자신이 있는 지역에서, 이미 파일로 생성되어 있는 몹(Mob)을 자신이
있는 룸에 설치 합니다.
예 : '마곰 몹넣기'
운영진(Wizard)은 경로명을 직접 사용해서 다른지역의 몹(Mob)을 넣을 수도
있습니다.
예 : '/obj/몬스터/다른디렉토리/마곰2 몹넣기'
------------------------------------------------------------------------
- 몹빼기 : <몹이름> 몹빼기
현재 자신이 있는 룸에 설치된 몹을 뺍니다.
------------------------------------------------------------------------
- 몹목록 : 몹목록
현재 지역에 넣을 수 있는 몹의 목록을 출력합니다.
------------------------------------------------------------------------
- 확장 : <방향> 확장, 또는 <출구이름> 확장
현재 룸에서 방향쪽을 확장하는 명령입니다.
예를 들어 0505번 룸에서 동쪽이 없을때 '동 확장' 이라고 하면 동쪽에 해
당하는 룸의 파일을 직접 만들어 주고 서로 연결을 해 줍니다.
확장을 하면 확장 명령을 사용한 곳의 방설명이 자동으로 카피 됩니다.
주의 : 확장은 반드시 정상적인 좌표로 만들어진 지역에서만 사용이 가능합
니다. 만약 좌표가 없는 지역에서 확장을 할때는 반드시 '특수확장'
명령을 사용하시기 바랍니다.
------------------------------------------------------------------------
- 특수확장 : <출구이름> 특수확장
현재 룸에서 <출구이름>쪽으로 확장을 하는 명령입니다.
예를 들어 현재룸에서 '환전소'라는 출구를 만들고 환전소.c로된 룸을 새로
만들려고 한다면 '환전소 특수확장'이라고 하면 현재 있는 룸에서 환전소라
는 출구가 생기고 서로 연결이 됩니다. 또한 현재 지역의 디렉토리에 자동
으로 환전소.c 라는 룸 파일이 생성되게 됩니다.
------------------------------------------------------------------------
- 방넘버 : 방넘버
현재 자신이 있는 룸의 파일명을 출력해 줍니다.
운영진(Wizard)라면 방이름이라는 명령을 이용해서 늘 방의 파일명을 볼 수
있습니다만, 운영진이 아니고 제작기만 주었을 경우 타이틀 명령등으로 룸
의 짧은설명을 수정하였다면 자신이 있는룸의 파일명이 무엇인지 알 수 없
는 경우가 생깁니다. 이때 사용할 수 있습니다.
------------------------------------------------------------------------
- 방이동 : <파일명> 방이동
자신의 지역에서 파일명으로 직접 이동을 할 때 사용합니다.
역시 운영진(Wizard)이라면 '<화일명> 가' 라고 해서 쉽게 이동이 가능합니
다만 제작기만을 준 일반 사용자일 경우에는 그것이 불가능합니다.
지도(지역)을 제작하다가 룸의 출구를 수정하고 변경하고 하다 보면 출구가
없어져서 이동이 불가능해 질 경우가 있습니다. 이때 사용하면 됩니다.
------------------------------------------------------------------------
- 방삭제 : <파일명> 방삭제
<파일명>의 룸화일을 직접 삭제합니다.
지도(지역)을 만들고 수정하다보면 불필요한 룸들이 남을 경우가 있습니다.
이때 방삭제 명령으로 룸화일을 직접 삭제할 수 있습니다.
주의 : 만약 룸화일을 삭제하였는데 다른룸에서 삭제한 룸으로 출구가 있고
이것을 없애 주지 않았다면 룸이 로딩될때 에러가 날 수 있습니다.
------------------------------------------------------------------------
- 리젠 : 리젠
현재 있는 룸을 reset() 시킵니다.
이 명령은 룸에 몹(Mob)을 넣고 빼고 하는 과정에서 정상적으로 몹들이 나
오는지 확인을 위해서 사용합니다. ( 별로 필요 없는 부분입니다만.. 가끔
확인이 필요한 경우도 있기는 있었습니다. )
운영진(Wizard)이라면 이 명령 이외에도 '-r 갱신' 이라고 하여 룸을 갱신
시키면 됩니다만, 제작기만 가지고 있는 일반 사용자일 경우를 위해서 만
든 명령입니다.
========================================================================
8. 기타.
이 볼품없는(-_-;;) 제작기는 GNU의 GPL 라이센스를 지향합니다.
사용에 관한 문의는 아래 사이트를 이용하시기 바랍니다.
http://cafe.daum.net/hanlp
http://mud.vtmode.com
기타 몇 가지 버그도 있는듯 합니다만.. 이에 대한 특별한 지원은 없습니다.
========================================================================