개인 자료란 (JE)

  서버 커뮤니티

Profile SpringOnionEgg 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

스크립트 (Skript) 강좌 4강 - 경고 스크립트

2019.11.30 조회 수 5447 추천 수 5
분야 스크립트 
게임버전 1.12.x, 1.13.x, 1.14.x 

 

안녕하세용 파란입니다 ㅎㅎ

 

이번엔 서버에서 규칙을 어긴 플레이어에게 경고를 주는 스크립트를 다뤄보려고합니다.

 

본문에 쓴 코드의 들여쓰기를 복사하면 스페이스바로 인식되는 문제가 있어서

 

첨부파일에 기본 코드와 주석이 달린 코드도 첨부해두니 참고해주시길 바랍니다!

 

 

────────────────────────────────────────────

 

[ Skript without lore ]


#스크립트 강좌 4강
#경고 시스템
 #Made by paran

 

options:
     w : &f[ &c경고&f ]

on first join:
    set {경고.%uuid of player%} to 0
    
command /경고 [<text>] [<player>] [<text>]:
     trigger:


        if player doesn't have the permission "skript.warning":

            if arg 1 is not set:
                 send "{@w} /경고 확인"

            else if arg 1 is "확인":
                if arg 2 is not set:
                    send ""
                    send "{@w} %player%님의 &c경고&f 횟수: &c%{경고.%uuid of player%}%&f 번 [경고 3회 시 밴]" 
                    send ""
                    stop
                send ""
                send "{@w} %arg 2%님의 &c경고&f 횟수: &c%{경고.%uuid of arg 2%}%&f 번 [경고 3회 시 밴]" 
                send ""
                stop
            
        else if player have the permission "skript.warning":
        
            if arg 1 is not set:
                send ""
                send "{@w} /경고 확인"
                send "{@w} /경고 지급 [플레이어] [사유]"
                send "{@w} /경고 차감 [플레이어]"
                send ""
                
            else if arg 1 is "확인":
                if arg 2 is not set:
                    send ""
                    send "{@w} %player%님의 &c경고&f 횟수: &c%{경고.%uuid of player%}%&f 번 [경고 3회 시 밴]" 
                    send ""
                    stop
                send ""
                send "{@w} %arg 2%님의 &c경고&f 횟수: &c%{경고.%uuid of arg 2%}%&f 번 [경고 3회 시 밴]" 
                send ""
                stop
                
            else if arg 1 is "지급":
                if arg 2 is not set:
                    send "{@w} &c경고를 지급할 플레이어를 입력해주세요."
                    stop
                add 1 to {경고.%uuid of arg 2%}
                broadcast ""
                broadcast "&f[ &c안내&f ] 관리자가 %arg 2%님에게 경고를 1회 지급하였습니다. 사유: %arg 3%"
                broadcast ""
                if {경고.%uuid of arg 2%} = 1:
                    add 600 to {mutetime.%uuid of arg 2%}
                    send "{@w} &c당신은 10분동안 채팅을 칠 수 없습니다!"
                else if {경고.%uuid of arg 2%} = 2:
                    add 1800 to {mutetime.%uuid of arg 2%}
                    send "{@w} &c당신은 30분동안 채팅을 칠 수 없습니다!"
                else if {경고.%uuid of arg 2%} = 3:
                    wait 3 seconds
                    execute command "ban %arg 2% 사유:%arg 3%"
                    broadcast ""
                    broadcast "&f[ &c안내&f ] %arg 2% 님의 경고가 3회 이상이 되어 밴 처리되었습니다."
                    broadcast ""
                
            else if arg 1 is "차감":
                if arg 2 is not set:
                    send "&c경고를 차감할 플레이어를 입력해주세요."
                    stop
                send "&f[ &c안내&f ]  %arg 2%님의 경고를 1회 차감하였습니다."
                subtract 1 from {경고.%uuid of arg 2%}
        
on chat:
    if {mutetime.%uuid of player%} > 0:
        cancel event
        send "{@w} 당신은 %{mutetime.%uuid of player%}%초 동안 채팅을 사용할 수 없습니다."
    
