#--------------------------------------------------------------------------- #シンボルエンカウンター用スクリプトver.1.4 #by bant #--------------------------------------------------------------------------- # # アップデート1.4(みんと) # 軽量化 # # アップデート1.3(みんと) # 軽量化 # # アップデート1.2 # 216行目から220行目 # イベントをスイッチなどで消去中にモンスターと接触した場合の対応 # # アップデート1.1 # 198行目と213行目 # イベント中にモンスターイベントと接触した場合の対応 # # このスクリプト素材は、エイリアスを用いています。 # 挿入場所は、Game_Eventより下で、 # 再定義が用いられているスクリプトより下に配置して下さい。 # # 手を加えたのは以下のスクリプトです。 # Game_Map # Game_Event # Game_Party # # 敵イベントの作り方 # イベント名:monster○(○は半角数字一桁) # 数字が敵イベントの警戒範囲になります。 # 警戒範囲についてはイベントの2ページ目の説明を見て下さい。 # # イベントの1ページ目 # 普段の敵イベントの動き方を設定します。 # 実行内容はなしで、 # 自律移動の内容で動き方を設定して下さい。 # # イベントの2ページ目 # プレイヤーが警戒範囲に入ってきた時の # 敵イベントの動きを設定します。 # 警戒範囲はイベント名で設定した数字マス以内です。 # 条件設定で、「セルフスイッチのAがonの時」を設定して下さい。 # 実行内容はなしで、 # 自律移動の設定で動き方を設定して下さい。 # 例えば、「プレイヤーに近づく」だと、プレイヤーに襲いかかってくる、 # という敵が表現できます。 # # イベントの3ページ目 # プレイヤーが戦闘範囲に入ってきた時に # 起こるイベントを設定します。 # 条件設定で、「セルフスイッチのBがonの時」を設定して下さい。 # トリガーは「自動実行」を設定して下さい。 # 実行内容は戦闘イベントを設定し、 # 勝った場合には最終的にセルフスイッチのCをonに、 # 逃げた場合にはセルフスイッチのDをonにするように設定して下さい。 # # イベントの4ページ目 # 戦闘に勝った後の処理を設定します。 # グラフィックを「なし」にするか、「すり抜け」をonにすると、 # プレイヤーの動きを阻害しなくなります。 # 条件設定で、「セルフスイッチのCがonの時」を設定して下さい。 # トリガーは「並列処理」を設定して下さい。 # 実行内容は、ウエイトで敵が復活するまでの時間を設定し、 # その後でセルフスイッチのA〜Cまでをoffにします。 # また、時間経過ではなく、マップの変更で敵イベントの復活を処理したい場合は、 # トリガーを「決定ボタン」にして、実行内容もなしにして下さい。 # # イベントの5ページ目 # 戦闘で逃亡した場合の処理を設定します。 # グラフィックの不透明度を変えると、通常時との区別が付きやすくなります。 # なお、この状態では距離による不透明度の変更はありません。 # 条件設定で、「セルフスイッチのDがonの時」を設定して下さい。 # トリガーは「並列処理」を設定して下さい。 # 実行内容は、ウエイトで敵の接触判定が戻るまでの時間を設定し、 # その後でセルフスイッチのA、B、Dをoffにします。 # 時間を設定していないと、すぐにまた戦闘になってしまうので注意が必要です。 # また、すり抜けを設定していなければプレイヤーの動きを阻害するので # 注意しておいて下さい。 # # 敵イベントの復活の制御の仕方 # マップ上の敵イベントを全て復活させたい場合は # $game_map.monster_refresh # というイベントスクリプトを実行して下さい(#を消すのをお忘れ無く)。 # 一つだけの敵イベントを復活させたい場合は # $game_map.one_monster_refresh(i) # (iは敵イベントのid(イベント設定時のウインドウの左上にあります)です) # というイベントスクリプトを実行して下さい。 # なお、 # $game_map.one_monster_refresh(i) # は、そのイベントの全てのセルフスイッチを解除する命令です。 # 敵イベント以外の処理にも役立つかもしれません。 # # カスタマイズポイント class Game_Map CHANGE_OPACITY = 64 # OPACITY_CHANGE_DISTANCE以上に離れると、敵イベントがこの不透明度になります OPACITY_CHANGE_DISTANCE = 208# 敵イベントの不透明度を変更する距離です BATTLE_START_DISTANCE = 48 # この距離になると、戦闘が開始されます # この2つの数字の単位は、すべてピクセルです。 # プレイヤーのキャラチップの中心一番下と、 # 敵イベントのキャラチップの中心一番下の座標を計算の基準にしています。 MAP_CHANGE_REFRESH = true # マップの切り替えによって、敵イベントが復活するかどうかです。 # 復活するならtrue、復活しないならfalseを設定して下さい。 end class Game_Party FAR_SIGHT = 56 # パーティの誰かがこのIDのステートになっていると、距離が離れていても # 不透明度が変化しません。不要な時は-1を設定して下さい。 end #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map alias bant_setup setup def setup(map_id) bant_setup(map_id) # モンスターイベントの登録 @monster_events = [] for events in @events.values if events.name =~ (/monster/) events.monster_id = @monster_events.size @monster_events.push(events.id) end end # モンスターの警戒範囲の登録 @monster_range = [] for i in 0...@monster_events.size range = @events[@monster_events[i]].name[-1,1].to_i range *= 32 @monster_range.push(range) end if MAP_CHANGE_REFRESH monster_refresh end end #-------------------------------------------------------------------------- # ☆ モンスターイベントの更新 #-------------------------------------------------------------------------- def update_monster(id) return if id == nil or @monster_events[id] == nil monster_update(@monster_events[id], @monster_range[id]) end #-------------------------------------------------------------------------- # ☆ イベントとプレイヤーの距離算定 #-------------------------------------------------------------------------- def event_distance(event_id) distance_x = (@events[event_id].screen_x - $game_player.screen_x).abs distance_y = (@events[event_id].screen_y - $game_player.screen_y).abs return distance_x + distance_y end #-------------------------------------------------------------------------- # ☆ セルフスイッチの操作 #-------------------------------------------------------------------------- def monster_switch(event_id,switch,value) key = [@map_id,event_id,switch] $game_self_switches[key] = value @events[event_id].refresh end #-------------------------------------------------------------------------- # ☆ 一つのモンスターイベントの初期化 #-------------------------------------------------------------------------- def one_monster_refresh(event_id) key1 = [@map_id,event_id,"A"] key2 = [@map_id,event_id,"B"] key3 = [@map_id,event_id,"C"] key4 = [@map_id,event_id,"D"] $game_self_switches[key1] = false $game_self_switches[key2] = false $game_self_switches[key3] = false $game_self_switches[key4] = false @events[event_id].refresh end #-------------------------------------------------------------------------- # ☆ 全てのモンスターイベントの初期化 #-------------------------------------------------------------------------- def monster_refresh for i in 0...@monster_events.size key1 = [@map_id,@monster_events[i],"A"] key2 = [@map_id,@monster_events[i],"B"] key3 = [@map_id,@monster_events[i],"C"] key4 = [@map_id,@monster_events[i],"D"] $game_self_switches[key1] = false $game_self_switches[key2] = false $game_self_switches[key3] = false $game_self_switches[key4] = false @events[@monster_events[i]].refresh end end #-------------------------------------------------------------------------- # ☆ モンスターイベントの制御 #-------------------------------------------------------------------------- def monster_update(event_id,range) #全てoffが徘徊状態 key1 = [@map_id,event_id,"A"] #警戒範囲内 key2 = [@map_id,event_id,"B"] #戦闘開始 key3 = [@map_id,event_id,"C"] #戦闘勝利 key4 = [@map_id,event_id,"D"] #戦闘逃走 if event_distance(event_id) >= OPACITY_CHANGE_DISTANCE #不透明度制御 if @events[event_id].opacity == 255 and $game_party.far_sight? == false @events[event_id].opacity_change(CHANGE_OPACITY) end elsif @events[event_id].opacity != 255 and $game_self_switches[key4] != true @events[event_id].opacity_change(255) end if !$game_system.map_interpreter.running? and !$game_player.move_route_forcing if event_distance(event_id) <= range #警戒範囲制御 unless $game_self_switches[key1] monster_switch(event_id,"A",true) end else if $game_self_switches[key1] monster_switch(event_id,"A",false) end end if event_distance(event_id) <= BATTLE_START_DISTANCE #戦闘開始制御 unless $game_self_switches[key2] and $game_self_switches[key3] and $game_self_switches[key4] monster_switch(event_id,"B",true) end else if $game_self_switches[key2] monster_switch(event_id,"B",false) end end end end end #============================================================================== # ■ Sprite_Character (分割定義 1) #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < RPG::Sprite #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias bant_update update def update # モンスターイベントを更新 $game_map.update_monster(@character.monster_id) bant_update end end #============================================================================== # ■ Game_Party #------------------------------------------------------------------------------ #  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク # ラスのインスタンスは $game_party で参照されます。 #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ☆ 遠見状態か? #-------------------------------------------------------------------------- def far_sight? if FAR_SIGHT != -1 result = false for actor in @actors if actor.state?(FAR_SIGHT) result = true end end return result else return false end end end #============================================================================== # ■ Game_Character (分割定義 1) #------------------------------------------------------------------------------ #  キャラクターを扱うクラスです。 # このクラスは Game_Player クラスと # Game_Eventクラスのスーパークラスとして使用されます。 #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :monster_id end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ☆ イベント名の取得 #-------------------------------------------------------------------------- def name return @event.name end #-------------------------------------------------------------------------- # ☆ 不透明度の調整 #-------------------------------------------------------------------------- def opacity_change(opacity) @opacity = opacity end end