| 本帖最后由 KB.Driver 于 2020-5-14 00:58 编辑 
 以前写的一个东西,也许能满足需要,不过应该不是最优化的代码。
 
 移动路线中写脚本chase("xxx")
 则会去追最近的注释写有xxx的事件
 
 可以在你想让事件跑去的点上弄个透明事件,注释里加个关键词,
 然后让人物执行移动路线chase("xxx")
 
 注意每次chase只会走一步,因此需要循环。
 如果走到了位置,你可以用分歧判断结束chase的循环。
 
 
 
   
 
 #==================================================================#  追逐事件 by Calendar99##    追逐者设置移动路线--脚本--chase("string"),循环执行。#    之后追逐者会追逐地图上最近的注释有string的事件。#    可以在脚本中加入分歧判断,让事件在不追逐的时候执行其他行动。##==================================================================class Game_Character   def chase(string)    return false unless (event = get_chasing_event(string))    move_toward_character(event)    true  end   def distance_to(character)    distance_x = (self.x - character.x).abs    distance_y = (self.y - character.y).abs    return distance_x + distance_y  end   def get_chasing_events(string)    $game_map.events.select{|id, event| event.match(string) }  end   def get_chasing_event(string)    return unless (event_hash = get_chasing_events(string))    event_array = []    event_hash.each_value{|event| event_array << event}    event_array.sort{|a, b| self.distance_to(a) <=> self.distance_to(b) }.first  end end class Game_Event   def match(string)    @list.each do |command|      next unless command.code == 108 #注释      return true if command.parameters[0].index(string)    end    false  end end
#================================================================== 
#  追逐事件 by Calendar99 
# 
#    追逐者设置移动路线--脚本--chase("string"),循环执行。 
#    之后追逐者会追逐地图上最近的注释有string的事件。 
#    可以在脚本中加入分歧判断,让事件在不追逐的时候执行其他行动。 
# 
#================================================================== 
class Game_Character 
  
  def chase(string) 
    return false unless (event = get_chasing_event(string)) 
    move_toward_character(event) 
    true 
  end 
  
  def distance_to(character) 
    distance_x = (self.x - character.x).abs 
    distance_y = (self.y - character.y).abs 
    return distance_x + distance_y 
  end 
  
  def get_chasing_events(string) 
    $game_map.events.select{|id, event| event.match(string) } 
  end 
  
  def get_chasing_event(string) 
    return unless (event_hash = get_chasing_events(string)) 
    event_array = [] 
    event_hash.each_value{|event| event_array << event} 
    event_array.sort{|a, b| self.distance_to(a) <=> self.distance_to(b) }.first 
  end 
  
end 
  
class Game_Event 
  
  def match(string) 
    @list.each do |command| 
      next unless command.code == 108 #注释 
      return true if command.parameters[0].index(string) 
    end 
    false 
  end 
  
end 
 |