2이번 시간에는 floor, abs 함수와 radius 구문을 이용해서 마인크래프트에서 원을 만들어 보도록 하겠습니다. 이번 시간의 스크립트에는 어떤 애드온도 필요하지 않습니다.
1. 시작지점 설정하기
우선 원을 그리기 위해서는 원의 중심을 잡아주어야 합니다. 저의 경우에는 플레이어의 위치에 있는 블록의 중심점을 원의 중심으로 잡아주도록 하겠습니다. 아래는 그 코드입니다.
command /draw <number>:
executable by: players
trigger:
set {_loc} to location of player
set x-coordinate of {_loc} to floor(x-coordinate of {_loc}) + 0.5
set y-coordinate of {_loc} to floor(y-coordinate of {_loc}) + 0.5
set z-coordinate of {_loc} to floor(z-coordinate of {_loc}) + 0.5
floor함수는 소수점 아래 부분들을 버림해주어 정수 부분만 남겨줍니다. 정수 부분에 0.5를 더해주어, 블록의 중심점을 시작지점으로 설정해 주었습니다.
2. 반지름 범위 내 블록들 루프해주기
속이 꽉 찬 원이라면 그저 루프를 해준 뒤 루프 블록들을 전부 다 채워주면 되겠지만, 우리가 원하는 원은 속이 빈 원, 즉 원주 부분만 그려주어야 하기 때문에, 루프를 돌려준 뒤에 조건에 맞을 시에만 블록을 설치해 주어야 합니다. 아래는 그 코드입니다.
loop all blocks in radius arg-1 around {_loc}:
if floor(y-coordinate of {_loc}) is not floor(y-coordinate of location of loop-block):
continue
if abs(the distance between location of loop-block and {_loc} - arg-1 + 0.5) > 1:
continue
set the block at location of loop-block to stone block
radius 구문을 이용해서 시작지점으로부터 거리가 arg-1 이내인 모든 블록들을 루프해 주었습니다.
abs함수는 절댓값 함수입니다. 블록과 시작점 사이의 거리로부터 반지름의 값을 빼준 뒤, 0.5를 더한 값에 절댓값을 씌워주었습니다. 0.5를 더해주지 않았을 시에는 원이 너무 얇게 나와서 저는 0.5를 더해주었습니다. 취향껏 만드시면 됩니다.
또한 우리는 구가 아니라 원을 만들고 싶기 때문에, 시작점의 y좌표와 같은 블록들만 탐지해 주어야 합니다. 따라서 y좌표들에 floor함수를 이용하여 정수로 만들어 준 뒤 같을 시에만 탐지하도록 만들어 줍니다. 만약 floor함수를 이용하지 않는다면 원이 2층이 생길 수도 있기 때문에 반드시 floor함수를 이용하여 정수부분만 남겨준 뒤에 계산해 주어야 합니다.
이렇게 마인크래프트 Skript에서 다른 애드온들을 이용하지 않고 자체 함수 및 구문들로만 원을 그려보았습니다. 월드에딧과 같은 플러그인을 이용한 원과는 다르게 조금 엉성하게 보이기는 합니다만, 그것도 세세하게 수치를 조정해 준다면 충분히 보완할 수 있는 부분입니다.
질문이 있으시다면 이 글의 댓글에 적어주시면 답변해드리도록 하겠습니다.
아래는 스크립트 파일들입니다
주석미포함
'마인크래프트 > Skript 기초 활용편' 카테고리의 다른 글
스크립트 기초 활용 14편(총기) (1) | 2023.01.09 |
---|---|
스크립트 기초 활용 시즌 2 로드맵 (0) | 2023.01.07 |
스크립트 기초 활용 12편(엘리베이터) (0) | 2023.01.06 |
스크립트 기초 활용 11편(오늘의 날씨) (1) | 2023.01.04 |
스크립트 기초 활용 10편(자동심기) (1) | 2023.01.02 |
댓글