본문 바로가기
마인크래프트/Skript 기초 이론편

스크립트 기초 이론 8편(함수)

by 스터디립트 2022. 2. 20.

스터디립트의 마인크래프트 스크립트 기초 이론편의 8번째 시간입니다.

이번 시간에는, 함수에 대해서 알아보도록 하겠습니다.

 

우선 함수란, 마인크래프트 바닐라 명령어에 대해서 잘 아시는 분들은 /function과 비슷하다고 보시면 됩니다. 실제로 함수가 영어로 function이죠.

 

함수는, 옵션의 업그레이드 버전이라고 생각하시면 쉽습니다.

 

 

 

구문, 또는 값을 얻어내기 위한 과정의 구문을, 간소화하기 위해서 대부분 함수를 사용합니다.

 

지금부터 함수의 구조에 대해서 알려드리겠습니다.

이해가 잘 안되실수도 있는데 그래도 일단 이해가 되는 부분만 보시고, 그 뒤에 함수를 이용한 예시 스크립트를 보여드릴테니, 그것을 보고 이해하시면 편하실겁니다.

 

우선 함수의 구조는,

 

function [함수명]([변수명]: [변수타입]):
    [구문]

또는,

 

 

function [함수명]([변수명: [변수타입], [변수명]: [변수타입] ㆍㆍㆍ) :: [리턴타입]:
    [구문]
    return [리턴될 값]

 

의 형식으로 구성이 됩니다.

 

우선 첫번째 함수 구조의 예시부터 알아보도록 하겠습니다.

저같은 경우는, 도움말 메시지를 출력할 만한 경우의 수가 많아서, 구문에 도움말 메시지를 출력하는 구문을 많이 써야할 때 주로 사용합니다.

 

 

 

command /give [<player>] [<itemtype>]:
    trigger:
        if arg 1 is set:
            if arg 2 is set:
                give 1 of arg 2 to arg 1

이렇게 한번 바닐라 마인크래프트의 명령어인 /give를 스크립트로 구현해 봤습니다.

이 스크립트에서, 도움말 메시지를 출력할 만한 경우의 수는, arg 1를 설정하지 않았을 때, arg 2를 설정하지 않았을 때, 이렇게 2가지의 경우의 수가 있을 수 있습니다.

(물론 if arg 1 and arg 2 is not set 을 사용해서 한번만 도움말 메시지를 출력하게 할 수도 있지만, 일부러 도움말 메시지를 여러번 출력하게 만드는 상황을 만들기 위해서 이렇게 만들었습니다)

이제 여기에, 함수를 이용해서 도움말 메시지를 출력하게 만들어보겠습니다.

 

 

function Sendgivehelpmessage(p: player):
    send "사용방법 - give" to {_p}
    send "/give [플레이어] [아이템 이름]" to {_p}
    send "아이템 이름은 언더바(_)를 띄어쓰기로 교체해서 적어주세요" to {_p}
    send "숫자 코드는 더 이상 지원되지 않습니다" to {_p}
command /give [<player>] [<itemtype>]:
    trigger:
        if arg 1 is set:
            if arg 2 is set:
                give 1 of arg 2 to arg 1
            else:
                Sendgivehelpmessage(player)
        else:
            Sendgivehelpmessage(player)

 

여기에서, arg 1 또는 arg 2를 적지 않았을때, 도움말 메시지가 출력되도록 했습니다.

괄호 안에 넣은 player, 가 함수에 있는 p가 된것이고, (함수에서 {_[변수명]} 을 통해 변수를 표현합니다)

함수에서는, 누가 명령어를 실행하였는지가 명확하지 않기에 반드시 send 구문에서는 보낼 대상, {_p} = player = 명령어를 실행한 대상 에게 도움말 메시지가 출력되게 하는것입니다.

 

 

이대로 한번 스크립트를 만들어 보고 실험해보겠습니다.

 

 

명령어를 잘못 사용했을 때, 도움말 메시지가 잘 출력되는것을 볼 수 있습니다.

 

자 그러면 이번엔 두번째 함수 구조에 대해 알아보겠습니다.

우선, 리턴 값 이라는 것에 대해 이해가 잘 안되시는 분들이 있으실겁니다.

예를 들어서 설명드리자면,

 

 

function test(p: player, t: text) :: text:
    set {_message} "%{_p}% - %{_t}%"
    return {_message}

 

자 이렇게 한번 예문을 만들어 봤습니다.

쉽게 이야기 해드리자면, 이 구문에서,

%test()% = {_message}가 되는것입니다. return 값이, 그 함수의 최종적인 값이 되는겁니다. 리턴 타입은, text로 해놨기에, text 타입의 {_message} 가 test()의 값이 되는겁니다.

 

 

위 구문을 이용해서,

이런 예문을 만들어 봤습니다.

 

 

function test(p: player, t: text) :: text:
    set {_message} "%{_p}% - %{_t}%"
    return {_message}
command /message [<player>] [<text>]:
    trigger:
        send test(player, arg 2) to arg 1
 

이런식으로 [보낸사람] - [메시지] 의 형태로 리턴 값이 잘 arg 1에게 보내지는것을 볼 수 있습니다.

 

스터디립트의 마인크래프트 스크립트 기초 이론편 8편은 여기서 끝입니다.

다음 시간은, 예정된 것이 없지만, 신청이 들어오면 기초 이론 강좌를 제작하도록 하겠습니다.

신청이 들어오지 않는디면, 지금까지 기초 이론 강좌에서 배운 것들 + 추가적인 구문 들을 이용한 기초 활용 강좌를 제작하도록 하겠습니다.

 

질문이 있으시다면 이 글의 댓글에 적어주시면 답변해드리겠습니다

 

 

 

댓글