Queen_SnowEyes 72d8f06e01aa4bb7b8593d879997ce8e
이해도 | 초보자(스크립트 구성요소나 기본문법은 알아요) |
---|---|
게임버전 (JE) | 1.12.2 |
게임버전 (BE) | 관련없음 |
스크립트 버전 | 2.6 |
#Copyright 2022. 규미(Gyumy) all rights reserved.
#[개발환경]
#Java : jre1.8.0_281 build 1.8.0_281-b09
#Bukkit : git-Paper-1618 (MC: 1.12.2)
#Skript : 2.5.3
#Add-on : x
#유튜브 : https://youtu.be/ochjDHUZ-1o
#블로그 : https://nalag.tistory.com/47
#디스코드 : 규미#7691
options:
a: &a&l[&aMoney&a&l]&f
b: 5000 #서버에 처음접속했을때 지급되는 기본 소지금.
function FormatKrNumUnit(n:number) :: text: #숫자를 한국식 숫자단위로 변환합니다.
set {_t} to "%{_n}%"
return {_t} if length of {_t} < 5
set {_krnum::*} to "", "만", "억", "조", "경", "해" and "자"
loop round up length of {_t} / 4 times:
set {_l} to last 4 characters of {_t}
loop 4 times:
if first 1 characters of {_l} is "0":
if loop-num-2 is 4:
set {_l} to ""
else:
set {_l} to last 4 - loop-num-2 characters of {_t}
else:
stop loop
if {_l} is not "":
if {_a} is not set:
set {_a} to "%{_l}%%{_krnum::%loop-num%}%"
else:
set {_a} to "%{_l}%%{_krnum::%loop-num%}% %{_a}%"
set {_t} to first (length of {_t} - 4) characters of {_t}
return {_a}
function KrNumToNum(t:text) :: number: #한국식 숫자단위를 숫자로 변환합니다.
return {_t} parsed as integer if {_t} doesn't contain "만", "억", "조", "경", "해" or "자"
set {_l} to ""
loop "만", "억", "조", "경", "해" and "자":
if {_t} contains loop-value:
set {_t::*} to split {_t} by "%loop-value%"
if {_t::2} is "":
set {_l} to "0000%{_l}%"
else:
set {_l} to "%last length of {_t::2} characters of {_t}%%{_l}%"
loop 4 - length of {_t::2} times:
set {_l} to "0%{_l}%"
replace "%loop-value%%{_t::2}%" with "" in {_t}
return "%{_t}%%{_l}%" parsed as integer
on join:
if {money::%uuid of player%} is not set:
set {money::%uuid of player%} to {@b}
on rightclick with paper:
name of tool contains "{@a} "
cancel event
set {_m} to uncolored name of tool
replace "[Money]", "원 (우클릭)" and " " with "" in {_m}
remove 1 of tool from tool
set {_m} to KrNumToNum({_m})
add {_m} to {money::%uuid of player%}
play sound "block.note.bell"
send "{@a} 수표를 소비해 &e%FormatKrNumUnit({_m})%&e원&f을 획득하였습니다. &7(소지금 : %FormatKrNumUnit({money::%uuid of player%})%&7원)"
command /수표 [<integer>] [<integer>]:
trigger:
if arg 1 or arg 2 is not set:
send "{@a} &7/&f수표 [금액] [갯수] &6- &e돈을 소비하여 수표를 발행합니다."
else if {money::%uuid of player%} + 0 < arg-1 * arg-2 :
send "{@a} 돈이 부족해 수표를 발행 할 수 없습니다. &7(소지금 : %FormatKrNumUnit({money::%uuid of player%})%&7원)"
else:
set {_i} to arg-2 of paper named "{@a} &e%FormatKrNumUnit(arg-1)%&e원 &7(우클릭)" with lore " &7우클릭시 수표가 소비되며 돈이 지급됩니다."
if player has space for {_i}:
remove arg 1 * arg 2 from {money::%uuid of player%}
give {_i} to player
send "{@a} &e%FormatKrNumUnit(arg-1)%&e원 &f수표 &e%arg-2%&f장을 발행하였습니다. &7(소지금 : %FormatKrNumUnit({money::%uuid of player%})%&7원)"
else:
send "{@a} 인벤토리에 자리가 부족해 수표를 발행할 수 없습니다."
command /돈 [<text>] [<text>] [<integer>]:
trigger:
if arg 1 is "설정" or "주기" or "뺏기" or "초기화":
if player is not op:
play sound "entity.villager.no"
send "{@a} 권한이 부족해 명령어를 실행 할 수 없습니다."
stop
if arg 2 is not set:
play sound "entity.villager.no"
send "{@a} 이름을 입력하지 않았습니다."
stop
if "%arg 1% %arg-2%" is "초기화 전체":
delete {money::*}
play sound "block.note.bell" to players
broadcast "{@a} 관리자에 의해 서버의 모든 유저의 돈이 초기화되었습니다."
stop
set {_a::*} to offlineplayers
loop {_a::*}:
set {_a::%loop-index%} to "%loop-value%"
if {_a::*} doesn't contain arg-2:
send "{@a} &e%arg-2%&f님은 서버에 존재하지않는 플레이어입니다."
else:
if arg 1 is "초기화":
set {_p} to arg-2 parsed as offlineplayer
set {_u} to uuid of {_p}
play sound "block.note.bell" to {_p}
play sound "block.note.bell"
delete {money::%{_u}%}
send "{@a} &e%{_p}%&f님의 돈을 초기화하였습니다."
send "{@a} 관리자가 &e%{_p}%&f님의 돈을 초기화하였습니다." to {_p}
stop
if arg 3 is not set:
play sound "entity.villager.no"
send "{@a} 금액을 입력하지 않았습니다."
stop
set {_p} to arg-2 parsed as offlineplayer
set {_u} to uuid of {_p}
play sound "block.note.bell" to {_p}
play sound "block.note.bell"
if arg 1 is "설정":
set {money::%{_u}%} to arg-3
send "{@a} 관리자가 &e%arg-2%&f님돈을 &e%FormatKrNumUnit(arg-3)%&e원&f으로 설정했습니다." to {_p}
send "{@a} &e%arg-2%&f님의 돈을 &e%FormatKrNumUnit(arg-3)%&e원&f으로 설정했습니다."
else if arg 1 is "주기":
add arg-3 to {money::%{_u}%}
send "{@a} 관리자가 &e%FormatKrNumUnit(arg-3)%&e원&f을 지급했습니다. &7(소지금 : %FormatKrNumUnit({money::%{_u}%})%&7원)" to {_p}
send "{@a} &e%arg-2%님에게 &e%FormatKrNumUnit(arg-3)%&e원&f을 지급했습니다. &7(소지금 : %FormatKrNumUnit({money::%{_u}%})%&7원)"
else if arg 1 is "뺏기":
remove arg-3 from {money::%{_u}%}
send "{@a} 관리자가 &e%FormatKrNumUnit(arg-3)%&e원&f을 뺏었습니다. &7(소지금 : %FormatKrNumUnit({money::%{_u}%})%&7원)" to {_p}
send "{@a} &e%arg-2%님의 돈을 &e%FormatKrNumUnit(arg-3)%&e원&f을 뺏었습니다. &7(소지금 : %FormatKrNumUnit({money::%{_u}%})%&7원)"
else:
if arg 1 is "순위":
play sound "block.note.bell"
loop {money::*}:
add loop-index to {_rank::%loop-value%::*}
set {_index::*} to reversed indexes of {_rank::*}
send "&6&l&m=========&6&l [ &e서버의 부자들 Top 5 &6&l] &6&l&m========="
if {_index::*} is not set:
send ""
send "서버에 등록된 데이터가 존재하지않습니다."
send ""
else:
loop {_index::*}:
loop {_rank::%loop-value-1%::*}:
add 1 to {_rank}
send " &6Top %{_rank}% &e%loop-value-2 parsed as offlineplayer% &7: &e%FormatKrNumUnit(loop-value-1 parsed as integer)%&f원"
stop if {_rank} is 5
stop
else if arg 1 is "보내기":
if arg 2 or arg 3 is not set:
send "{@a} 이름 또는 금액 을 입력하지 않았습니다."
else if arg-2 parsed as player is offline: #캐시되지않은 오프라인 플레이어를 불러올때 렉이 발생해 온라인일때만 보내지게함.
send "{@a} 해당 플레이어가 접속중이지 않습니다."
else if arg 2 is player:
send "{@a} 자기자신에게는 돈을 보낼 수 없습니다."
else if arg 3 <= 0:
send "{@a} 보낼 금액이 0원보다 커야합니다."
else if arg 3 > {money::%uuid of player%} + 0:
send "{@a} 소지금이 부족하여 돈을 보낼 수 없습니다."
else:
set {_p} to arg-2 parsed as player
set {_u} to uuid of arg-2 parsed as player
remove arg-3 from {money::%uuid of player%}
add arg-3 to {money::%{_u}%}
play sound "block.note.bell"
play sound "block.note.bell" to {_p}
send "{@a} &e%arg-2%&f님에게 &e%FormatKrNumUnit(arg-3)%&e원&f을 보냈습니다. &7(소지금 : %FormatKrNumUnit({money::%{_u}%})%&7원)"
send "{@a} &e%player%&f님께서 &e%FormatKrNumUnit(arg-3)%&e원&f을 보냈습니다. &7(소지금 : %FormatKrNumUnit({money::%{_u}%})%&7원)" to {_p}
stop
play sound "entity.villager.no"
else if arg 1 is "확인":
if arg 2 is not set:
play sound "entity.villager.no"
send "{@a} 이름 을 입력하지 않았습니다."
stop
if arg-2 parsed as player is offline: #캐시되지않은 오프라인 플레이어를 불러올때 렉이 발생해 온라인일때만 보내지게함.
send "{@a} 해당 플레이어가 접속중이지 않습니다."
stop
play sound "block.note.bell"
send ""
send "{@a} &e%arg-2%님의 소지금 : &e%FormatKrNumUnit({money::%uuid of arg-2 parsed as player%} + 0)% 원"
send ""
else:
play sound "block.note.hat"
send "&2&l&m=========&2&l [ &a돈 도움말 &2&l] &2&l&m========="
send ""
send " &a▣ &e%player%님의 소지금 : &e%FormatKrNumUnit({money::%uuid of player%}+0)% 원"
send ""
send " &8/&f돈 확인 &f[이름] &6- &e다른 유저의 소지금을 확인합니다."
send " &8/&f돈 순위 &6- &e서버내의 돈이 많은 유저들을 확인합니다."
send " &8/&f돈 보내기 &f[이름] [금액] &6- &e다른 유저에게 돈을 보냅니다."
player is op
send ""
send " &8/&f돈 설정 &f[이름] [금액] &6- &e유저의 돈을 설정합니다. &c(Op)"
send " &8/&f돈 주기 &f[이름] [금액] &6- &e유저에게 돈을 지급합니다. &c(Op)"
send " &8/&f돈 뺏기 &f[이름] [금액] &6- &e유저의 돈을 차감합니다. &c(Op)"
send " &8/&f돈 초기화 &f[이름|전체] &6- &e돈 변수를 초기화합니다. &c(Op)"
stop
이 스크립트를 에센셜 돈으로 바꾸는법이나. 에센셜 돈으로 바꿔주실분 구합니다! 댓글에 적어주시면 감사하겠습니다.
만약 sk 파일 수정본으로 보내주실분은 하얀눈#9856으로 보내주세용
qsef1256
2022.06.04{money::%uuid of player%} 를 player's money 로 바꾸시구요.
해서 전부 이동하시면 될 것 같네요. 이거 작동하는지 테스트 안 해봤습니다, 주의해서 사용하세요
하얀눈
2022.06.04loop {money::*}:
set {_player} to loop-index parsed as offlineplayer
set {_player}'s money to loop-value 이걸 어따쓰시라는건지..
qsef1256
2022.06.04말 그대로 전부 이동 시켜주는 구문입니다, 돈 시스템 바꿨다고 해서 유저 돈 전부 날릴껀 아니잖아요