#◆◇◆◇◆ ☆ 装備拡張ステート ver 1.00 ◇◆◇◆◇ # ☆ マスタースクリプト ver 2.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 説明 あるステートが付加されている場合のみ、 装備可能な武具を増やします。 ほぼ、防具やスキルのオートステート専用です。 例・剣装備可能など この場合、 『剣装備可能』というステート付加時にのみ、 剣が装備できるようになったりします。 逆に言えば、 そのステートじゃないと 装備できない武具も作成可能です。 詳しくは内部のソースを参照してください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 装備拡張ステートを有効化( true で有効 / false で無効 ) RGSS["Equip_State"] = true end if MINTO::RGSS["Equip_State"] #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行えます。 # ex : 特定のステートが掛かっている場合のみ、 # 特定のクラスの装備可能な武具のリストを追加します。 # 例えば、「剣装備可能」というステートを作るなら、 # 仮にステートのIDが2番だとして、 # 同時にID 5番のクラスを「剣装備可能」とします。 # その際、ID 5番のクラスの装備可能な武器を剣のみにすれば、 # ID 2番のステートが付加されている場合のみ、剣が装備できます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 装備可能な武器の取得 #-------------------------------------------------------------------------- def equip_weapon # 現在のクラスの装備可能な武器を取得 list = Data_Classes.data[@class_id].weapon_set.dup # ☆ ここからカスタマイズ部分 # 例・ID 2 のステートにかかっている場合 if state?(2) # ID 5番のクラスの装備可能な武器を追加 list += Data_Classes.data[5].weapon_set.dup end # 例・ID 3 のステートにかかっている場合 if state?(3) # ID 6番のクラスの装備可能な武器を追加 list += Data_Classes.data[6].weapon_set.dup end # ☆ ここまで # 配列の重複をなくす list = list & list # 配列をIDが低い順にソート list.sort! # 配列を返す return list end #-------------------------------------------------------------------------- # ● 装備可能な防具の取得 #-------------------------------------------------------------------------- def equip_armor # 現在のクラスの装備可能な防具を取得 list = Data_Classes.data[@class_id].armor_set.dup # ☆ ここからカスタマイズ部分 # 例・ID 4 のステートにかかっている場合 if state?(4) # ID 7番のクラスの装備可能な防具を追加 list += Data_Classes.data[7].armor_set.dup end # 例・ID 5 のステートにかかっている場合 if state?(5) # ID 8番のクラスの装備可能な防具を追加 list += Data_Classes.data[8].armor_set.dup end # ☆ ここまで # 配列の重複をなくす list = list & list # 配列をIDが低い順にソート list.sort! # 配列を返す return list end #-------------------------------------------------------------------------- # ● 装備可能判定 # item : アイテム #-------------------------------------------------------------------------- def equippable?(item) # 武器の場合 if item.is_a?(RPG::Weapon) # 装備可能な武器に含まれている場合 if equip_weapon.include?(item.id) # 処理を終了(装備可能とみなす) return true end end # 防具の場合 if item.is_a?(RPG::Armor) # 装備可能な防具に含まれている場合 if equip_armor.include?(item.id) # 処理を終了(装備可能とみなす) return true end end # 装備不可能フラグを返す return false end #-------------------------------------------------------------------------- # ● 装備更新処理 #-------------------------------------------------------------------------- def equip_update # 装備できなくなった武器を外す if @weapon_id > 0 and not equippable?(Data_Weapons.data[@weapon_id]) equip(0, 0) end # 装備できなくなった盾を外す if @armor1_id > 0 and not equippable?(Data_Armors.data[@armor1_id]) equip(1, 0) end # 装備できなくなった頭防具を外す if @armor2_id > 0 and not equippable?(Data_Armors.data[@armor2_id]) equip(2, 0) end # 装備できなくなった身体防具を外す if @armor3_id > 0 and not equippable?(Data_Armors.data[@armor3_id]) equip(3, 0) end # 装備できなくなった装飾品を外す if @armor4_id > 0 and not equippable?(Data_Armors.data[@armor4_id]) equip(4, 0) end end #-------------------------------------------------------------------------- # ● ステートの解除 # state_id : ステート ID # force : 強制解除フラグ (オートステートの処理で使用) #-------------------------------------------------------------------------- alias remove_state_Equip_State remove_state def remove_state(state_id, force = false) # 元の処理を実行 remove_state_Equip_State(state_id, force) # 装備を更新 equip_update end end #============================================================================== # ■ Window_EquipItem #------------------------------------------------------------------------------ #  装備画面で、装備変更の候補となるアイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_EquipItem < Window_Selectable #-------------------------------------------------------------------------- # ● 装備可能な武器の取得 #-------------------------------------------------------------------------- def get_weapon_list # 装備可能な武器の配列を取得 weapon_set = @actor.equip_weapon # イテレータで検索 weapon_set.each do |id| # 一つでも所持している場合 if $game_party.weapon_number(id) > 0 # データに追加 @data.push(Data_Weapons.data[id]) end end end #-------------------------------------------------------------------------- # ● 装備可能な防具の取得 #-------------------------------------------------------------------------- def get_armor_list # 装備可能な防具の配列を取得 armor_set = @actor.equip_armor # イテレータで検索 armor_set.each do |id| # 一つでも所持している場合 if $game_party.armor_number(id) > 0 # 防具の種類が等しい場合 if Data_Armors.data[id].kind == @equip_type-1 # データに追加 @data.push(Data_Armors.data[id]) end end end end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] # 装備可能な武器を追加 if @equip_type == 0 get_weapon_list else # 装備可能な防具を追加 get_armor_list end # 空白を追加 @data.push(nil) # ビットマップを作成し、全項目を描画 @item_max = @data.size self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max-1 draw_item(i) end end end #============================================================================== # ■ Scene_Equip #------------------------------------------------------------------------------ #  装備画面の処理を行うクラスです。 #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● フレーム更新 (アイテムウィンドウがアクティブの場合) #-------------------------------------------------------------------------- alias update_item_Equip_State update_item def update_item # 元の処理を実行 update_item_Equip_State # C ボタンが押された場合 if Input.trigger?(Input::C) # 全てのアイテムウィンドウを更新 @item_window1.refresh @item_window2.refresh @item_window3.refresh @item_window4.refresh @item_window5.refresh end end end end