装備品破壊 カスタム



・ひとつの属性ではなく、複数の属性の合計値に変更
・装備品破損時に破損した装備品の名前を表示するように変更

★注意事項
隊列概念 貪藻矢射妥←カスタム より下に導入してください。

変更点
2021:11:03
・ダメージポップ時のメッセージをカスタマイズポイントへ移動

2023:08:01
・魔法攻撃でも装備品破壊を起こせるように変更
・防具IDの最大値は4なので5から4に修正

#----------------------------------------------------------------------------
# 装備品破壊 貪藻矢射妥←カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作:     ◆ 装備品破壊 - KGC_EquipmentBreak ◆
#           ◇ Last update : 20XX/??/?? ◇
# 原作者:   TOMY様
# HP:       Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# 改造内容:
# ・ひとつの属性ではなく、複数の属性の合計値に変更
# ・装備品破損時に破損した装備品の名前を表示するように変更
# ・魔法攻撃でも装備品破壊を起こせるように変更
# 
#============================================================================
# 変更点
# 2021:11:03
# ・ダメージポップ時のメッセージをカスタマイズポイントへ移動
#
# 2023:08:01
# ・魔法攻撃でも装備品破壊を起こせるように変更
# ・防具IDの最大値は4なので5から4に修正

$imported = {} if $imported == nil
$imported["EquipmentBreak"] = true

if $game_special_elements == nil
  $game_special_elements = {}
  $data_system = load_data("Data/System.rxdata")
end
# 装備の物理破壊率属性
$game_special_elements["equip_break_p"] = /物理破壊率(\d+)(%|%)/
# 装備の魔法破壊率属性
$game_special_elements["equip_break_m"] = /魔法破壊率(\d+)(%|%)/

module KGC
  # ◆装備品破損時のメッセージ
  BROKEN_WD = "%s は粉々に砕け散った!!"
  # ◆ダメージポップワード @ Weapon
  BROKEN_POP_WEP = "Weapon Break!!"
  # ◆ダメージポップワード @ Armor
  BROKEN_POP_ARM = "Dress Break!!"
  
  # ◆破損SE
  BROKEN_SE = RPG::AudioFile.new("097-Attack09", 80, 50)
end

#==============================================================================
# ■ Game_Battler (分割定義 3)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #--------------------------------------------------------------------------
  alias attack_effect_KGC_EquipmentBreak attack_effect
  def attack_effect(attacker)
    # 元の処理を実行
    result = attack_effect_KGC_EquipmentBreak(attacker)

    if result && self.damage.is_a?(Numeric)
      # 武器破壊判定
      attacker.break_equipment(0) if attacker.is_a?(Game_Actor)
      # 防具破壊判定
      self.break_equipment(1)     if self.is_a?(Game_Actor)
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_EquipmentBreak skill_effect
  def skill_effect(user, skill)
    # 元の処理を実行
    result = skill_effect_KGC_EquipmentBreak(user, skill)

    # 物理/魔法スキルでダメージを受けた場合
    if result && (skill.atk_f > 0 || skill.int_f > 0) && self.damage.is_a?(Numeric)
      # 武器破壊判定
      user.break_equipment(0, skill) if user.is_a?(Game_Actor)
      # 防具破壊判定
      self.break_equipment(1, skill) if self.is_a?(Game_Actor)
    end
    return result
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :weapon_broken            # 武器破壊フラグ
  attr_accessor :armor_broken             # 防具破壊フラグ
  attr_accessor :broken_weapon_name       # 武器破壊名
  attr_accessor :broken_armor_name        # 防具破壊名
  #--------------------------------------------------------------------------
  # ● セットアップ
  #     actor_id : アクター ID
  #--------------------------------------------------------------------------
  alias setup_KGC_EquipmentBreak setup
  def setup(actor_id)
    # 元の処理を実行
    setup_KGC_EquipmentBreak(actor_id)

    @weapon_broken, @armor_broken = false, false
    @broken_weapon_name = ""
    @broken_armor_name  = ""
  end
  #--------------------------------------------------------------------------
  # ● 装備品破壊判定
  #     type : 装備品のタイプ(0:武器 1:防具)
  #    skill : スキル(通常攻撃の場合はnil)
  #--------------------------------------------------------------------------
  def break_equipment(type, skill = nil)
    case type
    when 0  # 武器の場合
      # 装備している武器を取得
if $imported["EquipExtension"] && self.two_swords?
      weapons = []
      self.ts_number.times { |i|
        next if self.weapon_id(i) == 0
        weapons << $data_weapons[self.weapon_id(i)]
      } # self.ts_number.times
else # 元の処理
      if self.weapon_id != 0
        weapons = [$data_weapons[self.weapon_id]]
      end
end # $imported["EquipExtension"] && self.two_swords?
      # 破壊判定
      weapons.each { |weapon|
        # 破損確率初期化
        prob_p = 0
        prob_m = 0
        weapon.element_set.compact.each { |element|
          if $game_special_elements["equip_break_p"] =~ $data_system.elements[element]
            prob_p += $1.to_i
            #break
          end
          if $game_special_elements["equip_break_m"] =~ $data_system.elements[element]
            prob_m += $1.to_i
            #break
          end
        } # weapon.element_set.compact.each
        broken_prob = rand(100)
        if (skill == nil && broken_prob < prob_p) || 
          (skill != nil && skill.atk_f > 0 && broken_prob < prob_p) || 
          (skill != nil && skill.int_f > 0 && broken_prob < prob_m)
          # 破損した武器のIDを取得
          broken_weapon = weapon.id
          # 装備を外す
          equip(0, 0)
          # 破損した武器を減らす
          $game_party.lose_weapon(broken_weapon, 1)
          # 破壊フラグをオン
          @weapon_broken = true
          # 破壊武器銘の設定
          @broken_weapon_name = weapon.name
        end
      } # weapons.each
    when 1  # 防具の場合
