while {_loop} is true:
if block at location at {_x}, {_y}, {_z} in "world" is air:
if block at location at {_x}, {_y}-1, {_z} in "world" is air:
remove 1 from {_y}
else:
if block at location at {_x}, {_y}, {_z} in "world" is water:
set {_x} to a random number between -3000 and 3000
set {_y} to 90
set {_z} to a random number between -3000 and 3000
else:
set {_loop} to false
teleport player to location at {_x}, {_y}, {_z} in "world"
if block at location at {_x}, {_y}, {_z} in "world" is water:이 부분은 아랫블록과 비교해야하니 {_y}-1 이 맞겠죠. 그리고 마지막 텔레포트 부분도 {_y}-1 이어야합니다.
air, water, else는 비교하는 대상이 같기때문에 if else 한개로 묶어도 됩니다.
코드를 정리하면 아래와 같습니다.
while {_loop} is true:
if block at location at {_x}, {_y}, {_z} in "world" is air:
if block at location at {_x}, {_y}-1, {_z} in "world" is air:
remove 1 from {_y}
else if block at location at {_x}, {_y}-1, {_z} in "world" is water:
set {_x} to a random number between -3000 and 3000
set {_y} to 90
set {_z} to a random number between -3000 and 3000
else:
set {_loop} to false
teleport player to location at {_x}, {_y}-1, {_z} in "world"
이렇게 익스프레션이 긴 경우는 가독성이 떨어지기 때문에 변수로 잡아 사용하는 편이 좋습니다. 최종 코드는 아래와 같습니다.
while {_loop} is true:
set {_block_top} to block at location at {_x}, {_y}, {_z} in "world"
set {_block_bottom} to block at location at {_x}, {_y}-1, {_z} in "world"
if {_block_top} is air:
if {_block_bottom} is air:
remove 1 from {_y}
else if {_block_bottom} is water:
set {_x} to a random number between -3000 and 3000
set {_y} to 90
set {_z} to a random number between -3000 and 3000
else:
set {_loop} to false
teleport player to {_block_bottom}
스크립터브혼
2020.08.18반복문에서 분기를 나누실때 비교하는 대상이 잘못되어서 그렇습니다.
while {_loop} is true: if block at location at {_x}, {_y}, {_z} in "world" is air: if block at location at {_x}, {_y}-1, {_z} in "world" is air: remove 1 from {_y} else: if block at location at {_x}, {_y}, {_z} in "world" is water: set {_x} to a random number between -3000 and 3000 set {_y} to 90 set {_z} to a random number between -3000 and 3000 else: set {_loop} to false teleport player to location at {_x}, {_y}, {_z} in "world"
if block at location at {_x}, {_y}, {_z} in "world" is water:
이 부분은아랫블록과 비교해야하니
{_y}-1
이 맞겠죠. 그리고 마지막 텔레포트 부분도{_y}-1
이어야합니다.air, water, else는 비교하는 대상이 같기때문에 if else 한개로 묶어도 됩니다.
코드를 정리하면 아래와 같습니다.
while {_loop} is true: if block at location at {_x}, {_y}, {_z} in "world" is air: if block at location at {_x}, {_y}-1, {_z} in "world" is air: remove 1 from {_y} else if block at location at {_x}, {_y}-1, {_z} in "world" is water: set {_x} to a random number between -3000 and 3000 set {_y} to 90 set {_z} to a random number between -3000 and 3000 else: set {_loop} to false teleport player to location at {_x}, {_y}-1, {_z} in "world"
이렇게 익스프레션이 긴 경우는 가독성이 떨어지기 때문에 변수로 잡아 사용하는 편이 좋습니다.
최종 코드는 아래와 같습니다.
while {_loop} is true: set {_block_top} to block at location at {_x}, {_y}, {_z} in "world" set {_block_bottom} to block at location at {_x}, {_y}-1, {_z} in "world" if {_block_top} is air: if {_block_bottom} is air: remove 1 from {_y} else if {_block_bottom} is water: set {_x} to a random number between -3000 and 3000 set {_y} to 90 set {_z} to a random number between -3000 and 3000 else: set {_loop} to false teleport player to {_block_bottom}
sdfdsr
2020.08.18랜덤워프2.sk 이렇게 수정하고 리로드를 하니
[Skript] Variables cannot be used here. (랜덤워프.sk, line 24: teleport player to {_block_bottom} in "world"')
라는 오류 문구가 뜹니다. 여기서 변수를 사용할 수 없다는데 틀린 부분이 있나요?
스크립터브혼
2020.08.18아 마지막 in "world"는 빼주세요. 덧글 수정했습니다.
sdfdsr
2020.08.18감사합니다 !!
sdfdsr
2020.08.18오류로그.sk 오류가 뜬 로그기록입니다
여러사람이 쓰면서 랜덤워프 명령어가 반복적으로 사용되면 이런식으로 오류문구가 뜨면서 버킷이 꺼지는데 x,z 값이 너무 광범위해서 그런건가요?
스크립터브혼
2020.08.18반복문을 빠져나오지 못해 오버플로우가 생기는걸로 보입니다.
sdfdsr
2020.08.19혹시 해결방법이 있나요? 이제 한번만써도 버킷이 꺼지고있어서..ㅠ
스크립터브혼
2020.08.19while 말고 loop로 횟수를 제한하시고, loop 안에서 코드가 어떻게 동작하고 있고, 어째서 빠져나오지 못하는지 찾아보시길 바랍니다.
sdfdsr
2020.08.19넵 감사합니다