장비품에 파괴 확률을 설정할 수 있도록 하는 스크립트입니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆装備品破壊 - KGC_EquipmentBreak◆
#_/----------------------------------------------------------------------------
#_/ 武器や防具を破壊する処理を追加します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$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+)(%|%)/
#==============================================================================
# ■ 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 # 防具破壊フラグ
#--------------------------------------------------------------------------
# ● セットアップ
# actor_id : アクター ID
#--------------------------------------------------------------------------
alias setup_KGC_EquipmentBreak setup
def setup(actor_id)
# 元の処理を実行
setup_KGC_EquipmentBreak(actor_id)
@weapon_broken, @armor_broken = false, false
end
#--------------------------------------------------------------------------
# ● 装備品破壊判定
# type : 装備品のタイプ(0:武器 1:防具)
#--------------------------------------------------------------------------
def break_equipment(type)
srand
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
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
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
# ダメージに "Weapon Broken" を設定
actor.damage = "Weapon Broken" if actor.damage == nil
actor.damage_pop = true
# 破壊フラグを立てる
@broken = true
end
# 防具破壊フラグがオンの場合
if actor.armor_broken
# ダメージに "Armor Broken" を設定
actor.damage = "Armor Broken" if actor.damage == nil
actor.damage_pop = true
# 破壊フラグを立てる
@broken = true
end
# フラグをオフ
actor.weapon_broken = false
actor.armor_broken = false
end
# 破壊フラグがオンの場合
if @broken
# ヘルプウィンドウに表示
@help_window.set_text("装備品が壊れた!!", 1)
# 破壊 SE を演奏
Audio.se_play("Audio/SE/097-Attack09", 80, 50)
# ウェイトカウントを設定
@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
스크립트를 도입하면, 속성[파괴 확률○%]를 작성합니다.
○에는, 장비품이 파손하는 확률을 넣어 주세요.
예를 들면[파괴 확률20%]라고 하는 속성을 세트 하면, 공격했다(공격을 받았다) 때에 20% 의 확률로
파손하는 장비품을 만들 수 있습니다.
무기의 파손 타이밍은 「통상 공격, 또는 물리 스킬을 사용했을 때」입니다.
방어구의 파손 타이밍은 「통상 공격, 또는 물리 스킬을 받았을 때」입니다.
「물리 스킬」이란,[공격력 F]가 1 이상의 스킬입니다.
장비품이 파손했을 때는, 금속음과 함께 「장비품이 망가졌다!」라고 하는 메세지가 나옵니다.
또, 장비품이 파손한 캐릭터상에 「00 Broken」라고 하는 표시가 나옵니다.
(주:파손한 캐릭터에게 데미지가 없는 경우만)
샘플에서는 「파괴 확률10%」의 무기를 만들고 있습니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆装備品破壊 - KGC_EquipmentBreak◆
#_/----------------------------------------------------------------------------
#_/ 武器や防具を破壊する処理を追加します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$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+)(%|%)/
#==============================================================================
# ■ 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 # 防具破壊フラグ
#--------------------------------------------------------------------------
# ● セットアップ
# actor_id : アクター ID
#--------------------------------------------------------------------------
alias setup_KGC_EquipmentBreak setup
def setup(actor_id)
# 元の処理を実行
setup_KGC_EquipmentBreak(actor_id)
@weapon_broken, @armor_broken = false, false
end
#--------------------------------------------------------------------------
# ● 装備品破壊判定
# type : 装備品のタイプ(0:武器 1:防具)
#--------------------------------------------------------------------------
def break_equipment(type)
srand
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
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
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
# ダメージに "Weapon Broken" を設定
actor.damage = "Weapon Broken" if actor.damage == nil
actor.damage_pop = true
# 破壊フラグを立てる
@broken = true
end
# 防具破壊フラグがオンの場合
if actor.armor_broken
# ダメージに "Armor Broken" を設定
actor.damage = "Armor Broken" if actor.damage == nil
actor.damage_pop = true
# 破壊フラグを立てる
@broken = true
end
# フラグをオフ
actor.weapon_broken = false
actor.armor_broken = false
end
# 破壊フラグがオンの場合
if @broken
# ヘルプウィンドウに表示
@help_window.set_text("装備品が壊れた!!", 1)
# 破壊 SE を演奏
Audio.se_play("Audio/SE/097-Attack09", 80, 50)
# ウェイトカウントを設定
@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
스크립트를 도입하면, 속성[파괴 확률○%]를 작성합니다.
○에는, 장비품이 파손하는 확률을 넣어 주세요.
예를 들면[파괴 확률20%]라고 하는 속성을 세트 하면, 공격했다(공격을 받았다) 때에 20% 의 확률로
파손하는 장비품을 만들 수 있습니다.
무기의 파손 타이밍은 「통상 공격, 또는 물리 스킬을 사용했을 때」입니다.
방어구의 파손 타이밍은 「통상 공격, 또는 물리 스킬을 받았을 때」입니다.
「물리 스킬」이란,[공격력 F]가 1 이상의 스킬입니다.
장비품이 파손했을 때는, 금속음과 함께 「장비품이 망가졌다!」라고 하는 메세지가 나옵니다.
또, 장비품이 파손한 캐릭터상에 「00 Broken」라고 하는 표시가 나옵니다.
(주:파손한 캐릭터에게 데미지가 없는 경우만)
샘플에서는 「파괴 확률10%」의 무기를 만들고 있습니다.