if $imported["EquipExtension"] && self.two_swords?
      st = self.ts_number
else # 元の処理
      st = 1
end # $imported["EquipExtension"] && self.two_swords?
if $imported["EquipExtension"]
      ed = self.equip_type.size
else # 元の処理
      ed = 4
end # $imported["EquipExtension"]
      (st...ed).each { |i|
        # 破損確率初期化
        prob_p = 0
        prob_m = 0
if $imported["EquipExtension"]
        armor_id = self.armor_id[i]
else
        armor_id = eval("@armor#{i}_id")
end # $imported["EquipExtension"]
        # 防具を装備していない場合はスキップ
        next if armor_id == nil || armor_id == 0
        # 装備している防具を取得
        armor = $data_armors[armor_id]
        # 破壊判定
        armor.guard_element_set.compact.each { |element|
          if $game_special_elements["equip_break_p"] =~ $data_system.elements[element]
            prob_p += $1.to_i
            #break
          end
          if $game_special_elements["equip_break_m"] =~ $data_system.elements[element]
            prob_m += $1.to_i
            #break
          end
        } # armor.guard_element_set.compact.each
        broken_prob = rand(100)
        if (skill == nil && broken_prob < prob_p) || 
          (skill != nil && skill.atk_f > 0 && broken_prob < prob_p) || 
          (skill != nil && skill.int_f > 0 && broken_prob < prob_m)
          # 装備を外す
          equip(i, 0)
          # 破損した防具を減らす
          $game_party.lose_armor(armor_id, 1)
          # 破壊フラグをオン
          @armor_broken = true
          # 破壊防具銘の設定
          @broken_armor_name = armor.name
          prob = nil
        end
      } # armor.each
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_KGC_EquipmentBreak update_phase4_step5
  def update_phase4_step5
    # 元の処理を実行
    update_phase4_step5_KGC_EquipmentBreak

    # 装備破壊表示
    for actor in $game_party.actors
      next if actor == nil
      # 武器破壊フラグがオンの場合
      if actor.weapon_broken
        # ダメージ設定
        actor.damage = KGC::BROKEN_POP_WEP if actor.damage == nil
        actor.damage_pop = true
        # ヘルプウィンドウに表示
        @help_window.set_text(sprintf(KGC::BROKEN_WD, actor.broken_weapon_name), 1)
        # 破壊フラグを立てる
        @broken = true
      end
      # 防具破壊フラグがオンの場合
      if actor.armor_broken
        # ダメージ設定
        actor.damage = KGC::BROKEN_POP_ARM if actor.damage == nil
        actor.damage_pop = true
        # ヘルプウィンドウに表示
        @help_window.set_text(sprintf(KGC::BROKEN_WD, actor.broken_armor_name), 1)
        # 破壊フラグを立てる
        @broken = true
      end
      # フラグをオフ
      actor.weapon_broken = false
      actor.armor_broken  = false
    end
    # 破壊フラグがオンの場合
    if @broken
      # SE を演奏
      $game_system.se_play(KGC::BROKEN_SE)
      # ウェイトカウントを設定
      @wait_count = 20
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #--------------------------------------------------------------------------
  alias update_phase4_step6_KGC_EquipmentBreak update_phase4_step6
  def update_phase4_step6
    # 元の処理を実行
    update_phase4_step6_KGC_EquipmentBreak

    # 破壊フラグがオンの場合
    if @broken
      # ヘルプウィンドウを隠す
      @help_window.visible = false
      # 破壊フラグをオフ
      @broken = false
    end
  end
end
スクリプトを導入したら、以下の通りに属性[物理破壊率○%]、[魔法破壊率〇%]を作成します。 物理破壊率1% 物理破壊率2% 物理破壊率4% 物理破壊率8% 物理破壊率16% 物理破壊率32% 物理破壊率64% ※魔法破壊率も同様に1%〜64% 攻撃したときに 20% の確率で破損する装備品を作る場合は 物理破壊率16% と 物理破壊率4% の属性を付与してください。 ※物理スキルを受けたときに 〇% の確立で破損する装備品を作る場合も同様 ※魔法スキルを受けたときに 〇% の確立で破損する装備品を作る場合は  魔法破壊率〇%の属性を付与してください。 武器の破損タイミングは「通常攻撃、または物理/魔法スキルを使用したとき」です。 防具の破損タイミングは「通常攻撃、または物理/魔法スキルを受けたとき」です。 「物理スキル」とは、[攻撃力F]が 1 以上のスキルです。 「魔法スキル」とは、[魔 力F]が 1 以上のスキルです。 装備品が破損した際は、金属音とともに「〇〇 は粉々に砕け散った!!」 というメッセージが出ます。 また、装備品が破損したキャラクター上に「○○ Break!!」という表示が出ます。 (注:破損したキャラにダメージが無い場合のみ)

戻る