#----------------------------------------------------------------------------
# 装備品破壊 貪藻矢射妥←カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作: ◆ 装備品破壊 - KGC_EquipmentBreak ◆
# ◇ Last update : 20XX/??/?? ◇
# 原作者: TOMY様
# HP: Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# 改造内容:
# ・ひとつの属性ではなく、複数の属性の合計値に変更
# ・装備品破損時に破損した装備品の名前を表示するように変更
# ・魔法攻撃でも装備品破壊を起こせるように変更
#
#============================================================================
# 変更点
# 2021:11:03
# ・ダメージポップ時のメッセージをカスタマイズポイントへ移動
#
# 2023:08:01
# ・魔法攻撃でも装備品破壊を起こせるように変更
# ・防具IDの最大値は4なので5から4に修正
#
# 2024:05:01
# ・固定文字列対応
$imported = {} if $imported == nil
$imported["EquipmentBreak"] = true
if $game_special_elements == nil
$game_special_elements = {}
$data_system = load_data(FIX_PATH::PATH_DATA_SYSM)
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
|