私なりに能力低下の部分をa.matにしていじってみたのですが、無理でした

コード: 全て選択
=begin
◆概要
能力強化/弱体の仕様を変更し、計算式による強化/弱体を可能にします。
◆機能
・メモ欄に<能力強化 id, 計算式>と記入すると、スキルに設定されたid(0~7)の強化が
発動するときにその計算式を適用します。
・メモ欄に<能力弱体 id, 計算式>と記入すると、スキルに設定されたid(0~7)の弱体が
発動するときにその計算式を適用します。
例1:<能力強化 2, a.mat / 2>とメモ欄に記述し、「能力強化 攻撃力」を
指定すると、対象の攻撃力が(使用者の魔法力/2)だけ上昇します。
例2:<能力弱体 3, b.def / 3>とメモ欄に記述し、「能力弱体 防御力」を
指定すると、対象の防御力が(対象の弱体による変動がある状態の防御力/3)だけ
低下します。
例3:<能力弱体 3, b.def_nbd / 3>とメモ欄に記述し、「能力弱体 防御力」を
指定すると、対象の防御力が(対象の弱体による変動がない状態の防御力/3)だけ
低下します。
2と3の違いですが、防御力27の敵に対してこれを3回かけると、
例2:27→18→12→8
例3:27→18→ 9→0
となります。他のパラメータも「_nbd」をつければそんな感じになります。
・設定項目で強化/弱体の最大数などを変更できます。
◆仕様
・メモ欄に記述のない強化/弱体は、"b.fai_ebd_param(id) / 4"として
計算されます。idはそれぞれのパラメータのIDです。
・強化/弱体の上書きは原則「先にかけたもの」から消去されます。
◆使用上の注意
・★……エイリアス ●……再定義 ○……新規定義
◆作者:faida @faida3983
=end
module FAI_EBD
# 設定項目:バフ/デバフの容量
BD_VOL = 1
# 設定項目:バフ/デバフのアイコンのレベル
# [1段階目のアイコンがつく数, 2段階目のアイコンがつく数]
BD_LEVEL = [1, 3]
# 設定項目:バフ/デバフの効果を上書きするか
# true:容量がいっぱいなら上書きする false:容量がいっぱいでも上書きしない
BD_OW_EFF = false
# 設定項目:バフ/デバフの持続ターンを上書きするか
# true:常に上書きする false:効果が上書きされたときのみ上書き
# nil:常に上書きしない
BD_OW_TURN = nil
end
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ パラメータ
#--------------------------------------------------------------------------
def note_buff_effects
@buff_effects = []; @debuff_effects = []
note.each_line{|line|
if line =~ /<能力強化\s*(\d+)\s?\,\s?(.+)>/
id = $1.to_i; eff = $2
@buff_effects[id] ||= []; @buff_effects[id] << $2
elsif line =~ /<能力弱体\s*(\d+)\s?\,\s?(.+)>/
id = $1.to_i; eff = $2
@debuff_effects[id] ||= []; @debuff_effects[id] << $2
end
}
end
def buff_effects
note_buff_effects if !@buff_effects; @buff_effects
end
def debuff_effects
note_buff_effects if !@debuff_effects; @debuff_effects
end
end
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
include FAI_EBD
#--------------------------------------------------------------------------
# ★ 能力強化情報をクリア
#--------------------------------------------------------------------------
alias fai_ebd_clear_buffs clear_buffs
def clear_buffs
fai_ebd_clear_buffs
@buff_effects = Array.new(8) { [].clone }
end
#--------------------------------------------------------------------------
# ● 現在の強化/弱体をアイコン番号の配列で取得
#--------------------------------------------------------------------------
def buff_icons
icons = []
(0..7).each{|i| icons.push(buff_icon_index(buff_level(i), i)) }
icons.delete(0)
icons
end
#--------------------------------------------------------------------------
# ○ 現在の強化/弱体のレベル
#--------------------------------------------------------------------------
def buff_level(id)
n = BD_LEVEL.select{|level|level <= @buff_effects[id].size}.size
n == 0 ? 0 : n * @buff_effects[id][0] / @buff_effects[id][0].abs
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ○ 能力強化(特殊)
#--------------------------------------------------------------------------
def add_buff_ex(param_id, value, turns)
return unless alive?
if debuff?(param_id)
erase_buff(param_id)
else
if buff_max?(param_id)
if BD_OW_EFF
@buff_effects[param_id].shift
@buff_effects[param_id].push(value)
overwrite_buff_turns(param_id, turns) if !BD_OW_TURN.nil?
else
overwrite_buff_turns(param_id, turns) if BD_OW_TURN
end
else
@buff_effects[param_id] << value
if !BD_OW_TURN.nil? || @buff_effects[param_id].size == 1
overwrite_buff_turns(param_id, turns)
end
end
end
@result.added_buffs.push(param_id).uniq!
refresh
end
#--------------------------------------------------------------------------
# ○ 能力弱体(特殊)
#--------------------------------------------------------------------------
def add_debuff_ex(param_id, value, turns)
return unless alive?
if buff?(param_id)
erase_buff(param_id)
else
if debuff_max?(param_id)
if BD_OW_EFF
@buff_effects[param_id].shift
@buff_effects[param_id].push(value)
overwrite_buff_turns(param_id, turns) if !BD_OW_TURN.nil?
else
overwrite_buff_turns(param_id, turns) if BD_OW_TURN
end
else
@buff_effects[param_id] << value
if !BD_OW_TURN.nil? || @buff_effects[param_id].size == 1
overwrite_buff_turns(param_id, turns)
end
end
end
overwrite_buff_turns(param_id, turns)
@result.added_debuffs.push(param_id).uniq!
refresh
end
#--------------------------------------------------------------------------
# ● 能力強化/弱体の解除
#--------------------------------------------------------------------------
def remove_buff(param_id)
return unless alive?
return if @buffs[param_id] == 0 && @buff_effects[param_id].empty? # ☆
erase_buff(param_id)
@buff_turns.delete(param_id)
@result.removed_buffs.push(param_id).uniq!
refresh
end
#--------------------------------------------------------------------------
# ● 能力強化/弱体の消去
#--------------------------------------------------------------------------
alias fai_ebd_erase_buff erase_buff
def erase_buff(param_id)
fai_ebd_erase_buff(param_id)
@buff_effects[param_id].clear
end
#--------------------------------------------------------------------------
# ● 能力強化状態の判定
#--------------------------------------------------------------------------
def buff?(param_id)
!@buff_effects[param_id].empty? && @buff_effects[param_id].any?{|n|n > 0}
end
#--------------------------------------------------------------------------
# ● 能力弱体状態の判定
#--------------------------------------------------------------------------
def debuff?(param_id)
!@buff_effects[param_id].empty? && @buff_effects[param_id].any?{|n|n < 0}
end
#--------------------------------------------------------------------------
# ● 能力強化が最大の段階か否かを判定
#--------------------------------------------------------------------------
def buff_max?(param_id)
buff?(param_id) && @buff_effects[param_id].size == BD_VOL
end
#--------------------------------------------------------------------------
# ● 能力弱体が最大の段階か否かを判定
#--------------------------------------------------------------------------
def debuff_max?(param_id)
debuff?(param_id) && @buff_effects[param_id].size == BD_VOL
end
#--------------------------------------------------------------------------
# ● 使用効果[能力強化]
#--------------------------------------------------------------------------
def item_effect_add_buff(user, item, effect)
if !(item.buff_effects[effect.data_id] || []).empty?
value = item.buff_effects[effect.data_id].inject(0){|r, eff|
r + eval_buff_effect(eff, user, self, $game_variables)
}
else
eff = "b.fai_ebd_param(#{effect.data_id}) / 4"
value = eval_buff_effect(eff, user, self, $game_variables)
end
add_buff_ex(effect.data_id, value, effect.value1)
@result.success = true
end
#--------------------------------------------------------------------------
# ● 使用効果[能力弱体]
#--------------------------------------------------------------------------
def item_effect_add_debuff(user, item, effect)
chance = debuff_rate(effect.data_id) * luk_effect_rate(user)
if rand < chance
if !(item.debuff_effects[effect.data_id] || []).empty?
value = item.debuff_effects[effect.data_id].inject(0){|r, eff|
r + eval_debuff_effect(eff, user, self, $game_variables)
}
else
eff = "b.fai_ebd_param(#{effect.data_id}) / 4"
value = eval_debuff_effect(eff, user, self, $game_variables)
end
add_debuff_ex(effect.data_id, value, effect.value1)
@result.success = true
end
end
#--------------------------------------------------------------------------
# ○ 能力強化の計算
#--------------------------------------------------------------------------
def eval_buff_effect(effect, a, b, v)
eval(effect)
end
#--------------------------------------------------------------------------
# ○ 能力弱体の計算
#--------------------------------------------------------------------------
def eval_debuff_effect(effect, a, b, v)
-eval(effect)
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ★ 通常能力値の加算値取得
#--------------------------------------------------------------------------
alias fai_ebd_param_plus param_plus
def param_plus(param_id)
@buff_effects[param_id].inject(fai_ebd_param_plus(param_id)){|r, n|r + n}
end
#--------------------------------------------------------------------------
# ○ 追加パラメータ:計算式に使用できるもの
#--------------------------------------------------------------------------
def fai_ebd_param(param_id)
n = (param_base(param_id)+fai_ebd_param_plus(param_id))*param_rate(param_id)
[[n, param_max(param_id)].min, param_min(param_id)].max.to_i
end
def mhp_nbd; fai_ebd_param(0); end # 最大HP Maximum Hit Point
def mmp_nbd; fai_ebd_param(1); end # 最大MP Maximum Magic Point
def atk_nbd; fai_ebd_param(2); end # 攻撃力 ATtacK power
def def_nbd; fai_ebd_param(3); end # 防御力 DEFense power
def mat_nbd; fai_ebd_param(4); end # 魔法力 Magic ATtack power
def mdf_nbd; fai_ebd_param(5); end # 魔法防御 Magic DeFense power
def agi_nbd; fai_ebd_param(6); end # 敏捷性 AGIlity
def luk_nbd; fai_ebd_param(7); end # 運 LUcK
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ★ 通常能力値の加算値取得
#--------------------------------------------------------------------------
alias fai_ebd_param_plus param_plus
def param_plus(param_id)
@buff_effects[param_id].inject(fai_ebd_param_plus(param_id)){|r, n|r + n}
end
#--------------------------------------------------------------------------
# ○ 追加パラメータ:計算式に使用できるもの
#--------------------------------------------------------------------------
def fai_ebd_param(param_id)
n = (param_base(param_id)+fai_ebd_param_plus(param_id))*param_rate(param_id)
[[n, param_max(param_id)].min, param_min(param_id)].max.to_i
end
def mhp_nbd; fai_ebd_param(0); end # 最大HP Maximum Hit Point
def mmp_nbd; fai_ebd_param(1); end # 最大MP Maximum Magic Point
def atk_nbd; fai_ebd_param(2); end # 攻撃力 ATtacK power
def def_nbd; fai_ebd_param(3); end # 防御力 DEFense power
def mat_nbd; fai_ebd_param(4); end # 魔法力 Magic ATtack power
def mdf_nbd; fai_ebd_param(5); end # 魔法防御 Magic DeFense power
def agi_nbd; fai_ebd_param(6); end # 敏捷性 AGIlity
def luk_nbd; fai_ebd_param(7); end # 運 LUcK
end