한마포 갤러리
https://www.koreaminecraft.net/files/thumbnails/830/183/002/262x150.crop.jpg
생일

marku6692

2020-11-30

0

https://www.koreaminecraft.net/files/thumbnails/814/183/002/262x150.crop.jpg
할로윈

marku6692

2020-11-30

0

한국 마인크래프트 포럼

새롭게 돌아온
마인크래프트 커뮤니티 및 자료 플랫폼

전체 회원수 82,480명 오늘 가입자 112명

※ 1년 이상 활동하지 않은 휴면 회원은 제외된 수치입니다.

Profile Ru_Nan 대표칭호 없음

Ru_Nan 642a599e50ad442cab0e91c0d4d2252a

Profile

개발자란new 커뮤니티new 스크립트 Q&Anew 완료

명령어 실행 스크립트

2020.10.25 조회 수 45 추천 수 0
서버 종류 모드버킷 
마인크래프트 버전 1.12 
스크립트 버전 2.2dev27 

/test 라고 했을때 1번 명령어와 2번명령어가 실행되는데

1번 명령어를 실패했을경우 2번 명령어가 실행되지 않게 되려면 어떻게 해야 합니까 

16개의 댓글

브혼
2020.10.25

1번 명령어 내에서 전역변수로 실패, 성공을 기록하시고
/test 명령에서 1번 명령 이후 전역변수가 성공일 때 2번 명령어를 실행하세요

Ru_Nan
2020.10.26
@브혼

혹시 조금더 자세히 설명해주 실 수 있나요

브혼
2020.10.26
@Ru_Nan
execute command "/test.command.1" by console
{pass} is true
delete {pass}
execute command "/test.command.2" by console

command /test.command.1:
    trigger:
        set {pass} to true

command /test.command.2:
    trigger:
        send "execute test.command.2"

이와같이 test.command.1 명령을 실행 한 후 {pass} 변수가 true인 경우에 test.command.2가 실행되도록 구성합니다.

그리고 test.command.1 명령어에서 {pass} 변수를 true로 바꾸어주면, 명령어를 실행한 후 {pass}변수를 비교하기때문에 조건을 만족하게 되어 test.command.2가 실행되죠.

Ru_Nan
2020.10.26
@브혼

위와 같이 하면 1~4번 줄이 invalid line-all code has to be put into trigger 이라고 합니다

브혼
2020.10.27
@Ru_Nan

1~4번줄은 핵심이 되는 구조적인 부분을 보여드린겁니다. 해당 코드가 실행될 수 있게 구성하세요.
invalid line-all code has to be put into trigger 라는 말이 코드가 실행될수있게 하라는말입니다. 번역기 돌려보세요~

Ru_Nan
2020.10.27
@브혼

execute console command "/교환"

{pass} is true

delete {pass}

execute console command "/교환1"

 

command /교환:

trigger:

execute console command "givemoney @p -100"

set {pass} to true

 

command /교환1:

trigger:

execute console command "/minecraft:give @p blockteamcoinmod:bronzecoin 1"

send "execute minecraft:give @p blockteamcoinmod:bronzecoin 1"


Ru_Nan
2020.10.27
@Ru_Nan

이런식으로는 안된다는 건가요?

 

Ru_Nan
2020.10.27
@브혼

아니면 1번 명령어를 /동화교환

2번 명령어를 /동화교환1으로 해서 만들어 주실 수 있나요?

브혼
2020.10.27
@Ru_Nan

"/test 라고 했을때 1번 명령어와 2번명령어가 실행"에서 /test 명령어에 들어갈 부분이 1~4번줄 입니다. 나머지는 작성하신 대로 하시면 됩니다.

Ru_Nan
2020.10.27
@브혼

command /test:

trigger:

execute console command "/교환"

 

{pass} is true

 

delete {pass}

 

execute console command "/교환1"

 

command /교환:

 

trigger:

 

execute console command "givemoney @p -100"

 

set {pass} to true

 

 

 

command /교환1:

 

trigger:

 

execute console command "/minecraft:give @p blockteamcoinmod:bronzecoin 1"

 

send "execute minecraft:give @p blockteamcoinmod:bronzecoin 1"

 

 

 

이런식으로 하면되는건가요?

 

브혼
2020.10.27
@Ru_Nan

Ru_Nan
2020.10.28
@브혼

이렇게 했는데도 1번 커맨드가 실패 했는데도 2번커맨드가 되네요

아무래도 2번째  커맨드에 익스큐트가 있어서 익스큐트후 그 변수 값을 주기 때문에 그 명령어를 성공했는지 인식을 못한듯 한데 이걸 어떻게 바꿔야 할까요?

브혼
2020.10.29
@Ru_Nan

/교환 명령어의 성공과 실패를 {pass}에 저장하는겁니다. true를 저장하셨으니 당연히 교환1 명령어가 실행되는 겁니다.

/givemoney @p -100 명령어의 성공, 실패는 스크립트에서 알수 없습니다.

해당 명령어로 변경된 데이터를 스크립트에서 참조할 수 있어야 성공했는지 실패했는지 비교할수 있습니다.

Ru_Nan
2020.10.29
@브혼

커맨드 블록에서 실행시 밑에 실패이유가 뜨길래 가능할 것 같아서 그랬습니다

Ru_Nan
2020.10.29
@브혼

플러그인으로 써 구현이 가능하다고 하는데 어떤식으로 하면 구현이 가능 할까요?

브혼
2020.10.30
@Ru_Nan

제가 플러그인으로 구현할수 있다고 했나요?

 

스크립트는 스크립트 외부의 명령에 대해서 성공, 실패를 구분할 수 없습니다.

플러그인으로 만든다해도 다른 플러그인 명령어의 성공, 실패는 구분 할 수 없어요.

 

Bukkit API에서 onCommand 메소드는 성공/실패 여부를 boolean으로 반환하라고 제시하고 있고,

실패로써 false를 반환하면 플레이어는 '잘못 입력된 명령어'라고 명령실패 메세지를 받습니다.

즉, 명령어의 실패는 입력된 명령어(라벨, 인수등) 자체가 잘못된 경우 이거나, 제작자가 의도를 가지고 실패하도록 제작된 경우입니다.

 

올바르게 입력된 명령어의 성공, 실패 여부는 제작자가 정의해야 되는 부분이고,

일반적으로 명령 수행 후 변경되는 데이터를 참조하여 바뀌면 성공, 바뀌지 않으면 실패를 판단합니다.

플러그인의 명령어로 플러그인의 데이터가 변경되었다면 해당 데이터를 참조할 수 있는 방법을 찾아보셔야 합니다.