게임강의
어둠의전설 분류

어둠의전설 어둠의전설 오픈 첫걸음부터 완성까지 - 스크립트 기초 1

컨텐츠 정보

본문

[출처: Gamezone]
작성자: 작성자 없음

 


 


 


안녕하세요. 소주스승입니다.


반갑습니다.


 


이번 강좌에서는 아테나 스크립트가 어떻게 돌아가는지, 그리고 어둠의전설의 함수 몇개를 소개하려고 합니다.


 


왜? 보통 아이템 수정, NPC 수정 같은걸 먼저 하지 않나요? 라고 의문이 생기시는 분들도 계실겁니다.


그런데 사실 아이템이나 NPC는 수정하기가 어렵지 않습니다. 아주 직관적이라 그냥 파일 몇번 보고


이거저거 수정하면 뚝딱입니다. 실제로 대부분의 운영자들이 아이템과 몬스터 등 수치만 약간 약간 변경하며 서버를 운영합니다.


스크립트는 손에 대지도 못하죠. 만진다 하더라도 만들어져있는 스크립트의 수치만 살짝살짝씩 바꾸는 정도입니다.


 


그러나 남이 만든 스크립트를 수정하고 계속 보는것도 중요하지만


자신이 직접 만드는게 무엇보다 중요합니다. 제가 그럴 수 있도록 기초를 알려드리겠습니다.


 


스크립트는 크게 보아 세가지로 나뉘어져 있습니다.


변수선언, 연산, 함수


 


선언된 변수를 연산하여 함수에 적용한다. 이것이 곧 스크립트입니다.


 


그럼 변수란 무엇일까요? 쉽게 말해 저장되는 숫자입니다.


설명을 위해 예제 하나를 준비했습니다.


 


set @Quest1, 1;


 


Quest1 이라는 변수에 1을 더하라는 예제입니다. 처음 보시는분은 이게 뭔가 싶으실겁니다.


그러나 이게 어떻게 작용되는지 전체적인 흐름을 보면 쉽게 파악이 가능할겁니다.


전체적인 예제를 한번 보시죠.


 


로즈마리가 사과를 구해오라는 퀘스트를 만들어봅시다. 어떻게 해야할까요?


 


먼저 로즈마리를 클릭하면 선택지가 나와야겠죠? "물건사기, 물건팔기, 로즈마리의 부탁(퀘스트)"


이렇게 3개의 선택지가 나오도록 해 봅시다. 스크립트로는 어떻게 작성해야할까요?


 


    set @menu,menu(1,"평안하신가요? 따뜻한 봄날이네요.", "물건 사기", "물건 팔기", "로즈마리의 부탁(퀘스트)");


 


이렇게 작성하시면 됩니다. 자세히 보시면


 


[이미지 링크 만료]


 


두가지 파트로 나뉘어져 있습니다. set @menu, 그리고 뒤의 menu 함수입니다.


몇번째의 선택지를 클릭하냐에 따라, @menu에 저장되는 숫자가 달라집니다.


물건 사기를 클릭한다면 @menu에는 1이 저장되고, 물건 팔기를 클릭하면 @menu에는 2가, 로즈마리의 부탁을 클릭하면 3이 저장되는 형식이죠.


 


자, 유저는 3을 클릭합니다. 그럼 서버에서는 유저가 3을 클릭했다는걸 어떻게 알아 챌까요?


서버는 보여줘야합니다. 물건 구매 창이든, 판매 창이든, 퀘스트 창이든 말이죠.


 


if(@menu==3){내용}


 


if문입니다. 만약이라는 뜻이죠. 해석하면, 만약 @menu가 3이라면, 내용 안의 스크립트를 실행해라. 라는 뜻 입니다.


if문을 쓰는 형식은 꼭 지켜주셔야 합니다. if문을 쓰고, 쓰고싶은 변수를 괄호안에 넣어주고, 연산자를 이용해 범위를 지정해주고, 대괄호 안에 내용을 넣어주시면 됩니다.


 


대괄호에 넣을 내용을 만들어봅시다.


 


로즈마리 : 사과를 하나만 구해다 주시겠어요? 이유는 묻지 마시구요.


 


로즈마리가 도움을 요청합니다. 또한, 유저에게 선택권은 줘야겠지요? 그럼 어떻게 해야할까요?


 


if(@menu==3){set @menu2,menu(1,"사과를 하나만 구해다 주시겠어요? 이유는 묻지 마시구요.", "그럽시다.", "싫습니다.", "사과 말고 소주는 어떠세요. 아니면 사과주도 좋죠.");}


 


