분야 | 스크립트 |
---|---|
게임버전 | 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초씩 차감하는 기능을 합니다.
────────────────────────────────────────────
*첨부파일에 기본코드와 주석이 달린 코드를 올려두었습니다!
*질문이나 특정한 시스템에 대한 강좌 요청 모두 환영합니다!
아이스틴
2019.11.30플레이어에게 경고를!! 아주 좋은 스크립트네요~
프리루트
2019.11.30레벨이 무슨 띠용쓰...
아이스틴
2019.11.30등급이 2개밖에 없다니 아쉽네요 :(
피엔
2021.08.31영자님 보다 높네 ㅋㅋ
소행서버
2019.11.30대박;;
HoneyHON404
2019.12.01오호 경고스크립트 만들어 본경험으로서 알게된건데 대부분의 스크립트 제작자 분들은 message "" 구문이 아닌 send "" 구문을 쓰시던데 message랑 send의 차이점이 뭐죠?
SpringOnionEgg
2019.12.01제가 알기로는 똑같은 기능인걸로 알고있어요. 외국분들은 message를 많이 쓰시는데 한국 스크립터분들은 send가 좀더 짧아서 많이 쓰시는 것 같습니다 :)
HoneyHON404
2019.12.01감사합니다.
shinddong
2020.02.12좋은 스크립트 항상 감사합니당!