• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 리니지 소스자료실
    • 리니지 소스자료실 ()
    • A* 알고리즘 (몬스터 길찾기)

      • 김닉넴
      • 2016.05.20 - 20:26 289

    몬스타 길찾기 알고리즘입니다.

    점팩에서 찾아서 올립니다.

    주석 처리 되어있는것으로 보아 문제점이 있는것 같습니다.

    아마 똑같은경로 재탐색으로 인해 발생되는 오류이거나 케릭터위치 바뀔경우 못찾아서 무한루프가능성 같네요(아닐수도 ^^;)

    그냥 자료있길래 올렸는데 제대로 실행되는지는 모르겠습니다.

    돌아다니는 팩중에서 발췌했습니다

    그리고 소스출처는 잇뽕님으로 되있네요

    문제가 된다면 자삭하겠습니다.

     

    장점: 빠른시간안에 결과를 만들어서 다른알고리즘에 비해 평균적으로 우수한 속도 자랑합니다.

            본섭처럼 똑똑한 몬스터가 되겠죠?

    단점: 검색 공간의 크기가 크다는점 (자칫 잘못 소스짜면 cpu와 메모리 리소스 크게 차지합니다.)

            똑같은 경로를 재탐색할경우 무한루프 가능성(재탐색 못하게 걸러주는 조건 필요할것 같아요)

            맵의크기에따라 리소스 차지하는게 기하급수적이라는것

    내생각이지만 보강이 필요하다

    1. 몬스터가 걸어서 갈수없는 부분에 케릭터가 갈경우 경로를 탐색하지 못하게 하는것도 조건에 걸어주는것

    2. 문이나 출구가 있다면 첫번째 목표를 문이나 출구로 설정해서 경로 검색

    3. 항상 케릭터가 텔을 할경우나 위치가 바뀌는 경우 경로가 재탐색되어야 할것이며 맵에 없다면 초기화

    4. 던전지역 제외 맵이 큰 본토지역은 쓰지말것 (큰맵은 기존의 방식 길찾기로 해주면 될듯)

     

    알고리즘 설명은

    http://blog.naver.com/nsunlee?Redirect=Log&logNo=130048768455 

    이블로그 보시면 될듯해요

     

     

    L1Npcinstance.java

         if (dir == -1) {
          tagertClear();

         } else {
          if (onAStar(target, true)) {  // 대상까지 이동할 수 있기때문에 A* 알고리즘을 작동한다
           onAStar(target, false);
          } else {       // 대상까지 이동할 수 없기때문에 랜덤워크를 작동한다
           randomWalk();
          }
         }
             for (Object object : L1World.getInstance().getObject()) {
          L1DoorInstance door = (L1DoorInstance) object;
          if (door.getPassable() == L1DoorInstance.NOT_PASS) {
           getMap().setPassable(door.getLocation(), false);
           setSleepTime(calcSleepTime(getPassispeed()));
          }
         }

     

    그냥 끝부분에 적당히 넣어주세요

     public boolean onAStar(L1Character target, boolean check) {
      return onAStar(target.getX(), target.getY(), target.getMapId(), check);
     }

     public boolean onAStar(int tx, int ty, int mapId, boolean check) {
      // check: true - 경로를 확인만 한다, false - 검색된 경로를 이동시킨다
      pfAStar = new L1Astar();
      iPath = new int[300][2];
      // 최단경로를 검색한다
      nodePath = pfAStar.FindPath(this, tx, ty, mapId);
      // 현재경로 카운터를 초기화한다
      iCurrentPath = 0;
      // 경로목록을 만든다
      while ( nodePath != null ) {
       iPath[iCurrentPath][0] = nodePath.x;
       iPath[iCurrentPath][1] = nodePath.y;
       iCurrentPath++;
       nodePath = nodePath.prev;
      }
      // 최대경로 카운터에 현재경로 카운터를 대입한다
      iMaxPath = iCurrentPath;
      // 확인목적이 아니고 목표경로가 대상과 0 또는 1, 2 타일 거리일 경우에만 이동시킨다
      // 대상의 직접위치는 이동불가(검색불가) 위치이기때문에 0 타일은 될 수 없다
      int tile = Math.max(Math.abs(iPath[0][0] - tx), Math.abs(iPath[0][1] - ty));
      if (tile < 3) {
       if (check) { // 확인용
        return true;
       } else { // 확인용이 아닌 경우
        iMonsterX = iPath[iCurrentPath-2][0];
        iMonsterY = iPath[iCurrentPath-2][1];
        // 이동할 좌표에 맞게 몹의 방향을 설정한다
        if (getX()    <  iMonsterX && getY()  >  iMonsterY) {
         setHeading(1);
        } else if (getX()  <  iMonsterX && getY()  ==  iMonsterY) {
         setHeading(2);
        } else if (getX()  <  iMonsterX && getY()  <  iMonsterY) {
         setHeading(3);
        } else if (getX()  ==  iMonsterX && getY()  <  iMonsterY) {
         setHeading(4);
        } else if (getX()  >  iMonsterX && getY()  <  iMonsterY) {
         setHeading(5);
        } else if (getX()  >  iMonsterX && getY()  ==  iMonsterY) {
         setHeading(6);
        } else if (getX()  >  iMonsterX && getY()  >  iMonsterY) {
         setHeading(7);
        } else if (getX()  ==  iMonsterX && getY()  >  iMonsterY) {
         setHeading(0);
        }
        // 이동시킨다
        getMap().setPassable(getLocation(), true);
        setX(iMonsterX);
        setY(iMonsterY);
        getMap().setPassable(getLocation(), false);
        broadcastPacket(new S_MoveCharPacket(this));
        setSleepTime(calcSleepTime(getPassispeed()));
        // 노드를 초기화 한다
        pfAStar.ResetPath();
        // 테스트용 메세지를 출력한다
        //System.out.println(" 경로: " + (iMaxPath - 1) + " | " +
        //  "거리: " + Math.max(Math.abs(getX() - tx), Math.abs(getY() - ty)));
       }
      }
      // 목표경로가 2 타일 이상 차이가 있다면 대상을 초기화한다
      // 길이 존재하지 않거나 막혀있기 때문이다
      else {
       tagertClear();
       return false;
      }
      return true;
     }

     private void randomWalk() {
      tagertClear();
      int dir = checkObject(getX(), getY(), getMapId(), getRnd()
        .nextInt(20));
      if (dir != -1) {
       setDirectionMove(dir);
       setSleepTime(calcSleepTime(getPassispeed()));
      }
     }
     public int calcSleepTime(int i) {
      int sleepTime = i;
      switch (getMoveSpeed()) {
      case 0: break;
      case 1: sleepTime -= (sleepTime * 0.25); break;
      case 2: sleepTime *= 2; break;
      }
      if (getBraveSpeed() == 1) {
       sleepTime -= (sleepTime * 0.25);
      }
      return sleepTime;
     }

     

    이 게시물을..
    N
    0
    0
    • 리마스터팩 요정 소울 엠피 수정jstory
    • 0
      김닉넴

    김닉넴 님의 최근 글

    2.7 순정팩 다시 올립니다. (이걸로 받으세여) 820 2023 04.29 2.7 서버팩 입니다~ 268 2023 04.29 리니지 TRX 자동 결제 시스템 입니다. 162 2023 04.29 1.63 오리지날 버전 입니다. 303 1 2023 04.29 2.7 접속기 린컴 입니다 268 1 2023 03.23

    김닉넴 님의 최근 댓글

    클라는 있나요? 2023 04.29 클라 있나요?   2023 03.23 감사합니다 2016 06.06 ㄳ합니다 2016 06.05 ㄳ합니다 2016 06.05
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • 리마스터팩 요정 소울 엠피 수정
    • 목록
      view_headline
    × CLOSE
    기본 (1,058) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:14 591
    1058
    아머브레이크 데스티니 시전시 성공 확률 조정하는 소스가 있나요?
    안정환 2024.04.23 - 10:01 102
    1057
    List.spr(변신,몬스터 수정소스)개조방법
    유튜브고도리 2024.04.19 - 05:02 243
    1056
    NPC 외침 멘트 깔끔정리(by.유튜브고도리)
    유튜브고도리 2024.04.11 - 05:57 125
    1055
    디아블로 참 만들기
    유튜브고도리 2024.04.09 - 05:55 114
    1054
    리니지m 처럼 피통 늘리기,오류가 날때
    유튜브고도리 2024.04.09 - 05:18 91
    1053
    욕하면 채금 먹게 하기
    유튜브고도리 2024.04.09 - 04:59 71
    1052
    레벨에 따른 호칭 부여..?
    밤톨이11 2024.04.08 - 04:24 72
    1051
    초보자 보호 시스템
    밤톨이11 2024.04.08 - 04:21 57
    1050
    마법무기 데미지 증가
    밤톨이11 2024.04.08 - 04:19 70
    1049
    레벨 제한 맵
    밤톨이11 2024.04.08 - 04:14 66
    1048
    마법스크롤
    밤톨이11 2024.04.08 - 04:06 32
    1047
    리니지m 아지트 소유중에도 공성선포하기
    유튜브고도리 2024.04.07 - 21:37 41
    1046
    리니지m 마법인형이 마법을 쓰네?
    유튜브고도리 2024.04.07 - 21:36 61
    1045
    드래곤 슬레이어 각반(장비추가소스)
    유튜브고도리 2024.04.07 - 19:08 51
    1044
    린엠 게렝 변신 카드 만들기
    유튜브고도리 2024.04.06 - 06:06 100
    1043
    버프 물약 개별 소스 오래전 소스
    밤톨이11 2024.04.05 - 18:43 57
    1042
    일시 스텟 상승 물약
    밤톨이11 2024.04.05 - 18:42 26
    1041
    성 전환 물약
    밤톨이11 2024.04.05 - 18:37 31
    1040
    MP 물약 소스
    밤톨이11 2024.04.05 - 18:35 41
    1039
    리니지 옛날버젼..이라는데...구동가능여부 확인 부탁드립니다.
    도난차량 2024.03.24 - 04:56 354
    1038
    랭커
    foqwer 2024.03.14 - 10:43 141
    1037
    인첸별
    foqwer 2024.03.14 - 10:42 106
    1036
    몬스터 앞에 레벨 넣기
    프렌치좋아 2024.03.04 - 01:40 370
    1035
    3.63 글루딘 Single 용
    블루블랙3 2024.02.28 - 23:08 411
    1034
    Sprite file doesn`t exist 오류
    하앙비 2023.12.23 - 02:19 229
    1033
    전쟁세율 고정값 15%
    하남궁 2023.11.29 - 17:02 198
    1032
    인형합성사
    Rebecca 2023.10.09 - 22:54 337
    1031
    2.0 레벨업시 HP량 올리기
    Rebecca 2023.10.09 - 22:49 434
    1030
    전사버전 펫 만렙 변경
    Rebecca 2023.10.09 - 22:44 162
    1029
    맵 순간이동 가능 불가능지역 설정하기
    Rebecca 2023.10.09 - 22:39 237
    1028
    트레져박스 업로드입니다.
    린컴충성 2023.10.07 - 04:46 182
    1027
    리마스터 접속기 소스자료
    홍자놀기 2023.09.08 - 05:41 2284
    1026
    대미지 발동시 범위 질문드립니다
    나잇따나읻따 2023.05.21 - 22:26 292
    1025
    리니지 리마스터 몹 스폰수 어디서 줄일 수 있나요?
    001001 2023.04.25 - 16:06 727
    1024
    전사팩 로봇가능
    노력하자 2023.03.16 - 19:14 1113
    1023
    2.7 자동 물약 소스
    퍽퍽띠 2022.11.18 - 00:40 1215
    1022
    2.0 자동칼질소스 (클래스 파일에서 빼왔습니다)
    drumlinek 2022.11.06 - 05:20 931
    1021
    npc가 인겜에서 채팅으로 말하기
    하늘마음 2022.10.06 - 10:04 320
    1020
    유저 아이피보는 소스
    캐빈N.01 2020.12.15 - 21:34 639
    1019
    인공지능
    캐빈N.01 2020.12.15 - 21:27 1125
    1018
    아데나가 19억이 되면 자동으로 1억으로 금괴로 바꾸기
    강우리 2020.12.12 - 01:48 995
    1017
    린올기반 휘장 각반 견갑 장비인식 안되는거 수정함
    신화서버 2020.11.17 - 01:48 295
    1016
    방어구 인챈트별 피 증가 소스
    LGTwins 2020.09.12 - 05:52 688
    1015
    장신구 옵션 변경
    LGTwins 2020.08.31 - 07:00 751
    1014
    자동물약
    legena 2020.07.05 - 02:30 2089
    1013
    리마스터팩 스냅퍼 개방 레벨설정 본섭화 수정(몽양님 요청)
    jstory 2020.06.13 - 07:22 764
    1012
    리마스터팩 룬마력제거 검사 적용안대는 부분 수정
    jstory 2020.06.10 - 04:05 287
    1011
    리마스터팩 쓸모없는 아이템 활용
    jstory 2020.06.10 - 04:01 731
    1010
    리마스터팩 요정 소울 엠피 수정
    jstory 2020.06.10 - 03:54 459
    1009
    리마스터팩 자동공지시간에 버프주기
    jstory 2020.06.10 - 03:15 404
    • 1 2 3 4 5 6 7 8 9 10 .. 22
    • / 22 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay