#============================================================================== # ■ RGSS3 イベント通行判定拡張 Ver1.03 by 星潟 #------------------------------------------------------------------------------ # イベントの名前もしくは、イベントのキャラクターグラフィックの名前に # 特定のキーワードが含まれている場合 # 他のイベントの存在を無視して移動したり # マップの移動可能判定を無視、もしくは逆転した判定を行う # 特殊なイベントの作成を可能にします。 # # イベント名もしくはキャラクター名に[PE]を含む場合 # # =>他イベントの上を通行可能 # # イベント名もしくはキャラクター名に[PM]を含む場合 # # =>マップの移動可能判定無視 # # イベント名もしくはキャラクター名に[PR]を含む場合 # # =>マップ移動可能判定逆転 # # イベント名もしくはキャラクター名に[PT]を含む場合 # # =>特定のマップタグの座標は本来移動不可能でもイベントのみ移動可能 # # イベント名もしくはキャラクター名に[PTA:n]を含む場合 # (nは0〜9の地形タグを,で区切ったもの) # 例1.イベント名もしくはキャラクター名に[PTA:2]を含む場合 # # =>座標の地形タグが2なら本来移動不可能でもイベントのみ移動可能 # # 例2.イベント名もしくはキャラクター名に[PTA:1,2,3]を含む場合 # # =>座標の地形タグが1か2か3の何れかなら本来移動不可能でもイベントのみ移動可能 #------------------------------------------------------------------------------ # このスクリプトはなるべく素材欄の下の方に配置して下さい。 #------------------------------------------------------------------------------ # Ver1.01 不具合修正&特定タグのマップチップ移動可能化機能を追加 # Ver1.02 不具合修正 # Ver1.03 不具合修正&注釈追加&機能追加 #============================================================================== module THR_EV #他イベントの上を通行可能にするキーワードを指定 WORD1 = "[PE]" #マップの移動可能判定無視にするキーワードを指定 WORD2 = "[PM]" #マップ移動可能判定逆転にするキーワードを指定 WORD3 = "[PR]" #特定タグのマップチップは移動不可能でも移動可能にするキーワードを指定 WORD4 = "[PT]" #移動不可能でも移動可能にするタグIDを指定するキーワードを指定 WORD5 = "PTA" #本来移動不可能でも、このイベントは移動可能になるマップタグIDを指定 TAG = [2, 3, 4] end class Game_CharacterBase #-------------------------------------------------------------------------- # イベントとの衝突判定 #-------------------------------------------------------------------------- alias collide_with_events_thr? collide_with_events? def collide_with_events?(x, y) check_thr_ev_data(true) return false if @thr_ev_pe collide_with_events_thr?(x, y) end #-------------------------------------------------------------------------- # マップ通行可能判定 #-------------------------------------------------------------------------- alias map_passable_thr? map_passable? def map_passable?(x, y, d) check_thr_ev_data(false) return true if @thr_ev_pm return true if thr_ev_pt(x, y) data = map_passable_thr?(x, y, d) data = (data ? false : true) if @thr_ev_pr return data end #-------------------------------------------------------------------------- # 特定タグのマップチップは移動不可能でも移動可能にする #-------------------------------------------------------------------------- def thr_ev_pt(x, y) false end #-------------------------------------------------------------------------- # イベント通行判定拡張データチェック #-------------------------------------------------------------------------- def check_thr_ev_data(type) end end class Game_Event < Game_Character #-------------------------------------------------------------------------- # 特定タグのマップチップは移動不可能でも移動可能にする #-------------------------------------------------------------------------- def thr_ev_pt(x, y) if @thr_ev_pta && !@thr_ev_pta.empty? t = $game_map.terrain_tag(x, y) @thr_ev_pta.include?(t) or (@thr_ev_pt && THR_EV::TAG.include?($game_map.terrain_tag(x, y))) else @thr_ev_pt && THR_EV::TAG.include?($game_map.terrain_tag(x, y)) end end #-------------------------------------------------------------------------- # イベント通行判定拡張データチェック #-------------------------------------------------------------------------- def check_thr_ev_data(type) if !@thr_ev_data or @thr_ev_data[0] != @event.name or @thr_ev_data[1] != @character_name @thr_ev_data = [@event.name,@character_name] if type @thr_ev_pe = @event.name.include?(THR_EV::WORD1) || @character_name.include?(THR_EV::WORD1) else @thr_ev_pm = @event.name.include?(THR_EV::WORD2) || @character_name.include?(THR_EV::WORD2) @thr_ev_pr = @event.name.include?(THR_EV::WORD3) || @character_name.include?(THR_EV::WORD3) @thr_ev_pt = @event.name.include?(THR_EV::WORD4) || @character_name.include?(THR_EV::WORD4) @thr_ev_pta = [] if /#{THR_EV::WORD5}[::](\S+)/ =~ @event.name @thr_ev_pta += $1.to_s.split(/\s*,\s*/).inject([]) {|r,i| r.push(i.to_i)} end if /#{THR_EV::WORD5}[::](\S+)/ =~ @character_name @thr_ev_pta += $1.to_s.split(/\s*,\s*/).inject([]) {|r,i| r.push(i.to_i)} end p @thr_ev_pta end end end end