개인 자료란 (JE)

  서버 커뮤니티

Profile 빛나는토마토 대표칭호 없음

Tomato105 4a7a3e2f6add4cc7bbe412b198b15cbd

Profile

질문하기 스크립트

스크립트 질문

2021.07.26 조회 수 451 추천 수 0
이해도 1.16 
게임버전 (JE) 페이퍼 
스크립트 버전 초보자(스크립트 구성요소, 기본문법은 알아요) 
스크립트 애드온 Skript 2.6-beta2 

1.특정 범위 안의 특정 엔티티에게 특정(...) 구문을 적용시키려면 어떻게 해야 하나요?

2.특정 범위 안의 랜덤 위치에 특정 엔티티나 블럭을 설치/소환 하려면 어떻게 해야 하나요?




2개의 댓글

스크립터브혼
2021.07.26

1. 범위를 특정하는 방법은 다양합니다.

- 플레이어가 위치한 청크를 사용한 청크 단위 판단 (청크 정보를 저장할 변수 필요)

- 플레이어가 위치한 좌표를 사용한 좌표 단위 판단 (각 좌표를 저장 할 다수의 변수 필요)

- 직육면체 공간의 두 대각 꼭지점의 x, y, z 성분으로 플레이어의 위치가 중첩되는지  판단 ( 대각꼭지점을 저장할 변수 두개 필요)

- 구 공간의 원점 좌표와 플레이어 사이의 거리를 측정하여 판단 (원점 좌표 변수 한개 필요)

... 등등

구성하기 나름입니다.


2. 마찬가지로 엔티티를 특정하는 것도 다양하게 구성될 수 있겠죠.


3. 엔티티가 범위에 포함되는지 확인하려면 반복시행이 필요합니다.

보통 Periodical 이벤트를 사용하는데, 이것보다는 on move 이벤트나 on Join - while 패턴을 사용하는 것이 좋다고 생각합니다.

반복시행에서 플레이어가 범위에 포함되는지 계속 확인하면서, 포함된다면 원하는 코드를 실행하도록 구성하면 됩니다.

# Periodical Event
every 1 tick:
    <condition>
    # code

# on Move Event 
on player move:
    <condition>
    # code

# on Join - While Pattern
on join:
    while player is online:
        wait 1 tick
        <condition>
        # code


4. 1에서 설명했듯이 범위를 정의하는 방식에 따라 데이터가 달라지므로 랜덤한 좌표를 구하는 방식도 달라집니다.

청크의 경우 청크의 x, y를 좌표로 변환하여 해당 영역의 x, y ,z 성분의 범위에서 랜덤한 각각의 값을 구하여 생성합니다.

좌표의 경우 좌표 리스트에서 랜덤 추출하는 것으로 구할 수 있고

직육면체는 [Blocks] 익스프레션의 within 패턴으로 영역의 블록을 받아서 랜덤 추출 하면 됩니다.

구는 [Block Sphere] 익스프레션으로 영역의 블록을 받아서 랜덤 추출하면 됩니다.


엔티티의 생성은 [Spawn] 이펙트, 블록의 생성은 [Set] 이펙트를 사용하면 됩니다.

# ex. spawn
spawn 3 creepers at the targeted block

# ex. set
set block at location of player to stone


빛나는토마토
2021.07.27
@스크립터브혼

답변 감사드립니다.!