개인 자료란 (JE)

  서버 커뮤니티

Profile 머리아프다 대표칭호 없음
Profile

질문하기 스크립트

커스텀명령어를 cmd 에서도 활성화 할 수 있는 방법

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

서버에서 자동으로 매 분마다 '로또추첨' 이라는 명령어가 실행되게끔 스크립트를 간단하게 정말 간단하게 만들어봤는데요


every 10 seconds:

@broadcast "로또추첨이 완료되었습니다."

@execute command "로또추첨"


공지는 잘 적용되지만 로또추첨이라는 명령어가 실행이 안되네요.

혹시나 싶어 cmd 창에서 명령어를 쳐보니 작동을 안하더군요... 인게임에서는 잘 작동되는 명령어인데 말이죠..

그 외에 say라던가 기본 명령어들은 cmd 안에서도 작동이잘되구요.


4개의 댓글

스크립터브혼
2021.09.25

로또추첨 명령어가 어떻게 정의되었는지를 알아야 답변이 가능합니다.

> execute command "로또추첨" by console

이렇게 하는게 콘솔로 명령을 실행하는 코드입니다.

머리아프다
2021.09.25
@스크립터브혼

알려주신 코드로 추가 후 실행해봤지만 여전히 글자만 나오고 코드는 실행이 안되네요

로또 코드는 유튜브에 검색해 나온 스크립트를 보고 만든 것으로 


command /로또추첨 [<integer>]:

    trigger:

        if player is op:

            broadcast "로또 추첨이 완료되었습니다."

            if arg-1 is not set:

                set {KeyNumber} to random integer between 0 and 99999

            else:

                set {KeyNumber} to arg-1

            if {KeyNumber} is between 0 and 9:

                set {KeyNumber} to "0000%{KeyNumber}%"

            else if {KeyNumber} is between 10 and 99:

                set {KeyNumber} to "000%{KeyNumber}%"

            else if {KeyNumber} is between 100 and 999:

                set {KeyNumber} to "00%{KeyNumber}%"

            else if {KeyNumber} is between 1000 and 9999:

                set {KeyNumber} to "0%{KeyNumber}%"

            else if {KeyNumber} is bigger than 9999:

                set {KeyNumber} to "%{KeyNumber}%"

            broadcast "당첨 번호는 %{KeyNumber}% 입니다."

            set {_answer::*} to {KeyNumber} split by ""

            loop all players:

                if {number::%uuid of loop-players%} is set:

                    set {_text::*} to {number::%uuid of loop-player%} split by ""

                    set {_a} to 0

                    set {_score} to 0

                    loop 5 times:

                        add 1 to {_a}

                        if {_text::%{_a}%} is {_answer::%{_a}%}:

                            add 1 to {_score}

                    if {_score} is 0:

                        send "추첨결과 §0§l꽝§r 입니다." to loop-player

                        send "다음 기회에" to loop-player

                    else if {_score} is 1:

                        send "추첨결과 §e§l5등§r 입니다." to loop-player

                        send "당첨 금액 : $2000" to loop-player

                        add 2000 to player's money

                    else if {_score} is 2:

                        send "추첨결과 §e§l4등§r 입니다." to loop-player

                        send "당첨 금액 : $5000" to loop-player

                        add 5000 to player's money

                    else if {_score} is 3:

                        send "추첨결과 §e§l3등§r 입니다." to loop-player

                        send "당첨 금액 : $10000" to loop-player

                        add 10000 to player's money

                    else if {_score} is 4:

                        send "추첨결과 §e§l2등§r 입니다." to loop-player

                        send "당첨 금액 : $50000" to loop-player

                        add 50000 to player's money

                    else if {_score} is 5:

                        send "추첨결과 §4§l1등§r 입니다." to loop-player

                        add 100000 to player's money

                        broadcast "§a§l%loop-player%§r님이 로또 §4§l1등§r에 당첨되었습니다!%nl%당첨 금액 : §2§l$100000"

            delete {number::*}



이런 식으로 되어있습니다.

플레이어가 입력한 추첨번호는 {number::%uuid of player%} 라는 배열변수안에 저장되어있습니다.

스크립터브혼
2021.09.26
@머리아프다

콘솔에서 안되는 이유는 첫번째 조건문이 if player is op 이라서 그렇습니다. 콘솔은 플레이어가 아니라서요 player 대신 sender로 하면 동작할겁니다.

머리아프다
2021.09.26
@스크립터브혼

sender로 넣어도 작동이 되지않아 다른 커스텀명령어로 플레이해보니 정상작동하여 브혼님 말씀대로 player 라는 문구에 문제가 있는 것 같아

 

command /로또추첨 [<integer>]:

    trigger:

        if sender is not console:

            message "해당 명령어는 콘솔에서만 실행 가능합니다"

        else:

 

아예 명령어 자체를 콘솔에서만 입력 가능하겠금 변경하고 적용해보니 정상작동됩니다!

감사합니다!