개인 자료란 (JE)

  서버 커뮤니티

Profile 늘솜보름 정품인증자

JIMIN2457 69b92cf6d9194ba7a57a668b093cb822

Profile

질문하기 스크립트

상자 관련 질문

2021.07.19 조회 수 85 추천 수 0
이해도 1.12 
게임버전 (JE) 스피곳 
스크립트 버전 중급자(필요한 애드온을 찾아서 만들 수 있어요) 
스크립트 애드온 2.5.3 

조금 복잡한데 너무 길어서 간단하게 설명해보겠습니다.


1. A 상자와 B 상자를 설치하면 하나로 합쳐집니다.


2. 근데 방향에 따라 A상자가 기준인 경우가 있고 B 상자가 기준인 경우가 있습니다.


3. 먼저 설치한 A 상자와 나중에 설치한 B 상자를 비교하고, 무조건 먼저 설치된 A 상자를 기준으로 하고싶습니다.


오늘 구글링하면서 나머지는 다 원하는대로 결과물 얻었는데 위에 설명한 문제만큼은 너무 어렵더라구요..


on place of a chest:

    loop all blocks in radius 1 of block:

        send "%loop-value's inventory name%" to player


위의 코드로 실험중이였는데 상자가 합쳐지면서 하나의 블록이 되버리고, 기준이 되는 상자가 무슨 원리인지 모르겠습니다.


조금이라도 아시는 분들은 참고가 될 수 있도록 답변부탁드립니다!




4개의 댓글

스크립터브혼
2021.07.20

1.12 버전 이하에서는 블록의 방향을 data 로 사용했습니다.

data of %block% 익스프레션으로 방향을 가지는 블록들의 방향을 알 수 있었죠.

이 data 값을 수정하면 방향도 바뀝니다.


그런데 실험을 해보니 블럭을 설치할 때 동작하는 on place 이벤트보다 블록의 방향이 먼저 결정됩니다.

예를들어 A 상자의 방향이 2이고, B 상자의 방향이 3일 때

on place 이벤트에서는 이미 A상자의 방향이 B 상자에 맞추어 3으로 바뀐 뒤 동작하게 됩니다.

결론적으로 on place 이벤트에서는 A의 원래 방향을 알 수 없다는 것이죠.


해당 이벤트에서 A의 방향을 강제로 2로 바꾸면 원하는대로 B상자도 2 방향으로 세팅이 됩니다.

이것으로 알수 있는 것은 어쨋든 A의 방향을 이벤트 내에서 알 수 있다면 A의 방향으로 바꿀수 있다는 것이죠.


가장 단순한 방식으로는 상자를 설치할때 해당 좌표와 방향을 기록해 두는것입니다.

on place of chest:
    set {chest::%event-location%} to data of event-block

그러나 이 방식은 너무많은 변수를 낭비하게 될겁니다.

또한 마인크래프트의 구조를 완전히 카피한것이 아니기 때문에 버그가 있을 것입니다.

저로써는 좋은 방법이 떠오르지 않네요.

늘솜보름
2021.07.20
@스크립터브혼

답변 감사합니다! 알려주신 답변 덕분에 90%정도 완성했어요!

근데 지금 상자를 설치하는 부분에서 막혔어요 ㅠㅠ

 

설치할 때 'set event-block to tool of player' 이렇게 했는데 상자 방향이 특정 방향으로 고정되고,

부실때 무슨 텍스처 깨진것처럼 하얀색으로 점점 변하면서 부숩니다.

 

data 라는게 중요해보이는데 문제는 스크립트에서 설치하는 부분에 어떻게 data를 넣어서 설치하게 하느냐 입니다.

결론은 상자의 위치, 방향, 이름을 지정하면서 설치하는 구문을 모르겠어요..

스크립터브혼
2021.07.20
@늘솜보름

블록은 이름을 설정 할수 없어요.

 

방향은 위에서 알려드린데로 data of %block%의 값을 변경하면 됩니다.

> set data of event-block to 2

 

위치를 지정하려면 해당 위치의 블록을 받으면 됩니다.

> set block at location ( %x%, %y%, %z%) to %itemtype%

늘솜보름
2021.07.20
@스크립터브혼

아하! 이미 답이 있던거였는데 삽질했네요 ㅠㅠ

set block 한다음에 set data 하니까 원하던대로 됬습니다!

 

추가로 질문하고 싶은게 있는데요..

 

상자 이름을 aa로 변경하고 설치하면 상자 열었을때 이름이 aa로 뜨는데 이게 inventory name 이더군요.

set block 해서 설치할때 이걸 유지하고 싶다면 어떻게 해야할까요?