#==============================================================================
# ■ RGSS3 能力値増加特徴 Ver2.01 by 星潟
#------------------------------------------------------------------------------
# 特徴を有する項目による能力値増加を割合の他に
# 特定の値で増加させる事が可能になります。
# 長すぎて2行になっても、自分で改行を行っていないのであれば機能すると思います。
# 記述方法を変える事で常時増加させる場合と
# 戦闘中のみ増加させる場合とで使い分けが可能です。
# なお、マイナスの値が指定された場合は、減算扱いとなります。
#------------------------------------------------------------------------------
#
#設定例(職業・ステート等のメモ欄に記入)
# <MHP:500>
# 最大HPが500増加する。
#
# <MMP:250>
# 最大HPが250減少する。
#
# <BATK:self.hp/5>
# 戦闘中、自分の現在HPの5分の1分、攻撃力が増加する。
#
# <BDEF:friends_unit.alive_members.size*50>
# 戦闘中、生存している味方数の50倍分、防御力が増加する。
#
# <MAT:$game_variables[9]>
# 魔法力が変数9の値分増加する。
#
# <MDF:$game_party.item_number($data_items[5])*10>
# 魔法防御がアイテムID5の所持数×10分増加する。
#
# <AGI:$game_party.gold/1000>
# 敏捷性が所持金の1000分の1の値分増加する。
#
# <BLUK:rand(1000)>
# 戦闘中、運の値を常に0~999の間のどれかの値で増加する。
#
# <HIT:$game_variables[11]>
# 命中率が変数11の値%分増加する。
#
# <TGR:50>
# 狙われ率が50%増加する。
#
# <BMHP:-50>
# HP弱体有効度が50%減少する。(耐性上昇)
#
# <ELE:3,-75>
# 属性ID3の有効度が75%低下する。(耐性上昇)
#
# <STA:2,25>
# ステートID2の有効度が25%増加する。(耐性低下)
#------------------------------------------------------------------------------
# なお、処理によってはループしてエラーを吐く場合がある為
# キャラクターの能力値が相互に影響を及ぼすような設定は避けて下さい。
# (<ATK:self.param(2)>と設定したり
# <ATK:self.param(3)>と<DEF:self.param(2)>を1キャラクターに設定したり
# 常時増加値として敵のデータを参照するように設定するとエラーを吐きます)
#
# Ver1.01 テスト用のp文を消去。
# Ver1.02 指定値強化・弱体アイテム・スキルとの競合を解消。
# Ver2.00 新たに追加能力値/特殊能力値/弱体有効度
# 属性有効度/ステート有効度への設定が可能になりました。
# Ver2.01 属性有効度/ステート有効度への設定が
# 1つしか有効にならない不具合を修正しました。
#==============================================================================
module VU_F
#==============================================================================
#空のハッシュを準備します。(消さないで下さい)
#------------------------------------------------------------------------------
W1 = {}
#==============================================================================
#通常能力値設定用キーワードを括弧内に設定します。
#最大HPから運までの8種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[0] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[0].push("MHP")# 最大HP
W1[0].push("MMP")# 最大MP
W1[0].push("ATK")# 攻撃力
W1[0].push("DEF")# 防御力
W1[0].push("MAT")# 魔法力
W1[0].push("MDF")# 魔法防御
W1[0].push("AGI")# 敏捷性
W1[0].push("LUK")# 運
#==============================================================================
#追加能力値設定用キーワードを括弧内に設定します。
#命中率からTP再生率までの10種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[1] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[1].push("HIT")# 命中率
W1[1].push("EVA")# 回避率
W1[1].push("CRI")# 会心率
W1[1].push("CEV")# 会心回避率
W1[1].push("MEV")# 魔法回避率
W1[1].push("MRF")# 魔法反射率
W1[1].push("CNT")# 反撃率
W1[1].push("HRG")# HP再生率
W1[1].push("MRG")# MP再生率
W1[1].push("TRG")# TP再生率
#==============================================================================
#特殊能力値設定用キーワードを括弧内に設定します。
#狙われ率から経験値獲得率までの10種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[2] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[2].push("仇恨")# 狙われ率
W1[2].push("GRD")# 防御効果率
W1[2].push("REC")# 回復効果率
W1[2].push("PHA")# 薬の知識
W1[2].push("MCR")# MP消費率
W1[2].push("TCR")# TPチャージ率
W1[2].push("PDR")# 物理ダメージ率
W1[2].push("MDR")# 魔法ダメージ率
W1[2].push("FDR")# 床ダメージ率
W1[2].push("EXR")# 経験獲得率
#==============================================================================
#弱体有効度設定用キーワードを括弧内に設定します。
#最大HPから運までの8種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[3] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[3].push("DBMHP")# 最大HP
W1[3].push("DBMMP")# 最大MP
W1[3].push("DBATK")# 攻撃力
W1[3].push("DBDEF")# 防御力
W1[3].push("DBMAT")# 魔法力
W1[3].push("DBMDF")# 魔法防御
W1[3].push("DBAGI")# 敏捷性
W1[3].push("DBLUK")# 運
#==============================================================================
#戦闘中に限定して作用する通常能力値設定用キーワードを括弧内に設定します。
#最大HPから運までの8種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[4] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[4].push("BMHP")# 最大HP弱体
W1[4].push("BMMP")# 最大MP弱体
W1[4].push("BATK")# 攻撃力弱体
W1[4].push("BDEF")# 防御力弱体
W1[4].push("BMAT")# 魔法力弱体
W1[4].push("BMDF")# 魔法防御弱体
W1[4].push("BAGI")# 敏捷性弱体
W1[4].push("BLUK")# 運弱体
#==============================================================================
#戦闘中に限定して作用する追加能力値設定用キーワードを括弧内に設定します。
#命中率からTP再生率までの10種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[5] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[5].push("BHIT")# 命中率
W1[5].push("BEVA")# 回避率
W1[5].push("BCRI")# 会心率
W1[5].push("BCEV")# 会心回避率
W1[5].push("BMEV")# 魔法回避率
W1[5].push("BMRF")# 魔法反射率
W1[5].push("BCNT")# 反撃率
W1[5].push("BHRG")# HP再生率
W1[5].push("BMRG")# MP再生率
W1[5].push("BTRG")# TP再生率
#==============================================================================
#戦闘中に限定して作用する特殊能力値設定用キーワードを括弧内に設定します。
#狙われ率から経験値獲得率までの10種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[6] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[6].push("BTGR")# 狙われ率
W1[6].push("BGRD")# 防御効果率
W1[6].push("BREC")# 回復効果率
W1[6].push("BPHA")# 薬の知識
W1[6].push("BMCR")# MP消費率
W1[6].push("BTCR")# TPチャージ率
W1[6].push("BPDR")# 物理ダメージ率
W1[6].push("BMDR")# 魔法ダメージ率
W1[6].push("BFDR")# 床ダメージ率
W1[6].push("BEXR")# 経験獲得率
#==============================================================================
#戦闘中に限定して作用する弱体有効度設定用キーワードを括弧内に設定します。
#最大HPから運までの8種を順番に設定します。(変更不要です)
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W1[7] = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W1[7].push("BDBMHP")# 最大HP弱体
W1[7].push("BDBMMP")# 最大MP弱体
W1[7].push("BDBATK")# 攻撃力弱体
W1[7].push("BDBDEF")# 防御力弱体
W1[7].push("BDBMAT")# 魔法力弱体
W1[7].push("BDBMDF")# 魔法防御弱体
W1[7].push("BDBAGI")# 敏捷性弱体
W1[7].push("BDBLUK")# 運弱体
#==============================================================================
#属性有効度/ステート有効度設定用キーワードを順番に設定します。
#------------------------------------------------------------------------------
#空の配列を用意。
#------------------------------------------------------------------------------
W2 = []
#------------------------------------------------------------------------------
#★以下に設定★
#------------------------------------------------------------------------------
W2[0] = "ELE" #属性有効度
W2[1] = "STA" #ステート有効度
W2[2] = "BELE"#属性有効度(戦闘中のみ)
W2[3] = "BSTA"#ステート有効度(戦闘中のみ)
#==============================================================================
end
class Game_BattlerBase
#--------------------------------------------------------------------------
# 通常能力値
#--------------------------------------------------------------------------
alias param_plus_exppf param_plus
def param_plus(param_id)
#元の処理に追加データを加算。
param_plus_exppf(param_id) + ppf_param_plus(0,param_id)
end
#--------------------------------------------------------------------------
# 追加能力値
#--------------------------------------------------------------------------
alias xparam_exppf xparam
def xparam(param_id)
#元の処理に追加データを加算。
xparam_exppf(param_id) + ppf_param_plus(1,param_id)
end
#--------------------------------------------------------------------------
# 特殊能力値
#--------------------------------------------------------------------------
alias sparam_exppf sparam
def sparam(param_id)
#元の処理に追加データを加算。
if param_id == 0
sparam_exppf(param_id) * (1+ppf_param_plus(2,param_id))
else
sparam_exppf(param_id) + ppf_param_plus(2,param_id)
end
end
#--------------------------------------------------------------------------
# 弱体有効度
#--------------------------------------------------------------------------
alias debuff_rate_exppf debuff_rate
def debuff_rate(param_id)
#元の処理に追加データを加算。
debuff_rate_exppf(param_id) + ppf_param_plus(3,param_id)
end
#--------------------------------------------------------------------------
# 属性有効度
#--------------------------------------------------------------------------
alias element_rate_exppf element_rate
def element_rate(element_id)
#元の処理に追加データを加算。
if element_id == 27 or element_id == 24 or element_id == 25 #改 特定属性加算
if ppf_param_plus(4,element_id) == 0
element_rate_exppf(element_id) + ppf_param_plus(4,element_id) - 1
else
element_rate_exppf(element_id) * ppf_param_plus(4,element_id)
end
else
element_rate_exppf(element_id) + ppf_param_plus(4,element_id)
end
end
#--------------------------------------------------------------------------
# ステート有効度
#--------------------------------------------------------------------------
alias state_rate_exppf state_rate
def state_rate(state_id)
#元の処理に追加データを加算。
state_rate_exppf(state_id) + ppf_param_plus(5,state_id)
end
#--------------------------------------------------------------------------
# 追加データ
#--------------------------------------------------------------------------
def ppf_param_plus(type,param_id)
data = 0
#各特徴のデータを加算。
feature_objects.each {|f|
case type
when 0..3
#テキストデータを取得。
text = f.ex_p_data[0 + type][param_id]
#テキストデータを取得出来た場合は分岐。
if text
#基本追加データを計算。
sub_data = eval(f.ex_p_data[0 + type][param_id])
#データが正常な場合は加算。
data += sub_data if sub_data
end
#戦闘中でない場合は次の処理へ。
next unless $game_party.in_battle
#テキストデータを取得。
text = f.ex_p_data[4 + type][param_id]
#テキストデータを取得出来た場合は分岐。
if text
#戦闘中限定追加データを計算。
sub_data = eval(text)
#データが正常な場合は加算。
data += sub_data if sub_data
end
when 4..5
#テキストデータを取得。
text = f.ex_r_data[type - 4][param_id]
#テキストデータを取得出来た場合は分岐。
if text
#基本追加データを計算。
sub_data = eval(f.ex_r_data[type - 4][param_id])
#データが正常な場合は加算。
data += sub_data if sub_data
end
#戦闘中でない場合は次の処理へ。
next unless $game_party.in_battle
#テキストデータを取得。
text = f.ex_r_data[type - 2][param_id]
#テキストデータを取得出来た場合は分岐。
if text
#戦闘中限定追加データを計算。
sub_data = eval(text)
#データが正常な場合は加算。
data += sub_data if sub_data
end
end}
#基本能力値でない場合は100.0で割る。
data / (type == 0 ? 1 : 100.0)
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# 追加データ(基本能力値/追加能力値/特殊能力値/弱体有効度用)
#--------------------------------------------------------------------------
def ex_p_data
#増加値設定が既に存在するならそれを返す。
return @ex_p_data if @ex_p_data != nil
#増加値設定用ハッシュを準備。
@ex_p_data = {}
#8回分処理。
8.times {|n|
#配列を生成。
@ex_p_data[n] = []
#設定項目内の文字列設定に応じてメモ欄からデータを取得。
VU_F::W1[n].each {|i| @ex_p_data[n].push(/<#{i}[::](\S+)>/ =~ @note ? $1.to_s : "0")}}
# VU_F::W1[n].each {|i| @ex_p_data[n].push(/#{i}[::](\S+)/ =~ @note ? $1.to_s : "0")}}
#データを返す。
@ex_p_data
end
#--------------------------------------------------------------------------
# 追加データ(属性有効度/ステート有効度用)
#--------------------------------------------------------------------------
def ex_r_data
#増加値設定が既に存在するならそれを返す。
return @ex_r_data if @ex_r_data != nil
#増加値設定用ハッシュを準備。
@ex_r_data = {}
#4回分処理。
4.times {|n|
#配列を生成。
@ex_r_data[n] = {}
#行別に処理。
@note.each_line {|l|
#設定項目内の文字列設定に応じて各行からデータを取得。
data = /<#{VU_F::W2[n]}[::](\d+),(\S+)>/ =~ l ? [$1.to_i,$2.to_s] : nil
# data = /#{VU_F::W2[n]}[:](\d+),(\S+)/ =~ l ? [$1.to_i,$2.to_s] : nil
#nilの場合は次の行へ。
next unless data
#データを登録。
@ex_r_data[n][data[0]] = data[1]}}
#データを返す。
@ex_r_data
end
end