동영상 보러 가기 : http://youtu.be/l3hBMHDwAfo


집에 사람이 들어오면 캐롤송과 함께 벽 조명이 순서대로 깜빡이는 스크립트.

 

채팅창에 '캐롤' 이라고 말하면 캐롤송+벽조명 깜빡임+집사,NPC 댄스&노래부르기 를 한꺼번에 합니다.

 

아래 전체 소스 코드를 마우스로 선택하여 Ctrl+C 키를 눌러 클립보드에 복사하여 스크립트창에 붙여넣기 하시면 간단한 추가 작업만 더 하시면 완성됩니다.

 

<전체 소스 코드>

function OnInit()
    H.SetSensor(10, 30);
    H.SetOutletCount(7);
end

 

-- 방문자가 접근했을때 발동
function OnUserEntered(desc)
    PlayCarolsong();
    PlayGlow();
end

 

-- 캐롤송 연주

function PlayCarolsong()
       H.SetInstrument(5, H.Instrument.piano);
       H.PlaySound(5, "V15L8O5[1]DBAGD4.D16D16DBAGE4.E16E16EO6CO5BAF#4O6D16D16EDCO5AB8D4.DDBAGD2DDBAGE4.EEO6CO5BAO6DDDD16D16EDCO5AG4O6D4O5.BBB4BBB4BO6DO5G8.A16B2O6CCC8.C16CO5BBB16B16BAAGA4O6D4O5BBB4BBB4BO6DO5G8.A16B2O6CCC8.C16CO5BBB16B16O6DDCO5AG2");

        H.SetInstrument(6, H.Instrument.piano);
        H.PlaySound(6, "V13L8O3GBGBGBGBGBGBGO4CO3GO4CO3AO4CO3AO4CO3DF#DF#DF#DF#GBDBGBGBGBGBGBGBGO4CO3GO4CO3AO4CO3AO4CO3GBGBDAF#AG2GBGBGBGBGBGO4CO3GBGBGO4CO3GO4CO3GBGBAO4C#O3AO4C#O3DF#DF#GBGBGBGBGBGO4CO3GBGBGO4CO3GO4CO3GBGBDF#DF#G2");

        H.SetInstrument(7, H.Instrument.piano);
        H.PlaySound(7, "V13L8O4RDRDRDRDRDRDREREREREO3RARARARAO4RDRDRDRDRDRDRDRDRERERERERDRDRCRCO3B2O4RDRDRDRDRDRERDRDRERERDRDREREO3RARAO4RDRDRDRDRDRERDRDRERERDRDO3RARAB2");
end

 

-- 아울렛 밝게하기

function PlayGlow()
    -- H.SetPercussion(0, H.Percussion.fx11);
    initTimeline(2,"t250 rrr", 2, 20, 89);

    OuletGlow(3, 21, 85, 5);
    OuletGlow(4, 22, 85, 5);
    OuletGlow(5, 23, 85, 5);
    OuletGlow(6, 24, 85, 5);
    OuletGlow(7, 25, 85, 5);
end

 

-- 캐롤 이라고 말하면 캐롤송과 조명 감빡임을 시작

function OnUserSay(str)
    if (string.find(str, "캐롤")) then
        PlayGlow();
        PlayCarolsong();
        H.StartAnimation(0, 1, H.Emotion.dance);
        H.StartAnimation(1, 1, H.Emotion.sing);
        H.StartAnimation(2, 1, H.Emotion.dance);
    end
end

 

-- 아울렛 밝게하기 반복 함수

function OuletGlow(outlet, c, max, skip)
    if(skip == nil or skip < 1) then skip =1; end
    if(c < (max+1)) then
        H.Glow(outlet,c,0.5,64,64,64);
        c = c+skip;
        OuletGlow(outlet,c,max,skip);
    end
end

 

-- 라벨(타임라인) 생성하기

function initTimeline(channel, header, tempo, c, max)
    if(c < max+1) then
        header = header.."r"..tempo.."["..c.."]";
        c = c+1;
        initTimeline(channel, header, tempo, c, max);
    else
       H.PlaySound(channel, header);
    end
end

 


 

 

스크립트를 작성하려면 집사를 클릭하여 '스크립트 편집' 버튼을 클릭합니다.

 

 

 

오른쪽의 + 버튼을 클릭하여 새 스크립트를 추가합니다.

새로 뜬 창의 '새 스크립트'를 클릭하고 '설치'를 누릅니다.

 

 

 

이름과 설명을 대충 넣고

기본적으로 있던 스크립트 코드는 지우고 위에서 복사했던 코드를 붙여넣기 합니다.

하단의 적용을 클릭하면 소스코드가 적용됩니다.

 

 

 

아울렛 칸에 나타난 징 표시 아이콘을 더블클릭하여 효과를 줄 오브젝트(아울렛)을 선택합니다.

버그인지는 모르겠으나 창고 관리인과 잡화상인은 1,2번으로 지정하지 않으면 애니메이션 명령어가 먹히지 않습니다.

1,2번은 창고 관리인과 잡화상인으로 지정해주세요.

3,4,5,6,7 은 벽 조명을 지정합니다.

여기까지의 작업이 순조로웠다면 아울렛을 지정할때 스크립트가 동작하여 조명에 불이 들어오는게 보이며 7번까지 징 표시를 지정했다면 완성입니다.

 

스크립트 명령어 관련 참고사항

스크립트 명령어에 반복문이 없어서 GM 문의를 해봤는데 유저들이 알아내야 할 부분이라면서 안가르쳐 주더군요.
어쨋던 반복적인 라벨생성과 움직임을 노가다로 붙이기 힘들어서 if then 문으로 반복문 흉내를 내봤습니다.
실제로 위에 코드를 반복문 없이 작성했다면 수백줄이 될 내용이고 내용 제한 때문에 실제로는 코드를 다 작성할 수가 없습니다.
그래서 꼼수로 반복문을 만들어야 했는데 이 또한 텍스트 양과 관계없이 내부적인 명령어 Que의 제한이 있는지 더 많은 동작을 넣기는 어렵더군요.
다양한 동작을 한꺼번에 하시려면 꼼수를 많이 써야하고, 하다보면 코드상에 문제는 없는데 어떤건 되고 어떤건 안되고 되더라도 될때도 있고 안될때도 있고 막 꼬입니다.

 

 

주의점 

그래픽 설정의 쉐이더  옵션을 너무 낮추었거나 구형 그래픽카드이거나, 고정 프레임 옵션을 활성화 했을 경우 조명 밝아짐 효과가 보이지 않습니다.

 

고르고스 서버에 계신 분들은 페르논 시아주 봄길 돌담마을 이동사 바로 옆에 있는 7번지 라이슈 주택으로 오시면 직접 보실 수 있습니다.

들꽃 정원 마을 이동사 정면에 있는 크랑 주택으로 오셔도 비슷한 스크립트를 보실 수 있습니다. ^^

 

1차 수정 --------

징 찍는 과정 설명 중 집사라고 언급한 부분을 '창고 관리인'으로 고쳤습니다.

캐롤송의 멜로디 라인을 고쳤습니다. (고르고스 서버 Rv루비님께서 고쳐주셨습니다. ^^)