사이트 로그인
2016.12.08 22:23
원본
http://blog.naver.com/bug_ping/220556078742
function CANMOVE { // callfunc("CANMOVE", 오브젝트, 방향);
set .@id, getarg(0);
switch(getarg(1))
{
case 0:
set @x, get_x(.@id);
set @y, get_y(.@id) - 1;
break;
case 1:
set @x, get_x(.@id) + 1;
set @y, get_y(.@id);
break;
case 2:
set @x, get_x(.@id);
set @y, get_y(.@id) + 1;
break;
case 3:
set @x, get_x(.@id) - 1;
set @y, get_y(.@id);
break;
default:
set @x, get_x(.@id);
set @y, get_y(.@id);
break;
}
return ismove(.@id, @x, @y, -1, 31);
}
callfunc("CANMOVE", 오브젝트, 방향)
반환값은 0 혹은 1을 반환
1을 반환하면 그앞은 돈무브 좌표 즉 갈수없는 방향입니다.
응용
set @npcid, npcid(); // npc의 오브젝트 값을 불러옴
while(1) // 움직임을 계속 줘야하기 때문에 반복문을 돌림
{
set @dir, get_dir(@npcid); // npc의 방향을 불러옴
set @canmove, callfunc("MOBCANMOVE", @dir); // 사용자정의 함수로 돈무브 좌표 못가는 방향을 구해줌
set @move_rand, rand(0, 3); // 우선 NPC에게 어느 방향을 가게할껀지 랜덤을 줌
if(@dir == @move_rand && @canmove == 1) // 랜덤으로 방향을 정했지만 그방향이 돈무브 좌표일경우
{
set @dont_move, @move_rand; // 가지 말아야할 방향을 이 변수에 넣어줌
for(;;) // 다른 방향이 나올때까지 돌려줌
{
set @move_rand, rand(0, 3);
if(@dont_move != @move_rand) break; // 그후 폴문 종료
}
}
move(@npcid, 1, @move_rand); // 랜덤 이동
sleep(4000);
}