개인 자료란 (JE)

  서버 커뮤니티

Profile 마린잉엥 대표칭호 없음
Profile

질문하기 스크립트

배경음악 무한반복 스크립트

2021.11.17 조회 수 1609 추천 수 0
이해도 초보자(스크립트 구성요소나 기본문법은 알아요) 
게임버전 (JE) 1.16.3 
게임버전 (BE) 관련없음 
스크립트 버전 2.5 

함께 쓰는 플러그인 : 월드가드

▶하고자하는 내용: 

A:마을 B: 사냥터

1. A지역에 있을 경우 마을 브금이 무한반복해서 재생된다 ( 114초마다 custom.base 브금 무한반복 재생 )

2. A지역에서 B사냥터로 들어갈 경우(A지역에서 나갈경우)  A 브금이 종료되고 B 브금이 무한반복해서 재생된다

3. 다른 사람과 절대 음악이 공유되지 않아야 한다 

( 1번 유저는 마을에 있고 2번 유저는 B라는 사냥터에 있다면 A는 마을 브금만 들어야 하고 B는 B사냥터 브금만 반복재생되어야 한다)

▶ 시도해본 구문:

loop all player, loop 114 times, while 구문, 변수 스위치를 통해 구현을 시도했으나 모두 실패


▶ 아이디어: "지역에 들어올 경우 음악을 무한반복하고 나갈 경우 그것을 모두 끄면 되겠다"

on enter "base":    #마을 지역

@wait 114 seconds # 마을 브금의 총 재생시간

@@play sound "custom.base" with volume 5 and pitch 1 at player for player    #마을 브금


on exit "base": #마을지역

@make player run cmd "/stopsound @s" as op    #나의 사운드 모두 끄기


어찌해야할까요..?ㅠㅠ

음악 쿨타임 반복 재생 구문이 만들기 어렵습니다... 정말 많이 쓰는 구문인데





1개의 댓글

스크립터브혼
2021.11.18

두개의 값이 필요합니다. 하나는 플레이어가 속한 곳이 어디 인지, 다른 하나는 노래가 재생 중인지 입니다.


먼저 노래가 재생중인지를 판단하기 위한 코드입니다.

if {sound::%player%::play} is not set:
    play sound "custom.base" with volume 5 and pitch 1 at player for player

    set {sound::%player%::play} to 114 * 20
    loop {sound::%player%::play} times:
        wait 1 tick
    delete {sound::%player%::play}

{sound::%player%::play}는 재생시간을 가지고 있습니다.

변수가 없는 경우에만 노래를 재생시키고, 재생시간을 갱신합니다.

재생이 시작되면 변수가 값을 가지게 되므로 첫번째 조건문에 의해 중복재생은 불가능합니다.

재생시간이 완료되면 변수를 제거하게 되고, 다시 재생할 수 있는 상태가 됩니다.


플레이어의 위치에 따라 재생을 멈출 수 있도록 추가합니다.

on enter:
    set {sound::%player%::region} to "%region%"

    if {sound::%player%::play::%region%} is not set:
        play sound "custom.base" with volume 5 and pitch 1 at player for player

        set {sound::%player%::play::%region%} to 114 * 20
        loop {sound::%player%::play::%region%} times:
            wait 1 tick
            if {sound::%player%::region} is not "%region%":
                stop loop
        delete {sound::%player%::play::%region%}

각 지역마다의 변수를 설정하여 새로운 지역에 들어가면 새로운 노래를 재생하고,

그전에 재생되던 노래는 멈추도록 합니다.


on enter:
    set {sound::%player%::region} to "%region%"

    if {sound::%player%::play::%region%} is not set:
        set {sound::%player%::play::%region%} to 114 * 20

        while {sound::%player%::play::%region%} is set:
            play sound "custom.base" with volume 5 and pitch 1 at player for player

            loop {sound::%player%::play::%region%} times:
                wait 1 tick
                if {sound::%player%::region} is not "%region%":
                    stop all loops

        delete {sound::%player%::play::%region%}

마지막으로 while 반복문을 통해 무한히 재생될 수 있도록 구성합니다.