개인 자료란 (JE)

  서버 커뮤니티

Profile 배고픈아기곰 대표칭호 없음
Profile

질문하기 스크립트

몬스터 공격속도 조절

2020.04.15 조회 수 1326 추천 수 0
이해도 1.15 

스크립트로 이것저것 해보고 있습니다.

스켈레톤의 공격속도를 조절 해 보려고 합니다.

혹시 모든 스켈레톤의 공격속도 만 올릴 수 있는 방법 있을까요?

제가 해봤던 방법이

on target:

    if entity is skeleton:

        loop 100 times:

            shoot an arrow

            wait 1 tick

이렇게 하니 100발 쏘고 말았구요.

on shoot:

    shooter is a skeleton

    shoot an arrow from the skeleton

이렇게 하니 오류가 생기네요.

구문에 오류가 있거나 아니면 하는 방법 아시는 분은 가르쳐 주실 수 있나요?

6개의 댓글

스크립터브혼
2020.04.15

본문에 적으신것처럼 인위적으로 활을쏘거나 특정 조건으로 상대체력을 깍는 방법으로 구현할 수는 있겠지만.

공격속도 자체를 조절하는 것은 Skript로 불가능합니다.
NMS를 변경하면 가능하다는 스래드를 찾긴 했는데, 확실하게 확인되지 않았구요.

엔티티에 무한히 실행되는 반복문을 넣어 비슷하게 구현할 수는 있습니다.

엔티티가 소환 될 떄, %entity% is live를 조건으로 while을 생성하시면 됩니다.

on spawn:
    event-entity is skeleton
    while event-entity is live:
        # 반복
    wait 1 seconds

이렇게 되면 엔티티가 죽거나 삭제되면 더 이상 살아있지 않기떄문에 멈춥니다.

다만, 서버가 리부트 되면 모든 반복문이 멈추기 때문에 서버가 꺼졌다 켜져도 실행되게 하려면 

엔티티 정보를 변수로 담거나, 엔티티를 구분할 수 있도록 구성해서 서버가 켜질때 다시 반복문이 실행되도록 해야합니다.

배고픈아기곰
2020.04.15
@스크립터브혼

오홍 감사합니다.

이런식으로 한번 여러가지 해보고 안되면 또 질문할게요 ㅎㅎ

배고픈아기곰
2020.04.15
@스크립터브혼

아 ㅋㅋㅋ 이렇게 해봤습니다. ㅋㅋㅋ

이러니 죽기전엔 안멈추네요 ㅋㅋㅋ

배고픈아기곰
2020.04.15
@스크립터브혼

만약 몬스터의 어그로가 끊날 때 이벤트가 끝나도록 하려면 live 대신 뭘 적어야 하나요?

while event-entity is targeting, target 등 다른것들로 하면 다들 오류 발생하더라구요

ps)아맞다. live 적어도 오류나서 alive로 바꿨더니 잘 작동했어요

스크립터브혼
2020.04.24
@배고픈아기곰

늦어서 죄송합니다. ㅠ 알람 확인하고나서 깜박했어요.

Skript 기본 이벤트중에 on target, on untarget 이벤트가 있습니다. 이 이벤트로 와일을 실행하면 될것같습니다.

모든 엔티티는 UUID를 가지므로 UUID를 변수 이름으로하여 on target에서 변수가 true인 경우로 와일을 실행하고

on untarget에서 변수를 삭제하는 방법으로 멈추게 하면 될것 같습니다.


또는 target 표현식으로 타겟이 있거나, 없는 상태를 확인 할 수도 있을것 같습니다.

테스트를 해보셔야 합니다.

PatrickKR
2020.04.24

사실 가장 정확한 방법은 NMS코드에서 "발사"하는 부분을 타겟이 있을 경우 매 틱마다 불러오는 것입니다. 이론적으로도 가능하고 실제로도 가능하며, 원한다면 정확도까지 조절 가능합니다.