개인 자료란 (JE)

  서버 커뮤니티

Profile Lee_Junki 대표칭호 없음
Profile

질문하기 스크립트

스크립트 도와주세요

2022.01.15 조회 수 84 추천 수 0
이해도 초보자(스크립트 구성요소나 기본문법은 알아요) 
게임버전 (JE) 1.18.1 
게임버전 (BE) 관련없음 
스크립트 버전 2.6 

56498d994c65eab2672d2ff21a68ce8f.png

랜덤워프2.sk 이 스크립트를 사용하는데 명령어를 쓰면 멈추면서 서버가 꺼져서 while을 loop 1로 바꿔서 사용합니다...

하지만 높은 곳에서 떨어지거나, 물 위로 떨어지는데 저 코드에서 수정할 코드가 있을까요...?

그리고 명령어를 사용하면 TPS가 많이 낮아지는데 어떻게 해결해야 할까요?

4개의 댓글

qsef1256
2022.01.16

일단 상당히 이상하게 만든 스크립트네요. 3500블록 범위로 랜덤 좌표를 뽑아서 물이면 다시 뽑고 물이 아닐때까지 반복해요. 발적화죠. 이거 만든 사람이 돈받고 하는거면 외주 파기하는게 맞아요.

qsef1256
2022.01.16

물이면 다시 뽑는게 아니라 y좌표 상에서 왔다갔다 하면서 스폰 장소 잡기만 해도 좀 나을 텐데 말이죠;

qsef1256
2022.01.16

이게 왜 터지나면요, while은 어떤 조건이 거짓일 때 반복을 중단하는데, 

            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

에서 if block at location at {_x}, {_y}, {_z} in "world" is air: 가 있는 단락에 else나 뭐 다른 명령문이 없죠? while문 조건상 set {_loop} to false가 작동해야 반복이 멈추는데 맨 처음 조건문 단락에 아무것도 없으므로, 만약 처음 뽑은 블록이 공기가 아니라면 아무것도 안하고 무한 반복을 돌게 되거든요. 그럼 서버가 과부하 걸려서 꺼져요.

TPS가 떨어지는건 위의 무한 반복 문제 말고도 기본적으로 실행 방식이

  1. y 90에서 밑으로 한칸씩 내려가면서: 보통 y 좌표는 60쯤이므로 여기서 30번 정도 실행할 껍니다
  2. 물이면 다른 지점을 뽑는거라: 30번씩 하는걸 물이 아닐 때 까지 다시 해야 합니다

이라서 평균적으로 명령어를 수백번 실행하게 되구요,서버에 과부하가 걸리게 되는거죠.


결론은 이 스크립트 만든 사람이 심각하게 이상하게 만든 게 맞구요, 실력이 부족해서 이런 참사가 벌어지는거니 다른 사람 스크립트를 알아보는게 좋으실꺼에요. 이건 다른 구현 방식이 많거든요.

Lee_Junki
2022.01.16
@qsef1256

감사합니다.!