개인 자료란 (JE)

  서버 커뮤니티

Profile 느으너앍 대표칭호 없음

Soul_MC 394e8b058b494a24be42a0a304207c31

Profile

질문하기 스크립트

시간의 차이와 시간 표시 형식 질문있습니다.

2021.02.08 조회 수 744 추천 수 0
이해도 1.12 
게임버전 (JE) 모드버킷 
게임버전 (BE) 없습니다. 
스크립트 버전 입문자(아무것도 몰라요) 
스크립트 애드온 2.2-dev32c 

리얼 타임 기준으로 12시간 마다 명령어 입력을 통해서 보상을 얻을 수 있게 하였습니다.


대강이나마 쓰자면

command /보상 [<text>]:

@trigger:

@@if 인자가 없을 경우

@@@if uuid판단해서 이미보상을 받은 경우

@@@@메시지출력

@@@아닐경우

@@@@보상 지급


@@if 인자 존재

@@@op메뉴


여기가 질문 구간입니다.

if arg 1 is "time":  # 인자가 time 일 경우

                    set {_ntime} to now # 현재 시간을 임시 변수에 저장

                    set {_time} to difference between {htime} from {_ntime} 

                   # 임시변수에서 htime을 뺀 값 (htime은 아래 12시간마다 변수에 값을 저장)

                    message "{@a} %{_time}%" # 을 출력


every 12 hours:

    set {htime} to now


삭으로 코드를 짰고 실제로 작동은 잘 합니다.

다만  

Q1) 다른 방법으로 코드를 짤 수 있는 방법도 있을까요? 

every : 를 통해서 변수를 하나 잡아놓고 명령어 입력 때 마다 현재시간에서 빼는 방식 말고

다른 방법이 있는지, 해당 레퍼런스나 함수가 있는지 궁금합니다.


Q2)  혹시 다른 방식이 없다면

_time 변수를 출력 했을 때 ~hours ~minutes and ~seconds 라는 형식으로 출력 되는데

이것을 ~시간 ~분 ~초 로 바꿀 수 있는 방법은 없을까요?


2개의 댓글

스크립터브혼
2021.02.08

1. [Periodical]이벤트는 서버가 시작할 때 동작해서 정해진 시간마다 한번씩 반복합니다.
이 이벤트로 기준 시간을 정한다면 서버가 시작한 시간을 기준으로 12시간마다 한번씩 동작하게 되겠죠.


정확히 정해진 시간마다 반복하려면 [Date()] 함수를 사용해 시간을 지정하세요.
날짜의 년, 월, 일, 시를 지정할 수 있습니다. 각각의 수를 구하는 방법은 Q2의 답변과 같습니다.


남은 시간을 표시하는 방법은 difference로 차이를 구하는 방법 뿐입니다.


2. 글자 편집은 여러 방법이 있습니다.
[Subtext]익스프레션으로 필요한 글자만 잘라 사용할 수 있고,
[Join&Split]익스프레션으로 특정 문자로 나누거나 붙일 수도 있고,
[Replace]이펙트로 글자를 변환할 수도 있습니다.

정해진 글자 폼에서 특정 데이터를 추출하는 방식으로 [Parse]익스프레션도 있습니다.
> set {_i} to "stone" parsed as item
일반적으로 위 처럼 글자를 특정 타입으로 파싱하는 기능으로 많이 쓰이지만
> set {_i::*} to "1천 5백 원" parsed as "%integer%천 %integer%백 원"
이처럼 특정한 글자 폼에서 데이터를 추출 할 수도 있습니다.
다만 글자 폼이 가변적인 상황이라면 먼저 서술한 Subtext, Join&split, Replace를 활용하여 일정한 폼으로 맞추는 작업을 선행해야 할 수 있습니다.

3. now를 출력하면 보통 %년%. %월%. %일% (오전|오후) %시%:%분%으로 표시됩니다.

2와 같은 방식으로 Parse를 사용해 각각의 위치에 있는 수를 파싱할 수 있습니다.

파싱한 수를 Data()함수의 인수로 사용하세요.

느으너앍
2021.02.09
@스크립터브혼

답변 감사합니다! 두고두고 보면서 하겠습니다 ^^