여러 서버들을 돌아다니다 보면 주로 현실경제 또는 rpg 장르의 서버들에서 자기들만의 음식 시스템을 가지고 있는것을 알 수 있습니다. 음식에 쿨타임을 넣거나, 음식의 포만감을 임의로 조정하거나, 음식이 아닌 아이템들도 먹을 수 있도록 만든 서버들을 볼 수 있습니다. 이번 시간에는 스크립트를 활용하여 앞에 말한 3가지의 기능이 있는 음식 스크립트에 대해서 알아보도록 하겠습니다. 저번 시간과는 달리 이번 시간에는 별 다른 애드온이 필요하지 않습니다.
사용 방법부터 알려드리겠습니다.
/음식 [아이템] [포만감] [쿨타임] (개수) (이름)
위 명령어를 칠 시, 음식 아이템이 지급됩니다. 그 음식 아이템을 우클릭할 시, 음식이 먹어집니다.
그럼 이제 소스코드를 보며 구문들을 분석해보도록 하겠습니다.
command /음식 <item type> <number> <number> [<integer>] [<text>]:
permission: *
permission message: &c당신은 권한이 없어 음식을 만들 수 없습니다
usage: /음식 [아이템] [포만감] [쿨타임] (개수) (이름)
executable by: player
trigger:
if arg 4 is set:
set {_count} to arg-4
else:
set {_count} to 1
if arg 5 is set:
set {_name} to arg 5
replace all "&" in {_name} with "§"
if {_name} is set:
give {_count} of arg 1 named {_name} with lore "" and "&6포만감 - %arg 2%" and "&9쿨타임 - %arg 3%" and "" and "&7&o@음식" to player
else:
give {_count} of arg 1 with lore "" and "&6포만감 - %arg 2%" and "&9쿨타임 - %arg 3%" and "" and "&7&o@음식" to player
on rightclick:
set {_lore::*} to uncolored lore of event-player's tool
loop {_lore::*}:
if loop-value contains "@음식":
set {_isfood} to true
if {_isfood} is true:
cancel event
loop {_lore::*}:
if {_lore::%loop-index%} contains "포만감":
set {_hungers::*} to loop-value split at " - "
set {_h} to {_hungers::2} parsed as number
if {_lore::%loop-index%} contains "쿨타임":
set {_cooltimes::*} to loop-value split at " - "
set {_c} to {_cooltimes::2} parsed as number
else:
exit
if {%uuid of event-player%.fctime} is not set:
subtract 1 of event-player's tool from event-player's inventory
add {_h}/2 to event-player's food level
set {%uuid of event-player%.fctime} to now
set {%uuid of event-player%.fc} to "%{_c}% seconds" parsed as timespan
else:
if difference between now and {%uuid of event-player%.fctime} is greater than {%uuid of event-player%.fc}:
subtract 1 of event-player's tool from event-player's inventory
add {_h}/2 to event-player's food level
set {%uuid of event-player%.fctime} to now
set {%uuid of event-player%.fc} to "%{_c}% seconds" parsed as timespan
일단 기본적으로 오피만 음식을 만들 수 있도록 권한을 설정해놓고, 콘솔은 아이템을 받을 수 없으니 플레이어만 사용이 가능하도록 설정해놓았습니다. 음식을 만드는 명령어부터 살펴보자면, 우선 선택사항인 개수, 이름이 있는지 확인한 후 이름에 있는 &을 모두 §로 바꾸어 색깔코드를 사용할 수 있도록 합니다. 그 뒤, 포만감과 쿨타임의 정보를 아이템의 설명에 넣은 후, @음식 이라는 태그를 추가하여 아이템을 플레이어에게 지급합니다.
다음으로는 on rightclick 이벤트문을 살펴보겠습니다. 우선 플레이어의 아이템의 설명에 @음식 태그가 있는지 확인한 후, 음식 태그가 있다면 cancel event로 사용을 차단합니다. 만약 음식 아이템이 블록 등 설치 가능한 아이템일 시 설치가 되지 못하도록 차단하는 것입니다. 그 뒤 아이템의 설명에서 포만감과 쿨타임 정보를 가져온 뒤, 만약 플레이어의 음식 쿨타임 변수가 설정되어있지 않은 처음으로 음식을 먹는 상황일 경우에는 {%uuid of event-player%.fc} (fc변수라 부르겠습니다) 에 변수 쿨타임을 설정해준 뒤, {%uuid of event-player%.fctime} (fctime 변수라 부르겠습니다) 에 음식을 먹은 당시의 날짜를 설정해줍니다.
만약 음식을 처음 먹는것이 아닌 이전에 먹었던 적이 있다면, 변수가 설정되어 있을것이기에, fctime변수와 음식을 먹는 당시의 날짜의 차이가 만약 fc변수의 값보다 크다면, 즉 이전에 음식을 먹었던 시간과 지금의 시간의 차이가 전에 먹었던 음식의 쿨타임보다 크다면, 음식을 먹고 다시 변수들을 재설정합니다.
timespan
처음 보는 변수타입이 있습니다. 이는 시간을 나타내는 변수 타입입니다. 예를 들어 1 second, 5 days, 7 hours와 같이 말입니다. 7초와 4초의 차이가 3초인 것처럼 시간과 시간을 비교할 경우에는 그 차이도 정수가 유리수가 아닌 시간이기에, timespan을 이용해 주어야 합니다. 따라서 fc변수를 지정할 시에도 숫자만 적혀있는 음식 아이템의 쿨타임에서 뒤에 seconds를 붙여 변수 타입을 timespan으로 변환해준 뒤에 지정합니다.
이번 시간에는 커스텀으로 음식을 만드는 스크립트에 대해서 알아보았습니다. 예정되어있는 스크립트 기초 활용편인 8편이 마지막이지만, 기초 활용편에 넣으면 좋을만한 아이디어가 떠오른다면 비정기적으로 새로운 글이 올라올 수 있습니다. 다음 시간에는 마인크래프트의 명령어를 사용할 시 자동완성이 되는 기능, 예를 들어서 /tp를 친 뒤에 한칸 띄어쓰고 탭을 누르면 플레이어 목록이 뜨고 자동완성이 되는 기능에 대해서 알아보도록 하겠습니다. 질문이 있으시다면 이글의 댓글에 적어주시면 답변해드리도록 하겠습니다.
아래는 스크립트 파일들입니다
주석 미포함
주석 포함
'마인크래프트 > Skript 기초 활용편' 카테고리의 다른 글
스크립트 기초 활용 10편(자동심기) (1) | 2023.01.02 |
---|---|
스크립트 기초 활용 9편(자동완성) (0) | 2022.02.26 |
스크립트 기초 활용 7편(접속시간) (0) | 2022.02.23 |
스크립트 기초 활용 6편(장비) (0) | 2022.02.22 |
스크립트 기초 활용 5편(테러방지) (0) | 2022.02.21 |
댓글