본문 바로가기
마인크래프트/Skript 기초 활용편

스크립트 기초 활용 7편(접속시간)

by 스터디립트 2022. 2. 23.

가끔 서버를 돌아다니다 보면 자신의 접속시간을 확인할 수 있거나, 또는 플레이어의 접속시간을 활용한 시스템을 사용하는 서버들이 있습니다. 물론 그런 서버들은 스크립트가 아닌 플러그인을 이용하여 시스템을 만들었을 확률이 매우 높지만, 스크립트로도 애드온을 사용한다면 충분히 만들 수 있습니다. 사실 이번 시간에 사용할 애드온은 스크립트 뿐만 아니라 java에 대한 어느정도 지식이 있어야지 완전히 이해가 가능한 스크립트이기에, 스크립트 기초 활용편에 넣는것에 대해서 고민을 조금 했었습니다. 하지만 자바를 모른다고 해서 아예 이해를 할 수 없는것은 아니기에, 결국 넣기로 했습니다.

 

 

 

애드온을 사용하지 않고 만드는것이 아예 불가능하진 않습니다. 이론상 매초마다 플레이어의 변수에 1을 더해서 만들수도 있습니다. 하지만 그런 방식은 서버에 부하가 너무 많이 가고, 안정적인 방법도 아니기에 추천드리지는 않습니다.

 

사용법을 알려드리기 전에 우선 필요한 애드온인 skript-reflect에 대해서 알려드리겠습니다. 이 스크립트는, 스크립트 파일 내에서 자바 명령어들을 사용할 수 있도록 도와주는 애드온입니다. 여러가지 방향으로 활용할 수 있고, 복잡한 스크립트 코드를 짧은 자바 코드로 최적화할수도 있어서 좋은 애드온입니다.

Addon - skript-reflect | skUnity Forums

 

 

그럼 이제 사용법을 알려드리겠습니다.

/접속시간 (플레이어)

플레이어를 입력하면 그 플레이어의 접속시간이 뜨고, 입력하지 않으면 자신의 접속시간이 뜹니다.

 

그러면 이제 소스코드를 보며 구문들을 분석해보도록 하겠습니다.

 

import:
    org.bukkit.Statistic
    org.bukkit.entity.Player

command /접속시간 [<player>]:
    trigger:
    	if arg 1 is set:
        	set {_p} to arg 1
        else:
        	set {_p} to player
        set {_t} to {_p}.getStatistic(Statistic.valueOf("PLAY_ONE_MINUTE"))
        set {_s} to floor({_t}/60)
        set {_rs} to mod({_s},60)
        set {_m} to floor({_s}/60)
        set {_rm} to mod({_m},60)
        set {_h} to floor({_m}/60)
        set {_rh} to mod({_h},24)
        set {_d} to floor({_h}/24)
        send "%{_p}%의 접속시간은 %{_d}%일 %{_rh}%시간 %{_rm}%분 %{_rs}%초입니다"

 

 

1. import

그전에는 보지 못했었던 것들이 위에 있지요? import는 자바 외에도 많은 프로그래밍 언어들에서 사용하는 것들입니다. 쉽게 설명하자면, 여러 자료들이 모여있는 도서관에서 org.bukkit.Statistic과 org.bukkit.entity.Player을 가져가서 사용하겠다는 의미입니다. 이는 나중에 다른 프로그래밍 언어들에 대해 다룰때 또 다시 설명해드리겠습니다.

 

 

2. {_p}.getStatistic(Statistic.valueof("PLAY_ONE_MINUTE"))

뭔가 스크립트가 아닌 다른 프로그래밍 언어에서 볼법한 코드가 있습니다. 이는 {_p}의 접속시간 통계값을 가져오는 구문입니다. 단위는 틱이기 때문에, 뒤의 구문들에서 두 함수들을 통해서 틱에서 초, 초에서 분, 분에서 시간, 시간에서 일까지 단위를 변환해줄겁니다.

 

3. floor, mod

이것들은 마인크래프트 스크립트 자체에 있는 함수들 중 하나입니다. floor함수는 괄호 안에 입력된 수를 버림하여 정수단위로 표기합니다. 3.123분 이런식으로 표기가 되어서는 안되기 때문이고, 123초에서 60*2인 120만 가져가서 분으로 변환해야 하기에 floor함수를 사용합니다. 반면 mod함수는 mod(a,b)의 형식으로 사용하며, a를 b로 나눈 나머지를 반환합니다. 123초에서 floor함수로 2분으로 변환했다 치면, 남은 3초도 저장해놓아야 하기에 mod(123,60) = 3 으로 3초를 저장합니다. 예시를 들었던 123초로 두 함수 모두를 사용하여 예시를 들어보면

 

set {_m} to floor(123/60)
set {_s} to mod(123,60)
send "%{_m}%분 %{_s}%초" #2분 3초

이런식으로 여러번 해서 단위를 변환합니다.

 

이번 시간에는 플레이어의 접속시간을 확인하는 스크립트에 대해서 배워보았습니다. 다음 시간에는 커스텀으로 음식을 만드는 스크립트에 대해서 배워보도록 하겠습니다. 질문이 있으시다면 이 글의 댓글에 적어주시면 답변해드리도록 하겠습니다.

 

아래는 스크립트 파일들입니다

주석 미포함

접속시간.sk
0.00MB

주석 포함

접속시간(주석 포함).sk
0.00MB

댓글