개인 자료란 (JE)

  서버 커뮤니티

Profile Notch_pg 대표칭호 없음
Profile

질문하기 스크립트

디스코드 + 서버 홍보

2021.07.12 조회 수 117 추천 수 0
스크립트 버전 입문자(아무것도 몰라요) 

스크립트를 이용해 /tpa 시스템을 만드려 합니다.

시스템에서 대상 플레이어를 어떤 코드로 써야할지 모르겠어요...

명령어를 친 플레이어는 %player%인데 대상은 뭔가요?

기왕이면 tpa 플러그인도 혹시...

2개의 댓글

DDang_
2021.07.12

대상: arg 1

tpa 플러그인: essentialsX

스크립터브혼
2021.07.13

'/tpa <player>' 명령어는 첫번째 인수로 상대 플레이어를 받습니다.

커스텀 명령어에서 인수는 [Argument]로 받습니다.

> arg-player


구현 할 기능은 요청 - 응답 알고리즘 입니다.

1. 상대 플레이어에게 요청을 보내고,

2. 상대 플레이어의 응답을 기다립니다.

3. 상대 플레이어는 '승락'과 '거절' 또는 '응답없음'의 반응을 보일 수 있습니다.

  3-1. 승락 한 경우 텔레포트로 이동,

  3-2. 거절하거나 응답이 없는 경우 종료입니다.


일정시간 기다리는것은 [Delay] 이팩트로 구현하게 됩니다.

# 30초 기다리기

send "시작"

loop 600 times:
    wait 1 tick

send "끝"


기다리는 동안  상대 플레이어의 응답을 확인합니다. 상대 플레이어의 응답을 담는 변수가 필요하겠죠.

{answer} 변수로 상대 플레이어의 응답을 확인하겠습니다. 응답이 true면 승락, false면 거절로 판단합니다.

# 30초 기다리기

send "시작"

loop 600 times:
    wait 1 tick
    if {answer} is set:
        if {answer} is true:
            send "승락"
        else:
            send "거절"
        stop
send "응답없음"

send "끝"

loop 동안 {answer}변수가 true 또는 false가 되면 승락, 거절을 판단하게 됩니다.

loop가 끝날때까지 변수가 값을 가지지 못하면 응답없음이 되겠죠.


기다리는 동안 상대 플레이어가 {answer}변수에 값을 세팅할 수 있으면 됩니다.

요청했던 것처럼 응답도 명령을 통해 변수에 값을 세팅하면 됩니다.


이 코드를 사용해서 tpa를 구현하면 다음과 같습니다.

command /test.tpa :
    trigger:
        
        # 자신에게 요청 방지
        if player is arg-player:
            send "자신에게 요청할 수 없습니다."
            stop

        # 중복 요청 방지
        if {test.tpa::%arg-player%} is a player:
            if {test.tpa::%arg-player%} is player:
                send "이미 요청을 보냈습니다"
            else:
                send "먼저 요청한 플레이어가 있습니다"
            stop

        set {test.tpa::%arg-player%} to player
        send "%arg-player% 플레이어에게 텔레포트 요청을 보냈습니다."
        send "%player% 플레이어로부터 텔레포트 요청을 받았습니다." to arg-player
        send "요청 승낙하기 /test.tpa.accept" to arg-player
        send "요청 거절하기 /test.tpa.reject" to arg-player

        # 대기시간 30초 (600 ticks)
        loop 600 times:
            wait 1 tick

            if {test.tpa::%arg-player%} is a boolean:
                if {test.tpa::%arg-player%} is true:
                    teleport player to arg-player
                    send "%arg-player%에게 이동합니다"
                else:
                    send "거절되었습니다."
                delete {test.tpa::%arg-player%}
                stop
        
        # 대기시간 종료
        send "시간초과로 요청이 거절되었습니다." to player
        send "시간초과로 요청을 거절했습니다." to arg-player
        delete {test.tpa::%arg-player%}

command /test.tpa.accept:
    trigger:
        {test.tpa::%player%} is a player
        send "%{test.tpa::%player%}%의 텔레포트 요청을 승낙합니다."
        set {test.tpa::%player%} to true

command /test.tpa.reject:
    trigger:
        {test.tpa::%player%} is a player
        send "%{test.tpa::%player%}%의 텔레포트 요청을 거절합니다."
        set {test.tpa::%player%} to false