# # プラグイン式ダメージ特殊効果用ベーススクリプトBVer1.06(RGSS2) #  (C)2007-2009 TYPE74RX-T # # ※:特殊効果判定用ベーススクリプトを先に導入してください。 #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ★ スキルまたはアイテムに付加されている拡張システムフラグの取得 # obj : スキルまたはアイテム #-------------------------------------------------------------------------- def rx_set_system_flag(obj) @damage2 = 0 end #-------------------------------------------------------------------------- # ★ 装備物に付加されている拡張システムフラグの取得 # sys_str : システムワード #-------------------------------------------------------------------------- def rx_set_equip_sys_flag(sys_str) @damage2 = 0 end #-------------------------------------------------------------------------- # ★ 装備物に付加されている拡張システムフラグの取得(スキル使用時) # (Ver1.05より追加) # user : 使用者 #-------------------------------------------------------------------------- def rx_set_equip_sys_flag_user(user) end #-------------------------------------------------------------------------- # ★ 特殊ダメージフラグ群をセット #-------------------------------------------------------------------------- def rx_set_special_damage_flag @rx_special_damage_flags = [] end #-------------------------------------------------------------------------- # ★ 特殊ダメージ計算(武器攻撃) # attacker : 武器の使用者 #-------------------------------------------------------------------------- def rx_weapon_damage_calculation(attacker) damage = attacker.atk * 4 - self.def * 2 # 基本計算(物理攻撃) return damage end #-------------------------------------------------------------------------- # ★ 特殊ダメージ計算 # user : スキル、アイテムの使用者 # obj : スキル、アイテム #-------------------------------------------------------------------------- def rx_damage_calculation(user, obj) # 通常ダメージ計算フラグをON @rx_normal_damage = true # デフォルトのダメージ計算式 damage = obj.base_damage # 基本ダメージを取得 if damage > 0 # ダメージが正の数 damage += user.atk * 4 * obj.atk_f / 100 # 打撃関係度: 使用者 damage += user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者 unless obj.ignore_defense # 防御力無視以外 damage -= self.def * 2 * obj.atk_f / 100 # 打撃関係度: 対象者 damage -= self.spi * 1 * obj.spi_f / 100 # 精神関係度: 対象者 end damage = 0 if damage < 0 # マイナスなら 0 に elsif damage < 0 # ダメージが負の数 damage -= user.atk * 4 * obj.atk_f / 100 # 打撃関係度: 使用者 damage -= user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者 end return damage end #-------------------------------------------------------------------------- # ★ スキルまたはアイテムによる特殊ダメージ計算 # user : スキルまたはアイテムの使用者 # obj : スキルまたはアイテム # 結果は @hp_damage または @mp_damage(場合によっては両方)に代入する。 #-------------------------------------------------------------------------- def rx_special_damage(user, obj) @rx_attack_element_flag = false # 武器属性依存フラグの初期化 @rx_attack_element_mix = false # 武器属性含有フラグの初期化 @rx_mix_element_set = [] # 武器属性+スキル属性 @rx_normal_damage = false # 通常ダメージ計算フラグの初期化 # 武器属性とスキル属性を合成 @rx_mix_element_set.concat(user.element_set) if user.actor? @rx_mix_element_set.concat(obj.element_set) # 被ってる要素があれば、それを1つにする @rx_mix_element_set = @rx_mix_element_set.uniq damage_flag_count = 0 # 各種システムワードフラグのチェック(装備武器用) rx_set_equip_sys_flag_user(user) if user.actor? # 各種システムワードフラグのチェック(スキル用) rx_set_system_flag(obj) rx_set_special_damage_flag # 特殊ダメージフラグ群をセット damage = rx_damage_calculation(user, obj) # 特殊ダメージ計算 if damage > 0 and not @rx_normal_damage unless obj.ignore_defense # 防御力無視以外 damage -= self.def * 2 * obj.atk_f / 100 # 打撃関係度: 対象者 damage -= self.spi * 1 * obj.spi_f / 100 # 精神関係度: 対象者 end damage = 0 if damage < 0 # マイナスなら 0 に end # 武器属性依存なら(アクター限定) if @rx_attack_element_flag and user.actor? damage *= elements_max_rate(user.element_set) # 属性修正(武器側) # 武器属性とスキル属性を合成したスキルなら(アクター限定) elsif @rx_attack_element_mix and user.actor? damage *= elements_max_rate(@rx_mix_element_set) # 属性修正(武器+スキル) else damage *= elements_max_rate(obj.element_set) # 属性修正(スキル側) end damage /= 100 damage = apply_variance(damage, obj.variance) # 分散 damage = apply_guard(damage) # 防御修正 if obj.damage_to_mp @mp_damage = damage # MP にダメージ else @hp_damage = damage # HP にダメージ end # HPMPダメージの効果があれば HP と MP の両方にダメージ if @rx_hpmp_damage != nil if @rx_hpmp_damage @hp_damage = damage # HP にダメージ if @damage2 != 0 @mp_damage = @damage2 # MP にダメージ else @mp_damage = damage # MP にダメージ end end end end #-------------------------------------------------------------------------- # ★ 通常攻撃による特殊ダメージ計算 # attacker : 攻撃者 # 結果は @hp_damage に代入する。 #-------------------------------------------------------------------------- def rx_special_damage_weapon(attacker) rx_set_equip_sys_flag(attacker.rx_sys_str) # 各種システムワードフラグのチェック damage = rx_weapon_damage_calculation(attacker) # 特殊ダメージ計算 damage = 0 if damage < 0 # マイナスなら 0 に damage *= elements_max_rate(attacker.element_set) # 属性修正 damage /= 100 if damage == 0 # ダメージが 0 damage = rand(2) # 1/2 の確率で 1 ダメージ elsif damage > 0 # ダメージが正の数 @critical = (rand(100) < attacker.cri) # クリティカル判定 @critical = false if prevent_critical # クリティカル防止? damage *= 3 if @critical # クリティカル修正 end damage = apply_variance(damage, 20) # 分散 damage = apply_guard(damage) # 防御修正 # システムワードに「全体攻撃%」が含まれていれば(全体攻撃減衰型に対応・Ver1.06より更新) rx_attenuation = RX_T.get_numeric_of_system_word_in_equip(attacker.rx_sys_str, "全体攻撃%") if rx_attenuation > 0 damage = rx_attenuation_effect(attacker, damage, rx_attenuation) end @hp_damage = damage # HP にダメージ #------------------------------------------------------------------------ # ★ 「MPダメージ」スクリプト、「ダメージ吸収」スクリプトに対応 #------------------------------------------------------------------------ # 攻撃者がアクターで武器を持っていれば if attacker.actor? and attacker.weapon_id > 0 # システムワードに「MPダメージ」が含まれていれば if RX_T.check_system_word_in_equip(attacker.rx_sys_str, "MPダメージ") @mp_damage = @hp_damage # MP にダメージ end # システムワードに「ダメージ吸収」が含まれていれば if RX_T.check_system_word_in_sys_str($data_weapons[attacker.weapon_id], "ダメージ吸収") # 吸収効果の計算処理へ rx_make_attack_absorb_effect(attacker) end end end #-------------------------------------------------------------------------- # ● 通常攻撃によるダメージ計算 # attacker : 攻撃者 # 結果は @hp_damage に代入する。 #-------------------------------------------------------------------------- alias rx_rgss2spc_make_attack_damage_value make_attack_damage_value def make_attack_damage_value(attacker) # ★ システムワードに「RX-SYS」が入っていれば if attacker.actor? and RX_T.check_system_word_in_equip(attacker.rx_sys_str, "RX-SYS") # 特殊ダメージ処理へ rx_special_damage_weapon(attacker) # メソッド終了 return end # メソッドを呼び戻す rx_rgss2spc_make_attack_damage_value(attacker) end #-------------------------------------------------------------------------- # ● スキルまたはアイテムによるダメージ計算 # user : スキルまたはアイテムの使用者 # obj : スキルまたはアイテム # 結果は @hp_damage または @mp_damage に代入する。 #-------------------------------------------------------------------------- alias rx_rgss2spc_make_obj_damage_value make_obj_damage_value def make_obj_damage_value(user, obj) # ★ 装備物のシステムワードに「RX-SYS」が入っているかのフラグ(Ver1.05より追加) rx_sys_equip = RX_T.check_system_word_in_equip(user.rx_sys_str, "RX-SYS") and user.actor? # ★ スキルまたは装備物のシステムワードに「RX-SYS」が入っていれば(Ver1.05より更新) if RX_T.check_system_word_in_sys_str(obj, "RX-SYS") or rx_sys_equip # 特殊ダメージ処理へ rx_special_damage(user, obj) # メソッド終了 return end # メソッドを呼び戻す rx_rgss2spc_make_obj_damage_value(user, obj) end end