本帖最后由 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
|