스터디립트의 마인크래프트 스크립트 기초 활용편의 2번째 시간입니다.
이번 시간에는 가방 스크립트에 대해서 알아보도록 하겠습니다.
이 스크립트는, SkQuery 애드온이 필요합니다.
SkQuery애드온은 기본적인 시스템들을 만들 때 여러가지로 활용할 곳이 많은 애드온 중 하나입니다. 애드온 없이 스크립트를 구축해가고 싶으신 분이 아니시라면, 거의 필수 애드온 중 하나라고 볼 수 있습니다.
↓ 아래 링크에서 다운받으실 수 있습니다.
Addon - SkQuery [1.9-1.15+]
https://forums.skunity.com/resources/skquery-1-9-1-15.68/
우선 사용하는 모습 먼저 보시겠습니다.
/가방발급 [줄 수] [고유번호] 를 통해 가방을 발급받을 수 있습니다.
저는 2줄짜리 고유번호 1234번 가방을 발급받았습니다.
가방을 들고 우클릭을 하니, 제가 발급받은대로 2줄짜리 가방이 잘 열리는 것을 볼 수 있습니다.
이렇게 아이템들의 위치를 다 다르게 해 놓아도, 칸마다 아이템의 정보를 저장해놓는 방식이기 때문에
가방을 닫은 후 다시 열었을 때에도 가방에 넣어놨었던 아이템들의 위치 그대로 남아있게 됩니다.
자 그러면 이제 한번 상자 스크립트의 구문에 대해 알아보겠습니다.
options:
s : &3&l[ &b&l가방 &3&l]
command /가방발급 [<number>] [<number>]:
trigger:
if player is op:
if arg 1 and arg 2 is set:
if arg 1 < 1:
send "{@s} 1줄이 최소입니다"
else:
if arg 1 <= 6:
if {고유번호.가방::*} contains arg 2:
send "{@s} 이 고유번호는 이미 존재합니다. 다른 고유번호를 지정해주세요"
else:
give 1 chest named "&3&l[ &b&l가방 &3&l]" with lore " " and "&3&l줄 수:&l%arg 1%&3&l줄" and "&3&l고유번호:&l%arg 2%&3&l번" to player
add arg 2 to {고유번호.가방::*}
send "{@s} %arg 1%&3&l줄짜리 고유번호 &3&l%arg 2%&3&l번 가방이 발급되었습니다"
else:
send "{@s} 6줄이 최대입니다"
else:
send "&4[ &r사용방법 &4]"
send "&4[ &r/가방발급 [줄 수] [고유번호] &4]"
else:
send "{@s} 당신은 오피가 아니기에 이 명령어를 사용할 수 없습니다"
on rightclick with chest:
if name of player's tool contains "&3&l[ &b&l가방 &3&l]":
cancel event
set {_lore::*} to uncolored lore of player's tool
loop {_lore::*}:
if {_lore::%loop-index%} contains "줄":
set {_줄수} to {_lore::%loop-index%}
replace all "줄" and " " and "수" and ":" and "줄" with "" in {_줄수}
set {_줄수} to {_줄수} parsed as integer
if {_lore::%loop-index%} contains "고유번호":
set {_고유번호} to {_lore::%loop-index%}
replace all " " and "번" and ":" and "고유번호" with "" in {_고유번호}
open chest with {_줄수} row named "&b&l가방" to player
set {_count} to 0
loop {bag.%{_고유번호}%::*}:
set slot {_count} of current inventory of player to loop-value
add 1 to {_count}
on inventory close:
if icname contains "가방":
set {_lore::*} to uncolored lore of player's tool
loop {_lore::*}:
if {_lore::%loop-index%} contains "줄":
set {_줄수} to {_lore::%loop-index%}
if {_줄수} contains "1":
set {_줄수} to 1
if {_줄수} contains "2":
set {_줄수} to 2
if {_줄수} contains "3":
set {_줄수} to 3
if {_줄수} contains "4":
set {_줄수} to 4
if {_줄수} contains "5":
set {_줄수} to 5
if {_줄수} contains "6":
set {_줄수} to 6
if {_lore::%loop-index%} contains "고유번호":
set {_고유번호} to {_lore::%loop-index%}
replace all " " and "번" and ":" and "고유번호" with "" in {_고유번호}
delete {bag.%{_고유번호}%::*}
set {_count} to 0
loop 54 times:
add slot {_count} of current inventory of player to {bag.%{_고유번호}%::*}
add 1 to {_count}
(원래 사용했던 테마를 적용시키니, player's 의 '를 텍스트의 시작 부분으로 인식해서 글씨가 다 초록색으로 변해버려서 이것만 테마를 다른것으로 바꿨습니다.)
기본적인 원리는, 가방마다 고유번호가 다른것을 이용해, 고유번호의 이름으로 각각 배열변수에 가방을 닫을때는 가방의 아이템들을 저장하고, 열때는 다시 고유번호의 이름으로 된 배열변수에서 아이템들을 불러오는 방식입니다.
이제 여러분들이 모르실 것 같은 구문들에 대해서 알려드리겠습니다.
1. if name of player's tool contains ~
이건 말 그대로, 명령어를 실행한 대상의 손에 들려있는 아이템의 이름에 ~가 포함되어 있는지, 라는 구문입니다.
이 구문을 변형시켜서, if lore of player's tool contains(플레이어의 손에 들려있는 아이템의 설명에 ~가 포함되어 있는지) 등으로도 사용할 수 있습니다.
저는, 상자를 우클릭했을때, 상자의 이름이 &3&l[ &b&l가방 &3&l]" 을 포함할 때, 로 구문을 만들어서, 손에 든 아이템이 가방일 때만 GUI가 열리도록 했습니다.
2. ~ uncolored [lore/name] of [아이템]
위 구문은, [아이템] lore 또는 name의 색깔을 벗긴다는 이야기입니다.
set {_lore::*} to uncolored lore of player's tool
를 이용해서, {_lore::*} 에다가 상자 아이템의 설명들을 색깔을 벗긴 상태로 저장한 후,
loop와 replace를 이용해 {_줄수} 에다가 가방의 줄 수를, {_고유번호} 에다가는 고유번호를 저장하게 했습니다.
3. open chest
이건, GUI메뉴, 즉 가방을 열어준다는 구문입니다.
기본적인 구조는,
open chest with [줄 수] row named [이름] to [대상]
입니다.
open chest with {_줄수} row named "&b&l가방" to player
를 이용해,
&b&l가방 이라는 이름의 {_줄수} 짜리 GUI메뉴를 명령어를 실행한 대상에게 열어주게 만들었습니다.
4. set/add slot ~ of ~ inventiry of ~ to [변수/배열변수]
이 구문은, 3번째 ~의 두번째~ 인벤토리의 첫번째 ~ 슬롯에 있는 아이템을 변수 또는 배열변수에 더하거나, 반대로 변수 또는 배열변수에 있는 아이템을 그 슬롯에 놓는다는 구문입니다.
loop {bag.%{_고유번호}%::*}:
set slot {_count} of current inventory of player to loop-value
add 1 to {_count}
를 통해서, 가방을 열 때 고유번호의 이름으로 지정된 배열변수에 있는 아이템들을, 불러왔습니다.
또한,
delete {bag.%{_고유번호}%::*}
set {_count} to 0
loop 54 times:
add slot {_count} of current inventory of player to {bag.%{_고유번호}%::*}
add 1 to {_count}
를 통해서 가방을 닫을때 가방에 있는 아이템들을 고유번호의 이름으로 된 배열변수에 저장하도록 했습니다.
아래의 파일들은, 가방 스크립트 입니다.
주석이 포함된 스크립트는 추후 업로드 할 예정이며, 2차수정 및 2차배포는 가능하지만, 배포를 할 때에는 출처는 남겨주세요.
↓ 가방 스크립트 (주석 없음)
↓ 가방 스크립트 (주석 포함)
스터디립트의 마인크래프트 스크립트 기초 활용편 2편은 여기서 끝입니다.
다음 시간에는, 상점 스크립트에 대해 알려드리겠습니다
질문이 있으시다면 이 글의 댓글에 적어주시면 답변해드리겠습니다.
'마인크래프트 > Skript 기초 활용편' 카테고리의 다른 글
스크립트 기초 활용 5편(테러방지) (0) | 2022.02.21 |
---|---|
스크립트 기초 활용 4편(금지명령어) (0) | 2022.02.21 |
스크립트 기초 활용 3편(상점 ver.1.0) (2) | 2022.02.21 |
스크립트 기초 활용 1편(칭호) (1) | 2022.02.20 |
스터디립트의 마인크래프트 스크립트 기초 활용편 목차 안내 (0) | 2022.02.20 |
댓글