기본적인 npc제작만으로도 좋은 서버를 제작할수있습니다
첫번째 단계 - 퀘스트 구상하기
우선 가장 먼저 해야할 첫번째 단계는 퀘스트를 어떻게 만들 것인가 구상을 하는 일입니다.
저는 다음과 같이 구상을 해보도록 하겠습니다.
젤로피를 2개 가져다 줄때마다 빨간포션 1개를 지급하는 NPC
자 이제 구상을 완료 했죠?
그러면 제작에 들어가 보도록 합니다.
그러면 맨 먼저 기본 틀을 만들어야 겠지요?
맵이름.gat,가로좌표,세로좌표,NPC방향번호 [Tab] script [Tab] NPC이름 [Tab] NPC모양번호,{
스크립트의내용
}
자 바로 이겁니다.
요번에는 2 강에 사용했던 예제를 그대로 사용하도록 할게요.
izlude.gat,100,100,4 script 디나 864,{
위 스크립트 부분에서 공백은 스페이스바 가 아닌 Tab 키로 띄워주어야 한다는 것을 잊지 마세요.
그러면 한줄 한줄 들어가 보도록 하겠습니다.
맨 먼저 NPC 가 무엇을 요구하는지 어떠한 상황인지를 알려주는 초기 대화를 만들어 볼까요?
izlude.gat,100,100,4 script 디나 864,{
mes "[디나]";
mes "안녕? 나는 디나 라고해...";
mes "나는 이즈루드에 살고 있단다.";
mes "이즈루드 마을에서 밖으로 나가면 바로 초보들이 잡을수 있는 포링 이라는 몬스터가 살고 있지...";
mes "하지만 초보시절에는 누구나 다 힘들어 하는것 같아...";
mes "그래서 나도 도움을 받을 겸 초보들에게 도움을 주고 있지...";
mes "젤로피 2개를 가져오면 빨간포션 1개로 바꾸어 주고 있단다.";
mes "어때 너도 바꾸지 않을래?";
자 이제 대략적으로 대화를 작성하였습니다.
그런데 대화가 너무 길군요? 이걸 어떻게 나눌수가 없을까요?
맞아요. 대화창에 다음 대화로 넘어가게 해주는 next; 라는 구문을 배웠었습니다.
izlude.gat,100,100,4 script 디나 864,{
mes "[디나]";
mes "안녕? 나는 디나 라고해...";
mes "나는 이즈루드에 살고 있단다.";
mes "이즈루드 마을에서 밖으로 나가면 바로 초보들이 잡을수 있는 포링 이라는 몬스터가 살고 있지...";
next;
mes "[디나]";
mes "하지만 초보시절에는 누구나 다 힘들어 하는것 같아...";
mes "그래서 나도 도움을 받을 겸 초보들에게 도움을 주고 있지...";
mes "젤로피 2개를 가져오면 빨간포션 1개로 바꾸어 주고 있단다.";
mes "어때 너도 바꾸지 않을래?";
위와 같이 해주면 되겠지요?..
자 그럼 이제는 디나가 바꾸지 않을래? 라고 물어 보았죠?
그러면 이제 플레이어가 선택을 할수가 있도록 해주어야 할텐데 이럴때는 어떤 방법이 있을까요?
네 바로 menu 구문이 있었습니다.
그러면 한번 작성을 해봐요.
izlude.gat,100,100,4 script 디나 864,{
mes "[디나]";
mes "안녕? 나는 디나 라고해...";
mes "나는 이즈루드에 살고 있단다.";
mes "이즈루드 마을에서 밖으로 나가면 바로 초보들이 잡을수 있는 포링 이라는 몬스터가 살고 있지...";
next;
mes "[디나]";
mes "하지만 초보시절에는 누구나 다 힘들어 하는것 같아...";
mes "그래서 나도 도움을 받을 겸 초보들에게 도움을 주고 있지...";
mes "젤로피 2개를 가져오면 빨간포션 1개로 바꾸어 주고 있단다.";
mes "어때 너도 바꾸지 않을래?";
next;
menu "아니요. 저는 제 힘으로 할거예요.",L_Close,"네 바꾸어 주세요.",L_Trade;
L_Close:
mes "[디나]";
mes "어머 그래?";
mes "네가 정 그렇다면 어쩔 수 없지 뭐...";
close;
L_Trade:
mes "[디나]";
mes "그래그래..^^";
mes "자 그러면 교환 해줄게..^^";
자 위와 같이 작성을 하였습니다.
똑똑하신 유저분들께서는 딱 보면 어떠한 뜻이 되는지 아시겠지요?
[디나]
하지만 초보시절에는 누구나 다 힘들어 하는것 같아...
그래서 나도 도움을 받을 겸 초보들에게 도움을 주고 있지...
젤로피 2개를 가져오면 빨간포션 1개로 바꾸어 주고 있단다.
어때 너도 바꾸지 않을래?
{다음}
{메뉴}
아니요. 저는 제 힘으로 할거예요. 선택시 L_Close 라벨로 이동
네 바꾸어 주세요. 선택시 L_Trade 라벨로 이동
하는 것이지요.
그러면 실제 아이템이 교환되는 부분을 만들어야 하겠지요?
mes "[디나]";
mes "안녕? 나는 디나 라고해...";
mes "나는 이즈루드에 살고 있단다.";
mes "이즈루드 마을에서 밖으로 나가면 바로 초보들이 잡을수 있는 포링 이라는 몬스터가 살고 있지...";
next;
mes "[디나]";
mes "하지만 초보시절에는 누구나 다 힘들어 하는것 같아...";
mes "그래서 나도 도움을 받을 겸 초보들에게 도움을 주고 있지...";
mes "젤로피 2개를 가져오면 빨간포션 1개로 바꾸어 주고 있단다.";
mes "어때 너도 바꾸지 않을래?";
next;
menu "아니요. 저는 제 힘으로 할거예요.",L_Close,"네 바꾸어 주세요.",L_Trade;
L_Close:
mes "[디나]";
mes "어머 그래?";
mes "네가 정 그렇다면 어쩔 수 없지 뭐...";
close;
L_Trade:
mes "[디나]";
mes "그래그래..^^";
mes "자 그러면 교환 해줄게..^^";
if(countitem(909) < 2) goto L_item;
next;
Set @tmp,countitem(909) / 2;
delitem 909,countitem(909);
getitem 501,@tmp + 1;
mes "[디나]";
mes "자아 여기있어.. 1개는 서비스야..";
mes "그러면 열심히 해 알았지?";
close;
L_item:
mes "[디나]";
mes "젤로피 2개 이상이 있어야 바꾸어 주어요~";
mes "욕심을 부리면 안돼지?";
close;
}
자 그러면 하나씩 설명 해보도록 하겠습니다.
if(countitem(909) < 2) goto L_item;
이 구문은 if 비교문 입니다. 그러면 무엇을 비교하느냐?
countitem(909)
이것은 인벤토리에서 909 코드를 가진 아이템의 개수를 가지고 오는 것입니다.
909 는 item_db.txt 에서 찾아보시면 젤로피 라는걸 알수가 있지요.
< 2)
2 보다 작을 경우에 값이 참이 되는 if 구문 입니다.
if 구문이 참일경우 goto 가라 !! 어디로?.. L_item 이라는 라벨로 이동하는 겁니다.
Set @tmp,countitem(909) / 2;
Set @tmp
@tmp 라는 변수에 값을 Set 하라.. 세팅하라.. 즉 값을 넣어준단 이야기죠..
그러면 무슨 값을 넣어 주죠?
countitem(909) / 2
909 아이템 개수를 2로 나눈 숫자를 넣으란 겁니다. 젤로피 2개당 빨간포션 1개니까요.
delitem 909,countitem(909);
delitem 인벤토리에서 지정한 아이템을 삭제해 버리라는 구문입니다.
909 라는 아이템을 몇개?.. 909 라는 아이템의 개수만큼 즉 모두 다 지우는 것이지요.
getitem 501,@tmp + 1;
이젠 보상을 주어야 겠죠?
501 이라는 아이템을 get 해줘라... 몇개를? @tmp 개에서 1을 더한 만큼~!!
[출처] 기본적 NPC 제작 방법|작성자 Wz 강냉이
'게임 관련 정보 > 라그나로크' 카테고리의 다른 글
스크립트 관련 함수메서드 (0) | 2012.12.01 |
---|---|
if문 사용방법 스크립트(NPC)에 사용 (0) | 2012.12.01 |
※ 스크립트 작성 시 비교연산자 에 대한 가이드 (0) | 2012.12.01 |
스크립트 작성시 논리연산자에 대한 가이드 (0) | 2012.12.01 |
소리 스크립트 컬렉션(누리,군주&리얼,아라 섭 스크립트) (0) | 2012.12.01 |