# # 特定の装備の組み合わせで能力値アップ(装備パターン複数設定時) #  (C)2005 TYPE74RX-T # # ★ 装備箇所の数 # 通常は5ヶ所ですが、自分で増減している場合はこの数値を変更して下さい。 RX_T_EQUIP_SIZE = 5 # ★★ パワーアップ専用の特殊ステートのID # 数値はあくまで一例です。 # 詳細は後述しますが、ステート変化にあえてこだわる必要はありません。 RX_T_POWER_UP_STATE_NO = [17, 18, 19] # 配列化してみました。 # ★★ 特殊な装備の組み合わせパターン数 RX_T_EQUIP_PATTERN_SIZE = 3 # ★★ 特殊な装備の組み合わせパターンテーブル # ページ中にあった、以下の設定を加えてみました。 # ブロンズソードとブロンズアーマーを装備しているな場合 # ブロンズソードとブロンズシールド の み 装備している場合 RX_T_EQUIP_PATTERN = [ ["ブロンズソード", "ブロンズシールド", "ブロンズヘルム", "ブロンズアーマー", "@"], ["アイアンソード", "@", "@", "ブロンズアーマー", "@"], ["アイアンソード", "ブロンズシールド", nil, nil, nil], ] class Game_Actor < Game_Battler alias rx_t_equip equip def equip(equip_type, id) rx_t_equip(equip_type, id) # ★ 特殊装備効果判定へ rx_t_actor_equip_judge end #-------------------------------------------------------------------------- # ★ 特殊装備効果判定 #-------------------------------------------------------------------------- def rx_t_actor_equip_judge # 装備品の名前を別の変数に格納 # 装備する数を増やしている場合、適宜増やして下さい。 # 例:rx_t_equip_check[5] =(以下略) rx_t_equip_check = [] rx_t_equip_check[0] = ($data_weapons[@weapon_id] != nil ? $data_weapons[@weapon_id].name : nil) rx_t_equip_check[1] = ($data_armors[@armor1_id] != nil ? $data_armors[@armor1_id].name : nil) rx_t_equip_check[2] = ($data_armors[@armor2_id] != nil ? $data_armors[@armor2_id].name : nil) rx_t_equip_check[3] = ($data_armors[@armor3_id] != nil ? $data_armors[@armor3_id].name : nil) rx_t_equip_check[4] = ($data_armors[@armor4_id] != nil ? $data_armors[@armor4_id].name : nil) # 特殊な装備の組み合わせパターン数だけループ for i in 0...RX_T_EQUIP_PATTERN_SIZE # ここで特定装備ポイントと特殊な装備の組み合わせパターンIDを初期化 rx_t_ok_pts = 0 spcial_equip_id = nil for j in 0...RX_T_EQUIP_SIZE # 何を装備してもOKな箇所「@」であれば if RX_T_EQUIP_PATTERN[i][j] == "@" # 条件が揃ったものと見なし特定装備ポイントを1増やす rx_t_ok_pts += 1 else # 何か装備していて、且つ、特定の装備をしている場合 if rx_t_equip_check[j] != nil and rx_t_equip_check[j] == RX_T_EQUIP_PATTERN[i][j] # 特定装備ポイントを1増やす rx_t_ok_pts += 1 # 何も装備していない事が条件の場合 elsif rx_t_equip_check[j] == nil and RX_T_EQUIP_PATTERN[i][j] == nil # 特定装備ポイントを1増やす rx_t_ok_pts += 1 end end # 特定の組み合わせの装備をしている(特定装備ポイントがRX_T_EQUIP_SIZEと同じ)なら if rx_t_ok_pts == RX_T_EQUIP_SIZE # 特殊な装備の組み合わせパターンIDを別の変数に格納してループ終了 spcial_equip_id = i break end end if spcial_equip_id != nil break end end # ★★ステートを一旦初期化 for i in 0...RX_T_EQUIP_PATTERN_SIZE remove_state(RX_T_POWER_UP_STATE_NO[i]) end # ★★複数のステート変化効果をもたらすものがあれば # それに応じて適宜初期化。ここでは以下のように初期化。 remove_state(3) # ★★ 毒 remove_state(14) # ★★ バリア # 特定の組み合わせの装備をしている(特定装備ポイントがRX_T_EQUIP_SIZEと同じ)なら # ★★ 複数設定した時の改造例 #    複数設定した結果、全てが単数のステート付与効果である場合は # case文による条件分岐の代わりに以下の一文で済ませられます。 # # add_state(RX_T_POWER_UP_STATE_NO[spcial_equip_id]) # # ★★複数のステート変化を付与する場合はcase文で。 if rx_t_ok_pts == RX_T_EQUIP_SIZE # 定数で決められた隠しステート(能力値アップ用)を付与する # 隠しステートにしておくと、見かけ上、装備によって # 能力値があがったように見せる事ができる。 add_state(RX_T_POWER_UP_STATE_NO[spcial_equip_id]) case spcial_equip_id when 0 # このサンプルスクリプトでは # spcial_equip_id値が0の時の設定を特に設定していないので # 本当は「when 1」は不要。 # 分かりやすくするため、あえて書きました。 when 1 # 複数のステートを付与1:ここでは更にバリアのステートを付与 add_state(14) when 2 # 複数のステートを付与2:ここでは更に毒を盛ってみる add_state(3) end end end end class Window_Base < Window #-------------------------------------------------------------------------- # ★ 特殊装備効果の描画 # actor : アクター #-------------------------------------------------------------------------- def rx_t_actor_equip(actor) # 装備品の名前を別の変数に格納 # 装備する数を増やしている場合、適宜増やして下さい。 # 例:rx_t_equip_check[5] =(以下略) rx_t_equip_check = [] rx_t_equip_check[0] = ($data_weapons[actor.weapon_id] != nil ? $data_weapons[actor.weapon_id].name : nil) rx_t_equip_check[1] = ($data_armors[actor.armor1_id] != nil ? $data_armors[actor.armor1_id].name : nil) rx_t_equip_check[2] = ($data_armors[actor.armor2_id] != nil ? $data_armors[actor.armor2_id].name : nil) rx_t_equip_check[3] = ($data_armors[actor.armor3_id] != nil ? $data_armors[actor.armor3_id].name : nil) rx_t_equip_check[4] = ($data_armors[actor.armor4_id] != nil ? $data_armors[actor.armor4_id].name : nil) # 特殊な装備の組み合わせパターン数だけループ for i in 0...RX_T_EQUIP_PATTERN_SIZE # 特定装備ポイントと特殊な装備の組み合わせパターンIDを初期化 rx_t_ok_pts = 0 spcial_equip_id = nil for j in 0...RX_T_EQUIP_SIZE # 何を装備してもOKな箇所「@」であれば if RX_T_EQUIP_PATTERN[i][j] == "@" # 条件が揃ったものと見なし特定装備ポイントを1増やす rx_t_ok_pts += 1 else # 何か装備していて、且つ、特定の装備をしている場合 if rx_t_equip_check[j] != nil and rx_t_equip_check[j] == RX_T_EQUIP_PATTERN[i][j] # 特定装備ポイントを1増やす rx_t_ok_pts += 1 # 何も装備していない事が条件の場合 elsif rx_t_equip_check[j] == nil and RX_T_EQUIP_PATTERN[i][j] == nil # 特定装備ポイントを1増やす rx_t_ok_pts += 1 end end # 特定の組み合わせの装備をしている(特定装備ポイントがRX_T_EQUIP_SIZEと同じ)なら if rx_t_ok_pts == RX_T_EQUIP_SIZE # 特殊な装備の組み合わせパターンIDを別の変数に格納してループ終了 spcial_equip_id = i break end end if spcial_equip_id != nil break end end # 最大HP/SPがステート変化によって上昇していた場合のために # 現在HP/SPを待避 #(メニュー画面でHP/SPが最大まで回復できるようにする) dummy_hp = actor.hp dummy_sp = actor.sp # ★★ステートを一旦初期化 for i in 0...RX_T_EQUIP_PATTERN_SIZE actor.remove_state(RX_T_POWER_UP_STATE_NO[i]) end # ★★複数のステート変化効果をもたらすものがあれば # それに応じて適宜初期化。ここでは以下のように初期化。 actor.remove_state(3) # ★★ 毒 actor.remove_state(14) # ★★ バリア # 特定の組み合わせの装備をしている(特定装備ポイントがRX_T_EQUIP_SIZEと同じ)なら # ★★ 複数設定した時の改造例 #    複数設定した結果、全てが単数のステート付与効果である場合は # case文による条件分岐の代わりに以下の一文で済ませられます。 # # actor.add_state(RX_T_POWER_UP_STATE_NO[spcial_equip_id]) # # ★★複数のステートを付与する場合はcase文で。 if rx_t_ok_pts == RX_T_EQUIP_SIZE # 定数で決められた隠しステート(能力値アップ用)を付与する # 隠しステートにしておくと、見かけ上、装備によって # 能力値があがったように見せる事ができる。 actor.add_state(RX_T_POWER_UP_STATE_NO[spcial_equip_id]) case spcial_equip_id when 0 # このサンプルスクリプトでは # spcial_equip_id値が0の時の設定を特に設定していないので # 本当は「when 1」は不要。 # 分かりやすくするため、あえて書きました。 when 1 # 複数のステートを付与1:ここでは更にバリアのステートを付与 actor.add_state(14) when 2 # 複数のステートを付与2:ここでは更に毒を盛ってみる actor.add_state(3) end end # 待避させていたHP/SPを代入 actor.hp = dummy_hp actor.sp = dummy_sp end end class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] # ★ 特殊装備効果の描画 rx_t_actor_equip(actor) draw_actor_graphic(actor, x - 40, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end end end