분야 | 스크립트 |
---|---|
게임버전 | 모든버전 |
스크립트 난이도 : ★★☆☆☆
스크립트 응용 범위 : ★★★★☆
안녕하세요! 해피입니다.
이번 스크립트는 서버에서 이벤트로 쓰면 좋은 스크립트인데요.
제가 사용하기 위해 만든 이벤트 스크립트이지만 스크립트 자체가 매우 쉽다 보니깐 여러분들에게도 알려주면서 같이 공유하려고 글을 작성하게 되었습니다.
이 스크립트 같은 경우는 해외서버에 많이 있는 TNT런 과 비슷한 이벤트 스크립트 인데요.
사실상 TNT런을 생각하면서 제작한게 아니였지만 제작하고 나서 보니 너무 똑같더라구요 ㅋㅋㅋ
뭐.. 암튼 시작해보도록 하겠습니다.
[ 스크립트 구문 ]
options:
a: &e&l[ &f&lRunning &e&l]&f&l
on any movement:
if {Run.game} is set:
if {Run.invite.%player%} is set:
if block 1 under player is black_concrete:
set event-block to air
if block 1 under player is red_wool:
make player run cmd "warp running_fail" as op
delete {run.invite.%player%}
loop all players:
if {run.invite.%loop-player%} is true:
add 1 to {_player}
if {_player} is set:
broadcast "{@a} &6&l[ &f&l%player% &6&l]&f&l 탈락! 남은 인원 &a&l[ &f&l%{_player}% &a&l]"
command 러닝 [<text>] [<text>]:
permission: op.op
trigger:
if arg 1 is not set:
send "{@a} /러닝 참여 &7&l- 게임에 참가합니다."
send "{@a} /러닝 강제참여 <닉네임> &7&l- 플레이어를 게임에 참여시킵니다."
send "{@a} /러닝 인원 &7&l- 현재 참여중인 인원을 확인합니다."
send "{@a} /러닝 시작 &7&l- 러닝 게임을 시작합니다."
send "{@a} /러닝 종료 &7&l- 게임을 종료합니다."
send "{@a} /러닝 참여가능 <가능/불가> &7&l- 게임을 참여할 수 있도록 또는 없도록 설정합니다."
stop
if arg 1 is "참여":
if {Run.invite.%player%} is not set:
if {run.join} is set:
if {run.game} is not set:
make player run cmd "warp running_start" as op
set {Run.invite.%player%} to true
send "{@a} 게임에 참여하였습니다 !"
stop
if {run.game} is set:
send "{@a} 현재 게임이 진행중임으로 참여가 불가능합니다."
stop
if {run.join} is not set:
send "{@a} 현재 이벤트 시간이 아닙니다!"
stop
if {Run.invite.%player%} is set:
send "{@a} 당신은 이미 게임에 참여중입니다."
if arg 1 is "강제참여":
if arg 2 is set:
if {Run.invite.%arg 2%} is set:
send "{@a} 해당 플레이어는 이미 참여중입니다."
stop
if {Run.invite.%arg 2%} is not set:
make player run cmd "warp running_start %arg 2%" as op
set {run.invite.%arg 2%} to true
stop
if arg 1 is "인원":
loop all players:
if {run.invite.%loop-player%} is true:
send "&a&l[ &f&l%loop-player% &a&l]"
add 1 to {_pl}
if {_pl} is set:
send "{@a} 현재 참여인원은 &c[ &f%{_pl}% &c] &f명 입니다."
else:
send "{@a} &f참여중인 플레이어가 없습니다."
if arg 1 is "시작":
if {run.game} is set:
send "{@a} 이미 게임이 진행중입니다!"
stop
else:
broadcast "{@a} 러닝 이벤트가 시작되었습니다. 지금으로부터 10초 후 게임이 시작됩니다."
wait 5 seconds
broadcast "{@a} 5초 남았습니다!"
wait 2 seconds
broadcast "{@a} 3초 남았습니다!"
wait 1 seconds
broadcast "{@a} 2초 남았습니다!"
wait 1 seconds
broadcast "{@a} 1초 남았습니다!"
wait 1 seconds
broadcast "{@a} 게임이 시작되었습니다! 지금부터 콘크리트가 사라집니다."
set {run.game} to true
if arg 1 is "종료":
if {run.game} is not set:
send "{@a} 현재 게임이 진행중이지 않습니다!"
else:
broadcast "{@a} 러닝 이벤트가 종료되었습니다!"
delete {run.game}
loop all players:
if {run.invite.%loop-player%} is true:
delete {run.invite.%loop-player%}
delete {_pl}
if arg 1 is "참여가능":
if arg 2 is "가능":
if {run.join} is not set:
set {run.join} to true
send "{@a} 게임을 참여할 수 있도록 설정되었습니다."
stop
if {run.join} is set:
send "{@a} 이미 참여할 수 있도록 설정되어있습니다."
stop
if arg 2 is "불가":
if {run.join} is set:
delete {run.join}
send "{@a} 게임을 참여할 수 없도록 설정되었습니다."
stop
if {run.join} is not set:
send "{@a} 이미 참여할 수 없도록 설정되어있습니다."
stop
[ 스크립트 설명 ]
options:
a: &e&l[ &f&lRunning &e&l]&f&l #{@a} 라는 접두사를 만들어둡니다. 스크립트 메세지나 구문 앞에 {@a} 를 입력하면 &e&l[ &f&lRunning &e&l]&f&l 이게 실행된다고 보시면 됩니다. 즉 {@a} = &e&l[ &f&lRunning &e&l]&f&l
on any movement: #움직임을 감지하는 구문
if {Run.game} is set: #{run.game} 이라는 변수가 있을 경우
if {Run.invite.%player%} is set: #또한 {run.invite.%player%} 라는 변수가 있을경우 즉 움직인 사람이 {run.invite} 라는 변수를 가지고 있을 경우
if block 1 under player is black_concrete: #플레이어 아래 한칸 블럭이 black_concrete 블랙_콘크리트 일 경우
set event-block to air #그 검은색 아이템을 공기로 바꾼다
if block 1 under player is red_wool: #플레이어 아래 한칸 블럭이 red_wool 빨간_양털 일 경우
make player run cmd "warp running_fail" as op #오피 권한으로 "warp running_fail" 이라는 명령어를 실행시킨다.
delete {run.invite.%player%} #{run.invite} 변수를 제거한다 여기서 제거하는 이유는 탈락했을때 남은 인원수를 확인하기 위해 제거를 시키게 됩니다.
loop all players: #모든 플레이어 대상으로
if {run.invite.%loop-player%} is true: #{run.invite} 라는 구문을 가지고 있는 플레이어일 경우
add 1 to {_player} #{_player} 변수를 1 추가한다
if {_player} is set: #{_player} 변수가 있을 경우
broadcast "{@a} &6&l[ &f&l%player% &6&l]&f&l 탈락! 남은 인원 &a&l[ &f&l%{_player}% &a&l]" #[ &f&lRunning &e&l] &f&l 탈락! 남은 인원 &a&l[ &f&l숫자 &a&l] 가 공지로 입력됩니다. 여기서 %{_player}% 는 위에 아까 추가된 1변수의 최종값을 보여주게 됩니다.
예시로 {run.invite} 변수를 가지고 있는 플레이어가 3명 있을경우 1명이 빨간 양털을 밟아 탈락하게 되고 그 탈락한 유저는 {run.invtie} 변수가 제거되고 이제 모든 플레이어 대상으로 루트를 돌린 다음에 {run.invite} 변수를 가지고 있는 사람 수만큼 add 1 to 즉 1 변수를 추가하면서 그 마지막 최종적인 값을 broadcast 로 내보내게 되는겁니다.
command 러닝 [<text>] [<text>]: #/러닝 이라는 명령어를 입력했을 경우
여기서 [<text>] 이것은 /러닝 (여기) 명령어 뒤에 또 다른 명령어가 올 경우에 [<text>] 를 사용하게 됩니다. 하지만 모든곳에서 [<text>] 만 사용되는것이 아닙니다. [<text>] 말고도 [<string>] [<player>] [<integer>] 등이 있습니다. 하지만 대부분 [<text>] 를 많이 사용하게 됩니다.
permission: op.op #op.op 라는 펼미션이 있을 경우
trigger:
if arg 1 is not set: # arg 1 즉 첫번째 [<text>] /러닝 (여기) 에 아무것도 입력하지 않았을 경우
즉 /러닝 명령어만 입력했을 경우
send "{@a} /러닝 참여 &7&l- 게임에 참가합니다."
send "{@a} /러닝 강제참여 <닉네임> &7&l- 플레이어를 게임에 참여시킵니다."
send "{@a} /러닝 인원 &7&l- 현재 참여중인 인원을 확인합니다."
send "{@a} /러닝 시작 &7&l- 러닝 게임을 시작합니다."
send "{@a} /러닝 종료 &7&l- 게임을 종료합니다."
send "{@a} /러닝 참여가능 <가능/불가> &7&l- 게임을 참여할 수 있도록 또는 없도록 설정합니다." #이런식의 메세지를 보냅니다.
stop # 구문 종료
if arg 1 is "참여": # 첫번째 [<text>] 에 참여 라는 명령어를 입력했을 경우
if {Run.invite.%player%} is not set: #명령어를 입력한 유저가 {run.invite} 라는 변수를 가지고 있지 않을 경우
if {run.join} is set: #{run.join} 변수가 있을 경우
if {run.game} is not set: #{run.game} 변수가 없을 경우
make player run cmd "warp running_start" as op #warp running_start 명령어가 오피 권한으로 실행되고
set {Run.invite.%player%} to true #플레이어에 {run.invite} 변수를 true 로 지정합니다.
send "{@a} 게임에 참여하였습니다 !" #그리고 게임 참여 메세지를 보냅니다.
stop #구문 종료
if {run.game} is set: #{run.game} 변수가 있을 경우
send "{@a} 현재 게임이 진행중임으로 참여가 불가능합니다." #게임 진행중임으로 참여 불가능 메세지 전송
stop
if {run.join} is not set: #{run.join} 변수가 없을 경우
send "{@a} 현재 이벤트 시간이 아닙니다!" #이벤트 기간이 아니라는것을 알려주는 변수
stop # 구문종료
사실 위의 구문에서 if 를 2면더 사용할 필요 없이 else: 를 사용하여 더욱 간략하게 제작할 수가 있습니다.
하지만 저는 예전부터 else: 보다는 if 구문을 추가적으로 입력하는것이 버릇이 들어져서 이거 제작할 당시도 배포용도로 제작한것이 아니기 때문에 저의 편의성만 추구하여 제작하게 된 스크립트입니다. else: 를 사용하면 더욱 구문을 간략하게 만들 수 있다는점! 알아두시길 바랍니다.
if {Run.invite.%player%} is set: #{run.invite} 변수를 가지고 있을 경우
send "{@a} 당신은 이미 게임에 참여중입니다." # 이미 게임 참여중이라는 메세지를 보냅니다.
stop
if arg 1 is "강제참여": #첫번째 명령어칸에 강제참여 를 입력시
if arg 2 is set: #2번째 [<text>] 에 입력시
if {Run.invite.%arg 2%} is set: #{run.invite} 를 %arg 2% 즉 2번째 [<text>] 에서 입력한 글씨의 플레이어가 변수를 가지고 있을 경우
send "{@a} 해당 플레이어는 이미 참여중입니다." # 이미 참여중이라는 메세지 전송
stop # 구문종료
if {Run.invite.%arg 2%} is not set: #{run.invite} 변수를 %arg 2% 에 작성 즉 [<text>] 2번째에 작성한 플레이어가 가지고 있지 않을 경우
make player run cmd "warp running_start %arg 2%" as op #warp running_start %arg 2% 명령어를 오피 권한으로 실행합니다.
만약 /러닝 강제참여 topkide 를 입력하게 된다면 warp running_start topkide 라는 명령어가 입력되게 되는겁니다.
set {run.invite.%arg 2%} to true #{run.invite} 변수를 true 로 설정합니다.
stop
if arg 1 is "인원": #인원이라는 명령어 입력시
loop all players: #모든 플레이어 대상으로 loop 는 돌리다 즉 계속해서 없을때까지 반복한다고 생각하시면 됩니다. 모든 유저를 대상으로 돌린다.
if {run.invite.%loop-player%} is true: #{run.invite} 가 true 인 유저분들 중에서
send "&a&l[ &f&l%loop-player% &a&l]" #%loop-player% 는 %player% 와 같은 구문입니다.
add 1 to {_pl} #{_pl} 에 변수 1를 추가한다
if {_pl} is set: #{_pl} 변수가 있을 경우
send "{@a} 현재 참여인원은 &c[ &f%{_pl}% &c] &f명 입니다." #현재 인원은 총 %{_pl}% 명인지 알려주는 구문
else: #만약 없을경우
send "{@a} &f참여중인 플레이어가 없습니다." #플레이어는 없다는 메세지
if arg 1 is "시작": #시작 명령어 입력시
if {run.game} is set: #{run.game} 구문이 이미 설정되어 있다면
send "{@a} 이미 게임이 진행중입니다!" #게임은 이미 진행중이라는 메세지 전송
stop
else: #만약 없을 경우
broadcast "{@a} 러닝 이벤트가 시작되었습니다. 지금으로부터 10초 후 게임이 시작됩니다."
wait 5 seconds #5초뒤
broadcast "{@a} 5초 남았습니다!"
wait 2 seconds #2초뒤
broadcast "{@a} 3초 남았습니다!"
wait 1 seconds
broadcast "{@a} 2초 남았습니다!"
wait 1 seconds
broadcast "{@a} 1초 남았습니다!"
wait 1 seconds
broadcast "{@a} 게임이 시작되었습니다! 지금부터 콘크리트가 사라집니다." #게임 시작 안내 메세지
set {run.game} to true #{run.game} 의 변수를 true 로 바꾼다.
if arg 1 is "종료": #종료 명령어 입력시
if {run.game} is not set: #{run.game} 구문이 없을 경우
send "{@a} 현재 게임이 진행중이지 않습니다!" #게임은 진행중이지 않습니다.
else: # 만약 있을 경우
broadcast "{@a} 러닝 이벤트가 종료되었습니다!" #게임 종료
delete {run.game} #{run.game} 구문 삭제
loop all players: #모든 플레이어 대상으로 루프
if {run.invite.%loop-player%} is true: #{run.invite} 를 가지고 있는 유저들을
delete {run.invite.%loop-player%} #모두 제거
delete {_pl} #그리고 전에 인원 체크용이였던 {_pl} 도 함께 제거
delete {_player}
if arg 1 is "참여가능": #참여가능 명령어
if arg 2 is "가능": # 2번째 명령어에 가능 일시
if {run.join} is not set: #{run.join} 이 없을 경우
set {run.join} to true #{run.join} 을 true 로 설정한 후
send "{@a} 게임을 참여할 수 있도록 설정되었습니다." #참여 메세지 안내
stop #구문종료
if {run.join} is set: #이미 있을 경우
send "{@a} 이미 참여할 수 있도록 설정되어있습니다." # 이미 있다고 말함
stop # 구문종료
if arg 2 is "불가": #불가시
if {run.join} is set: #{run.join} 구문이 있을 경우
delete {run.join} #삭제
send "{@a} 게임을 참여할 수 없도록 설정되었습니다." #참여할 수 없도록 설정
stop #종료
if {run.join} is not set: #없을 경우
send "{@a} 이미 참여할 수 없도록 설정되어있습니다." #이미 참여할 수 없다고 안내
stop #구문종료
따로 영상 자료는 없습니다!
원래부터 배포용으로 제작하려는 의도가 없었기 때문에 따로 촬영하지는 않았습니다.
많이 부족한 스크립트 이지만 사용하셔서 더욱 업그레이드 시켜서 사용하시는걸 추천 드립니다!
감사합니다 !
[ 자료 다운로드 ]
러닝.zip
DDang_
2020.01.14추천입니다 @.@
정신병원편입생
2020.09.26br
on any movement:
에서
loop all players: 구문이 작동이 안됩니다.
탈락과 동시에 탈락! 이라는 메세지가 떠야하는데 뜨질 않네요.
버전은 1.12.2 이구요 스크립트는 최신버전입니다
Kavin_74
2021.10.16너무 감사드립니다 이거 진짜진짜 (on any movement:}진짜 필요했어여....너무 감사해여