class Surume_WindowUnitCmd #-------------------------------------------------------------------------- # ● コマンド挿入 #-------------------------------------------------------------------------- alias :srmsim_skill_set_commands :set_commands def set_commands commands = srmsim_skill_set_commands commands.push("スキル") return commands end #-------------------------------------------------------------------------- # ● C ボタンが押された場合 #-------------------------------------------------------------------------- alias :srmsim_skill_cbutton_pushed :cbutton_pushed def cbutton_pushed if srmsim_skill_cbutton_pushed == true return true end # コマンドウィンドウのカーソル位置で分岐 if @commands[self.index] == "スキル" self.visible = false scene = Scene_SimSkill.new if scene.main($scene.pick_event_id) return true end self.visible = true end return false end end #============================================================================== # ■ Scene_SimSkill #------------------------------------------------------------------------------ #  シミュレーションでスキル画面の処理を行うクラスです。 #============================================================================== class Scene_SimSkill #-------------------------------------------------------------------------- # ヘルプウィンドウ、スキルウィンドウの位置設定 #-------------------------------------------------------------------------- def set_window_position if $scene.simstatus_window.y > 320 @help_window.y = 0 @skill_window.y = 64 else @help_window.y = 480-64 @skill_window.y = 480-64-296 end end #-------------------------------------------------------------------------- # ● フレーム更新 (スキルウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # メニュー画面に切り替え return -1 end # C ボタンが押された場合 if Input.trigger?(Input::C) # アクターを取得 actor = $game_map.events[@actor_index].actor # スキルウィンドウで現在選択されているデータを取得 skill = @skill_window.skill # 使用できない場合 if skill == nil or not actor.skill_can_use?(skill.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return 0 end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # スキルウィンドウを不可視状態にする @skill_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, skill.range) # 効果範囲が単体の場合 if skill.scope == 1 or skill.scope == 3 or skill.scope == 5 unit_ret = false # 効果範囲が敵単体の場合 if skill.scope == 1 # 敵を選択 unit_ret = $scene.select_enemy(skill.range) else # 味方を選択 unit_ret = $scene.select_party(skill.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) # 戦闘シーンに移行 $scene.sim_battle(@actor_index, enemy_id, skill.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 # スキルウィンドウ表示 @skill_window.visible = true @help_window.visible = true end # 効果範囲が単体ではない場合 else # スキルの選択を終了 return 1 end end return 0 end #-------------------------------------------------------------------------- # ● スキル処理 #-------------------------------------------------------------------------- def main(actor_index) @actor_index = actor_index # アクターを取得 actor = $game_map.events[@actor_index].actor # ヘルプウィンドウ、スキルウィンドウを作成 @help_window = Window_Help.new @help_window.back_opacity = 160 @skill_window = Window_Skill.new(actor) @skill_window.height = 296 @skill_window.back_opacity = 160 # 見やすい位置に移動 set_window_position # ヘルプウィンドウを関連付け @skill_window.help_window = @help_window # メインループ ret = false loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # ウィンドウを更新 @help_window.update @skill_window.update case update when 1 ret = true break when -1 ret = false break end end # トランジション準備 #Graphics.freeze # ウィンドウを解放 @skill_window.dispose @help_window.dispose return ret end end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ #  戦闘時のスキルでも通常(マップ画面)時でも使えるように変更 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● スキルの使用可能判定 # skill_id : スキル ID #-------------------------------------------------------------------------- alias :srmsim_skill_can_use? :skill_can_use? def skill_can_use?(skill_id) # シミュレーション中でないときは今までどおり unless $game_map.in_simulation srmsim_skill_can_use?(skill_id) else # SP が足りない場合は使用不可 if $data_skills[skill_id].sp_cost > self.sp return false end # 戦闘不能の場合は使用不可 if dead? return false end # 沈黙状態の場合、物理スキル以外は使用不可 if $data_skills[skill_id].atk_f == 0 and self.restriction == 1 return false end return true end end end