#============================================================================== # RGSS2_SRPG2拡張 武器攻撃力除外スキルSRPG2 # 2011/09/02公開 # C Winter (http://ccwinter.blog.fc2.com/) # # ・make_obj_damage_valueの競合に注意 #============================================================================== module TSRPG module Pattern NO_WEAPON_ATTACK = /<武器不使用>/i end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem #-------------------------------------------------------------------------- # ○ 武器不使用かどうかの取得 #-------------------------------------------------------------------------- def no_weapon_attack? if @no_weapon_attack == nil @no_weapon_attack = @note =~ TSRPG::Pattern::NO_WEAPON_ATTACK ? true : false end return @no_weapon_attack end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor #-------------------------------------------------------------------------- # ● 武器攻撃力の取得 #-------------------------------------------------------------------------- def base_weapon_atk n = 0 for item in weapons.compact do n += item.atk end return n end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy #-------------------------------------------------------------------------- # ● 武器攻撃力の取得 #-------------------------------------------------------------------------- def base_weapon_atk return 0 end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 補正後の武器攻撃力の取得 #-------------------------------------------------------------------------- def weapon_atk n = [[base_weapon_atk, 0].max, 999].min for state in states do n *= state.atk_rate / 100.0 end n = apply_tile_effect(n, TSRPG::ATK) # 地形効果による補正を適用 n = [[Integer(n), 0].max, 999].min return n end #-------------------------------------------------------------------------- # ● スキルまたはアイテムによるダメージ計算 # user : スキルまたはアイテムの使用者 # obj : スキルまたはアイテム # 結果は @hp_damage または @mp_damage に代入する。 #-------------------------------------------------------------------------- def make_obj_damage_value(user, obj) damage = obj.base_damage # 基本ダメージを取得 atk = user.atk atk -= user.weapon_atk if obj.no_weapon_attack? # 攻撃力から武器の分を減らす if damage > 0 # ダメージが正の数 damage += atk * 4 * obj.atk_f / 100 # 打撃関係度: 使用者 damage += user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者 if $game_temp.in_srpg if $game_temp.unit_back_attack # 背後攻撃ボーナス damage += damage * TSRPG::BACK_ATTACK_BONUS / 100 end end 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 -= atk * 4 * obj.atk_f / 100 # 打撃関係度: 使用者 damage -= user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者 damage = 0 - damage if zombie? # ゾンビ状態なら符号反転 end damage *= elements_max_rate(obj.element_set) # 属性修正 damage /= 100 damage = apply_variance(damage, obj.variance) # 分散 damage = apply_guard(damage) # 防御修正 if obj.damage_to_mp if (change_damage?) @hp_damage = damage # HP にダメージ else @mp_damage = damage # MP にダメージ end else if (change_damage? and self.mp > 0) @mp_damage = damage # MP にダメージ else @hp_damage = damage # HP にダメージ end end end #-------------------------------------------------------------------------- # ● スキルまたはアイテムによるダメージ(分散値を除外)予測値を返す # user : スキルまたはアイテムの使用者 # obj : スキルまたはアイテム #-------------------------------------------------------------------------- def get_obj_damage(user, obj) damage = obj.base_damage # 基本ダメージを取得 atk = user.atk atk -= user.weapon_atk if obj.no_weapon_attack? # 攻撃力から武器の分を減らす if damage > 0 # ダメージが正の数 damage += atk * 4 * obj.atk_f / 100 # 打撃関係度: 使用者 damage += user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者 if $game_temp.unit_back_attack # 背後攻撃ボーナス damage += damage * TSRPG::BACK_ATTACK_BONUS / 100 end 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 -= atk * 4 * obj.atk_f / 100 # 打撃関係度: 使用者 damage -= user.spi * 2 * obj.spi_f / 100 # 精神関係度: 使用者 damage = 0 - damage if zombie? # ゾンビ状態なら符号反転 end damage *= elements_max_rate(obj.element_set) # 属性修正 damage /= 100 damage = apply_guard(damage) # 防御修正 return damage end end