#============================================================================== # ■ VX-RGSS2-11 装備交換スキル [Ver.1.0.1] by Claimh #------------------------------------------------------------------------------ # スキルを使用した者の装備を変更するスキルです。 # 戦闘後には、元の装備へ戻ります。 #-[VX特別ルール]--------------------------------------------------------------- # 両手武器を装備中に盾の装備交換を行うと武器も解除。(戦闘後には元に戻る) # 二刀流武器を装備する場合、二刀流が使えないと装備できません。 # 両手武器を装備する場合、盾or二刀流武器は解除されます。(戦闘後には元に戻る) # 二刀流の両方を交換する対応は入れてません。 #-[VX特別ルール2]-------------------------------------------------------------- # 装備交換状態で、イベントの「武器の増減:減らす&装備品も含む」を実行させた場合、 # 装備交換前の装備品は減らされません。 #============================================================================== module Change_Equip SET_EQIUP = [] #============================================================================== # □ カスタマイズSTART #============================================================================== # 使用者にステートを付与するスキルの情報を記述 # SET_EQIUP[スキルID] = [装備種類, 武器IDor防具ID] # 装備種類: #  0:武器 1:盾 2:頭 3:身体 4:装飾品 5:二刀流武器 SET_EQIUP[83] = [0,31] # 炎の舞で炎の剣を装備 SET_EQIUP[84] = [0,32] # アイスブレードでフリーズランスを装備 SET_EQIUP[85] = [1,31] # 光の盾で光の盾を装備 SET_EQIUP[86] = [0,33] # 魔銃開放で魔銃「炎」を装備 #============================================================================== # □ カスタマイズEND #============================================================================== module_function # 装備交換の判定 def is_data_nil?(skill_id) return SET_EQIUP[skill_id].nil? end # 装備タイプ取得 def equip_type(skill_id) return SET_EQIUP[skill_id][0] end # 装備アイテム取得 def equip_item(skill_id) if equip_type(skill_id) == 0 or (equip_type(skill_id) == 5) return $data_weapons[SET_EQIUP[skill_id][1]] else return $data_armors[SET_EQIUP[skill_id][1]] end end # 表示文作成 def make_ch_equip_text(skill_id) item = equip_item(skill_id) case equip_type(skill_id) when 0; text = Vocab.weapon + "を" + item.name + "に持ち替えた" when 1; text = Vocab.armor1 + "を" + item.name + "に持ち替えた" when 2; text = Vocab.armor2 + "に" + item.name + "をかぶった" when 3; text = item.name + "を身に着けた" when 4; text = Vocab.armor4 + "に" + item.name + "を付けた" when 5; text = Vocab.weapon2 + "を" + item.name + "に持ち替えた" else; text = item.name + "を練成した" end return text end end class Scene_Battle #-------------------------------------------------------------------------- # ● 戦闘開始の処理 #-------------------------------------------------------------------------- alias process_battle_start_change_equip process_battle_start def process_battle_start # 装備武器を記憶 for actor in $game_party.members actor.remember_equip_set end process_battle_start_change_equip end #-------------------------------------------------------------------------- # ● 戦闘終了 # result : 結果 (0:勝利 1:逃走 2:敗北) #-------------------------------------------------------------------------- alias battle_end_change_equip battle_end def battle_end(result) # 装備を元に戻す for actor in $game_party.members actor.restore_equip_set end battle_end_change_equip(result) end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : スキル #-------------------------------------------------------------------------- alias execute_action_skill_change_equip execute_action_skill def execute_action_skill if @active_battler.is_a?(Game_Actor) # 装備交換 if @active_battler.skill_ch_equip(@active_battler.action.skill.id) # テキスト表示 text = @active_battler.name + "は" + Change_Equip.make_ch_equip_text(@active_battler.action.skill.id) @message_window.add_instant_text(text) end end execute_action_skill_change_equip end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 職業 ID の変更 # class_id : 新しい職業 ID #-------------------------------------------------------------------------- alias class_id_equip_ch class_id= def class_id=(class_id) if $game_temp.in_battle c_e_set=[@weapon_id,@armor1_id,@armor2_id,@armor3_id,@armor4_id] c_e_flag = @ch_flag.dup restore_equip_set # 装備を元に戻す class_id_equip_ch(class_id) # クラス変更(原型) remember_equip_set # 初期装備を再記憶 for type in 0..4 next unless c_e_flag[type] item = type == 0 ? $data_weapons[c_e_set[0]] : $data_armors[c_e_set[type]] next unless equippable?(item) change_equip_by_id(type, c_e_set[type], true) set_ch_flag(type) end else class_id_equip_ch(class_id) # クラス変更(原型) end end #-------------------------------------------------------------------------- # ● 戦闘開始時の装備を記憶 #-------------------------------------------------------------------------- def remember_equip_set @equip_set = { 0 => @weapon_id, 1 => @armor1_id, 2 => @armor2_id, 3 => @armor3_id, 4 => @armor4_id } @ch_flag = [false, false, false, false, false] end #-------------------------------------------------------------------------- # ● 戦闘中の装備変更 # equip_type : 装備部位 (0..4) # item_id : 武器 ID or 防具 ID #-------------------------------------------------------------------------- def change_equip_in_battle(type, item_id) # 装備交換されていた場合は元に戻す change_equip_by_id(type, @equip_set[type], true) if @ch_flag[type] case type when 0 # 両手武器なら盾も装備解除されてるので復元 if $data_weapons[@equip_set[type]].two_handed and @ch_flag[1] change_equip_by_id(1, @equip_set[1], true) @ch_flag[1] = false end when 1 # 盾なら両手武器も装備解除されてるので復元 if weapons[0].two_handed and @ch_flag[0] change_equip_by_id(0, @equip_set[0], true) @ch_flag[0] = false end end change_equip_by_id(type, item_id, false) # 装備変更 @equip_set[type] = item_id @ch_flag[type] = false end #-------------------------------------------------------------------------- # ● 戦闘開始時の装備を復元 #-------------------------------------------------------------------------- def restore_equip_set for type in 0..4 # 装備交換されていた場合は元に戻す change_equip_by_id(type, @equip_set[type], true) if @ch_flag[type] end remember_equip_set end #-------------------------------------------------------------------------- # ● 戦闘中の装備変更を記憶 #-------------------------------------------------------------------------- def set_ch_flag(equip_type) @ch_flag[equip_type] = true end #-------------------------------------------------------------------------- # ● 装備交換スキル処理実行 #-------------------------------------------------------------------------- def skill_ch_equip(skill_id) # 装備交換スキルではない return false if Change_Equip.is_data_nil?(skill_id) # 装備固定の場合 return false if fix_equipment item = Change_Equip.equip_item(skill_id) # 装備できない return false unless equippable?(item) type = Change_Equip.equip_type(skill_id) if type == 5 # 二刀流 return false unless two_swords_style # 二刀流ではないなら却下 type = 1 # 二刀流はtype-1なので置き換える end # 装備交換 change_equip(type, item, true) # 装備変更履歴を残す set_ch_flag(type) check_change_equip(type, item) return true end #-------------------------------------------------------------------------- # ● 特例条件の判定 #-------------------------------------------------------------------------- def check_change_equip(type, item) case type when 0 # 両手武器なら盾も装備解除されるので、履歴を残す set_ch_flag(1) if item.two_handed when 1 # 盾なら両手武器も装備解除されるので、履歴を残す set_ch_flag(0) if weapons[0].two_handed end end end class Game_Party attr_accessor :party_equip_set # 装備記憶場所 #-------------------------------------------------------------------------- # ● アクターを加える # actor_id : アクター ID #-------------------------------------------------------------------------- alias add_actor_equip_ch add_actor def add_actor(actor_id) # 戦闘中? if $scene.is_a?(Scene_Battle) # アクター加入時の装備を記憶(戦闘中のみ) $game_actors[actor_id].remember_equip_set end add_actor_equip_ch(actor_id) end #-------------------------------------------------------------------------- # ● アクターを外す # actor_id : アクター ID #-------------------------------------------------------------------------- alias remove_actor_equip_ch remove_actor def remove_actor(actor_id) # 戦闘中? if $scene.is_a?(Scene_Battle) # 装備元を削除 $game_actors[actor_id].restore_equip_set end remove_actor_equip_ch(actor_id) end end class Game_Interpreter #-------------------------------------------------------------------------- # ● 装備の変更 #-------------------------------------------------------------------------- alias command_319_equip_ch command_319 def command_319 if $game_temp.in_battle # 戦闘中は装備交換を意識する actor = $game_actors[@params[0]] if actor != nil actor.change_equip_in_battle(@params[1], @params[2]) end return true else return command_319_equip_ch end end end