- # Sion 鼠标系统(SionMouseSystem)v2.31 (2014/2/20) 
- # 需求! 1,白菜组脚本基 (WhiteCabbageBase) v1.0+ 
- #       2,基础鼠标模组 (Sion_MouseBase) v1.0+ 
-   
-   
- # v2.32(2014/6/9)  优化了地图卷动指令、等待指令的衔接过程。 
- # v2.31(2014/2/20) 事件执行过程中,卷动地图后不会自动跳转到玩家位置了。 
-   
-   
- =begin 说明   
-   
-   主要功能 
-   
-     1,自动寻路,按住 D 键可以扩大寻路的范围 
-     2,变量输入框改良 
-     3,鼠标启动事件: 
-       在事件中加入“注释”:鼠标启动 
-       该事件将无法用其它方式启动,只能用鼠标左键点击启动 
-        
-   鼠标指针图片 MouseCursor.png 放入 Graphics\System 文件夹 
-   路径点指示图片 $Arrow.png 放入 Graphics\Characters 文件夹 
-   如果未放入会使用RM自带图片代替缺失文件 
-   
- =end 
-   
-   
-   
- #============================================================================== 
- # ■ 常数设置  
- #============================================================================== 
- module KsOfSion 
-   Clip_Cursor    = true    # 鼠标锁定在游戏窗口内,需要关闭设置为false 
-   Dbclick_Frame  = 15      # 双击的最大间隔帧数。在地图画面双击进行奔跑 
-   New_Scroll     = true    # 更改地图卷动方式,需要关闭设置为false 
-   Map_Scroll_Spd = 1.0     # 卷动速度 
-   Menu_Set_Pos   = true    # 打开菜单时将鼠标移动到光标处 
-   Break_Steps    = 30      # 鼠标寻路最大步数,防止路径太长导致卡帧 
- #                             “30” 是默认显示格子数 长(17) + 宽(13) 
-   Find_Path_Key  = :Z      # 扩大寻路范围至全地图按键 :Z 对应 D键 
- #                               RM几个内置的空键位 (:X = A)(:Y = S)(:Z = D) 
- end 
- # 
- class Move_Sign < Game_Character # ■ 用来显示路径点的类 
- attr_accessor :direction 
-   def init_public_members 
-     @character_name  = '!$Arrow'# 路径点箭头,置于.\Graphics\Characters文件夹 
-     @character_index = 0        # 图片索引。$开头的行走图设为0 
-     @move_speed      = 5        # 踏步速度 
-     @step_anime      = true     # 踏步动画(如果想使用静态图标就关闭这个) 
-     @opacity         = 255      # 不透明度 
-     @blend_type      = 0        # 图片合成方式,默认为0(正常) 
-     @direction       = 2        # 朝向,2 4 6 8 分别对应行走图第1 2 3 4 列 
-     @priority_type   = 1        # 优先级(默认与人物同级:1) 
-     # 如果 $Arrow.png 不在对应的文件夹内,弹出提示,并使用游戏一张内置的行走图 
-   
- #============================= 参数设置完毕 =================================== 
-     unless File.exist?('Graphics/Characters/' + @character_name + '.png') 
-       @character_name  = '!Flame' 
-       @character_index = 6 
-     end 
-     @direction_fix = false 
-     @move_frequency = 6 
-     @walk_anime = true 
-     @pattern = 1 
-     @through = true 
-     @bush_depth = 0 
-     @animation_id = 0 
-     @balloon_id = 0 
-     @transparent = true 
-     @id = 0 
-     @x = 0 
-     @y = 0 
-     @real_x = 0 
-     @real_y = 0 
-     @tile_id = 0 
-   end 
- end 
- #============================================================================== 
- # ■ SceneManager 
- #============================================================================== 
- class << SceneManager 
-   unless self.method_defined?(:sion_mouse_run) 
-     alias_method :sion_mouse_run, :run 
-     alias_method :sion_mouse_call, :call 
-     alias_method :sion_mouse_return, :return 
-   end 
-   def run 
-     Mouse.activate 
-     sion_mouse_run 
-   end 
-   def call(scene_class, *args) 
-     $game_map.prepare_reset_mouse_pos if @scene.instance_of?(Scene_Map) 
-     sion_mouse_call(scene_class, *args) 
-   end 
-   def return 
-     sion_mouse_return 
-     $game_map.reset_mouse_pos if KsOfSion::Menu_Set_Pos && 
-       @scene.instance_of?(Scene_Map) 
-   end 
- end 
- class << Mouse 
-   attr_reader :sprite 
- end 
- class << Input 
-   alias_method :sion_mouse_press?,   :press? 
-   alias_method :sion_mouse_trigger?, :trigger? 
-   alias_method :sion_mouse_repeat?,  :repeat? 
-   unless self.method_defined?(:sion_mouse_update) 
-     alias_method :sion_mouse_update, :update 
-   end 
-   def update 
-     Mouse.update 
-     sion_mouse_update 
-   end 
-   def press?(key) 
-     return true if sion_mouse_press?(key) 
-     return Mouse.press?(:L) if key == :C 
-     return Mouse.press?(:R) if key == :B 
-     return false 
-   end 
-   def trigger?(key) 
-     return true if sion_mouse_trigger?(key) 
-     return Mouse.trigger?(:L) if key == :C 
-     return Mouse.trigger?(:R) if key == :B 
-     return false 
-   end 
-   def repeat?(key) 
-     return true if sion_mouse_repeat?(key) 
-     return Mouse.repeat?(:L) if key == :C 
-     return Mouse.repeat?(:R) if key == :B 
-     return false 
-   end 
- end 
-   
-   
- #============================================================================== 
- # ■ Window_Selectable 
- #------------------------------------------------------------------------------ 
- #  拥有光标移动、滚动功能的窗口 
- #============================================================================== 
- class Window_Selectable 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_initialize initialize 
-   def initialize(x, y, width, height) 
-     sion_mouse_initialize(x, y, width, height) 
-     @move_state = 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_update update 
-   def update 
-     sion_mouse_update 
-     update_mouse_cursor 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 按下确定键的处理 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_process_ok process_ok 
-   def process_ok 
-     return if Mouse.trigger?(:L) && mouse_out_rect? 
-     sion_mouse_process_ok 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断鼠标是位于光标矩形处 
-   #-------------------------------------------------------------------------- 
-   def mouse_out_rect? 
-     if viewport.nil? 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     mouse_rx = ox + Mouse.x - (x + vp_x + standard_padding ) 
-     mouse_ry = oy + Mouse.y - (y + vp_y + standard_padding ) 
-     return cursor_rect.x > mouse_rx || 
-            cursor_rect.y > mouse_ry || 
-            cursor_rect.x + cursor_rect.width < mouse_rx || 
-            cursor_rect.y + cursor_rect.height< mouse_ry 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 启动后设置鼠标到index位置 
-   #-------------------------------------------------------------------------- 
-   def activate 
-     @need_set_pos = true if KsOfSion::Menu_Set_Pos 
-     super 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新鼠标和光标的位置 
-   #-------------------------------------------------------------------------- 
-   def update_mouse_cursor 
-     if active 
-       if @need_set_pos 
-         @need_set_pos = nil 
-         set_mouse_pos 
-       elsif cursor_movable? 
-         Input.dir4.zero? ? set_cursor : set_mouse_pos 
-       end 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 将光标设置到鼠标所在的位置,附带卷动菜单的功能 
-   #-------------------------------------------------------------------------- 
-   def set_cursor 
-     mouse_row, mouse_col = mouse_window_area 
-     if    mouse_row == -1 
-       @move_state += 1 if need_scroll? 
-       cursor_up if (@move_state - 1) % 4 == 0 && !is_horzcommand? 
-     elsif mouse_row == -2 
-       @move_state += 1 if need_scroll? 
-       cursor_down if (@move_state - 1) % 4 == 0 && !is_horzcommand? 
-     elsif mouse_col == -1 
-       @move_state += 1 if need_scroll? 
-       cursor_left if (@move_state - 1) % 16 == 0 && is_horzcommand? 
-     elsif mouse_col == -2 
-       @move_state += 1 if need_scroll? 
-       cursor_right if (@move_state - 1) % 16 == 0 && is_horzcommand? 
-     else 
-       @move_state = 0 
-       new_index = (top_row + mouse_row) * col_max + mouse_col 
-       select(new_index) if new_index < item_max && new_index != @index 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断鼠标位于菜单的第几行、第几列 
-   #-------------------------------------------------------------------------- 
-   def mouse_window_area 
-     if viewport.nil? # necessary! 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     mouse_x = Mouse.x 
-     mouse_y = Mouse.y 
-     item_x1 = vp_x + x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     item_x2 = vp_x + x - standard_padding + width 
-     item_y2 = vp_y + y - standard_padding + height 
-     if mouse_x < item_x1 
-       mouse_col = -1 
-     elsif mouse_x > item_x2 
-       mouse_col = -2 
-     else 
-       mouse_col = col_max * (mouse_x - item_x1) / (item_x2 - item_x1) 
-     end 
-     if mouse_y < item_y1 
-       mouse_row = -1 
-     elsif mouse_y > item_y2 
-       mouse_row = -2 
-     else 
-       mouse_row = page_row_max * (mouse_y - item_y1 - 1) / (item_y2 - item_y1) 
-     end 
-     return mouse_row, mouse_col 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 方向键移动光标时将鼠标移动到对应的光标位置 
-   #-------------------------------------------------------------------------- 
-   def set_mouse_pos 
-     if viewport.nil? # necessary! 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     item_x1 = vp_x + x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     get_index = @index < 0 ? 0 : @index  
-     row = get_index / col_max - top_row 
-     col = get_index % col_max 
-     new_x = item_x1 + item_width * (col + 0.5) 
-     new_y = item_y1 + item_height * (row + 0.5) 
-     Mouse.set_pos(new_x, new_y) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断菜单是否需要卷动 
-   #-------------------------------------------------------------------------- 
-   def need_scroll? 
-     item_max > col_max * page_row_max 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断是否为水平卷动菜单 
-   #-------------------------------------------------------------------------- 
-   def is_horzcommand? 
-     return false 
-   end 
- end 
-   
- class Window_HorzCommand 
-   #-------------------------------------------------------------------------- 
-   # ● 判断是否为水平卷动菜单 
-   #-------------------------------------------------------------------------- 
-   def is_horzcommand? 
-     return true 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_NameInput 
- #------------------------------------------------------------------------------ 
- #  名字输入画面中,选择文字的窗口。 
- #============================================================================== 
- class Window_NameInput 
-   #-------------------------------------------------------------------------- 
-   # ● 设置列数 
-   #-------------------------------------------------------------------------- 
-   def col_max 
-     return 10 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 设置填充的Item个数 
-   #-------------------------------------------------------------------------- 
-   def item_max 
-     return 90 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 设置填充的Item个数 
-   #-------------------------------------------------------------------------- 
-   def item_width 
-     return 32 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断鼠标位于菜单的第几行、第几列 
-   #-------------------------------------------------------------------------- 
-   def mouse_window_area 
-     if viewport.nil? 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     mouse_x = Mouse.x 
-     mouse_y = Mouse.y 
-     item_x1 = vp_x + x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     item_x2 = vp_x + x - standard_padding + width 
-     item_y2 = vp_y + y - standard_padding + height 
-     if mouse_x < item_x1 
-       mouse_col = -1 
-     elsif mouse_x > item_x2 
-       mouse_col = -2 
-     elsif mouse_x < item_x1 + 160 
-       mouse_col = (mouse_x - item_x1)/32 
-     elsif mouse_x > item_x2 - 160 
-       mouse_col = 9 - (item_x2 - mouse_x)/32 
-     else 
-       mouse_col = mouse_x > x + width/2 ? 5 : 4 
-     end 
-     if mouse_y < item_y1 
-       mouse_row = -1 
-     elsif mouse_y > item_y2 
-       mouse_row = -2 
-     else 
-       mouse_row = page_row_max * (mouse_y - item_y1 - 1)/(item_y2 - item_y1) 
-     end 
-     return mouse_row, mouse_col 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 方向键移动光标时将鼠标移动到对应的光标位置 
-   #-------------------------------------------------------------------------- 
-   def set_mouse_pos 
-     if viewport.nil? # necessary! 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     item_x1 = vp_x + x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     get_index = @index < 0 ? 0 : @index  
-     row = get_index / col_max - top_row 
-     col = get_index % col_max 
-     new_x = item_x1 + item_width * (col + 0.5) 
-     new_y = item_y1 + item_height * (row + 0.5) 
-     new_x += 14 if col > 4 
-     Mouse.set_pos(new_x, new_y) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_NumberInput 
- #------------------------------------------------------------------------------ 
- #  重写了数值输入的方法以适应鼠标 
- #============================================================================== 
- class Window_NumberInput < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ● 定义实例变量 
-   #-------------------------------------------------------------------------- 
-   attr_reader :extra_window 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_initialize initialize 
-   def initialize(arg) 
-     sion_mouse_initialize(arg) 
-     create_extra_window 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 启动 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_start start 
-   def start 
-     sion_mouse_start 
-     deactivate 
-     extra_start 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 创建新的数值输入窗口 
-   #-------------------------------------------------------------------------- 
-   def create_extra_window 
-     @extra_window = Window_NumberInput_Ex.new 
-     @extra_window.x = (Graphics.width - @extra_window.width) / 2 
-     @extra_window.number_proc  = Proc.new {|n| @number = n } 
-     @extra_window.index_proc   = Proc.new {|n| @index = n } 
-     @extra_window.close_proc   = Proc.new { close } 
-     @extra_window.refresh_proc = Proc.new { refresh } 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 激活新窗口 
-   #-------------------------------------------------------------------------- 
-   def extra_start 
-     case $game_message.position 
-       when 0; @extra_window.y = y + height + 4 
-       when 1; @extra_window.y = @message_window.y - @extra_window.height - 8 
-       when 2; @extra_window.y = y - @extra_window.height - 4 
-       else  ; @extra_window.y = 8 
-     end 
-     @extra_window.variable_id = $game_message.num_input_variable_id 
-     @extra_window.digits_max  = @digits_max 
-     @extra_window.number      = @number 
-     @extra_window.open 
-     @extra_window.activate 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新 
-   #-------------------------------------------------------------------------- 
-   def update 
-     super 
-     @extra_window.update 
-     update_cursor 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 关闭窗口 
-   #-------------------------------------------------------------------------- 
-   def close 
-     super 
-     @extra_window.close 
-     @extra_window.deactivate 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_NumberInput_Ex 
- #------------------------------------------------------------------------------ 
- #  新的数值输入窗口(NewClass) 
- #============================================================================== 
- class Window_NumberInput_Ex < Window_Selectable 
-   #-------------------------------------------------------------------------- 
-   # ● 定义实例变量 
-   #-------------------------------------------------------------------------- 
-   attr_accessor :number_proc 
-   attr_accessor :index_proc 
-   attr_accessor :close_proc 
-   attr_accessor :refresh_proc 
-   attr_accessor :number 
-   attr_accessor :digits_max 
-   attr_accessor :variable_id 
-   #-------------------------------------------------------------------------- 
-   # ● 数字表 
-   #-------------------------------------------------------------------------- 
-   TABLE = [  7,  8,  9, 
-              4,  5,  6, 
-              1,  2,  3, 
-             '←',0,'确定',] 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化对象 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     super(0, 0, 120, fitting_height(4)) 
-     self.openness = 0 
-     @index = 0 
-     @number = 0 
-     @old_window_index = 0 
-     @digits_max = 0 
-     12.times {|i| draw_text(item_rect(i), TABLE[i], 1) } 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取项目的绘制矩形 
-   #-------------------------------------------------------------------------- 
-   def item_rect(index) 
-     rect = Rect.new 
-     rect.x = index % 3 * 32 
-     rect.y = index / 3 * line_height 
-     rect.width = 32 
-     rect.height = line_height 
-     return rect 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 将光标设置到鼠标所在的位置 
-   #-------------------------------------------------------------------------- 
-   def set_cursor 
-     mouse_row, mouse_col = mouse_window_area 
-     if mouse_row >= 0 && mouse_col >= 0 
-       new_index = mouse_row * 3 + mouse_col 
-       select(new_index) if new_index <= 11 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断鼠标位于新数值输入窗口的第几行、第几列 
-   #-------------------------------------------------------------------------- 
-   def mouse_window_area 
-     if viewport.nil? 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     mouse_x = Mouse.x 
-     mouse_y = Mouse.y 
-     item_x1 = vp_x + x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     item_x2 = vp_x + x - standard_padding + width 
-     item_y2 = vp_y + y - standard_padding + height 
-     if mouse_x < item_x1 
-       mouse_col = -1 
-     elsif mouse_x > item_x2 
-       mouse_col = -2 
-     else 
-       mouse_col = (mouse_x - item_x1) / 32 
-     end 
-     if mouse_y < item_y1 
-       mouse_row = -1 
-     elsif mouse_y > item_y2 
-       mouse_row = -2 
-     else 
-       mouse_row = 4 * (mouse_y - item_y1 - 1) / (item_y2 - item_y1) 
-     end 
-     return mouse_row, mouse_col 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取文字 
-   #-------------------------------------------------------------------------- 
-   def get_number 
-     return false if @index == 9 || @index == 11 
-     return TABLE[@index] 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判定光标位置是否在“退格”上 
-   #-------------------------------------------------------------------------- 
-   def is_delete? 
-     @index == 9 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判定光标位置是否在“确定”上 
-   #-------------------------------------------------------------------------- 
-   def is_ok? 
-     @index == 11 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新光标 
-   #-------------------------------------------------------------------------- 
-   def update_cursor 
-     cursor_rect.set(item_rect(@index)) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判定光标是否可以移动 
-   #-------------------------------------------------------------------------- 
-   def cursor_movable? 
-     active 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 光标向下移动 
-   #     wrap : 允许循环 
-   #-------------------------------------------------------------------------- 
-   def cursor_down(wrap) 
-     if @index < 9 or wrap 
-       @index = (index + 3) % 12 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 光标向上移动 
-   #     wrap : 允许循环 
-   #-------------------------------------------------------------------------- 
-   def cursor_up(wrap) 
-     if @index >= 3 or wrap 
-       @index = (index + 9) % 12 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 光标向右移动 
-   #     wrap : 允许循环 
-   #-------------------------------------------------------------------------- 
-   def cursor_right(wrap) 
-     if @index % 3 < 2 
-       @index += 1 
-     elsif wrap 
-       @index -= 2 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 光标向左移动 
-   #     wrap : 允许循环 
-   #-------------------------------------------------------------------------- 
-   def cursor_left(wrap) 
-     if @index % 3 > 0 
-       @index -= 1 
-     elsif wrap 
-       @index += 2 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 处理光标的移动 
-   #-------------------------------------------------------------------------- 
-   def process_cursor_move 
-     super 
-     update_cursor 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● “确定”、“删除字符”和“取消输入”的处理 
-   #-------------------------------------------------------------------------- 
-   def process_handling 
-     return unless open? && active 
-     process_jump if Input.trigger?(:A) 
-     process_back if Input.repeat?(:B) 
-     process_ok   if Input.trigger?(:C) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 跳转“确定” 
-   #-------------------------------------------------------------------------- 
-   def process_jump 
-     if @index != 11 
-       @index = 11 
-       Sound.play_cursor 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 后退一个字符 
-   #-------------------------------------------------------------------------- 
-   def process_back 
-     Sound.play_cancel 
-     place = 10 ** (@digits_max - 1 - @old_window_index) 
-     n = (@number / place) % 10 
-     @number -= n * place 
-     @number_proc.call(@number) 
-     @old_window_index -= 1 if @old_window_index > 0 
-     @index_proc.call(@old_window_index) 
-     @refresh_proc.call 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 按下确定键时的处理 
-   #-------------------------------------------------------------------------- 
-   def process_ok 
-     return if Mouse.trigger?(:L) && mouse_out_rect? 
-     if get_number 
-       Sound.play_cursor 
-       place = 10 ** (@digits_max - 1 - @old_window_index) 
-       n = get_number - (@number / place) % 10 
-       @number += n * place 
-       @number_proc.call(@number) 
-       @old_window_index += 1 if @old_window_index < @digits_max - 1 
-       @index_proc.call(@old_window_index) 
-       @refresh_proc.call 
-     elsif is_delete? 
-       process_back 
-     elsif is_ok? 
-       on_input_ok 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 确定 
-   #-------------------------------------------------------------------------- 
-   def on_input_ok 
-     @index = 0 
-     @old_window_index = 0 
-     $game_variables[@variable_id] = @number 
-     Sound.play_ok 
-     @close_proc.call 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 方向键移动光标时将鼠标移动到对应的光标位置 
-   #-------------------------------------------------------------------------- 
-   def set_mouse_pos 
-     if viewport.nil? # necessary! 
-       vp_x, vp_y = 0, 0 
-     else 
-       vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     item_x1 = vp_x + x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     get_index = @index < 0 ? 0 : @index  
-     new_x = item_x1 + 32 * (get_index % 3 + 0.5) 
-     new_y = item_y1 + 24 * (get_index / 3 + 0.5) 
-     Mouse.set_pos(new_x, new_y) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_Message 
- #------------------------------------------------------------------------------ 
- #  显示文字信息的窗口。 
- #============================================================================== 
- class Window_Message < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ● 处理数值的输入(覆盖原方法) 
-   #-------------------------------------------------------------------------- 
-   def input_number 
-     @number_window.start 
-     Fiber.yield while @number_window.extra_window.active 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_PartyCommand 
- #------------------------------------------------------------------------------ 
- #  战斗画面中,选择“战斗/撤退”的窗口。 
- #============================================================================== 
- class Window_PartyCommand < Window_Command 
-   #-------------------------------------------------------------------------- 
-   # ● 方向键移动光标时将鼠标移动到对应的光标位置 
-   #-------------------------------------------------------------------------- 
-   def set_mouse_pos 
-     if viewport.nil? 
-       vp_x, vp_y = 0, 0 
-     else 
-       #vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     item_x1 = x + standard_padding  
-     item_y1 = vp_y + y + standard_padding 
-     get_index = @index < 0 ? 0 : @index  
-     row = get_index / col_max - top_row 
-     col = get_index % col_max 
-     new_x = item_x1 + item_width * (col + 0.5) 
-     new_y = item_y1 + item_height * (row + 0.5) 
-     Mouse.set_pos(new_x, new_y) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_ActorCommand 
- #------------------------------------------------------------------------------ 
- #  战斗画面中,选择角色行动的窗口。 
- #============================================================================== 
- class Window_ActorCommand < Window_Command 
-   #-------------------------------------------------------------------------- 
-   # ● 方向键移动光标时将鼠标移动到对应的光标位置 
-   #-------------------------------------------------------------------------- 
-   def set_mouse_pos 
-     if viewport.nil? 
-       vp_x, vp_y = 0, 0 
-     else 
-       #vp_x = viewport.rect.x - viewport.ox 
-       vp_y = viewport.rect.y - viewport.oy 
-     end 
-     item_x1 = Graphics.width - width + standard_padding 
-     item_y1 = vp_y + y + standard_padding 
-     get_index = @index < 0 ? 0 : @index  
-     row = get_index / col_max - top_row 
-     col = get_index % col_max 
-     new_x = item_x1 + item_width * (col + 0.5) 
-     new_y = item_y1 + item_height * (row + 0.5) 
-     Mouse.set_pos(new_x, new_y) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Game_Player 
- #------------------------------------------------------------------------------ 
- #  处理玩家人物的类。拥有事件启动的判定、地图的卷动等功能。 
- #   本类的实例请参考 $game_player 。 
- #============================================================================== 
- class Game_Player < Game_Character 
-   #-------------------------------------------------------------------------- 
-   # ● 由方向移动(覆盖原方法) 
-   #-------------------------------------------------------------------------- 
-   def move_by_input 
-     return if !movable? || $game_map.interpreter.running? 
-     if Input.dir4 > 0 
-       move_straight(Input.dir4)  
-       reset_move_path 
-     else 
-       move_by_mouse 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 非移动中的处理(覆盖原方法) 
-   #     last_moving : 此前是否正在移动 
-   #-------------------------------------------------------------------------- 
-   def update_nonmoving(last_moving) 
-     return if $game_map.interpreter.running? 
-     if last_moving 
-       $game_party.on_player_walk 
-       return if check_touch_event 
-     end 
-     if movable? && Input.trigger?(:C) 
-       return if Mouse.press?(:L) # 防止按下鼠标左键绘制路径时触发事件或载具切换 
-       return if get_on_off_vehicle 
-       return if check_action_event 
-     end 
-     update_encounter if last_moving 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判定是否跑步状态(覆盖原方法) 
-   #-------------------------------------------------------------------------- 
-   def dash? 
-     return false if @move_route_forcing 
-     return false if $game_map.disable_dash? 
-     return false if vehicle 
-     return Input.press?(:A) || @mouse_dash 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_initialize initialize 
-   def initialize 
-     sion_mouse_initialize 
-     reset_move_path 
-     @moveto_x = 0 
-     @moveto_y = 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_update update 
-   def update 
-     sion_mouse_update 
-     clear_unreachable_sign 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 处理卷动 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_update_scroll update_scroll 
-   def update_scroll(last_real_x, last_real_y) 
-     return if $game_map.scrolling? || $game_map.wait_scroll 
-     KsOfSion::New_Scroll ? new_update_scroll : 
-       sion_mouse_update_scroll(last_real_x, last_real_y) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 重置移动路径相关信息 
-   #-------------------------------------------------------------------------- 
-   def reset_move_path 
-     @mouse_dash = false 
-     @mouse_move_path = [] 
-     $mouse_move_sign.transparent = true 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 新的卷动地图方法 
-   #-------------------------------------------------------------------------- 
-   def new_update_scroll 
-     return if $game_message.busy? || $game_message.visible 
-     horz_speed = 2 ** @move_speed * KsOfSion::Map_Scroll_Spd / Graphics.width 
-     vert_speed = 2 ** @move_speed * KsOfSion::Map_Scroll_Spd / Graphics.height 
-     ax = $game_map.adjust_x(@real_x) 
-     ay = $game_map.adjust_y(@real_y) 
-     if    ay>center_y; $game_map.new_scroll_down (vert_speed * (ay - center_y)) 
-     elsif ay<center_y; $game_map.new_scroll_up   (vert_speed * (center_y - ay)) 
-     end 
-     if    ax>center_x; $game_map.new_scroll_right(horz_speed * (ax - center_x)) 
-     elsif ax<center_x; $game_map.new_scroll_left (horz_speed * (center_x - ax)) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 消除不能抵达图标 
-   #-------------------------------------------------------------------------- 
-   def clear_unreachable_sign 
-     return if Mouse.press?(:L) 
-     if $mouse_move_sign.direction == 4 && Mouse.click_count % 20 == 0 
-       $mouse_move_sign.transparent = true 
-       $mouse_move_sign.direction = 2 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 由鼠标移动 
-   #-------------------------------------------------------------------------- 
-   def move_by_mouse 
-     unless @mouse_move_path.empty? # 移动路线数组不为空则执行移动 
-       dir = @mouse_move_path.shift 
-       if passable?(x, y, dir) && !@mouse_move_path.empty? 
-         move_straight(dir) 
-       elsif @mouse_move_path.empty? # 判断是否是最后一步 
-         x2 = $game_map.round_x_with_direction(x, dir) 
-         y2 = $game_map.round_y_with_direction(y, dir) 
-         move_straight(dir) unless dir.zero? 
-         unless @x == x2 && @y == y2 # 如果移动失败,检查是否启动前方事件 
-           check_event_trigger_there([0,1,2]) 
-           get_on_off_vehicle unless $game_map.setup_starting_event 
-         end 
-         $mouse_move_sign.transparent = true if $mouse_move_sign.direction == 2 
-         @mouse_dash = false 
-       elsif @mouse_move_path[0].zero? # 目标点无法抵达,调整朝向→目标点 
-         @mouse_move_path.shift 
-         @direction = dir 
-         @mouse_dash = false 
-       else 
-         draw_move_path 
-       end 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 地图界面按下鼠标左键的处理 
-   #-------------------------------------------------------------------------- 
-   def left_button_action 
-     @moveto_x = $game_map.mouse_map_x 
-     @moveto_y = $game_map.mouse_map_y 
-     return mouse_same_pos_action if @moveto_x == @x && @moveto_y == @y 
-     return if mouse_trigger_event? 
-     return unless drawable? 
-     $mouse_move_sign.moveto(@moveto_x, @moveto_y) # 移动路径点指示图 
-     @mouse_dash = true if Mouse.double_click? # 双击冲刺 
-     return if Mouse.left_state % 10 != 1 # 按住鼠标左键10帧绘制1次路径 
-     for i in 1..4 # 判断目标点是否为角色周围四点 
-       if @x == $game_map.round_x_with_direction(@moveto_x, i * 2) && 
-          @y == $game_map.round_y_with_direction(@moveto_y, i * 2) 
-         $mouse_move_sign.transparent = true 
-         @mouse_move_path = [10 - i * 2] 
-         return 
-       end 
-     end 
-     draw_move_path 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 鼠标位置与玩家一致的处理 
-   #-------------------------------------------------------------------------- 
-   def mouse_same_pos_action 
-     unless moving? || (vehicle && !vehicle.movable?) 
-       check_event_trigger_here([0]) # 判断是否触发重合点事件 
-       get_on_off_vehicle if !$game_map.setup_starting_event &&  
-         $game_map.airship.pos?(@x, @y)  # 判断是否要上、下飞艇 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● trigger 鼠标左键的处理 
-   #-------------------------------------------------------------------------- 
-   def mouse_trigger_event? 
-     if Mouse.trigger?(:L) 
-       $game_map.events_xy(@moveto_x, @moveto_y).each {|event| 
-         if event.mouse_start? 
-           event.start 
-           return true 
-         end 
-       } 
-     end 
-     return false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制移动路径 @array[move_directions...] 
-   #-------------------------------------------------------------------------- 
-   def draw_move_path 
-     @mouse_move_path =  
-     case @vehicle_type 
-     when :walk; draw_walk_path 
-     when :boat; draw_boat_path 
-     when :ship; draw_ship_path 
-     when :airship; draw_air_path 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判定是否可以绘制移动路径 
-   #-------------------------------------------------------------------------- 
-   def drawable? 
-     return false if @move_route_forcing || @followers.gathering? 
-     return false if @vehicle_getting_on || @vehicle_getting_off 
-     return true 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制行走路径 @array[move_directions...] 
-   #-------------------------------------------------------------------------- 
-   def draw_walk_path 
-     # 准备绘制路径表格 
-     sheet = Table.new($game_map.width, $game_map.height) 
-     reversed_chase_path  = []; chase_path  = [] 
-     reversed_chase_point = []; chase_point = [] 
-     new_start_points = [x, y]; new_end_points = [@moveto_x, @moveto_y] 
-     sheet[x, y] = 1;           sheet[@moveto_x, @moveto_y] = 2 
-     reach_point = false 
-     step = 3 
-     loop do #loop1 开始填充表格 
-      draw_path = false 
-      check_points = new_start_points 
-      new_start_points = [] 
-       loop do #loop2 从起点开始正向填充 
-         point_x = check_points.shift 
-         break if point_x == nil 
-         point_y = check_points.shift 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1) 
-                     # 判断路径是否连通 
-         path_step = step - 1 
-         if sheet[left_x, point_y] == path_step     && 
-            $game_map.passable?(left_x, point_y, 6) && 
-            $game_map.passable?(point_x, point_y, 4) 
-           chase_path.push(4) 
-           chase_point = [left_x, point_y] 
-           reversed_chase_point = [point_x, point_y] 
-           reach_point = true; break 
-         elsif sheet[right_x, point_y] == path_step     && 
-               $game_map.passable?(right_x, point_y, 4) && 
-               $game_map.passable?(point_x, point_y, 6) 
-             chase_path.push(6) 
-             chase_point = [right_x, point_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, up_y] == path_step     && 
-               $game_map.passable?(point_x, up_y, 2) && 
-               $game_map.passable?(point_x, point_y, 8) 
-             chase_path.push(8) 
-             chase_point = [point_x, up_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, down_y] == path_step     && 
-               $game_map.passable?(point_x, down_y, 8) && 
-               $game_map.passable?(point_x, point_y, 2) 
-             chase_path.push(2) 
-             chase_point = [point_x, down_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         end 
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0              && 
-            $game_map.passable?(left_x, point_y, 6)  && 
-            !collide_with_events?(left_x, point_y)   && 
-            $game_map.passable?(point_x, point_y, 4) && 
-            !collide_with_vehicles?(left_x, point_y) #judge_end 
-           sheet[left_x, point_y] = step 
-           draw_path = true 
-           new_start_points.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0             && 
-            $game_map.passable?(right_x, point_y, 4) && 
-            !collide_with_events?(right_x, point_y)  && 
-            $game_map.passable?(point_x, point_y, 6) && 
-            !collide_with_vehicles?(right_x, point_y)#judge_end 
-           sheet[right_x, point_y] = step 
-           draw_path = true 
-           new_start_points.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0                && 
-            $game_map.passable?(point_x, up_y, 2)    && 
-            !collide_with_events?(point_x, up_y)     && 
-            $game_map.passable?(point_x, point_y, 8) && 
-            !collide_with_vehicles?(point_x, up_y)   #judge_end 
-           sheet[point_x, up_y] = step 
-           draw_path = true 
-           new_start_points.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0              && 
-            $game_map.passable?(point_x, down_y, 8)  && 
-            !collide_with_events?(point_x, down_y)   && 
-            $game_map.passable?(point_x, point_y, 2) && 
-            !collide_with_vehicles?(point_x, down_y) #judge_end 
-           sheet[point_x, down_y] = step 
-           draw_path = true 
-           new_start_points.push(point_x, down_y) 
-         end 
-       end#endOfLoop2 
-       break if !draw_path || reach_point 
-       draw_path = false 
-       check_points = new_end_points 
-       new_end_points = [] 
-       step += 1 
-       break if step > KsOfSion::Break_Steps && 
-                !Input.press?(KsOfSion::Find_Path_Key) 
-       loop do #loop3 从终点开始反向填充 
-         point_x = check_points.shift 
-         break if point_x == nil 
-         point_y = check_points.shift 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1) 
-         # 判断路径是否连通 
-         path_step = step - 1 
-         if sheet[left_x, point_y] == path_step     && 
-            $game_map.passable?(left_x, point_y, 6) && 
-            $game_map.passable?(point_x, point_y, 4) 
-           chase_path.push(6) 
-           chase_point = [point_x, point_y] 
-           reversed_chase_point = [left_x, point_y] 
-           reach_point = true; break 
-         elsif sheet[right_x, point_y] == path_step     && 
-               $game_map.passable?(right_x, point_y, 4) && 
-               $game_map.passable?(point_x, point_y, 6) 
-             chase_path.push(4) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [right_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, up_y] == path_step     && 
-               $game_map.passable?(point_x, up_y, 2) && 
-               $game_map.passable?(point_x, point_y, 8) 
-             chase_path.push(2) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [point_x, up_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, down_y] == path_step     && 
-               $game_map.passable?(point_x, down_y, 8) && 
-               $game_map.passable?(point_x, point_y, 2) 
-             chase_path.push(8) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [point_x, down_y] 
-             reach_point = true; break 
-         end 
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0              && 
-            $game_map.passable?(left_x, point_y, 6)  && 
-            !collide_with_events?(left_x, point_y)   && 
-            $game_map.passable?(point_x, point_y, 4) && 
-            !collide_with_vehicles?(left_x, point_y) #judge_end 
-           sheet[left_x, point_y] = step 
-           draw_path = true 
-           new_end_points.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0             && 
-            $game_map.passable?(right_x, point_y, 4) && 
-            !collide_with_events?(right_x, point_y)  && 
-            $game_map.passable?(point_x, point_y, 6) && 
-            !collide_with_vehicles?(right_x, point_y)#judge_end 
-           sheet[right_x, point_y] = step 
-           draw_path = true 
-           new_end_points.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0                && 
-            $game_map.passable?(point_x, up_y, 2)    && 
-            !collide_with_events?(point_x, up_y)     && 
-            $game_map.passable?(point_x, point_y, 8) && 
-            !collide_with_vehicles?(point_x, up_y)   #judge_end 
-           sheet[point_x, up_y] = step 
-           draw_path = true 
-           new_end_points.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0              && 
-            $game_map.passable?(point_x, down_y, 8)  && 
-            !collide_with_events?(point_x, down_y)   && 
-            $game_map.passable?(point_x, point_y, 2) && 
-            !collide_with_vehicles?(point_x, down_y) #judge_end 
-           sheet[point_x, down_y] = step 
-           draw_path = true 
-           new_end_points.push(point_x, down_y) 
-         end 
-       end#endOfLoop3 
-       break if !draw_path || reach_point 
-       step += 1 
-     end #endOfLoop1 路径表格填充完毕 
-     $mouse_move_sign.transparent = false 
-     # 判断指定地点能否抵达 
-     if reach_point 
-       $mouse_move_sign.direction = 2 
-     else 
-       return not_reach_point 
-     end 
-     # 根据路径表格绘制最短移动路径(反向) 
-     steps = step / 2 * 2 + 1 
-     loop_times = step / 2 
-     point_x, point_y = reversed_chase_point[0], reversed_chase_point[1] 
-     for i in 1..loop_times # forLoop 
-     steps -= 2 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x - 1), point_y, 6) && 
-             $game_map.passable?(point_x, point_y, 4)                #judge_end 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x + 1), point_y, 4) && 
-             $game_map.passable?(point_x, point_y, 6)                #judge_end 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y + 1), 8) && 
-             $game_map.passable?(point_x, point_y, 2)                #judge_end 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y - 1), 2) && 
-             $game_map.passable?(point_x, point_y, 8)                #judge_end 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     else 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y + 1), 8) && 
-             $game_map.passable?(point_x, point_y, 2)                #judge_end 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y - 1), 2) && 
-             $game_map.passable?(point_x, point_y, 8)                #judge_end 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x - 1), point_y, 6) && 
-             $game_map.passable?(point_x, point_y, 4)                #judge_end 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x + 1), point_y, 4) && 
-             $game_map.passable?(point_x, point_y, 6)                #judge_end 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     end 
-     end #endOfForLoop 
-     # 根据路径表格绘制最短移动路径(正向) 
-     steps = step / 2 * 2 
-     loop_times = step / 2 
-     point_x, point_y = chase_point[0], chase_point[1] 
-     for i in 2..loop_times # forLoop 
-     steps -= 2 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y + 1), 8) && 
-             $game_map.passable?(point_x, point_y, 2)                #judge_end 
-         chase_path.push(2) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y - 1), 2) && 
-             $game_map.passable?(point_x, point_y, 8)                #judge_end 
-         chase_path.push(8) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x - 1), point_y, 6) && 
-             $game_map.passable?(point_x, point_y, 4)                #judge_end 
-         chase_path.push(4) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x + 1), point_y, 4) && 
-             $game_map.passable?(point_x, point_y, 6)                #judge_end 
-         chase_path.push(6) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     else 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x - 1), point_y, 6) && 
-             $game_map.passable?(point_x, point_y, 4)                #judge_end 
-         chase_path.push(4) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps         && 
-             $game_map.passable?($game_map.round_x(point_x + 1), point_y, 4) && 
-             $game_map.passable?(point_x, point_y, 6)                #judge_end 
-         chase_path.push(6) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y + 1), 8) && 
-             $game_map.passable?(point_x, point_y, 2)                #judge_end 
-         chase_path.push(2) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps         && 
-             $game_map.passable?(point_x, $game_map.round_y(point_y - 1), 2) && 
-             $game_map.passable?(point_x, point_y, 8)                #judge_end 
-         chase_path.push(8) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     end 
-     end #endOfForLoop 
-     reversed_chase_path.reverse + chase_path 
-   end#walk 
-   ## 
-   def not_reach_point 
-     $mouse_move_sign.direction = 4 
-     dx = 0; dy = 0; dir = 0 
-     if @moveto_x - x > 0 
-       if @moveto_x - x > $game_map.width - @moveto_x + x && 
-           $game_map.loop_vertical? 
-         dx = $game_map.width - @moveto_x + x; dir = 4 
-       else 
-         dx = @moveto_x - x; dir = 6 
-       end 
-     else 
-       if x - @moveto_x > $game_map.width - x + @moveto_x && 
-           $game_map.loop_vertical? 
-         dx = $game_map.width - x + @moveto_x; dir = 6 
-       else 
-         dx = x - @moveto_x; dir = 4 
-       end 
-     end 
-     if @moveto_y - y > 0 
-       if @moveto_y - y > $game_map.height - @moveto_y + y && 
-           $game_map.loop_horizontal? 
-         dy = $game_map.height - @moveto_y + y 
-         dir = 8 if dy > dx 
-       else 
-         dy = @moveto_y - y 
-         dir = 2 if dy > dx 
-       end 
-     else 
-       if y - @moveto_y > $game_map.height - y + @moveto_y && 
-           $game_map.loop_horizontal? 
-         dy = $game_map.height - y + @moveto_y 
-         dir = 2 if dy > dx  
-       else 
-         dy = y - @moveto_y 
-         dir = 8 if dy > dx 
-       end 
-     end 
-     return [dir, 0] # 0方向用于防止移动过程中触发事件 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制boat的移动路径 @array[move_directions...] 
-   #-------------------------------------------------------------------------- 
-   def draw_boat_path 
-     # 准备绘制路径表格 
-     sheet = Table.new($game_map.width, $game_map.height) 
-     reversed_chase_path  = []; chase_path  = [] 
-     reversed_chase_point = []; chase_point = [] 
-     new_start_points = [x, y]; new_end_points = [@moveto_x, @moveto_y] 
-     sheet[x, y] = 1;           sheet[@moveto_x, @moveto_y] = 2 
-     reach_point = false 
-     step = 3 
-     loop do #loop1 开始填充表格 
-      draw_path = false 
-      check_points = new_start_points 
-      new_start_points = [] 
-       loop do #loop2 从起点开始正向填充 
-         point_x = check_points.shift 
-         break if point_x == nil 
-         point_y = check_points.shift 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1) 
-                     # 判断路径是否连通 
-         path_step = step - 1 
-         if sheet[left_x, point_y] == path_step 
-           chase_path.push(4) 
-           chase_point = [left_x, point_y] 
-           reversed_chase_point = [point_x, point_y] 
-           reach_point = true; break 
-         elsif sheet[right_x, point_y] == path_step 
-             chase_path.push(6) 
-             chase_point = [right_x, point_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, up_y] == path_step 
-             chase_path.push(8) 
-             chase_point = [point_x, up_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, down_y] == path_step 
-             chase_path.push(2) 
-             chase_point = [point_x, down_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         end 
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0                && 
-            $game_map.boat_passable?(left_x, point_y)  && 
-            !collide_with_events?(left_x, point_y)     && 
-            !collide_with_vehicles?(left_x, point_y)   #judge_end 
-           sheet[left_x, point_y] = step 
-           draw_path = true 
-           new_start_points.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0               && 
-            $game_map.boat_passable?(right_x, point_y) && 
-            !collide_with_events?(right_x, point_y)    && 
-            !collide_with_vehicles?(right_x, point_y)  #judge_end 
-           sheet[right_x, point_y] = step 
-           draw_path = true 
-           new_start_points.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0                  && 
-            $game_map.boat_passable?(point_x, up_y)    && 
-            !collide_with_events?(point_x, up_y)       && 
-            !collide_with_vehicles?(point_x, up_y)     #judge_end 
-           sheet[point_x, up_y] = step 
-           draw_path = true 
-           new_start_points.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0                && 
-            $game_map.boat_passable?(point_x, down_y)  && 
-            !collide_with_events?(point_x, down_y)     && 
-            !collide_with_vehicles?(point_x, down_y)   #judge_end 
-           sheet[point_x, down_y] = step 
-           draw_path = true 
-           new_start_points.push(point_x, down_y) 
-         end 
-       end#endOfLoop2 
-       break if !draw_path || reach_point 
-       draw_path = false 
-       check_points = new_end_points 
-       new_end_points = [] 
-       step += 1 
-       break if step > KsOfSion::Break_Steps && 
-                !Input.press?(KsOfSion::Find_Path_Key) 
-       loop do #loop3 从终点开始反向填充 
-         point_x = check_points.shift 
-         break if point_x == nil 
-         point_y = check_points.shift 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1) 
-         # 判断路径是否连通 
-         path_step = step - 1 
-         if sheet[left_x, point_y] == path_step 
-           chase_path.push(6) 
-           chase_point = [point_x, point_y] 
-           reversed_chase_point = [left_x, point_y] 
-           reach_point = true; break 
-         elsif sheet[right_x, point_y] == path_step 
-             chase_path.push(4) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [right_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, up_y] == path_step 
-             chase_path.push(2) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [point_x, up_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, down_y] == path_step 
-             chase_path.push(8) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [point_x, down_y] 
-             reach_point = true; break 
-         end 
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0                && 
-            $game_map.boat_passable?(left_x, point_y)  && 
-            !collide_with_events?(left_x, point_y)     && 
-            !collide_with_vehicles?(left_x, point_y)   #judge_end 
-           sheet[left_x, point_y] = step 
-           draw_path = true 
-           new_end_points.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0               && 
-            $game_map.boat_passable?(right_x, point_y) && 
-            !collide_with_events?(right_x, point_y)    && 
-            !collide_with_vehicles?(right_x, point_y)  #judge_end 
-           sheet[right_x, point_y] = step 
-           draw_path = true 
-           new_end_points.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0                  && 
-            $game_map.boat_passable?(point_x, up_y)    && 
-            !collide_with_events?(point_x, up_y)       && 
-            !collide_with_vehicles?(point_x, up_y)     #judge_end 
-           sheet[point_x, up_y] = step 
-           draw_path = true 
-           new_end_points.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0                && 
-            $game_map.boat_passable?(point_x, down_y)  && 
-            !collide_with_events?(point_x, down_y)     && 
-            !collide_with_vehicles?(point_x, down_y)   #judge_end 
-           sheet[point_x, down_y] = step 
-           draw_path = true 
-           new_end_points.push(point_x, down_y) 
-         end 
-       end#endOfLoop3 
-       break if !draw_path || reach_point 
-       step += 1 
-     end #endOfLoop1 路径表格填充完毕 
-     $mouse_move_sign.transparent = false 
-     # 判断指定地点能否抵达 
-     reach_point ? $mouse_move_sign.direction = 2 : (return not_reach_point) 
-     # 根据路径表格绘制最短移动路径(正向) 
-     steps = step / 2 * 2 
-     loop_times = step / 2 
-     point_x, point_y = chase_point[0], chase_point[1] 
-     for i in 2..loop_times # forLoop 
-     steps -= 2 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         chase_path.push(2) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         chase_path.push(8) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         chase_path.push(4) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         chase_path.push(6) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     else 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         chase_path.push(4) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         chase_path.push(6) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         chase_path.push(2) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         chase_path.push(8) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     end 
-     end #endOfForLoop 
-     # 如果指定点无法抵达或者登陆 
-     return not_reach_point unless landable?(@moveto_x, @moveto_y, chase_path) 
-     # 根据路径表格绘制最短移动路径(反向) 
-     steps = step / 2 * 2 + 1 
-     loop_times = step / 2 
-     point_x, point_y = reversed_chase_point[0], reversed_chase_point[1] 
-     for i in 1..loop_times # forLoop 
-     steps -= 2 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     else 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     end 
-     end #endOfForLoop 
-     return reversed_chase_path.reverse + chase_path 
-   end#boat 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制ship的移动路径 @array[move_directions...] 
-   #-------------------------------------------------------------------------- 
-   def draw_ship_path 
-     # 准备绘制路径表格 
-     sheet = Table.new($game_map.width, $game_map.height) 
-     reversed_chase_path  = []; chase_path  = [] 
-     reversed_chase_point = []; chase_point = [] 
-     new_start_points = [x, y]; new_end_points = [@moveto_x, @moveto_y] 
-     sheet[x, y] = 1;           sheet[@moveto_x, @moveto_y] = 2 
-     reach_point = false 
-     step = 3 
-     loop do #loop1 开始填充表格 
-      draw_path = false 
-      check_points = new_start_points 
-      new_start_points = [] 
-       loop do #loop2 从起点开始正向填充 
-         point_x = check_points.shift 
-         break if point_x == nil 
-         point_y = check_points.shift 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1) 
-                     # 判断路径是否连通 
-         path_step = step - 1 
-         if sheet[left_x, point_y] == path_step 
-           chase_path.push(4) 
-           chase_point = [left_x, point_y] 
-           reversed_chase_point = [point_x, point_y] 
-           reach_point = true; break 
-         elsif sheet[right_x, point_y] == path_step 
-             chase_path.push(6) 
-             chase_point = [right_x, point_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, up_y] == path_step 
-             chase_path.push(8) 
-             chase_point = [point_x, up_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, down_y] == path_step 
-             chase_path.push(2) 
-             chase_point = [point_x, down_y] 
-             reversed_chase_point = [point_x, point_y] 
-             reach_point = true; break 
-         end 
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0                && 
-            $game_map.ship_passable?(left_x, point_y)  && 
-            !collide_with_events?(left_x, point_y)     && 
-            !collide_with_vehicles?(left_x, point_y)   #judge_end 
-           sheet[left_x, point_y] = step 
-           draw_path = true 
-           new_start_points.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0               && 
-            $game_map.ship_passable?(right_x, point_y) && 
-            !collide_with_events?(right_x, point_y)    && 
-            !collide_with_vehicles?(right_x, point_y)  #judge_end 
-           sheet[right_x, point_y] = step 
-           draw_path = true 
-           new_start_points.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0                  && 
-            $game_map.ship_passable?(point_x, up_y)    && 
-            !collide_with_events?(point_x, up_y)       && 
-            !collide_with_vehicles?(point_x, up_y)     #judge_end 
-           sheet[point_x, up_y] = step 
-           draw_path = true 
-           new_start_points.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0                && 
-            $game_map.ship_passable?(point_x, down_y)  && 
-            !collide_with_events?(point_x, down_y)     && 
-            !collide_with_vehicles?(point_x, down_y)   #judge_end 
-           sheet[point_x, down_y] = step 
-           draw_path = true 
-           new_start_points.push(point_x, down_y) 
-         end 
-       end#endOfLoop2 
-       break if !draw_path || reach_point 
-       draw_path = false 
-       check_points = new_end_points 
-       new_end_points = [] 
-       step += 1 
-       break if step > KsOfSion::Break_Steps && 
-                !Input.press?(KsOfSion::Find_Path_Key) 
-       loop do #loop3 从终点开始反向填充 
-         point_x = check_points.shift 
-         break if point_x == nil 
-         point_y = check_points.shift 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1) 
-         # 判断路径是否连通 
-         path_step = step - 1 
-         if sheet[left_x, point_y] == path_step 
-           chase_path.push(6) 
-           chase_point = [point_x, point_y] 
-           reversed_chase_point = [left_x, point_y] 
-           reach_point = true; break 
-         elsif sheet[right_x, point_y] == path_step 
-             chase_path.push(4) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [right_x, point_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, up_y] == path_step 
-             chase_path.push(2) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [point_x, up_y] 
-             reach_point = true; break 
-         elsif sheet[point_x, down_y] == path_step 
-             chase_path.push(8) 
-             chase_point = [point_x, point_y] 
-             reversed_chase_point = [point_x, down_y] 
-             reach_point = true; break 
-         end 
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0                && 
-            $game_map.ship_passable?(left_x, point_y)  && 
-            !collide_with_events?(left_x, point_y)     && 
-            !collide_with_vehicles?(left_x, point_y)   #judge_end 
-           sheet[left_x, point_y] = step 
-           draw_path = true 
-           new_end_points.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0               && 
-            $game_map.ship_passable?(right_x, point_y) && 
-            !collide_with_events?(right_x, point_y)    && 
-            !collide_with_vehicles?(right_x, point_y)  #judge_end 
-           sheet[right_x, point_y] = step 
-           draw_path = true 
-           new_end_points.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0                  && 
-            $game_map.ship_passable?(point_x, up_y)    && 
-            !collide_with_events?(point_x, up_y)       && 
-            !collide_with_vehicles?(point_x, up_y)     #judge_end 
-           sheet[point_x, up_y] = step 
-           draw_path = true 
-           new_end_points.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0                && 
-            $game_map.ship_passable?(point_x, down_y)  && 
-            !collide_with_events?(point_x, down_y)     && 
-            !collide_with_vehicles?(point_x, down_y)   #judge_end 
-           sheet[point_x, down_y] = step 
-           draw_path = true 
-           new_end_points.push(point_x, down_y) 
-         end 
-       end#endOfLoop3 
-       break if !draw_path || reach_point 
-       step += 1 
-     end #endOfLoop1 路径表格填充完毕 
-     $mouse_move_sign.transparent = false 
-     # 判断指定地点能否抵达 
-     reach_point ? $mouse_move_sign.direction = 2 : (return not_reach_point) 
-     # 根据路径表格绘制最短移动路径(正向) 
-     steps = step / 2 * 2 
-     loop_times = step / 2 
-     point_x, point_y = chase_point[0], chase_point[1] 
-     for i in 2..loop_times # forLoop 
-     steps -= 2 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         chase_path.push(2) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         chase_path.push(8) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         chase_path.push(4) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         chase_path.push(6) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     else 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         chase_path.push(4) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         chase_path.push(6) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         chase_path.push(2) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         chase_path.push(8) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     end 
-     end #endOfForLoop 
-     # 如果指定点无法抵达或者登陆 
-     return not_reach_point unless landable?(@moveto_x, @moveto_y, chase_path) 
-     # 根据路径表格绘制最短移动路径(反向) 
-     steps = step / 2 * 2 + 1 
-     loop_times = step / 2 
-     point_x, point_y = reversed_chase_point[0], reversed_chase_point[1] 
-     for i in 1..loop_times # forLoop 
-     steps -= 2 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     else 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == steps 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == steps 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == steps 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == steps 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     end 
-     end #endOfForLoop 
-     return reversed_chase_path.reverse + chase_path 
-   end#ship 
-   #-------------------------------------------------------------------------- 
-   # ● 绘制airship的移动路径 @array[move_directions...] 
-   #-------------------------------------------------------------------------- 
-   def draw_air_path 
-     $mouse_move_sign.transparent = false 
-     # 准备绘制路径表格 
-     sheet = Table.new($game_map.width, $game_map.height) 
-     new_check_point = [x, y]; sheet[x, y] = 1 
-     reach_point = false;      step = 2 
-     loop do #loop1 
-      check_point = new_check_point 
-      new_check_point = [] 
-       loop do #loop2 
-         point_x = check_point.shift 
-         break if point_x == nil 
-         point_y = check_point.shift 
-         if point_x == @moveto_x && point_y == @moveto_y 
-           reach_point = true; break 
-         end 
-         left_x  = $game_map.round_x(point_x - 1) 
-         right_x = $game_map.round_x(point_x + 1) 
-         up_y    = $game_map.round_y(point_y - 1) 
-         down_y  = $game_map.round_y(point_y + 1)  
-         # 以需要抵达该点的步数填充路径表格 # 
-         if sheet[left_x, point_y] == 0 
-           sheet[left_x, point_y] = step 
-           new_check_point.push(left_x, point_y) 
-         end 
-         if sheet[right_x, point_y] == 0 
-           sheet[right_x, point_y] = step 
-           new_check_point.push(right_x, point_y) 
-         end 
-         if sheet[point_x, up_y] == 0 
-           sheet[point_x, up_y] = step 
-           new_check_point.push(point_x, up_y) 
-         end 
-         if sheet[point_x, down_y] == 0 
-           sheet[point_x, down_y] = step 
-           new_check_point.push(point_x, down_y) 
-         end 
-       end#endOfLoop2 
-       break if reach_point 
-       step += 1 
-     end #endOfLoop1 
-     # 根据路径表格绘制最短移动路径 # 
-     reversed_chase_path = []; step -= 1 
-     point_x, point_y = @moveto_x, @moveto_y 
-     for i in 2..step 
-     step -= 1 
-     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs 
-       if    sheet[$game_map.round_x(point_x - 1), point_y] == step 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == step 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       end 
-     else 
-       if    sheet[point_x, $game_map.round_y(point_y + 1)] == step 
-         reversed_chase_path.push(8) 
-         point_y = $game_map.round_y(point_y + 1) 
-       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step 
-         reversed_chase_path.push(2) 
-         point_y = $game_map.round_y(point_y - 1) 
-       elsif sheet[$game_map.round_x(point_x - 1), point_y] == step 
-         reversed_chase_path.push(6) 
-         point_x = $game_map.round_x(point_x - 1) 
-       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step 
-         reversed_chase_path.push(4) 
-         point_x = $game_map.round_x(point_x + 1) 
-       end 
-     end 
-     end #endOfForLoop  
-     return reversed_chase_path.reverse 
-   end#airship 
-   #-------------------------------------------------------------------------- 
-   # ● 判断目标点是否能抵达、登陆,用于船只路径绘制 
-   #-------------------------------------------------------------------------- 
-   def landable?(x, y, path) 
-     case @vehicle_type 
-       when :ship; return $game_map.ship_passable?(x, y) || 
-         $game_map.passable?(x, y, 10 - path[-1]) 
-       when :boat; return $game_map.boat_passable?(x, y) || 
-         $game_map.passable?(x, y, 10 - path[-1]) 
-     end 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Game_Map 
- #------------------------------------------------------------------------------ 
- #  管理地图的类。拥有卷动地图以及判断通行度的功能。 
- #   本类的实例请参考 $game_map 。 
- #============================================================================== 
- class Game_Map 
-   #-------------------------------------------------------------------------- 
-   # ● 初始化对象 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_initialize initialize 
-   def initialize 
-     sion_mouse_initialize 
-     creat_move_sign  ### 
-     set_constants 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新画面 
-   #     main : 事件解释器更新的标志 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_update update 
-   def update(main = false) 
-     sion_mouse_update(main) 
-     update_move_sign 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 设置显示位置 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_set_display_pos set_display_pos 
-   def set_display_pos(x, y) 
-     sion_mouse_set_display_pos(x, y) 
-     @_display_y_ = @display_y 
-     @_display_x_ = @display_x 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 创建显示路径点的事件 
-   #-------------------------------------------------------------------------- 
-   def creat_move_sign 
-     $mouse_move_sign = Move_Sign.new 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新显示路径点的事件 
-   #-------------------------------------------------------------------------- 
-   def set_constants 
-     @mouse_pos_setted = true 
-     @set_pos_prepared = false 
-     @mouse_old_x = 0 
-     @mouse_old_y = 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新显示路径点的事件 
-   #-------------------------------------------------------------------------- 
-   def update_move_sign 
-     $mouse_move_sign.update 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 获取鼠标位于的地图块的x、y坐标 
-   #-------------------------------------------------------------------------- 
-   def mouse_map_x 
-     round_x((@display_x + Mouse.x / 32.0).to_i) 
-   end 
-   def mouse_map_y 
-     round_y((@display_y + Mouse.y / 32.0).to_i) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 返回地图画面时重设鼠标坐标 
-   #-------------------------------------------------------------------------- 
-   def reset_mouse_pos 
-     return if @mouse_pos_setted 
-     Mouse.set_pos(@mouse_old_x, @mouse_old_y) 
-     @mouse_pos_setted = true 
-     @set_pos_prepared = false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 重设鼠标的坐标 
-   #-------------------------------------------------------------------------- 
-   def prepare_reset_mouse_pos 
-     return if @set_pos_prepared 
-     @mouse_pos_setted = false 
-     @mouse_old_x = Mouse.x 
-     @mouse_old_y = Mouse.y 
-     @set_pos_prepared = true 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 向下卷动 
-   #-------------------------------------------------------------------------- 
-   def new_scroll_down(distance) 
-     if loop_vertical? 
-       @_display_y_ += distance 
-       @_display_y_ %= @map.height 
-       @parallax_y += distance if @parallax_loop_y 
-     else 
-       last_y = @_display_y_ 
-       @_display_y_ = [@_display_y_ + distance, height - screen_tile_y].min 
-       @parallax_y += @_display_y_ - last_y 
-     end 
-     @display_y = (@_display_y_ * 32).round / 32.0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 向左卷动 
-   #-------------------------------------------------------------------------- 
-   def new_scroll_left(distance) 
-     if loop_horizontal? 
-       @_display_x_ += @map.width - distance 
-       @_display_x_ %= @map.width  
-       @parallax_x -= distance if @parallax_loop_x 
-     else 
-       last_x = @_display_x_ 
-       @_display_x_ = [@_display_x_ - distance, 0].max 
-       @parallax_x += @_display_x_ - last_x 
-     end 
-     @display_x = (@_display_x_ * 32).round / 32.0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 向右卷动 
-   #-------------------------------------------------------------------------- 
-   def new_scroll_right(distance) 
-     if loop_horizontal? 
-       @_display_x_ += distance 
-       @_display_x_ %= @map.width 
-       @parallax_x += distance if @parallax_loop_x 
-     else 
-       last_x = @_display_x_ 
-       @_display_x_ = [@_display_x_ + distance, (width - screen_tile_x)].min 
-       @parallax_x += @_display_x_ - last_x 
-     end 
-     @display_x = (@_display_x_ * 32).round / 32.0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 向上卷动 
-   #-------------------------------------------------------------------------- 
-   def new_scroll_up(distance) 
-     if loop_vertical? 
-       @_display_y_ += @map.height - distance 
-       @_display_y_ %= @map.height 
-       @parallax_y -= distance if @parallax_loop_y 
-     else 
-       last_y = @_display_y_ 
-       @_display_y_ = [@_display_y_ - distance, 0].max 
-       @parallax_y += @_display_y_ - last_y 
-     end 
-     @display_y = (@_display_y_ * 32).round / 32.0 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Spriteset_Map 
- #------------------------------------------------------------------------------ 
- #  处理地图画面精灵和图块的类。本类在 Scene_Map 类的内部使用。 
- #============================================================================== 
- class Spriteset_Map 
-   #-------------------------------------------------------------------------- 
-   # ● 生成路径点精灵 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_create_characters create_characters 
-   def create_characters 
-     sion_mouse_create_characters 
-     @character_sprites.push(Sprite_Character.new(@viewport1, $mouse_move_sign)) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ SceneManager 
- #============================================================================== 
- class << SceneManager 
-   alias sion_mouse_snapshot_for_background snapshot_for_background 
-   def snapshot_for_background 
-     Mouse.sprite.visible = false 
-     sion_mouse_snapshot_for_background 
-     Mouse.sprite.visible = true 
-   end 
- end 
- #============================================================================== 
- # ■ Scene_Map 
- #------------------------------------------------------------------------------ 
- #  地图画面 
- #============================================================================== 
- class Scene_Map 
-   #-------------------------------------------------------------------------- 
-   # ● 画面更新 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_update_scene update_scene 
-   def update_scene 
-     sion_mouse_update_scene 
-     update_mouse_action unless scene_changing? || $game_map.interpreter.running? 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 场所移动前的处理 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_pre_transfer pre_transfer 
-   def pre_transfer 
-     $game_player.reset_move_path 
-     sion_mouse_pre_transfer 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 监听鼠标左键的按下 
-   #-------------------------------------------------------------------------- 
-   def update_mouse_action 
-     $game_player.left_button_action if Mouse.press?(:L) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Scene_File 
- #------------------------------------------------------------------------------ 
- #  存档画面和读档画面共同的父类 
- #============================================================================== 
- class Scene_File < Scene_MenuBase 
-   #-------------------------------------------------------------------------- 
-   # ● 开始处理 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_start start 
-   def start 
-     sion_mouse_start 
-     @move_state = 0 
-     set_mouse_pos 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新画面 
-   #-------------------------------------------------------------------------- 
-   alias sion_mouse_update update 
-   def update 
-     sion_mouse_update 
-     Input.dir4.zero? ? set_cursor : set_mouse_pos 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 更新光标 
-   #-------------------------------------------------------------------------- 
-   def set_cursor 
-     @move_state += 1 
-     last_index = @index 
-     if mouse_which_window == -2 
-       if (@move_state - 1) % 6 == 0 
-         @index = (@index + 1) % item_max if @index < item_max - 1 
-       end 
-     elsif mouse_which_window == -1 
-       if (@move_state - 1) % 6 == 0 
-         @index = (@index - 1 + item_max) % item_max if @index > 0 
-       end 
-     else 
-       @move_state = 0 
-       @index = top_index + mouse_which_window 
-     end 
-     ensure_cursor_visible 
-     if @index != last_index 
-       @savefile_windows[last_index].selected = false 
-       @savefile_windows[@index].selected = true 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 判断鼠标位于哪个窗口 
-   #-------------------------------------------------------------------------- 
-   def mouse_which_window 
-     mouse_x = Mouse.x 
-     mouse_y = Mouse.y 
-     if mouse_y < @help_window.height + 14 
-       mouse_row = -1 
-     elsif mouse_y > Graphics.height - 14 
-       mouse_row = -2 
-     else 
-       mouse_row = 4 * (mouse_y - @help_window.height) / 
-         (Graphics.height - @help_window.height) 
-     end 
-     return mouse_row 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 方向键移动光标时将鼠标移动到对应的光标位置 
-   #-------------------------------------------------------------------------- 
-   def set_mouse_pos 
-     new_x = 40 
-     new_y = @help_window.height + savefile_height * (@index - top_index) + 24 
-     Mouse.set_pos(new_x, new_y) 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Game_Event 
- #------------------------------------------------------------------------------ 
- #  处理事件的类。拥有条件判断、事件页的切换、并行处理、执行事件等功能。 
- #   在 Game_Map 类的内部使用。 
- #============================================================================== 
- class Game_Event < Game_Character 
-   alias_method :sion_mouse_start, :start 
-   alias_method :sion_mouse_setup_page, :setup_page 
-   def start 
-     return if mouse_start? && !Mouse.press?(:L) 
-     sion_mouse_start 
-   end 
-   def mouse_start? 
-     @mouse_start 
-   end 
-   def setup_page(p) 
-     sion_mouse_setup_page(p) 
-     sion_mouse_read_event_notes 
-   end 
-   def sion_mouse_read_event_notes 
-     @mouse_start = false 
-     @list.each {|cmd| break if sion_mouse_scan_list(cmd)} unless empty? 
-   end 
-   def sion_mouse_scan_list(cmd) 
-     return false unless cmd.code == 108 || cmd.code == 408 
-     return @mouse_start = cmd.parameters[0].include?("鼠标启动") 
-   end 
- end 
-   
- #encoding:utf-8 
- #============================================================================== 
- # ■ BattleManager 
- #------------------------------------------------------------------------------ 
- #  战斗过程的管理器。 
- #============================================================================== 
- class << BattleManager 
-   alias_method :sion_mouse_on_encounter, :on_encounter 
-   # 遇敌后重置移动路径 
-   def on_encounter 
-     $game_player.reset_move_path 
-     sion_mouse_on_encounter 
-   end 
- end 
-   
-   
- # v2.32 卷动地图优化 
- class Game_Interpreter 
-   alias_method :sion_mouse_command_204, :command_204 
-   def command_204 
-     sion_mouse_command_204 
-     case next_event_code 
-     when 204 
-       Fiber.yield while $game_map.scrolling? 
-       @index += 1 
-       execute_command 
-     when 230 
-       $game_map.wait_scroll = true 
-       @index += 1 
-       execute_command 
-       $game_map.wait_scroll = false 
-     end 
-   end 
-   #230 wait 
- end 
-   
- class Game_Map 
-   attr_accessor :wait_scroll 
-   #-------------------------------------------------------------------------- 
-   # ● 更新画面 覆盖原方法 
-   #     main : 事件解释器更新的标志 
-   #-------------------------------------------------------------------------- 
-   def update(main = false) 
-     refresh if @need_refresh 
-     update_scroll 
-     update_interpreter if main 
-     update_events 
-     update_vehicles 
-     update_parallax 
-     @screen.update 
-   end 
- end