every 1 seconds:
    loop all players:
        if {mutetime.%uuid of loop-player%} > 0:
             subtract 1 from {mutetime.%uuid of loop-player%}

 

 

────────────────────────────────────────────

 

[ Skript with lore ]


#스크립트 강좌 4강 +주석
#경고 시스템
 #Made by paran

 

options: # options를 미리 설정해두면 send나 broadcast와 같은 구문에서 {@옵션이름}으로 간편하게 사용할 수 있습니다. 
    w : &f[ &c경고&f ] # {@w} 로 사용하며, "&f[ &c경고&f ]" 를 출력합니다.

on join: # 접속했을 때 발생하는 이벤트
    if {경고.%uuid of player%} is not set: # {경고.%uuid of player%} 변수가 설정되어있지 않다면
        set {경고.%uuid of player%} to 0 # 변수 {경고.%uuid of player%} 를 0으로 설정되어있지
                                        # 여기서 uuid of player는 마인크래프트 계정마다 가진 고유한 uuid값을 뜻합니다.
    
command /경고 [<text>] [<player>] [<text>]: # /경고 명령어는 arg 1, arg 2, arg 3까지 입력할 수 있습니다.
    trigger:
        if player doesn't have the permission "skript.warning": # 만약 플레이어가 skript.warning 라는 펄미션을 가지고 있지 않다면 if안에 있는 코드실행
            
            if arg 1 is not set: # arg 1이 입력되지 않았다면
                send "{@w} /경고 확인" # "&f[ &c경고&f ] /경고 확인" 메시지를 출력

            else if arg 1 is "확인": # arg 1에 "확인"이 입력되었다면
                send ""
                send "{@w} %player%님의 &c경고&f 횟수: &c%{경고.%uuid of player%}%&f 번 [경고 3회 시 밴]" # 자신의 경고 횟수 출력
                send ""
                 stop

            
        else: # 16번째 줄의 if와 한쌍, if의 조건이 거짓일 때 실행됨.
        
            if arg 1 is not set:
                send ""
                send "{@w} /경고 확인"
                send "{@w} /경고 지급 [플레이어] [사유]"
                send "{@w} /경고 차감 [플레이어]"
                send ""
                
            else if arg 1 is "확인":
                if arg 2 is not set: # arg 2[플레이어]가 입력되지 않으면 자신의 경고 횟수 출력 [플레이어]가 입력됬다면 그 플레이어의 경고 횟수 출력
                    send ""
                    send "{@w} %player%님의 &c경고&f 횟수: &c%{경고.%uuid of player%}%&f 번 [경고 3회 시 밴]" 
                    send ""
                    stop
                send ""
                send "{@w} %arg 2%님의 &c경고&f 횟수: &c%{경고.%uuid of arg 2%}%&f 번 [경고 3회 시 밴]" 
                send ""
                stop
                
            else if arg 1 is "지급":
                if arg 2 is not set:
                    send "{@w} &c경고를 지급할 플레이어를 입력해주세요."
                    stop
                add 1 to {경고.%uuid of arg 2%} # 해당 플레이어의 경고 횟수를 저장하는 변수에 1 추가
                broadcast ""
                broadcast "&f[ &c안내&f ] 관리자가 %arg 2%님에게 경고를 1회 지급하였습니다. 사유: %arg 3%"
                broadcast ""
                if {경고.%uuid of arg 2%} = 1: # 해당 플레이어의 경고 횟수가 1이라면 
                    add 600 to {mutetime.%uuid of arg 2%} # {mutetime.%uuid of player%} 이라는 변수에 600 추가. 해당 변수는 채팅금지시간(초)를 저장하는 변수로 쓰임.
                    send "{@w} &c당신은 10분동안 채팅을 칠 수 없습니다!"
                else if {경고.%uuid of arg 2%} = 2: # 해당 플레이어의 경고 횟수가 2라면 
                    add 1800 to {mutetime.%uuid of arg 2%} # {mutetime.%uuid of player%} 이라는 변수에 1800 추가. 
                    send "{@w} &c당신은 30분동안 채팅을 칠 수 없습니다!"
                else if {경고.%uuid of arg 2%} = 3: # 해당 플레이어의 경고 횟수가 3이라면 
                    wait 3 seconds # 3초를 기다립니다.
                    execute command "ban %arg 2% 사유:%arg 3%" # 해당 플레이어를 arg 3의 사유로 밴시킵니다.
                    broadcast ""
                    broadcast "&f[ &c안내&f ] %arg 2% 님의 경고가 3회 이상이 되어 밴 처리되었습니다."
                    broadcast ""
                
            else if arg 1 is "차감":
                if arg 2 is not set:
                    send "&c경고를 차감할 플레이어를 입력해주세요."
                    stop
                send "&f[ &c안내&f ]  %arg 2%님의 경고를 1회 차감하였습니다."
                subtract 1 from {경고.%uuid of arg 2%} # 해당 플레이어의 경고 횟수 변수에서 1을 뻅니다.
        
