#============================================================================== # ■ RGSS2/RGSS3 イベント名からイベントIDを取得 Ver2.00 by 星潟 #------------------------------------------------------------------------------ # スクリプト上でマップのイベント名からイベントIDを取得する機能を実装します。 #------------------------------------------------------------------------------ # eid_by_name(name, type) #------------------------------------------------------------------------------ # nameの部分に検索したい名前を入れて下さい。 # 名前は""で囲んで下さい。 #(例.あいうえおという名前の場合、"あいうえお") # # typeはtrueかfalseを入れて下さい。 #(typeは省略し、eid_by_name(name)でも動作します。 # この場合、typeはtrueとして処理されます) # # 上記コマンドで現在マップのnameという名前のイベントのIDを取得できます。 #------------------------------------------------------------------------------ # 条件に合うイベントが存在する場合 # typeがtrueの場合は、該当するイベントの中で最も若いID、 # typeがfalseの場合は、該当するイベントのIDを全て含む配列を返します。 # # 条件に合うイベントが存在しない場合 # typeがtrueの場合は0、typeがfalseの場合は、空の配列を返します。 #------------------------------------------------------------------------------ # RGSS2/3共通で、イベントコマンドのスクリプトで # # $game_variables[1] = # eid_by_name("あいうえお") # # このように記述する事で # 変数ID1にあいうえおという名前のイベントIDを格納出来ます。 #------------------------------------------------------------------------------ # RGSS3ではイベントコマンドの変数の操作でスクリプトを選び # # eid_by_name("あいうえお") # # とする事であいうえおという名前のイベントIDを格納出来ます。 #============================================================================== # another_map_eid_by_name(map_id, name, type) #------------------------------------------------------------------------------ # map_idの部分に検索したいマップID、nameの部分に検索したい名前を入れて下さい。 # 名前は""で囲んで下さい。 #(例.あいうえおという名前の場合、"あいうえお") # # typeはtrueかfalseを入れて下さい。 #(typeは省略し、another_map_eid_by_name(name)でも動作します。 # この場合、typeはtrueとして処理されます) # # 上記コマンドで指定IDのマップのnameという名前のイベントのIDを取得できます。 # マップ容量が大きい場合は少し時間がかかる可能性もあります。 # 他マップの読み込みが入るので、恒常的に使用する処理には使用しない方が良いです。 #------------------------------------------------------------------------------ # 条件に合うイベントが存在する場合 # typeがtrueの場合は、該当するイベントの中で最も若いID、 # typeがfalseの場合は、該当するイベントのIDを全て含む配列を返します。 # # 条件に合うイベントが存在しない場合 # typeがtrueの場合は0、typeがfalseの場合は、空の配列を返します。 #------------------------------------------------------------------------------ # RGSS2/3共通で、イベントコマンドのスクリプトで # # $game_variables[1] = # another_map_eid_by_name(2,"あいうえお") # # このように記述する事で、変数ID1にマップID2の # あいうえおという名前のイベントIDを格納出来ます。 #------------------------------------------------------------------------------ # RGSS3ではイベントコマンドの変数の操作でスクリプトを選び # # another_map_eid_by_name(2,"あいうえお") # # とする事でマップID2のあいうえおという名前の # イベントIDを格納する事が出来ます。 #============================================================================== module EidByName #現在マップを対象とした場合にイベント名を毎回再取得するかを指定。 #trueで毎回取得し直す。falseで一度しか取得しない。 RE = false #-------------------------------------------------------------------------- # RGSSのタイプを取得 #-------------------------------------------------------------------------- def self.flag @flag ||= create_flag end #-------------------------------------------------------------------------- # 名前からIDを取得 #-------------------------------------------------------------------------- def self.create_flag begin DataManager.savefile_max true rescue false end end end class Game_Map #-------------------------------------------------------------------------- # 名前からIDを取得 #-------------------------------------------------------------------------- def eid_by_name(name, type = true) @map.eid_by_name(name, type) end end class RPG::Map #-------------------------------------------------------------------------- # 名前からIDを取得 #-------------------------------------------------------------------------- def eid_by_name(name, type = true) if EidByName::RE @ev_names_hash = create_eid_by_name else @ev_names_hash ||= create_eid_by_name end r = @ev_names_hash[name] r ? (type ? r[0] : r) : (type ? 0 : []) end #-------------------------------------------------------------------------- # 名前ハッシュを取得 #-------------------------------------------------------------------------- def create_eid_by_name h = {} @events.each_value {|e| h[e.name] ||= [];h[e.name].push(e.id)} h end end class Game_Interpreter #-------------------------------------------------------------------------- # 名前からIDを取得 #-------------------------------------------------------------------------- def eid_by_name(name, type = true) $game_map.eid_by_name(name, type) end #-------------------------------------------------------------------------- # 名前からIDを取得 #-------------------------------------------------------------------------- def another_map_eid_by_name(mid, name, type = true) return eid_by_name(name, type) if mid == $game_map.map_id fn = "Data/Map%03d.rvdata" + (EidByName.flag ? "2" : "") begin m = load_data(sprintf(fn,mid)) m.eid_by_name(name, type) rescue p "存在しないマップを参照しようとしています。" type ? 0 : [] end end end