284 lines
No EOL
12 KiB
Ruby
284 lines
No EOL
12 KiB
Ruby
#==============================================================================
|
||
# ■ 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 |