사이트 로그인
2016.12.03 11:31
//오늘은 callfunc에 대해 설명합니다. 오늘도 기준은 rb기준으로 하겠습니다.
저번 스크립트에서 callfunc 뭐시기가 엄청 많았죠?
callfunc는 func로 USER_FUNCTION( 자기가 만든 함수) 에 만들어놓고 호출해서 쓰는 거입니다.
자주 반복되고 스크립트 전반적으로 계속적으로 드가는 부분이거나 반복적으로 쓰이는부분에선
자기가 정의해놓고 쓰면 유용하겠죠 ?
이전 강의에서 PKMAP_CHECK와 SIDE_CHECK 두 개를 설명드리고 끝내겠습니다!
먼저 저 함수가 추가되있다는 가정하에 스크립트내에서 호출방법은
callfunc "함수명",인자값(0),인자값(1),***;
이런식입니다. 인자값 필요없이 하면 callfunc "함수명";으로 끝내도 됩니다.
인자값은?( 제 주관적인 생각이라서 대충 이렇구나 이해하시면 됩니다.)
스크립트 내에서 callfunc "함수명",@i; 라면 @i값을 복사해서 func에 대입하는 것입니다.
C++과 곁들인다면
int sum(int a int b) // func와 비슷한거입니다.
{
return a+b;
}
void main() //스크립트작성한다고 보시면되요! 메인함수
{
int x=5,y=6,result;
result = sum(x,y); // 여기서 x,y가 인자값입니다. x=5,y=6을 sum함수정의한곳으로 복사해서 가져가서 a와 b에 대입하는거입니다
}
결국 result는 5+6인 11입니다.
이제 설명들어갈게요
func PKMAP_CHECK //func 함수명
{
set @id,myid(); // 앞강의에설명되어있음!
set @sd,mysd();
if( get_mapid(@id) == 1) //자기가 맵 1번에 있으면
{
message @sd, 3, "마법사용금지구역"; // 메세지로 마법사용금지구역을 띄우고
end; // end;는 스크립트를 멈춘다?종료한다?의미로 딱 마법사용금지메세지까지만 하고 여기
func함수도 그렇고 호출한 함수도 script는 더이상 읽지 않고 종료됩니다.
}
if( get_mapid(@id) == 2)
{
set @MAP, 2;
}
if( get_mapid(@id) == 3)
{
set @MAP, 3; // 2번맵이면 @MAP을 2 3번맵이면 @MAP을 3
}
return @MAP; // return은 return; 은 그냥 이 func함수를 벗어나서 script로 돌아간다생각하시면되요
// return @MAP;은? @MAP의 값을 가지고 script로 복귀한다는 의미입니다!
}
쉽죠 ? 그럼 이번엔 인자값을 쓰는 func함수를 살펴볼게요
func SIDE_CHECK //함수명
{
set @id,myid();
set @sd,mysd();
set @RANGE,getarg(0); // getarg(0)가 인자값입니다.
인자값입력방법은 callfunc "함수명",getarg(0),getarg(1),***;
그럼 앞의 스크립트에서 callfunc "SIDE_CHECK",@i;
라면 getarg(0)에 @i값이 복사되서 드가는 거겠죠?
set @SIDE, get_direction(@id); // 자신의 보는 방향을 나타냅니다. 0 - 위 1 - 오른쪽 2 - 아래 3 - 왼쪽
if( get_objfront(1,1) <= 0 && get_objfront(5,1) <= 0) // 자신의 앞에 사람이나 몹이 없으면 종료
{
end;
}
if( @SIDE == 0) // 앞에 몹이나 사람있으면
{
set @target, get_xy2obj(get_x(@id),get_y(@id) - 1 - @i, 1, 1); //@target을 자신의 x좌표,y좌표-1-@i 의
사람을 타겟으로 한다.
}
... // ...은 @SIDE 1~3까지 쓰기가 귀찮아서 생략..
return @target; @target값을 반환하면서 func함수를 종료한다.
}
그렇다면..여튼 callfunc와 이전의 건곤스크립을 하게되면 십리~무극건곤까지
for문의 @i값을 조절하면 범위조절가능 ( 다만, 저건 초기작업본이라 조금의 수정이 필요합니다.)
PKMAP 구분가능, 마법사용금지 MAP구분가능, 시즉같은 마법 못쓰는 마법check
가능하답니다!!!