이제 서버내 시스템과 유틸리티 기능을 개발해보겠습니다
우선 메뉴 시스템을 만들겠습니다
메뉴 시스템을 만들기 전에 npc를 먼저 만들어줍니다
( 시티즌 강좌 참고 )
스크립트 파일을 새롭게 만들어 파일명을 메뉴로 설정했습니다
options:
r : &7&l[ &f&l서버 &7&l]&f&l
command /메뉴: #명령어를 입력했을때 작동되는 이벤트
trigger:
open chest with 1 row named "&e&l[ &f&l메뉴 &e&l]" to player #1줄짜리 이름이 설정된 상자를 엽니다
set slot 3 of current inventory of player to bed named "&b&l[ &f&l스폰 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 스폰으로 이동합니다." #이 상자에 3번째 슬롯에 아이템을 설정합니다
set slot 4 of current inventory of player to lime dye named "&b&l[ &f&l전장 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 전장으로 이동합니다."
set slot 5 of current inventory of player to emerald named "&b&l[ &f&l상점 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 상점으로 이동합니다."
#아이템 로어부분은 and를 추가하여 줄바꿈을 할 수 있습니다
on inventory click: #인벤토리를 클릭했을때 이벤트
if inventory name of current inventory of player is "&e&l[ &f&l전장 &e&l]": #현재 인벤토리 이름이 해당 문자열이라면
cancel event #클릭을 취소시킨다
if name of clicked inventory contain "&e&l[ &f&l전장 &e&l]": #현재 클릭한 인벤토리에 해당 문자열이 포함될때
if click slot is 2: # 클릭한 슬롯이 2번째라면
make player run cmd "/warp 마인고" as op #해당 warp 명령어 실행
if click slot is 3:
make player run cmd "/warp 저택" as op
if click slot is 4:
make player run cmd "/warp 병원1" as op
if click slot is 5:
make player run cmd "/warp cgv" as op
if click slot is 6:
make player run cmd "/warp 맥도날드" as op
if name of clicked inventory contain "&e&l[ &f&l메뉴 &e&l]":
cancel event
if click slot is 3:
make player run cmd "/spawn" as op
if click slot is 4:
if player is in world "world": #만약 플레이어가 world맵 안에 있을때
open chest with 1 row named "&e&l[ &f&l전장 &e&l]" to player
set slot 2 of current inventory of player to red brick block named "&b&l[ &f&l마인고 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 마인고로 이동합니다."
set slot 3 of current inventory of player to blue wool block named "&b&l[ &f&l저택 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 저택으로 이동합니다."
set slot 4 of current inventory of player to lime wool block named "&b&l[ &f&l병원 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 병원으로 이동합니다."
set slot 5 of current inventory of player to black wool block named "&b&l[ &f&lCGV &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 CGV로 이동합니다."
set slot 6 of current inventory of player to orange wool block named "&b&l[ &f&l맥도날드 &b&l]" with lore "&f" and "&c&l[+] &f우클릭시 맥도날드로 이동합니다."
else:
send "{@r} 스폰에서만 이동할 수 있습니다"
if click slot is 5:
if player is in world "world":
teleport player to location -25, 68, 21 #해당 좌표로 이동합니다
else:
send "{@r} 스폰에서만 사용 가능합니다"
우선 이 스크립트를 적용하기 전에 서버내에서 warp를 설정해야합니다
warp기능은 에센셜 기능으로써 우리가 원하는 위치를 설정하여 이동할 수 있습니다
warp 명령어 | 기능 설명 |
/setwarp <워프할이름> | 플레이어가 명령어를 실행한 위치에서 <워프할이름>으로 설정합니다 |
/warp <워프할이름> | <워프할이름>으로 이동합니다 |
/delwarp <워프할이름> | <워프할이름>을 제거합니다 |
/warp | 현재 등록된 워프를 봅니다 |
위에 코드에서 inventory of player to <itemtype> 구조로 되어있는데
<itemtype>부분은 밑에 명령어를 이용하여 서버내에서 확인하시면 됩니다
command /아이템확인:
trigger:
send "%player's tool%" #들고있는 아이템 정보를 봅니다
추가로 1칸짜리 상자를 열면 이렇게 생겼습니다
슬롯은 사진과같이 0번부터 시작합니다
set slot 3 of current inventory of player to bed
현재 인벤토리에 3번 슬롯에 bed 침대 아이템으로 설정합니다
상점에 텔레포트 좌표는 스폰에 있는 상점위치로 설정하였습니다
여러분들은 손수 만든 스폰맵 상점 좌표를 입력하시면 됩니다
on offhand move: #F 키 사용할때
if player is in "world":
if player is sneaking: # 플레이어가 웅크리기를 할때
make player run cmd "/메뉴" as op # 해당 명령어 실행
cancel event #F 키 방지
해당 구문은 대부분 서버에서 많이 사용하는 기능입니다
쉬프트+F키를 누르면 해당 명령어가 실행되는 원리입니다
서버에 필요하시면 추가하셔도 됩니다!
이제 npc에 명령어를 등록하는 방법을 알아봅시다
on right click on entity: #엔티티를 클릭할때
entity's name is "&b&l[N] &f메뉴" # 엔티티 이름이 해당 문자열일때
make player run cmd "/spawn" as op # 명령어 실행
위에처럼 짧게 구현할 수 있지만 npc를 만들때마다 추가해주는 작업이 번거롭기도 하여
따로 서버내에서 편하게 등록할 수 있게 스크립트로 만들어보겠습니다
이것도 새로운 파일로 만들어주세요
options:
r : &7&l[ &f&l서버 &7&l]&f
command /npc선택 [<text>] [<text>]:
trigger:
if player is op: #만약 해당 명령어를 입력한 플레이어가 오피라면
if arg 1 is not set: # 앞에 [<text>] 부분을 입력하지 않았다면
send "{@r} /npc선택 등록 [명령어] = 바라보는 npc에 명령어를 등록합니다"
send "{@r} /npc선택 삭제 = 바라보는 npc에 명령어를 삭제합니다"
if arg 1 is "등록":
if arg 2 is set: #두번째 [<text>]인 명령어를 입력했다면
if targeted entity is not set: #엔피시를 바라보지 않았다면
send "{@r} &cNPC를 바라봐주세요."
stop # 구문종료
set {_t} to "%arg 2%" # 두번째 [<text>]인 명령어를 {_t} 변수에 담습니다
replace all "_" with " " in {_t} # 이 명령어에 _를 " "로 대체합니다
set {npcname.%targeted entity%} to {_t} #우리가 바라본 엔피시의 npcname 변수를 대체한 명령어로 설정합니다
send "{@r} 성공적으로 %arg 2% 명령어를 연동하였습니다"
if arg 1 is "삭제":
if targeted entity is not set:
send "{@r} &cNPC를 바라봐주세요."
stop
send "{@r} 성공적으로 [ %{npcname.%targeted entity%}% ] 명령어를 삭제했습니다" # 위에서 설정한 명령어를 삭제합니다
delete {npcname.%targeted entity%} #아까 우리가 바라본 엔피시의 변수를 삭제합니다
on right click on entity: #엔티티를 우클릭할때
if {npcname.%name of event-entity%} is set: #우클릭한 엔피시에 변수가 설정되어있다면
make player run cmd "%{npcname.%name of event-entity%}%" as op # 그 명령어를 플레이어가 실행하게 한다
여기서 _언더바를 " "로 대체한 이유가 띄어쓰기가 있는 명령어도 실행하기 위해서 입니다
command /안녕 [<text>]:
trigger:
if arg 1 is "반가워": # [<text>]가 반가워 라면
send "나도 반가워"
위에 명령어를 등록하는 방법은
해당 엔피시를 바라보고 /npc선택 등록 안녕_반가워 를 입력하시면 해당 구문이 실행됩니다
이 기능이 필요없으시면 {_t} 변수와 replace 구문을 지우고
set {npcname.%targeted entity%} to arg 2 로 설정하면 됩니다
이렇게 npc에 명령어를 등록해줍니다
우클릭시 잘 작동됩니다