이런식으로 선택지를 띄우시면 됩니다. 앞에 if라는 조건문이 붙었기때문에 만약 위에서 물건사기나, 물건팔기를 클릭했다면


이 선택지는 보여지지 않습니다. 대신 물건사기 창을 if(@menu==1){shop 0,"로즈마리","원하시는 것을 골라보세요. 원하시는 것을 클릭하면 구입하실 수 있습니다.";}


이런식으로 해서 띄울수도 있겠지요. 앞의 @menu가 1이 된것을 잘 보시고 생각해보시기 바랍니다. 1번째 선택지를 클릭했기때문에 1을 설정해주셔야 합니다.


 


자, 이제 선택지 1을 눌러 퀘스트를 수락했다고 칩시다.


그럼 어떻게 할까요? 퀘스트를 진행하러 가야죠.


그전에, 퀘스트를 유저가 승낙했다는 표시가 필요합니다. 왜냐구요?


만약 이 상황에서 로즈마리를 클릭하고, 다시 로즈마리의 부탁 퀘스트를 선택하면 서버는 무엇을 띄울까요?


 


로즈마리 : 사과를 하나만 구해다 주시겠어요? 이유는 묻지 마시구요.


 


로즈마리는 멍청하게도, 서버는 멍청하게도 아까 부탁을 해놓구선 또다시 부탁을 하고 있는 것이였습니다.


스크립트란 이런겁니다. 하나부터 열까지 모조리 설정해줘야 한다는 거죠.


얼마나 구체적이고 짜임새있게 스크립트를 짜느냐에 따라 그 서버의 흥망이 결정된다고 해도 과언이 아닙니다.


그럼 그 표식은 무엇일까요?


 


set #Quest1, 1;


 


#Quest1이라는 변수에 1을 더해줍니다. 그렇다면 if문을 통해 다르게 빠져나갈 수 있겠죠?


#Quest1 변수가 1이라면, 로즈마리 : 아직 안구해오셨나요? 혹은 로즈마리 : 구해오셨군요! 이런식의 반응이 가능하고


#Quest1의 변수가 0이라면 로즈마리 : 사과를 하나만 구해다 주시겠어요? 이유는 묻지 마시구요. 의 반응을 띄울 수 있게 되는겁니다.


 


근데, 잠깐. 변수의 모양이 아까와 조금 다르죠? 아까는 변수 앞에 @가 붙어있었는데 지금은 #입니다. 이 차이는 무엇일까요?


 


@ = 임시변수


# = 계정변수


$ = 서버변수


 


변수는 총 3가지의 종류로 나뉘어져 있습니다. 임시변수란 그 캐릭터가 접속을 해지하기 전까지만 저장되는 변수입니다.


계정변수는 그 캐릭터에게 영원히 저장되는 변수이구요.


서버변수는 캐릭터가 아니라 서버에 저장되는 변수입니다. 즉, 서버변수 선언을 일으킨 캐릭터가 삭제되어도 변수는 여전히 남아있는거죠.


 


만약 퀘스트를 받았는데, 재접을 하니 초기화가 되어버리면 어이가 없겠죠? 그럴때 계정변수를 씁니다.


바람의나라와는 반대지요. 해보신분은 알겠지만 CR은 #가 서버변수이며 $가 계정변수입니다.


 


그리고 바람의나라는 그 스크립트가 실행되는동안에만 임시변수가 저장되지만


어둠의전설은 유저가 접속을 해지하기 전까지 임시변수가 저장됩니다.


그렇기때문에 del @menu 함수를 사용하여 임시변수를 초기화 시켜주기도 합니다. ( 변수를 0으로 만들며, set @menu, 0과 완전히 같습니다.)


 


이렇게, 변수와 연산, 함수가 어떻게 작용되는지 겉핥기로 알아봤습니다.


별로 어렵진 않죠? 스크립트가 대부분 이렇습니다.


다음 강좌에서는 함수에 대해 좀더 자세히 알아보도록 하겠습니다.


 


 

관련자료

댓글 0
등록된 댓글이 없습니다.
전체 422 / 19 페이지
번호
제목
이름

강의실

🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 82,042
2 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,280
3 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 33,479
4 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 23,416
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 22,310
7 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 16,347
8 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 13,500
9 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 13,246
10 no_profile 하늘2쪽지보내기 자기소개 아이디로 검색 전체게시물 13,239
알림 0