VX 스크립트

#==============================================================================
#  ■ Path Finding
#==============================================================================
# Near Fantastica
# Version 1
# 29.11.05
#==============================================================================
# Lets the Player or Event draw a path from an desonation to the source. This
# method is very fast and because the pathfinding is imbedded into the Game
# Character the pathfinding can be interrupted or redrawn at any time.
#==============================================================================
# Player :: $game_player.find_path(x,y)
# Event Script Call :: self.event.find_path(x,y)
# Event Movement Script Call :: self.find_path(x,y)
#==============================================================================
# [VX] Simple Mouse System Note: I edited the method
# character.passable?(x, y, direction) to character.passable?(x, y)
# according to change of this method in VX.
#------------------------------------------------------------------------------

class Game_Character
  #--------------------------------------------------------------------------
  alias nf_pf_game_character_initialize initialize
  alias nf_pf_game_character_update update
  #--------------------------------------------------------------------------
  attr_accessor :map
  attr_accessor :runpath
  #--------------------------------------------------------------------------
  def initialize
    nf_pf_game_character_initialize
    @map = nil
    @runpath = false
  end
  #--------------------------------------------------------------------------
  def update
    run_path if @runpath == true
    nf_pf_game_character_update
  end
  #--------------------------------------------------------------------------
  def run_path
    return if moving?
    step = @map[@x,@y]
    if step == 1
      @map = nil
      @runpath = false
      return
    end
    dir = rand(2)
    case dir
    when 0
      move_right if @map[@x+1,@y] == step - 1 and step != 0
      move_down if @map[@x,@y+1] == step - 1 and step != 0
      move_left if @map[@x-1,@y] == step -1 and step != 0
      move_up if @map[@x,@y-1] == step - 1 and step != 0
    when 1
      move_up if @map[@x,@y-1] == step - 1 and step != 0
      move_left if @map[@x-1,@y] == step -1 and step != 0
      move_down if @map[@x,@y+1] == step - 1 and step != 0
      move_right if @map[@x+1,@y] == step - 1 and step != 0
    end
  end
  #--------------------------------------------------------------------------
  def find_path(x,y)
    sx, sy = @x, @y
    result = setup_map(sx,sy,x,y)
    @runpath = result[0]
    @map = result[1]
    @map[sx,sy] = result[2] if result[2] != nil
  end
  #--------------------------------------------------------------------------
  def clear_path
    @map = nil
    @runpath = false
  end
  #--------------------------------------------------------------------------
  def setup_map(sx,sy,ex,ey)
    map = Table.new($game_map.width, $game_map.height)
    map[ex,ey] = 1
    old_positions = []
    new_positions = []
    old_positions.push([ex, ey])
    depth = 2
    depth.upto(100){|step|
      loop do
        break if old_positions[0] == nil
        x,y = old_positions.shift
        return [true, map, step] if x == sx and y+1 == sy
        if $game_player.passable?(x, y) and map[x,y + 1] == 0
          map[x,y + 1] = step
          new_positions.push([x,y + 1])
        end
        return [true, map, step] if x-1 == sx and y == sy
        if $game_player.passable?(x, y) and map[x - 1,y] == 0
          map[x - 1,y] = step
          new_positions.push([x - 1,y])
        end
        return [true, map, step] if x+1 == sx and y == sy
        if $game_player.passable?(x, y) and map[x + 1,y] == 0
          map[x + 1,y] = step
          new_positions.push([x + 1,y])
        end
        return [true, map, step] if x == sx and y-1 == sy
        if $game_player.passable?(x, y) and map[x,y - 1] == 0
          map[x,y - 1] = step
          new_positions.push([x,y - 1])
        end
      end
      old_positions = new_positions
      new_positions = []
    }
    return [false, nil, nil]
  end
end
 
class Game_Map
  #--------------------------------------------------------------------------
  alias pf_game_map_setup setup
  #--------------------------------------------------------------------------
  def setup(map_id)
    pf_game_map_setup(map_id)
    $game_player.clear_path
  end
end
 
class Game_Player
  #--------------------------------------------------------------------------
  alias pf_game_player_update update
  #--------------------------------------------------------------------------
  def update
    $game_player.clear_path if Input.dir4 != 0
    pf_game_player_update
  end
end
 
class Interpreter
  #--------------------------------------------------------------------------
  def event
    return $game_map.events[@event_id]
  end
end

-여기 까지-
메인 색쉰 위에 그냥 넣으세요.
이러면 캐릭터가 알아서 함

Comment '6'
  • ?
    제스킨 2008.10.08 17:50

    path finding..
    최소한 이 기능의 설명이나 스크린샷을 올려주셔야 어떤 스크립트 인지 알고 사용할것 아닙니까..

  • ?
    FireFighter 2008.10.09 21:13
    네... 해결 해 줄것입니다....
  • ?
    다크아머 2008.10.25 10:42
    옳소;;
  • profile
    모토키 2008.11.22 16:54
    ???
  • ?
    Soul Breaker 2009.01.07 16:15
    어떤 스크립트인가요..;
  • ?
    루시페르 2009.04.18 10:36
    마우스 시스템에서 아무데나 찍으면 주인공이 알아서
    가장 가까운 거리를 찾아가는 스크립트....
    이것만 올리시면 어떡하시라능...

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 6661
557 키입력 마우스 시스템 Simple Mouse System (수정) 42 Incubus 2008.05.24 5742
556 HUD HUD HP / MP 게이지바 스크립트 29 file 아방스 2009.07.02 5705
555 타이틀/게임오버 타이틀 업그레이드 byMOG 16 *ps인간 2009.01.26 5681
554 전투 KGC]전투형태 오버드라이브(턴알) 13 찌나 2008.03.08 5680
553 ((대박!)) 게임상의 모든 글자에 효과 주기.. 33 미카엘 2008.08.20 5612
552 메시지 소설풍(노벨풍) 문자 스크립트 31 file 맛난호빵 2011.01.03 5585
551 타이틀/게임오버 맵 타이틀 스크립트 48 아방스 2009.06.17 5584
550 전투 카운트배틀 시스템(스크립트 한글살짝번역) 10 file 카르와푸딩의아틀리에 2009.06.17 5536
549 온라인 VX Phoenix 온라인 스크립트 Ver 1.5 36 아방스 2009.07.02 5535
548 퀘스트 [패치]오메가 퀘스트 시스템 확장판 v.1.1 72 file 레오 2010.09.25 5509
547 전투 RPG Tankentai SBS 3.3 Kaduki Eng 2 아방스 2009.02.05 5480
546 파티 최대 파티 늘리는 스크립트 59 file 아방스 2008.03.09 5476
545 스킬 스킬 사용시 컷인 연출 (번역) 26 file 훈덕 2009.02.05 5416
544 장비 [스크립트]무기에 옵션을 부가하자 18 아방이 2008.01.29 5401
543 메시지 여러항목 선택지 ... Scene처리.. 23 file 허걱 2009.02.14 5300
542 HUD 맵이름 띄우는 스크립트 입니다. 33 시에란 2008.08.16 5298
541 Side View CBS 사이드뷰배틀 블리치버젼 13 RPGbooster 2008.10.11 5242
540 상점 보관함 스크립트 43 file 허걱 2009.02.02 5205
539 Tankentai SBS 2.8 업데이트 [사이드뷰 배틀시스템 ] 42 file RPGbooster 2008.10.08 5164
538 아이템 KGC]아이템 합성 29 file 찌나 2008.03.08 5162
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32