프리바람(프바) DR 스크립트 구성 및 변수 종류



DR 스크립트 작성법

  1. script 폴더 구조
  2. 스크립트 소스 구성

1. script 폴더 구조


정해진 건 아닌데, 스크립트 파일에는 두 가지 형식이 있다고 약속하자.
하나는 스크립트 파일 (진짜로 코드를 작성하는 파일)
다른 하나는 헤더 파일 (다른 스크립트를 참조하는 파일)

DR 통파일 안의 script 폴더에 스크립트 파일들이 들어 있다.
각 파일들은 script/script_load.txt라는 파일에서 처음 참조된다.
스크립트를 참조하는 방식은 두가지다.

script: script/script_file.txt

스크립트 파일을 참조하는 script:

import: script/subfolder/list.txt

참조파일을 참조하는 import:

이게 무슨 소리더냐?
script: 로 작성하면, 스크립트 파일을 등록하는 거고,
import: 로 작성하면, 헤더 파일을 참조한다.

script_load.txt 파일
script: script/npc.txt
import: script/부여성/list.txt

import 대상의 파일 이름이 list.txt일 필요는 없는듯?

이렇게 되면 npc.txt 라는 스크립트 파일과 부여성 폴더에 있는 list.txt 참조 파일을 참조한다.
그럼 부여성 폴더 안의 list.txt파일을 읽어서 또 스크립트 파일이나 헤더 파일을 읽는다.
이걸 무한반복한다.


+- script_load.txt
    +- npc.txt
    +- 부여성
        +- 주모.txt
        +- 달걀귀신.txt
        ...
    ...

사실 따지고보면 구동기에서는 폴더는 신경쓰지 않는다.
오직 스크립트 파일을 읽어서, 각 스크립트를 로드하는 것만 신경쓴다.
이건 우리가 보기 편하게 구조가 대강 저렇다는 걸 알려주고 싶은 것이다.


2. 스크립트 소스 구성


스크립트 소스가 어떻게 작성됐는지,
스크립트 종류에는 어떤 게 있는지 볼 것이다.

something.txt
npc 주모    {
onclick:
    set @id, myid();
    set @sd, mysd();

    dialog, 0, 0, 1, "환영합니다.";
    end;
}

코딩 공부를 조금이라도 한 사람은 금방 이해할 것이다.
코딩 전혀 모르는 사람은 이 영문자들이 뭘 뜻하는 거지.. npc니까 npc인 것 같긴 한데...
라고 생각들듯.

npc : npc에 적용될 스크립트임을 알려준다.
주모 : 스크립트 이름이다. 절대로 유니크해야한다. 즉, 겹치면 안된다.
중괄호로 묶인 부분 : 스크립트 소스 부분이다.
onclick: : npc의 이벤트 라벨로, npc를 클릭하면 발생하는 이벤트다.
보통 c코드면 라벨은 점프하는 건데, 여기도 마찬가지라고 보면 된다. 해당 위치에서 코드를 수행한다.
set @id, myid(); :
'설정한다' '@id라는 변수에' 'myid()함수의 결과값을'
이 제일 직관적인 설명이다.
함수 인자1, 인자2, 인자3 형태로 소스는 구성된다.
set이라는 건 구동기에 내장된 함수인데, 인자1에 인자2를 넣는다.
dialog도 마찬가지다.
dialog가 써져 있고, 숫자 3개가 있고, 뒤에 뭐라뭐라 적혀 있다.
대충 보면 대화창을 띄우는데, 숫자 3개는 모르겠고, 뒤에가 대화 말 같다.... 라고는 느낄 수 있을 것이다.
함수 사용 방식은 이처럼 다 똑같다.
end; : 소스 수행을 중단하고 스크립트를 빠져나간다. 더 이상 스크립트 진행이 불필요할 때 써주면 된다.

스크립트 종류에는 npc, item, magic, mob, floor, timer, function 이 있다.

NPC
npc npc_script_name    {
oninit:
    // npc가 생겨났을 때(처음)만 발생하는 초기화 이벤트
    set @id, myid();
    set @sd, mysd();
    end;
onclick:
    // npc를 클릭했을 때 이벤트
    set @id, myid();
    set @sd, mysd();
    end;
onsay:
    // 유저가 말했을 때 이벤트
    @userid // 유저 오브젝트
    @last_say$ // 마지막으로 들은 대화
    end;
}

ITEM
item item_script_name    {
onuse:
    // 무기 사용시 이벤트
    // 아마 소모성 아이템 사용이나
    // 아이템을 휘두를 때 발생
    end;
onequip:
    // 무기 장착시 이벤트
    end;
onunequip:
    // 무기 장착 해제시 이벤트
    end;
}

MAGIC
magic     magic_script_name {
oncast:
        // 마법을 실행했을 때
        end;
onuncast:
        // 마법이 해제됐을 때(시간이 다 되어 풀리거나, uncast스크립트 실행시)
        end;
onconcast:
        // 지속마법일 때
        end;
onrecast:
        // 지속 중에 로그인시 실행
        end;
}       

MOB
mob     mob_script_name {
oninit:
    // 몬스터 만들어졌을 때(한번)만 실행
    end;
onmove:
    // 몬스터가 한발짝 움직였을 때
    end;
onattack:
    // 몬스터가 공격 트리거 실행
    end;
onsay:
    // 유저가 말했을 때
    // npc와 동일
    @userid
    @last_say$
    end;
onclick:
    // 몬스터가 클릭당함
    @userid     // 누가?
    end;
ondamaged:
    // 데미지입음
    // 스크립트에 의해 damage로도 발생하는지는 실험 필요
    @attackerid     // 누가?
    end;
ondead:
    // 죽음
    end;
}

FLOOR
floor     floor_script_name {
onpress:
        // 타일 밟았을 때
        end;
}

TIMER
every     00:00:00 {
    // 매 00:00:00 시각에 발생    
}

every     10 {
    // 매 10초마다 발생
}

FUNCTION
function     function_name {
    set @arg1, getarg(0)
} 


빼먹은 게 있을지 모르겠따. 생각나면 추가하기로..
그런데 아닛? 스크립트에 웬 펑션?
우리가 모두 아는 그 함수처럼 사용하면 된다.
인자를 받아서 수행하고, 값을 반환한다.
함수에 관한 자세한 이야기는 언젠가 다음에 하기로 하고...


스크립트 파일이 어떻게 생겨먹었는지 확인해봤으니, 다음엔 작성하는 법 알아보기.





댓글 1개:

  1. 프리바람 레전드의 귀환, 동시접속자수 1위!
    봄온라인으로 초대 합니다!

    홈페이지 주소 : https://freebarambom.com/

    답글삭제

Popular Posts

프리바람(프바) DR 구축법