#============================================================================== # アイテムに使用可能距離を追加 #============================================================================== module RPG class Item attr_accessor :range end end class Surume_WindowUnitCmd #-------------------------------------------------------------------------- # ● コマンド挿入 #-------------------------------------------------------------------------- alias :srmsim_item_set_commands :set_commands def set_commands commands = srmsim_item_set_commands commands.push("アイテム") return commands end #-------------------------------------------------------------------------- # ● C ボタンが押された場合 #-------------------------------------------------------------------------- alias :srmsim_item_cbutton_pushed :cbutton_pushed def cbutton_pushed if srmsim_item_cbutton_pushed == true return true end # コマンドウィンドウのカーソル位置で分岐 if @commands[self.index] == "アイテム" self.visible = false scene = Scene_SimItem.new if scene.main($scene.pick_event_id) return true end self.visible = true end return false end end class Scene_SimItem #-------------------------------------------------------------------------- # ヘルプウィンドウ、スキルウィンドウの位置設定 #-------------------------------------------------------------------------- def set_window_position if $scene.simstatus_window.y > 320 @help_window.y = 0 @item_window.y = 64 else @help_window.y = 480-64 @item_window.y = 480-64-296 end end def update # B ボタンが押された場合 if Input.trigger?(Input::B) return -1 # C ボタンが押された場合 elsif Input.trigger?(Input::C) # アクターを取得 actor = $game_map.events[@actor_index].actor # アイテムウィンドウで現在選択されているデータを取得 item = @item_window.item # 使用できない場合 unless $game_party.item_can_use?(item.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return 0 end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # アイテムウィンドウを不可視状態にする @item_window.visible = false @help_window.visible = false # 移動範囲クリア $game_map.move_algorythm.clear(2) # 選択ユニットの攻撃可能範囲計算 selected_event = $game_map.events[@actor_index] $game_map.move_algorythm.set_move_action_by_distance(selected_event.x, selected_event.y, 0, item.range) # 効果範囲が単体の場合 if item.scope == 1 or item.scope == 3 or item.scope == 5 unit_ret = false # 効果範囲が敵単体の場合 if item.scope == 1 # 敵を選択 unit_ret = $scene.select_enemy(item.range) else # 味方を選択 unit_ret = $scene.select_party(item.range) end if unit_ret == true enemy_id = $game_map.surume_check_event($game_player.x, $game_player.y) # 射程範囲内なら if enemy_id > 0 # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 消耗品の場合 if item.consumable # 使用したアイテムを 1 減らす $game_party.lose_item(item.id, 1) end # 戦闘シーンに移行 $scene.sim_battle(@actor_index, enemy_id, -item.id) return 1 end # キャンセルなら else # 表示を移動範囲へ $game_map.move_algorythm.set_move_action_by_move(selected_event.actor.range) $game_map.move_algorythm.clear(0xfffd) # 見やすい位置にウィンドウを移動 set_window_position # スキルウィンドウ表示 @item_window.visible = true @help_window.visible = true end # 効果範囲が単体ではない場合 else # スキルの選択を終了 return 1 end end return 0 end #-------------------------------------------------------------------------- # ● アイテム処理 #-------------------------------------------------------------------------- def main(actor_index) @actor_index = actor_index # ヘルプウィンドウ、スキルウィンドウを作成 @help_window = Window_Help.new @help_window.back_opacity = 160 @item_window = Window_Item.new @item_window.height = 296 @item_window.back_opacity = 160 # 見やすい位置に移動 set_window_position # ヘルプウィンドウを関連付け @item_window.help_window = @help_window ret = false # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # ウィンドウを更新 @help_window.update @item_window.update case update when 1 ret = true break when -1 ret = false break end end # ウィンドウを解放 @help_window.dispose @item_window.dispose return ret end end #============================================================================== # ■ Game_Party #------------------------------------------------------------------------------ #  戦闘時のアイテムでも通常(マップ画面)時でも使えるように変更 #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ● アイテムの使用可能判定 # item_id : アイテム ID #-------------------------------------------------------------------------- alias :srmsim_item_can_use? :item_can_use? def item_can_use?(item_id) # シミュレーション中でないときは今までどおり unless $game_map.in_simulation srmsim_item_can_use?(item_id) else # アイテムの個数が 0 個の場合 if item_number(item_id) == 0 # 使用不能 return false end return true end end end #============================================================================== # ■ Game_Temp #  アイテムの使用可能距離設定 #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias :srmsim_item_range_initialize :initialize def initialize srmsim_item_range_initialize for i in 0...$data_items.size item = $data_items[i] if item != nil item.range = range_from_element_set(item.element_set) end end end end