#============================================================================== # Zenith RGSS9 スキル合成スキル ver1.00 #   by 水夜 #  http://zenith.ifdef.jp/ #------------------------------------------------------------------------------ # 戦闘中に2つのスキルを合成して、合成結果に応じたスキルを発動。 #============================================================================== #============================================================================== # □ カスタマイズポイント #============================================================================== module ZENITH9 # スキル合成スキルを示す属性名 WS_ELEMENT_NAME = "スキル合成" end class Scene_Battle # 基本合成結果スキルのID DEFAULT_W_SKILL_ID = 31 # 合成順序を問わない(falseにすると合成順序別に個別のスキルを設定可能に) WS_ORDER_NEGLECT = true # スキル合成結果設定 # ここで設定しなかった組み合わせは DEFAULT_W_SKILL_ID のスキルが発動 def w_skill_result(list) case list when [1, 1], [1, 2] # 合成するスキルのIDの配列 return 3 # 合成結果スキルのID when [22, 61] return 59 #============================================================================== # □ カスタマイズポイント終了 #============================================================================== else return DEFAULT_W_SKILL_ID end end end class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :comp_skill_list # 合成スキルリスト #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias zenith9_initialize initialize def initialize @comp_skill_list = [] # 呼び戻す zenith9_initialize end end class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :select_skill # 選択スキル #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias zenith9_initialize initialize def initialize(actor) zenith9_initialize(actor) @comp = false @select_skill = [] end #-------------------------------------------------------------------------- # ○ スキル合成可能判定 #-------------------------------------------------------------------------- def comp_skill n = 0 # 使用可能スキルがあるか判定 for i in 0...@actor.skills.size skill = $data_skills[@actor.skills[i]] # スキルが使用可能ならOK if skill != nil and @actor.skill_can_use?(skill.id) if !skill.element_set.include?($data_system.elements.index(ZENITH9::WS_ELEMENT_NAME)) @comp = true return true end end end return false end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias zenith9_refresh refresh def refresh zenith9_refresh if @comp delete = [] for skill in @data if skill != nil and skill.element_set.include?($data_system.elements.index(ZENITH9::WS_ELEMENT_NAME)) delete.push(skill) end end @data -= delete if self.contents != nil self.contents.dispose self.contents = nil # 項目数が 0 でなければビットマップを作成し、全項目を描画 @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max draw_item(i) end end end end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- alias zenith9_update_help update_help def update_help if @comp case @select_skill.size when 0 @help_window.set_text("1つ目のスキルを選択してください。") when 1 @help_window.set_text("2つ目のスキルを選択してください。(1つ目:"+@select_skill[0].name+")") end return else zenith9_update_help end end end class Scene_Battle #-------------------------------------------------------------------------- # ● アクターコマンドウィンドウのセットアップ #-------------------------------------------------------------------------- alias zenith9_phase3_setup_command_window phase3_setup_command_window def phase9_setup_command_window # スキル合成スキルで使用するアイテム格納用配列を初期化 @active_battler.comp_skill_list = [] zenith9_phase3_setup_command_window end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ) #-------------------------------------------------------------------------- alias zenith9_update_phase3 update_phase3 def update_phase3 # 合成スキルウィンドウが有効の場合 if @w_skill_window != nil and @w_skill_window.visible update_phase3_w_skill_window return end # その他 zenith9_update_phase3 end #-------------------------------------------------------------------------- # ○ フレーム更新 (アクターコマンドフェーズ : 合成スキル選択) #-------------------------------------------------------------------------- def update_phase3_w_skill_window # 合成スキルウィンドウを可視状態にする @w_skill_window.visible = true # 合成スキルウィンドウを更新 @w_skill_window.update # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) case @w_skill_window.select_skill.size when 0 # 合成スキルの選択を終了 end_w_skill_select(false) when 1 # 1個目のスキルの消費SPを戻す @active_battler.sp += @first_skill.sp_cost # 選択スキルをリセット @w_skill_window.select_skill = [] @active_battler.comp_skill_list = [] # 合成アイテムウィンドウをリフレッシュ @w_skill_window.refresh end return end # C ボタンが押された場合 if Input.trigger?(Input::C) # スキルウィンドウで現在選択されているデータを取得 @w_skill = @w_skill_window.skill # 使用不可スキルの場合 if !@active_battler.skill_can_use?(@w_skill.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 何個目の選択かで分岐 case @w_skill_window.select_skill.size when 0 # 1個目 # 1個目のスキルを保存 @first_skill = @w_skill @w_skill_window.select_skill.push(@w_skill) # とりあえず仮SP消費 @active_battler.sp -= @first_skill.sp_cost # 合成アイテムウィンドウをリフレッシュ @w_skill_window.refresh when 1 # 2個目 # 1個目のスキルの消費SPを戻す @active_battler.sp += @first_skill.sp_cost # 選択スキルを保存 @w_skill_window.select_skill.push(@w_skill) list = @w_skill_window.select_skill @comp_skill_list = [list[0].id, list[1].id] @active_battler.comp_skill_list = @comp_skill_list.dup @active_battler.comp_skill_list[2] = @skill.id # 合成アイテムの選択を終了 end_w_skill_select(true) # 合成結果作成 make_comp_ws_effect # 次のアクターのコマンド入力へ phase3_next_actor end return end end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ : スキル選択) #-------------------------------------------------------------------------- alias zenith9_update_phase3_skill_select update_phase3_skill_select def update_phase3_skill_select # C ボタンが押された場合 if Input.trigger?(Input::C) and @active_battler.skill_can_use?(@skill_window.skill.id) # スキルウィンドウで現在選択されているデータを取得 @skill = @skill_window.skill if @skill.element_set.include?($data_system.elements.index(ZENITH9::WS_ELEMENT_NAME)) # 使用できない場合 if @skill == nil or not @active_battler.skill_can_use?(@skill.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 合成スキルウィンドウを作成 @w_skill_window = Window_Skill.new(@active_battler) @w_skill_window.visible = false # 合成できるスキルがない場合 if !@w_skill_window.comp_skill # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) # 合成スキルウィンドウを解放 @w_skill_window.dispose @w_skill_window = nil # ヘルプウィンドウを隠す @help_window.visible = false return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ヘルプウィンドウを関連付け @w_skill_window.help_window = @help_window # 合成スキル選択へ移行する start_w_skill_select return end end # 呼び戻す zenith9_update_phase3_skill_select end #-------------------------------------------------------------------------- # ○ 合成スキル選択開始 #-------------------------------------------------------------------------- def start_w_skill_select # とりあえず仮SP消費 @active_battler.sp -= @skill.sp_cost # 合成スキルウィンドウを可視化 @w_skill_window.visible = true @w_skill_window.active = true @w_skill_window.refresh # スキルウィンドウを無効化 @skill_window.active = false @skill_window.visible = false end #-------------------------------------------------------------------------- # ○ 合成スキル選択終了 #-------------------------------------------------------------------------- def end_w_skill_select(finish) # SPを戻す @active_battler.sp += @skill.sp_cost # 合成スキルウィンドウを解放 @w_skill_window.dispose @w_skill_window = nil # ヘルプウィンドウを隠す @help_window.visible = false if finish # スキルウィンドウを解放 @skill_window.dispose @skill_window = nil else # スキルウィンドウを有効化 @skill_window.active = true @skill_window.visible = true end end #-------------------------------------------------------------------------- # ○ スキル合成結果作成 #-------------------------------------------------------------------------- def make_comp_ws_effect # 合成結果を読み込む skill_id = w_skill_result(@comp_skill_list) # 順序を問わない、かつ結果が基本スキルだった場合、ひっくり返してもう1度 if WS_ORDER_NEGLECT and skill_id == DEFAULT_W_SKILL_ID skill_id = w_skill_result(@comp_skill_list.reverse) end # アクションを設定 @active_battler.current_action.skill_id = skill_id # 対象はランダム @active_battler.current_action.decide_random_target_for_actor # 強制フラグを設定 @active_battler.current_action.forcing = true end #-------------------------------------------------------------------------- # ● スキルアクション 結果作成 #-------------------------------------------------------------------------- alias zenith9_make_skill_action_result make_skill_action_result def make_skill_action_result # 合成スキルを使用する場合 if @active_battler.comp_skill_list != nil and @active_battler.comp_skill_list != [] ws_list = @active_battler.comp_skill_list ws_skill = $data_skills[@active_battler.current_action.skill_id] # もとの合成スキルが使用できる状態か if @active_battler.skill_can_use?(ws_list[2]) # もとの合成スキルの SP 仮消費 @active_battler.sp -= $data_skills[ws_list[2]].sp_cost # 2つの合成元スキルが使用できるなら次の段階へ if @active_battler.skill_can_use?(ws_list[0]) and @active_battler.skill_can_use?(ws_list[1]) # 2つの合成元スキルの SP 仮消費 @active_battler.sp -= $data_skills[ws_list[0]].sp_cost @active_battler.sp -= $data_skills[ws_list[1]].sp_cost # 発動スキルのSPが足りるならOK if @active_battler.sp >= ws_skill.sp_cost @active_battler.comp_skill_list = [] else # SP を戻す @active_battler.sp += $data_skills[ws_list[0]].sp_cost @active_battler.sp += $data_skills[ws_list[1]].sp_cost @active_battler.sp += $data_skills[ws_list[2]].sp_cost @active_battler.comp_skill_list = [] # ステップ 1 に移行 @phase4_step = 1 return end # 足りていなかったら行動中止 else # SP を戻す @active_battler.sp += $data_skills[ws_list[0]].sp_cost @active_battler.sp += $data_skills[ws_list[1]].sp_cost @active_battler.sp += $data_skills[ws_list[2]].sp_cost @active_battler.comp_skill_list = [] # ステップ 1 に移行 @phase4_step = 1 return end else @active_battler.comp_skill_list = [] # ステップ 1 に移行 @phase4_step = 1 return end end # 呼び戻す zenith9_make_skill_action_result end end