게임강의

Script강의 v0.3

컨텐츠 정보

본문

# 꼬부기의 스크립트 강의 입니다

# 제작자 : 꼬부기([email protected])

# 최종적으로 v0.1의 스크립트 명령어 등을 정리한날은 3월 5일 입니다.

# 최종적으로 v0.2의 스크립트 명령어 등을 정리한날은 3월 11일 입니다.

# 최종적으로 v0.3의 스크립트 명령어 등을 정리한날은 4월 6일 입니다.

========================================================

v0.1 제작한날 3월 5일

v0.2 제작한날 3월 11일

v0.3 제작한날 4월 6일

========================================================

■ 꼬부기의 스크립트 강의

■ 제작자 활동카페는 USFM 입니다.

■ 깔끔하게 정리해놓았으니 보는데 불편하지않으실겁니다.

■ 혹시라도 오타가있을수있는데 귀엽게 봐주세요^^

■ 위 버전은 v0.3 입니다.

■ USFM에서만 이파일을 배포하겠습니다.

========================================================

■ 글씨관련

#b할말#k = 파란색 글씨 

#d할말#k = 보라색 글씨 

#g할말#k = 초록색 글씨 

#r할말#k = 빨간색 글씨 

#e할말#n = 굵은 글씨


■ 이미지 관련

#fUI/UIWindow.img/QuestIcon/5/0# = 물음표상자 

#fUI/UIWindow.img/QuestIcon/3/0# = 랜덤아이템

#fUI/UIWindow.img/QuestIcon/4/0# = Reward!! //이건 잘모르겠음

#fUI/UIWindow.img/QuestIcon/6/0# = 인기도

#fUI/UIWindow.img/QuestIcon/7/0# = 메소

#fUI/UIWindow.img/QuestIcon/8/0# = 경험치

#fUI/UIWindow.img/QuestIcon/9/0# = Pet Closeness //이것도 잘 모르겠음

이 명령어를 사용하면 WZ파일안에있는 이미지를 사용할수있습니다.


■ 줄바꾸기 관련

\r\n 이렇게 하면 한줄이 내려갑니다.


■ 유저 아이디 관련

#h # 이걸쓰면 유저아이디가표시됩니다.

예를들자면 #h # 안녕? (제닉네임기준)

꼬부기 안녕? 이런식으로 나옵니다.


■ 스크립트 시작

importPackage(net.sf.odinms.client);

var status = 0;

모든 스크립트의 시작에는 이게 기본으로 쓰인다.


importPackage(net.sf.odinms.client);

var status = 0;


function start() {

status = -1;

action(1, 0, 0);

}


