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 5398
57 메뉴 Adding Extra Menu in lafia Script 2 Man... 2008.10.29 1574
56 SephirothSpawn's Slanted Bars in VX 1.1 2 Man... 2008.10.28 1572
55 아이템 Item Price Changer 7 Man... 2008.10.28 1530
» Path Finding 6 Man... 2008.10.08 1530
53 Sprite Mover 2 Man... 2008.10.27 1529
52 타이틀/게임오버 Title Skip System : 타이틀 스킵 file 허걱 2014.03.19 1510
51 기타 Drop Options 1.1 by Modern Algebra 4 Alkaid 2010.09.16 1509
50 Skill Delay VX 4 Man... 2008.10.28 1503
49 변수/스위치 Variable Criticals Man... 2008.10.28 1480
48 메뉴 Etude87's Menu Editor for VX 25 습작 2015.01.14 1461
47 오디오 사운드 자동 변환 설정 rukan 2009.07.01 1461
46 타이틀/게임오버 Random Title Screen 2 Man... 2008.10.28 1454
45 무슨 스크립트인지 모름 7 Man... 2008.10.26 1453
44 이동 및 탈것 대쉬금지의 변경 1 rukan 2009.07.02 1449
43 (?스크립트) 스크립트 읽어서 그래픽 넣으세요.(영어 잘하는 사람만 권장...) 2 Man... 2008.10.27 1444
42 KID's Luck Systems(무슨 뜻?) 4 Man... 2008.10.27 1378
41 영어 잘하는 사람만 보세요..저도 모르겠음(무슨 스크립트인지) 3 Man... 2008.10.27 1372
40 기타 페이드 시간 변경 2 rukan 2009.07.01 1360
39 기타 Resize and Scale by OriginalWij 1 습작 2013.05.13 1349
38 기타 MSX - XP Characters on VX/VX Ace 2 Alkaid 2013.01.26 1345
Board Pagination Prev 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Next
/ 32