#============================================================================== # ■ RGSS3 属性・クリティカル計算強化 Ver1.15 by 星潟 #------------------------------------------------------------------------------ # 属性、クリティカルダメージ及び、クリティカル率の計算方法に幅を持たせます。 # # ★クリティカルの基本倍率を変更できます。 # # ★特定属性の効果を増幅する属性を設定できます。 # (例. 属性Aの有効度が高ければ高いほど、属性Bのスキルで攻撃時に威力増加) # # ★クリティカルダメージ増幅属性に設定された属性有効度の倍率が # クリティカルダメージに適用されます。 # (例. 通常のクリティカルダメージ30 # クリティカル増幅属性有効度150%時、クリティカルダメージ45 # クリティカル増幅属性有効度200%時、クリティカルダメージ60) # # ★アイテム・スキル個別に更にクリティカルダメージ増幅率を設定できます。 # (これはクリティカルダメージ増幅属性計算とは別に乗算されます) # # ★アイテム・スキル個別にクリティカル率を変動させる事ができます。 # # なお、いくらクリティカル率を変更しても # クリティカル有効設定をしていないスキルでは # クリティカルは発生しないのでご注意を。 #------------------------------------------------------------------------------ # Ver1.01 通常攻撃時も属性強化判定を行うように変更しました。 # # Ver1.02 処理方法を一部変更し、ももまるLabs様で配布中の # XPスタイルバトルで使用した場合において # 弱点をついていなくても、属性が増幅されている場合は # 弱点として表示されている現象を解決しました。 # # Ver1.10 更に競合しにくく変更しました。 # また、キャッシュ化による軽量化を行いました。 # # Ver1.11 クリティカル増幅属性の効果が # 無条件で適用されていた不具合を修正しました。 # # Ver1.12 命中・会心システム改変との競合を解消。 # 同時に導入される場合、こちらを下側にして下さい。 # # Ver1.14 命中・会心システム改変の処理変更に伴う修正。 # 命中・会心システム改変のバージョンが2.00の場合は # 必ずこのVer1.14以上を使用してください。 # 1.12の会心関係の問題に関しては別スクリプトに分割 #============================================================================== module CRI_CHANGE #クリティカル時の基本倍率を設定します。(2.5等) #変更しない場合は0にして下さい。 CRI_BASE = 0 #クリティカルダメージ増幅用属性IDを設定します。 CRI_B_EL = 11 #増幅対象属性を設定します。 #EL_BOOST = {}は変更しないで下さい。 EL_BOOST = {} #以下に設定していきます。 #例えばEL_BOOST[3] = 12の場合 #属性ID3のアイテム/スキルは属性ID12の有効度を以てダメージが増幅され #例えばEL_BOOST[4] = 13の場合 #属性ID4のアイテム/スキルは属性ID13の有効度を以てダメージが増幅されます。 EL_BOOST[3] = 12 EL_BOOST[4] = 13 EL_BOOST[5] = 14 #アイテム・スキル用のクリティカルダメージ増幅倍率設定用ワードを設定します。 #「<>」で囲い、設定用ワードの後に「:」をつけ、数値を入力して下さい。 #記入例 <会心増幅:200> CTI_B_IS = "会心増幅" #アイテム・スキル用のクリティカル率変動値設定用ワードを設定します。 #「<>」で囲い、設定用ワードの後に「:」をつけ、数値を入力して下さい。 #記入例 <会心率変動:15> CTI_P_IS = "会心率変動" #会心率変動により、最終的に会心率が0を下回った場合 #会心率の判定を0にするかを指定。 #trueで0にする。falseでそのままの値にする。 #命中・会心システム改変を導入されている場合 #命中・会心システム改変のCC_EFF_Zeroは必ずfalseにしてください。 CRI_ZERO = true #-------------------------------------------------------------------------- # 命中・会心システム改変併用関係処理 #-------------------------------------------------------------------------- def self.eff_per @eff_per ||= eff_per_make end def self.eff_per_make begin EFF_PER::CC_EFF ? 1 : 0 rescue 0 end end end class Game_Temp attr_accessor :critical_boost_rate #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_cb_element initialize def initialize initialize_cb_element @critical_boost_rate = 1.0 end end class Game_ActionResult #-------------------------------------------------------------------------- # ダメージの作成 #-------------------------------------------------------------------------- alias make_damage_critical_boost make_damage def make_damage(value, item) #クリティカル時、値にアイテム/スキルのクリティカル増幅効果を適用する。 value = (value * item.cri_boost_rate).to_i if @critical #本来の処理を実行する。 make_damage_critical_boost(value, item) end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ダメージ計算 #-------------------------------------------------------------------------- alias make_damage_value_cb_element make_damage_value def make_damage_value(user, item) #クリティカル増幅属性の有効度を取得。 $game_temp.critical_boost_rate = @result.critical ? user.element_rate(CRI_CHANGE::CRI_B_EL) : 1.0 #本来の処理を実行。 make_damage_value_cb_element(user, item) #クリティカル増幅属性の値を元に戻しておく。 $game_temp.critical_boost_rate = 1.0 end #-------------------------------------------------------------------------- # クリティカルの適用 #-------------------------------------------------------------------------- alias apply_critical_base_change apply_critical def apply_critical(damage) #基本クリティカル倍率が変更されている場合は #新たな倍率で計算し、そうでない場合は本来の倍率で計算する。 CRI_CHANGE::CRI_BASE != 0 ? damage * CRI_CHANGE::CRI_BASE : apply_critical_base_change(damage) end #-------------------------------------------------------------------------- # スキル/アイテムの会心率計算 #-------------------------------------------------------------------------- alias item_cri_item_cri_rate item_cri def item_cri(user, item) #本来の処理を実行。 data = item_cri_item_cri_rate(user, item) #クリティカルが有効な場合 #アイテム/スキルの会心率変動値を足す。 add = item.cri_per_change_rate.to_f / 100 add *= (1 - cev) if CRI_CHANGE.eff_per == 0 data += add CRI_CHANGE::CRI_ZERO && data < 0 ? 0 : data end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 会心増幅 #-------------------------------------------------------------------------- def cri_boost_rate #キャッシュが存在する場合はキャッシュを返す。 @cri_boost_rate ||= (1 + (/<#{CRI_CHANGE::CTI_B_IS}[::](\S+)>/ =~ note ? $1.to_f / 100 : 0)) end #-------------------------------------------------------------------------- # 会心率変動 #-------------------------------------------------------------------------- def cri_per_change_rate #キャッシュが存在する場合はキャッシュを返す。 @cri_per_change_rate ||= /<#{CRI_CHANGE::CTI_P_IS}[::](\S+)>/ =~ note ? $1.to_i : 0 end end class RPG::UsableItem::Damage #-------------------------------------------------------------------------- # ダメージ計算 #-------------------------------------------------------------------------- unless method_defined?(:eval_element_boost) alias eval_element_boost eval def eval(a, b, v) #本来の処理に属性ブーストとクリティカルブーストの効果を適用する。 eval_element_boost(a, b, v) * element_boost(a) * $game_temp.critical_boost_rate end end #-------------------------------------------------------------------------- # 属性ブースト #-------------------------------------------------------------------------- def element_boost(user) #基本ブースト倍率を設定する。 data = 1.0 #通常攻撃属性依存の場合は通常攻撃属性全て、 #そうでない場合はスキル属性のみ属性ブーストを適用する。 if @element_id == -1 user.atk_elements.each do |i| data *= user.element_rate(CRI_CHANGE::EL_BOOST[i]) if CRI_CHANGE::EL_BOOST[i] != nil end else data *= user.element_rate(CRI_CHANGE::EL_BOOST[@element_id]) if CRI_CHANGE::EL_BOOST[@element_id] != nil end #ブースト倍率を返す。 data end end