이해도 | 중급자(필요한 애드온을 찾아서 만들 수 있어요) |
---|---|
게임버전 (JE) | 1.12.2 |
게임버전 (BE) | 1.12.x |
현재 표지판 명령어 또는 엔피씨를 클릭씨 1회성으로 지급되는 코드를 짜고 있는데 작동이 될때가 있고 안될때가 있네요 ㅠㅠ 해결방법 아시는 분 계신가요?
variables:
{상자표지판.%player%} = 1
{그림표지판.%player%} = 1
command /상자방표지판:
trigger:
if {상자표지판.%player%} is 1:
give 1 Sign named "&c상자잠금용표지판 &f(1회용)" to player
set {상자표지판.%player%} to 0
else:
message "이미 표지판을 받았습니다"
command /그림방표지판:
trigger:
if {그림표지판.%player%} is 1:
give 1 Sign named "&c문잠금용표지판 &f(1회용)" to player
set {그림표지판.%player%} to 0
else:
message "이미 표지판을 받았습니다"
on drop:
item is Sign:
cancel event
on rightclick:
if name of player's tool is "&c문잠금용표지판(1회용)":
if block is not Iron Door:
send "철문에만 사용 가능합니다."
cancel event
if name of player's tool is "&c상자잠금용표지판(1회용)":
if block is not Chest:
send "상자에만 사용 가능합니다."
cancel event
command /표지판초기화:
trigger:
if player is op:
set {상자표지판.%player%} to 1
set {그림표지판.%player%} to 1
send "초기화되었습니다."
on rightclick on entity:
if entity's name is "&b상자방 표지판 지급":
execute player command "/상자방표지판"
qsef1256
2022.08.31variables: 은 이름은 변수이지만 실제로는 상수를 정의하는 공간입니다. 저기다가 변수 써놓은거 요즘 보이기 시작하는데, 전부 틀렸고 작동 안합니다.
sswind
2022.08.31그러면 처음 코드작성을 할때 변수를 선언하면 안되는건가요? 그러면 어떻게 해야 1회성 명령어를 만들 수 있나요??
qsef1256
2022.08.312가지 방법이 있습니다.
첫 번째는 on join/on first join, 그러니까 플레이어가 들어올 때 값 초기화(할당)을 해 주는 거고, 두 번째는 처음부터 is set 으로 구분 하는 겁니다. 처음에 호출할 때 set 되어 있을 리가 없으니까 is not set 은 무조건 true 거든요.
qsef1256
2022.08.31근데 is set 으로 구분하는 게 안전하다고 한 이유는, 수동 초기화는 실수 가능성이 있기 때문입니다. 다만 취향 차이일 수는 있어요, 들어올 때 직접 초기화 시키는 게 맞는 사람은 그냥 그렇게 하기도 합니다
qsef1256
2022.08.31그리고 그런 용도라면 1,0으로 구분하는 것 보다는 is set/is not set으로 구분하는게 안전합니다.