rebf-gaiden/Scripts/_Ver2_00_by.rb
2025-04-26 17:06:34 -05:00

284 lines
No EOL
12 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ RGSS3 特徴の属性・弱体・ステート有効度計算&限界値変更 Ver2.00 by 星潟
#------------------------------------------------------------------------------
# 特徴欄での属性・弱体・ステート有効度の計算を乗算から加算に切り替えます。
# また、それら3項目における、上限と下限を設定します。
#------------------------------------------------------------------------------
# Ver1.01 計算方法を修正しました。
# また、アクターとエネミーの上限・下限を分けて設定できるようにしました。
# Ver2.00 有効度計算方式を乗算・加算共に使用できるように変更しました。
# これに伴い、大幅に設定方法が変更されています。
# 加算設定にスクリプト文を使用し、可変データが使用できます。
#==============================================================================
# ★設定方法(全て、特徴を有する項目のメモ欄に記入します。)
#==============================================================================
# ☆属性有効度
#------------------------------------------------------------------------------
# 例.弱点設定
#------------------------------------------------------------------------------
# <属性有効度:3,50>
#
# このように記入した場合
# 属性ID3の有効度が50加算されます。
#------------------------------------------------------------------------------
# 例.耐性設定
#------------------------------------------------------------------------------
# <属性有効度:4,-25>
#
# このように記入した場合
# 属性ID4の有効度が25減少します。
#------------------------------------------------------------------------------
# 例.可変有効度設定
#------------------------------------------------------------------------------
# <属性有効度:5,-self.level*5>
#
# このように記入した場合
# 属性ID5の有効度をレベル×5の値分の減少します。
#==============================================================================
# ☆弱体有効度
#------------------------------------------------------------------------------
# 例.弱点設定
#------------------------------------------------------------------------------
# <弱体有効度:0,40>
#
# このように記入した場合
# 最大HP弱体の有効度が40加算されます。
#------------------------------------------------------------------------------
# 例.耐性設定
#------------------------------------------------------------------------------
# <弱体有効度:2,-15>
#
# このように記入した場合
# 攻撃力弱体の有効度が15減少します。
#------------------------------------------------------------------------------
# 例.可変有効度設定
#------------------------------------------------------------------------------
# <弱体有効度:4,self.mdf>
#
# このように記入した場合
# 魔法力弱体の有効度を魔法防御の値分の%加算します。
#==============================================================================
# ☆ステート有効度
#------------------------------------------------------------------------------
# 例.弱点設定
#------------------------------------------------------------------------------
# <ステート有効度:1,75>
#
# このように記入した場合
# ステートID1の有効度が75加算されます。
#------------------------------------------------------------------------------
# 例.耐性設定
#------------------------------------------------------------------------------
# <ステート有効度:3,-50>
#
# このように記入した場合
# ステートID3の有効度が50減少します。
#------------------------------------------------------------------------------
# 例.可変有効度設定
#------------------------------------------------------------------------------
# <ステート有効度:5,$game_variables[1]>
#
# このように記入した場合
# ステートID5の有効度を変数ID1の値分の加算します。
#==============================================================================
module F_C_C_PLUS
#空の配列を用意。(消さないで下さい)
WORD = []
#加算型属性有効度設定用キーワードを指定。
WORD.push("属性有効度")
#加算型弱体有効度設定用キーワードを指定。
WORD.push("弱体有効度")
#加算型ステート有効度設定用キーワードを指定。
WORD.push("ステート有効度")
#属性有効度の上限・下限を設定する場合のみtrueにして下さい。
EL_J = false
#属性有効度の上限を設定します。
#配列内の前者がアクター、後者がエネミーの設定値となります。
EL_1 = [10000, 10000]
#属性有効度の下限を設定します。(負の値まで許可した場合、回復効果になります)
#配列内の前者がアクター、後者がエネミーの設定値となります。
EL_2 = [-100, -100]
#弱体有効度の上限・下限を設定する場合のみtrueにして下さい。
WE_J = false
#弱体有効度の上限を設定します。
#配列内の前者がアクター、後者がエネミーの設定値となります。
WE_1 = [200, 200]
#弱体有効度の下限を設定します。
#配列内の前者がアクター、後者がエネミーの設定値となります。
WE_2 = [0, 0]
#ステート有効度の上限・下限を設定する場合のみtrueにして下さい。
ST_J = false
#ステート有効度の上限を設定します。
#配列内の前者がアクター、後者がエネミーの設定値となります。
ST_1 = [200, 200]
#ステート有効度の下限を設定します。
#配列内の前者がアクター、後者がエネミーの設定値となります。
ST_2 = [0, 0]
end
class Game_BattlerBase
#--------------------------------------------------------------------------
# 属性有効度の取得
#--------------------------------------------------------------------------
alias element_rate_plus_type1 element_rate
def element_rate(element_id)
#本来の処理結果を加算型データで乗算
data = element_rate_plus_type2(element_id) * element_rate_plus_type1(element_id)
#上限・下限設定が有効な場合は分岐して反映。
if F_C_C_PLUS::EL_J
ld1 = self.actor? ? F_C_C_PLUS::EL_1[0] : F_C_C_PLUS::EL_1[1]
ld2 = self.actor? ? F_C_C_PLUS::EL_2[0] : F_C_C_PLUS::EL_2[1]
data = [[data, ld1 / 100.0].min, ld2 / 100.0].max
end
data
end
#--------------------------------------------------------------------------
# 弱体有効度の取得
#--------------------------------------------------------------------------
alias debuff_rate_plus_type1 debuff_rate
def debuff_rate(param_id)
#本来の処理結果に加算型データを加えた値を用意。
data = debuff_rate_plus_type2(param_id) * debuff_rate_plus_type1(param_id)
#上限・下限設定が有効な場合は分岐して反映。
if F_C_C_PLUS::WE_J
ld1 = self.actor? ? F_C_C_PLUS::WE_1[0] : F_C_C_PLUS::WE_1[1]
ld2 = self.actor? ? F_C_C_PLUS::WE_2[0] : F_C_C_PLUS::WE_2[1]
data = [[data, ld1 / 100.0].min, ld2 / 100.0].max
end
data
end
#--------------------------------------------------------------------------
# ステート有効度の取得
#--------------------------------------------------------------------------
alias state_rate_plus_type1 state_rate
def state_rate(state_id)
#本来の処理結果に加算型データを加えた値を用意。
data = state_rate_plus_type2(state_id) * state_rate_plus_type1(state_id)
#上限・下限設定が有効な場合は分岐して反映。
if F_C_C_PLUS::ST_J
ld1 = self.actor? ? F_C_C_PLUS::ST_1[0] : F_C_C_PLUS::ST_1[1]
ld2 = self.actor? ? F_C_C_PLUS::ST_2[0] : F_C_C_PLUS::ST_2[1]
data = [[data, ld1 / 100.0].min, ld2 / 100.0].max
end
data
end
#--------------------------------------------------------------------------
# 加算型属性有効度の取得
#--------------------------------------------------------------------------
def element_rate_plus_type2(element_id)
#各特徴からデータを取得し、その上で100で割る。
(100 + (feature_objects.inject(0) {|r, f| r += eval(f.plus_type_rate_data(0,element_id))})) / 100.0
end
#--------------------------------------------------------------------------
# 加算型弱体有効度の取得
#--------------------------------------------------------------------------
def debuff_rate_plus_type2(param_id)
#各特徴からデータを取得し、その上で100で割る。
(100 + (feature_objects.inject(0) {|r, f| r += eval(f.plus_type_rate_data(1,param_id))})) / 100.0
end
#--------------------------------------------------------------------------
# 加算型ステート有効度の取得
#--------------------------------------------------------------------------
def state_rate_plus_type2(state_id)
#各特徴からデータを取得し、その上で100で割る。
(100 + (feature_objects.inject(0) {|r, f| r += eval(f.plus_type_rate_data(2,state_id))})) / 100.0
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# 加算型有効度ハッシュの取得
#--------------------------------------------------------------------------
def plus_type_rate_data(type,data_id)
#ハッシュが存在しない場合は空のハッシュを用意。
@plus_type_element_rate_hash = {} unless @plus_type_element_rate_hash
#指定データのハッシュが存在しない場合は分岐。
unless @plus_type_element_rate_hash[type]
#データ取得用キーワードを取得。
word_data = F_C_C_PLUS::WORD[type]
#元のハッシュ内に指定データ用ハッシュを用意。
@plus_type_element_rate_hash[type] = {}
#メモ欄の各行からデータを取得。
@note.each_line {|l|
data = l.scan(/<#{word_data}[:](\S+),(\S+)>/).flatten
#取得したデータに異常がある場合は飛ばす。
next if !data or data.size != 2
#指定IDのデータが存在しない場合は、取得文字列をそのまま代入。
#そうでない場合は、元の文字列の後に加える。
unless @plus_type_element_rate_hash[type][data[0].to_i]
@plus_type_element_rate_hash[type][data[0].to_i] = data[1]
else
@plus_type_element_rate_hash[type][data[0].to_i] += "+" + data[1]
end
}
end
#データが存在する場合はそのデータ、存在しない場合は文字列の0を返す。
@plus_type_element_rate_hash[type][data_id] ? @plus_type_element_rate_hash[type][data_id] : "0"
end
end