function action(mode, type, selection) {

if (mode == -1) {

cm.dispose();

} else {

if (mode == 0) {

cm.dispose();

}

if (mode == 1)

status++;

else

status--;

대충 이런식으로 스크립트의 첫 시작이다. mode를 status로 바꿀수도있다.


■ 스크립트 명령어의 뜻

스크립트명령어 status 이것은 말의 순서를 정하는것이다.

mode는 나도 자세히 모르겠으나 실질적으로 필요한것이아니다.


■ 그림나오게하기

#v 코드# 코드에다 아이템코드를 적으면 그림으로 나온다.


■ 퀘스트 조건메소드

cm.getLevel() >= 레벨 && cm.getQuestStatus(퀘스트 번호).equals(MapleQuestStatus.Status.NOT_STARTED)

퀘스트 시작전 조건

cm.getLevel() >= 레벨 && cm.getQuestStatus(퀘스트 번호).equals(MapleQuestStatus.Status.STARTED)

퀘스트 진행중 조건

cm.getLevel() >= 레벨 && cm.getQuestStatus(퀘스트 번호).equals(MapleQuestStatus.Status.COMPLETED)

퀘스트 완료 조건

이렇게쓰면된다.


■ 퀘스트 조건메소드 2

if (cm.getLevel() >= 10) {

if (p.getFame() >= 1) {

이런식으로 if (cm.getLevel() >= 10) { 이것은 레벨 10이 되어야할수있는것이고

if (p.getFame() >= 1) { 이것은 인기도 1이 되어야 할수있는것이다 이것은 극히 예제일 뿐이다.


■ 선택창 고르기

#L0#내용#l 이걸 적으면 무엇을 누르는 창이나온다.

2개 이상버릴땐 #L0#내용#l L0을 L1로 바꾸어준다. 

즉 #L1#내용#l 이렇게 되는 것이다.


■ 선택창 고르기 2

if (selection == 0) { 이것을 적으면 #L0#내용#l 이것을눌렀을때 나오는 반응이다.

그밑에 뭐 if ((cm.haveItem(4000000, 10))) { 이런걸 적으면 된다.


■ var의 쓰임

보통 var은 글을 적는데 쓰인다. 

주로 퀘스트 메이커에 잘쓰인다.

Q. var문으로 말하려면?

A. var문으로 말하려면 var p = cm.c.getPlayer();

이 메소드를 쓰고 str += "내용"; 내용이라고 적힌데에다 원하는 내용을쓴다.

var w_msg = ""; 또는 이 var문을 쓸수있는데

이 문을 위에다 적고

w_msg += "내용 "; 밑에다 이렇게 적으면된다. 

TIP. var문은 한문장을 다 적고 엔터치고 다시 적어서 하는것이다. 

그렇다고 밑줄로내려가진않는다. \r\n이문을써야한다.(밑줄로내려갈려면)


■ 자신의 팩 안에 스크립트 명령어를 보고싶어요.

자신의 팩안에 스크립트 명령어를 보고싶은분은 정말 많을것이다.

이걸 보려면 src있는팩과 없는팩으로 갈리는데 src없는팩은 

이 명령어를 확인할수없게된다.

src있는팩은 trunk\src\net\sf\odinms\scripting\npc

이경로로 가서 NPCConversationManager.java

이파일을 열어준다. 그러면 자신의 스크립트 메소드가 좌르륵 있을것이다.

아참! var문은 NPCConversationManager.java 에 없다.

일부 다른것들은 기본적으로 자바스크립트 명령어인게있으므로 없는것이있을것이다.


■ 자신의 팩 안에 스크립트 메소드를 추가하고싶어요.

이것을 할려면 우선 기본적으로 빌드를할줄아는 사람만 가능한것이다

위와 같은 경로로간뒤 같은파일을연다.

설명에 맞춰 메소드를 넣고 빌드한다.


■ 본섭 메소 이미지

(cm.getMeso() >= 할메소))

이런식으로 하면됩니다.


■ 주석관련

자 우선 주석이란 그 주석안의 내용을 무력화시키는것입니다.

퀘스트무력화랑 비슷한거죠 ㅋ

주석은 2가지가있습니다. /* */ 와 // 가있습니다.

/* */ 는 원하는내용 전체 주석가능하구요.

// 는 이 주석이 달려있는줄만 주석가능합니다.

대충 사용한다치면

/*

꼬부기

*/ 이렇게 쳐주신다면 꼬부기란 내용이 무력화되구요

// 꼬부기 이렇게 쳐주신다면 지금적고있는 이글도 무력화되고요 꼬부기도 무력화됩니다.


■ 맵이동할때

보통 클릭하면 if (selection == 0) { 이런식으로해도되지만

그건너무노가다라서 보통 사람들이쓰는방법은

var status = 0;

var maps = new Array(맵코드);

var mapNames = new Array("맵이름");

var selectedMap = -1;

이렇게 적고 글자 내용은

var where = "내용";

이렇게적고        

for (var i = 0; i < maps.length; i++) {

where += "\r\n#L" + i + "# " + mapNames[i] + "#l";

}

cm.sendSimple(where);

status++;

이렇게적어주세요. 제가 이렇게한거는 메이커를 보고적어본거입니다.

그밑에다 이렇게 적어주셈

   } else {

       if ((status == 1 && type == 1 && selection == -1 && mode == 0) || mode == -1) {

           cm.dispose();

그리고 cm.sendNext ("내용");

적고                    selectedMap = selection;

                   status++

           } else if (status == 2) {

                   cm.warp(maps[selectedMap], 0);

                   cm.dispose();

밑에다 이렇게 적어주면 됩니다.


■ Yes, No를 쓰고나면 어떤메소드로 채워 넣어야할까?

자 이거 모르시는분많을거같은데요 Yes No 메소드를쓰면 어떤메소드로 채워서해야 오류가안나는지

모를땐 저도 #L0# 이거쓰곤 했습니다.

하지만 지금은실력이 그때에 비해 비약적으로(?) 상승했기때문에 가르쳐드리겠습니당

Yes, No를 쓰고나서 우선 function action(mode, type, selection) {

이거 밑에다가 } else { 가 있는게 있습니다.

그 밑에다가 if (status == 0 && mode == 0) { 이걸적고 원하는 메소드로 채워넣으시면 됩니다.

그리고 그밑에다가 return; 리턴값을 적어줍니다.

극히 예를 들어 

cm.sendYesNo("ㅎㅇㅎㅇ");

if (status == 0 && mode == 0) {

cm.sendOk("인사점");

cm.dispose();

return;

}

이뜻은 나름 해석하자면.

일단 어떤 NPC가 ㅎㅇㅎㅇ라고말을한다 No를 누르면 인사점이란 말이나오고 

Yes를 누르면 자기가 원하는메소드로가게 설정한다. 이설정은 } else if (status == 순서) { 이렇게하고 메소드 적으면됩니다.


■ 스크립트 조건문 붙혀놓을때 } else { 의 쓰임

스크립트 조건문이란... 예를들면 if (cm.getMeso() >= 10000) { 뜻 : 10000메소가있다면... 무엇을 한다

자... 그렇다면 없다면 어떡하실건가요? 이런식으로 10000 메소가없다면 어떤말을 붙혀야하기도하겠고

머 이런식으로 하고싶을땐 ! } else { 를 씁니다.

극히 예를 들어보겠습니다. 

if (cm.getMeso() >= 10000) {

cm.sendOk("메소있네요");

} else {

cm.sendOk("메소부족");

cm.dispose();

이런식으로 끝낼땐 dispose 붙혀주시구요 나름 뜻을 해석하자면

10000메소가있다면 OK창으로 메소있네요가나오고

10000메소가 없다면 OK창으로 메소없네요가 나옵니다.

자 이제 아시겠나요?

아참! } else { 는 src쪽에서도 많이 쓰인답니다.


■ 각종 스크립트 명령어모음

# npc대화를 끝낼때 사용됩니다. cm.dispose();

# OK창이뜨는 대화창이뜨게합니다. cm.sendOk("할말");

# Next창이 뜨는 대화창이뜨게 합니다. cm.sendNext("할말");

# Prev창이 뜨는 대화창이뜨게 합니다. cm.sendPrev("할말");

# Next 와 Prev둘다 뜨게합니다. cm.sendNextPrev("할말");

# Yes 와 NO 창이뜨게합니다. cm.sendYesNo("할말");

# 수락과 거절창이 나오게합니다. cm.sendAcceptDecline("할말");

# 아무창도 없는 창이뜨게합니다. sendSimple("할말");

# 스타일이 뜨는 창이뜨게 합니다. cm.sendStyle("대화내용", 코드);

# 맵을 이동할수있는 메소드입니다. cm.warp(맵코드, 0);

# 상점창을 열어주는 메소드입니다. cm.openShop(상점코드);

# 플레이어에게 아이템을줍니다. cm.gainItem(아이템코드, 개수); (이것은 뺏기도가능합니다 갯수앞에 -를붙혀주세요)

# 플레이어의 직업을 변경한다. cm.changeJob(직업코드);

# 퀘스트를 시작한다. cm.startQuest(코드);

# 퀘스트를 완료한다. cm.completeQuest(코드);

# 퀘스트를 없앤다. cm.forfeitQuest(코드);

# 플레이어의 현재 메소를 확인한다. cm.getMeso();

# 플레이어에게 메소를 준다. cm.gainMeso(금액); (이것도 gainItem처럼 뺏기도가능합니다. 금액앞에 -를 붙혀주세요)

# 플레이어에게 경험치를 준다. cm.gainExp(경험치); (이것도 gainItem처럼 뺏기도가능합니다. 경험치앞에 -를 붙혀주세요)

# 플레이어에게 캐쉬를 준다. cm.gainCash(캐쉬); (이것도 gainItem처럼 뺏기도가능합니다. 캐쉬앞에 -를 붙혀주세요)

# 플레이어의 레벨을 확인한다. cm.getLevel();

# 플레이어에게 스킬가르친다. cm.teachSkill(스킬코드, 레벨, 마스터레벨);

# 플레이어의 스텟을 가르쳐준다. cm.get[Stat]();

# 다른NPC를 열어주는 메소드입니다. openNpc(NPC 코드);


관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 등록자 벼배릅 등록일 04.14
알림 0