내 케렉터 주위 몹만 움직이게 수정해보기
if ( item.isEquipped()) {
item.toSetoption(pc, false);
if ( item instanceof ItemWeaponInstance ) {
inv.setSlot(item.getItem().getSlot(), item);
} else {
item.toEquipped(pc, inv);
}
item.toOption(pc, false);
item.toBuffCheck(pc);
}
그럼 저번에 이어서 저사양 컴에서 몹을 많이 풀어놓고 컴에 무리없이 구동하는 방법에
대해서 이야기하겠습니다.
for문에 추가하고 삭제하는 방법도 있겟지만 추가,삭제 할때 시간이 더 걸릴거 같고...
스레드 여러개로 한개당 최고치 개수 체크해서 여러개 하는 방법도 있지만...
스래드 많아지면 동기화할 일이 생기면 골치가 아푸고...
단일 스래드에서 처리하는게...
몹들이 움직일때 발생되는 로직을 최소화 하는것이 제일 좋은 방법이라 생각합니다.
아래의 소스를 추가 및 수정해주세요.
package lineage.world.object;
object
// 변수추가
public char isRegToPc; // 사용자에 등록된 몹인가...
public char isSleep; // 움직이지 않아도 되는가...
isAi() {
if ( isSleep == 0x01 ) {
return false;
}
...
}
인공지능 활성화 할 함수에서 false로...
package lineage.world.object.instance;
MonsterInstance
MonsterInstance allList이 리스트에 주위의 몹들을 추가 및 삭제할때 위 변수를 셋팅
toAiWalk()
{
...
// 아직 휴식카운팅값이 남앗을경우 리턴.
if (ai_walk_stay_count-- > 0) {
if (isRegToPc == 0x00) {
isSleep = 0x01;
}
return;
}
...
}
휴식카운팅값 셋팅할때 슬립모드로 셋팅...
이렇게 하면 내 주위에 몹들만 움직이고 반응하게 되죠.
감사합니다.

스트릭스 님의 최근 댓글