#============================================================================== # Zenith RGSS8 アイテム合成スキル ver1.03 #   by 水夜 #  http://zenith.ifdef.jp/ #------------------------------------------------------------------------------ # 戦闘中に2つのアイテムを合成して、合成アイテムに応じたスキルを発動。 #============================================================================== #============================================================================== # □ カスタマイズポイント #============================================================================== class Scene_Battle # アイテム合成スキルを示す属性名 IS_ELEMENT_NAME = "アイテム合成" # 基本合成結果スキルのID DEFAULT_SKILL_ID = 31 # 合成順序を問わない(falseにすると合成順序別に個別のスキルを設定可能に) ORDER_NEGLECT = true # アイテム合成結果設定 # ここで設定しなかった組み合わせは DEFAULT_SKILL_ID のスキルが発動 def skill_result(list) case list when [1, 1], [1, 2] # 合成アイテムのIDの配列 return 1 # 合成結果スキルのID when [1, 3], [2, 2] ,[2, 3] return 2 when [3, 3] return 3 when [8, 13] return 27 when [13, 13] return 64 #============================================================================== # □ カスタマイズポイント終了 #============================================================================== else return DEFAULT_SKILL_ID end end end class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :comp_item_list # 合成アイテムリスト #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias zenith8_initialize initialize def initialize @comp_item_list = [] # 呼び戻す zenith8_initialize end end class Window_Item < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :select_item # 選択アイテム #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias zenith8_initialize initialize def initialize zenith8_initialize @comp = false @select_item = [] end #-------------------------------------------------------------------------- # ○ アイテム合成可能判定 #-------------------------------------------------------------------------- def comp_item n = 0 # 使用可能アイテムが2個以上あるか判定 for i in 1...$data_items.size # 1種類で2個以上あればOK if $game_party.item_number(i) >= 2 and $game_party.item_can_use?(i) @comp = true return true elsif $game_party.item_number(i) == 1 and $game_party.item_can_use?(i) # 非消耗アイテムなら1個でもOK if !$data_items[i].consumable @comp = true return true else n += 1 end end end # 1個でも2種類以上あればOK if n >= 2 @comp = true return true end return false end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- alias zenith8_update_help update_help def update_help if @comp case @select_item.size when 0 @help_window.set_text("1つ目のアイテムを選択してください。") when 1 @help_window.set_text("2つ目のアイテムを選択してください。(1つ目:"+@select_item[0].name+")") end return else zenith8_update_help end end end class Scene_Battle #-------------------------------------------------------------------------- # ● アクターコマンドウィンドウのセットアップ #-------------------------------------------------------------------------- alias zenith8_phase3_setup_command_window phase3_setup_command_window def phase3_setup_command_window # アイテム合成スキルで使用するアイテム格納用配列を初期化 @active_battler.comp_item_list = [] zenith8_phase3_setup_command_window end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ) #-------------------------------------------------------------------------- alias zenith8_update_phase3 update_phase3 def update_phase3 # 合成アイテムウィンドウが有効の場合 if @itemskill_window != nil and @itemskill_window.visible update_phase3_itemskill_window return end # その他 zenith8_update_phase3 end #-------------------------------------------------------------------------- # ○ フレーム更新 (アクターコマンドフェーズ : 合成アイテム選択) #-------------------------------------------------------------------------- def update_phase3_itemskill_window # 合成アイテムウィンドウを可視状態にする @itemskill_window.visible = true # 合成アイテムウィンドウを更新 @itemskill_window.update # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) case @itemskill_window.select_item.size when 0 # 合成アイテムの選択を終了 end_itemskill_select(false) when 1 # 1個目のアイテムを戻す if @first_item.consumable $game_party.gain_item(@first_item.id, 1) end # 選択アイテムをリセット @itemskill_window.select_item = [] @active_battler.comp_item_list = [] # 合成アイテムウィンドウをリフレッシュ @itemskill_window.refresh end return end # C ボタンが押された場合 if Input.trigger?(Input::C) # アイテムウィンドウで現在選択されているデータを取得 @item = @itemskill_window.item # 使用不可アイテムの場合 if !$game_party.item_can_use?(@item.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 何個目の選択かで分岐 case @itemskill_window.select_item.size when 0 # 1個目 # 1個目のアイテムを保存 @first_item = @item @itemskill_window.select_item.push(@item) # とりあえず仮アイテム消費 if @first_item.consumable $game_party.lose_item(@item.id, 1) end # 合成アイテムウィンドウをリフレッシュ @itemskill_window.refresh when 1 # 2個目 # 1個目のアイテムを戻す if @first_item.consumable $game_party.gain_item(@first_item.id, 1) end # 選択アイテムを保存 @itemskill_window.select_item.push(@item) list = @itemskill_window.select_item @comp_item_list = [list[0].id, list[1].id] @active_battler.comp_item_list = @comp_item_list.dup @active_battler.comp_item_list[2] = @skill.id # 合成アイテムの選択を終了 end_itemskill_select(true) # 合成結果作成 make_comp_effect # 次のアクターのコマンド入力へ phase3_next_actor end return end end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ : スキル選択) #-------------------------------------------------------------------------- alias zenith8_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(IS_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 # 合成アイテムウィンドウを作成 @itemskill_window = Window_Item.new @itemskill_window.visible = false # 合成できるアイテムが足りない場合 if !@itemskill_window.comp_item # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) # 合成アイテムウィンドウを解放 @itemskill_window.dispose @itemskill_window = nil # ヘルプウィンドウを隠す @help_window.visible = false return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ヘルプウィンドウを関連付け @itemskill_window.help_window = @help_window # 合成アイテム選択へ移行する start_itemskill_select return end end # 呼び戻す zenith8_update_phase3_skill_select end #-------------------------------------------------------------------------- # ○ 合成アイテム選択開始 #-------------------------------------------------------------------------- def start_itemskill_select # 合成アイテムウィンドウを可視化 @itemskill_window.visible = true @itemskill_window.active = true # スキルウィンドウを無効化 @skill_window.active = false @skill_window.visible = false end #-------------------------------------------------------------------------- # ○ 合成アイテム選択終了 #-------------------------------------------------------------------------- def end_itemskill_select(finish) # 合成アイテムウィンドウを解放 @itemskill_window.dispose @itemskill_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_effect # 合成結果を読み込む skill_id = skill_result(@comp_item_list) # 順序を問わない、かつ結果が基本スキルだった場合、ひっくり返してもう1度 if ORDER_NEGLECT and skill_id == DEFAULT_SKILL_ID skill_id = skill_result(@comp_item_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 zenith8_make_skill_action_result make_skill_action_result def make_skill_action_result # 合成スキルを使用する場合 if @active_battler.comp_item_list != nil and @active_battler.comp_item_list != [] list = @active_battler.comp_item_list skill = $data_skills[@active_battler.current_action.skill_id] # もとの合成スキルが使用できる状態か if @active_battler.skill_can_use?(list[2]) # もとの合成スキルの SP 仮消費 @active_battler.sp -= $data_skills[list[2]].sp_cost # アイテムが足りていて、発動スキルが使用できるSPがあるならアイテム消費 if $game_party.item_can_use?(list[0]) and $game_party.item_can_use?(list[1]) and @active_battler.sp >= skill.sp_cost # 消耗アイテムの場合のみ消費 if $data_items[list[0]].consumable $game_party.lose_item(list[0], 1) end if $data_items[list[1]].consumable $game_party.lose_item(list[1], 1) end @active_battler.comp_item_list = [] # 足りていなかったら行動中止 else # もとの合成スキルの SP 回復 @active_battler.sp += $data_skills[list[2]].sp_cost @active_battler.comp_item_list = [] # ステップ 1 に移行 @phase4_step = 1 return end else @active_battler.comp_item_list = [] # ステップ 1 に移行 @phase4_step = 1 return end end # 呼び戻す zenith8_make_skill_action_result end end