#============================================================================== # ■ RGSS3 移動可否判定リージョン Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 指定した場所のリージョンIDが特定の値である場合 # タイルによる移動判定を無視して移動可否を決定します。 # これにより、プレイヤーは通行できるがイベントが通行できない座標や # 逆にイベントが通行できるがプレイヤーは通行できない座標が作成出来ます。 #============================================================================== # イベントの名前欄に指定 #------------------------------------------------------------------------------ # # # このイベントはEOKの設定に加え、リージョンID59も移動可能になる。 #------------------------------------------------------------------------------ # # # このイベントはEOKの設定に加え、リージョンID58・59も移動可能になる。 #------------------------------------------------------------------------------ # # # このイベントはENGの設定に加え、リージョンID59も移動不可になる。 #------------------------------------------------------------------------------ # # # このイベントはENGの設定に加え、リージョンID58・59も移動不可になる。 #============================================================================== module SuperPassableRegion Word1 = "POKR" Word2 = "PNGR" #イベントの通行可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 #名前欄の設定に自動的に追加されます。 EOK = [60] #イベントの通行不可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 #名前欄の設定に自動的に追加されます。 ENG = [61] #プレイヤー(歩行時)の通行可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 POK = [62] #プレイヤー(歩行時)の通行不可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 PNG = [63] #小型船の通行可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 BOK = [54] #小型船の通行不可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 BNG = [55] #大型船の通行可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 SOK = [56] #大型船の通行不可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 SNG = [57] #飛行船の通行可リージョンについては常にすり抜け判定の為、設定を行わない。 #飛行船の通行不可リージョンIDの配列を設定。 #「,」で区切って複数設定可能。 ANG = [59] end class Game_CharacterBase #-------------------------------------------------------------------------- # マップ通行可能判定 #-------------------------------------------------------------------------- alias map_passable_super_passable_region1? map_passable? def map_passable?(x, y, d) case super_passable_region?(x, y) when 1;return true when 2;return false end map_passable_super_passable_region1?(x, y, d) end #-------------------------------------------------------------------------- # 通行可能判定 #-------------------------------------------------------------------------- alias passable_super_passable_region? passable? def passable?(x, y, d) $game_map.super_passable_region_airship = self.is_a?(Game_Player) ? self.in_airship? : false r = passable_super_passable_region?(x, y, d) $game_map.super_passable_region_airship = nil r end #-------------------------------------------------------------------------- # リージョンによる通行可否判定 #-------------------------------------------------------------------------- def super_passable_region?(x, y) 0 end end class Game_Map attr_accessor :super_passable_region_airship #-------------------------------------------------------------------------- # 有効座標判定 #-------------------------------------------------------------------------- alias valid_super_passable_region? valid? def valid?(x, y) return true if @force_valid_true_for_super_passable_region r1 = valid_super_passable_region?(x, y) return r1 unless r1 @force_valid_true_for_super_passable_region = true r2 = @super_passable_region_airship ? !SuperPassableRegion::ANG.include?(region_id(x, y)) : true @force_valid_true_for_super_passable_region = nil r2 end end class Game_Event < Game_Character #-------------------------------------------------------------------------- # リージョンによる通行可否判定 #-------------------------------------------------------------------------- def super_passable_region?(x, y) r = $game_map.region_id(x, y) return 1 if @event.super_passable_region[:ok].include?(r) return 2 if @event.super_passable_region[:ng].include?(r) 0 end end class RPG::Event #-------------------------------------------------------------------------- # リージョンによる通行可否 #-------------------------------------------------------------------------- def super_passable_region @super_passable_region ||= create_super_passable_region end #-------------------------------------------------------------------------- # リージョンによる通行可否データの作成 #-------------------------------------------------------------------------- def create_super_passable_region h = {:ok => SuperPassableRegion::EOK.clone,:ng => SuperPassableRegion::ENG.clone} $1.to_s.split(/\s*,\s*/).each {|i| h[:ok].push(i.to_i)} if /<#{SuperPassableRegion::Word1}[::](\S+)>/ =~ name $1.to_s.split(/\s*,\s*/).each {|i| h[:ng].push(i.to_i)} if /<#{SuperPassableRegion::Word2}[::](\S+)>/ =~ name h end end class Game_Player < Game_Character #-------------------------------------------------------------------------- # リージョンによる通行可否判定 #-------------------------------------------------------------------------- def super_passable_region?(x, y) r = $game_map.region_id(x, y) return 1 if SuperPassableRegion::POK.include?(r) return 2 if SuperPassableRegion::PNG.include?(r) 0 end #-------------------------------------------------------------------------- # マップ通行可能判定 #-------------------------------------------------------------------------- alias map_passable_super_passable_region2? map_passable? def map_passable?(x, y, d) r = $game_map.region_id(x, y) case @vehicle_type when :boat return true if SuperPassableRegion::BOK.include?(r) return false if SuperPassableRegion::BNG.include?(r) when :ship return true if SuperPassableRegion::SOK.include?(r) return false if SuperPassableRegion::SNG.include?(r) end map_passable_super_passable_region2?(x, y, d) end end