装備品破壊 カスタム



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

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

変更点
まだなし

#----------------------------------------------------------------------------
# 装備品破壊 貪藻矢射妥←カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作:     ◆ 装備品破壊 - KGC_EquipmentBreak ◆
#           ◇ Last update : 20XX/??/?? ◇
# 原作者:   TOMY様
# HP:       Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# ★注意事項
# 隊列概念 貪藻矢射妥←カスタム より下に導入してください。
#
# 改造内容:
# ・ひとつの属性ではなく、複数の属性の合計値に変更
# ・装備品破損時に破損した装備品の名前を表示するように変更
# 
#============================================================================
# 変更点
# まだなし

$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["equipment_break"] = /破壊確率(\d+)(%|%)/

module KGC
  # ◆装備品破損時のメッセージ
  BROKEN_WD = "%s は粉々に砕け散った!!"
  
  # ◆破損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 && self.damage.is_a?(Numeric)
      # 武器破壊判定
      user.break_equipment(0) if user.is_a?(Game_Actor)
      # 防具破壊判定
      self.break_equipment(1) 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:防具)
  #--------------------------------------------------------------------------
  def break_equipment(type)
    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)]
        }
      else
        return if self.weapon_id == 0
        weapons = [$data_weapons[self.weapon_id]]
      end
      # 破壊判定
      weapons.each { |weapon|
        prob = 0
        weapon.element_set.compact.each { |element|
          if $game_special_elements["equipment_break"] =~ $data_system.elements[element]
            prob += $1.to_i
            #break
          end
        }
        if prob != nil && rand(100) < prob
          # 破損した武器のIDを取得
          broken_weapon = weapon.id
          # 装備を外す
          equip(0, 0)
          # 破損した武器を減らす
          $game_party.lose_weapon(broken_weapon, 1)
          # 破壊フラグをオン
          @weapon_broken = true
          # 破壊武器銘の設定
          @broken_weapon_name = weapon.name
        end
      }
    when 1  # 防具の場合
      st = $imported["EquipExtension"] && self.two_swords? ? self.ts_number : 1
      ed = $imported["EquipExtension"] ? self.equip_type.size : 5
      (st...ed).each { |i|
        armor_id = $imported["EquipExtension"] ? self.armor_id[i] : eval("@armor#{i}_id")
        # 防具を装備していない場合はスキップ
        next if armor_id == nil || armor_id == 0
        # 装備している防具を取得
        armor = $data_armors[armor_id]
        # 破壊判定
        prob = 0
        armor.guard_element_set.compact.each { |element|
          if $game_special_elements["equipment_break"] =~ $data_system.elements[element]
            prob += $1.to_i
            #break
          end
        }
        if prob != nil && rand(100) < prob
          # 装備を外す
          equip(i, 0)
          # 破損した防具を減らす
          $game_party.lose_armor(armor_id, 1)
          # 破壊フラグをオン
          @armor_broken = true
          # 破壊防具銘の設定
          @broken_armor_name = armor.name
          prob = nil
        end
      }
    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 = "Weapon Break!!" 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 = "Dress Break!!" 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% 攻撃した(攻撃を受けた)ときに 20% の確率で破損する装備品を作る場合は 破壊確率16% と 破壊確率4% の属性を付与してください。 武器の破損タイミングは「通常攻撃、または物理スキルを使用したとき」です。 防具の破損タイミングは「通常攻撃、または物理スキルを受けたとき」です。 「物理スキル」とは、[攻撃力F]が 1 以上のスキルです。 装備品が破損した際は、金属音とともに「〇〇 は粉々に砕け散った!!」 というメッセージが出ます。 また、装備品が破損したキャラクター上に「○○ Break!!」という表示が出ます。 (注:破損したキャラにダメージが無い場合のみ)

戻る