#============================================================================== # ■フィールドサーチ for RGSS3 Ver1.01-β # □作成者 kure #============================================================================== #============================================================================== # ■ Game_Event #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● イベント名取得(追加定義) #-------------------------------------------------------------------------- def event_name return @event.name end #-------------------------------------------------------------------------- # ● 探索反応IDの定義(追加定義) #-------------------------------------------------------------------------- def search_id event_name.match(/<探索反応\s?(\d+)\s?>/) return $1 ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ● プライオリティ[通常キャラと同じ]判定 #-------------------------------------------------------------------------- def react_search?(id) return false if search_id == 0 return true if search_id == id return false end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● プレーヤーを中心とした周囲 xセルの範囲を取得 #-------------------------------------------------------------------------- def get_square_area(range) x = $game_player.x y = $game_player.y area = [] #正方形型のエリアを取得 x_list = ((x - range)..(x + range)).to_a y_list = ((y - range)..(y + range)).to_a x_list.each{|x_pos| y_list.each{|y_pos| area.push([x_pos, y_pos]) }} return area end #-------------------------------------------------------------------------- # ● イベントをサーチする #-------------------------------------------------------------------------- def search(id, range, symbol, value = true) area = get_square_area(range) #エリア内のイベントに対してサーチをかける area.each{|pos| list = $game_map.events_xy(pos[0], pos[1]) list.each{|event| next unless event.react_search?(id) key = [@map_id, event.id, symbol] $game_self_switches[key] = value } } end #-------------------------------------------------------------------------- # ● イベントをサーチして数を数える #-------------------------------------------------------------------------- def search_num(id, range) area = get_square_area(range) #エリア内のイベントに対してサーチをかける num = 0 area.each{|pos| list = $game_map.events_xy(pos[0], pos[1]) list.each{|event| next unless event.react_search?(id) num += 1 } } return num end end