on chat: # 채팅을 입력했을 때 발생하는 이벤트
    if {mutetime.%uuid of player%} > 0: # 만약{mutetime.%uuid of player%} 변수에 저장된 값이 0 보다 크다면
                                        # 해당 변수는 그 플레이어의 채팅금지시간을 저장하는 변수로 사용됩니다.
        cancel event # 채팅입력 이벤트를 취소시킵니다. (채팅이 출력되지 않음)
        send "{@w} 당신은 %{mutetime.%uuid of player%}%초 동안 채팅을 사용할 수 없습니다." # 자신의 채팅금지 남은시간을 알려주는 안내 메시지
    
every 1 seconds: # 1초마다 발생하는 이벤트
    loop all players: # 모든 플레이어를 반복한다.
        if {mutetime.%uuid of loop-player%} > 0: # 반복된 플레이어의 채팅금지시간을 저장하는 변수가 0보다 크다면
            subtract 1 from {mutetime.%uuid of loop-player%} # 반복된 플레이어의 채팅금지시간을 저장하는 변수에서 1을 뻄
# 82~85줄의 구문은 모든 플레이어의 채팅금지시간을 1초씩 차감하는 기능을 합니다.

 

 

────────────────────────────────────────────

 

*첨부파일에 기본코드와 주석이 달린 코드를 올려두었습니다!

*질문이나 특정한 시스템에 대한 강좌 요청 모두 환영합니다!

 




9개의 댓글

아이스틴
2019.11.30

플레이어에게 경고를!! 아주 좋은 스크립트네요~

프리루트
2019.11.30
@아이스틴

레벨이 무슨 띠용쓰...

아이스틴
2019.11.30
@프리루트

등급이 2개밖에 없다니 아쉽네요 :(

피엔
2021.08.31
@아이스틴

영자님 보다 높네 ㅋㅋ

HoneyHON404
2019.12.01

오호 경고스크립트 만들어 본경험으로서 알게된건데 대부분의 스크립트 제작자 분들은 message "" 구문이 아닌 send "" 구문을 쓰시던데 message랑 send의 차이점이 뭐죠?

SpringOnionEgg
2019.12.01
@HoneyHON404

제가 알기로는 똑같은 기능인걸로 알고있어요. 외국분들은 message를 많이 쓰시는데 한국 스크립터분들은 send가 좀더 짧아서 많이 쓰시는 것 같습니다 :)

HoneyHON404
2019.12.01
@SpringOnionEgg

감사합니다.

shinddong
2020.02.12

좋은 스크립트 항상 감사합니당!

뉴스 및 창작물
/files/thumbnails/483/916/003/262x150.crop.jpg?20241127115329

레드스톤

[노트블럭 커버] 뉴진스 - ETA 1

노트블럭전문가

2024-11-27

0

/files/thumbnails/150/925/003/262x150.crop.jpg?20241123005717

건축

응답하라 1988 ?

팀뉴일리시

2024-11-23

4

/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 6

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 5

물귀신

2024-10-06

3