# ▽▽▽ XRXSv7. 特殊効果詰め合わせ DamageVX ▽▽▽ # # publish 2010/ 3/ 3 # update -/12/23a # #============================================================================== # カスタマイズポイント #============================================================================== module XRXSV7 # # HPダメージ表示の代わりに表示する用語(\hpshock, \eraze) # HPShockText = "大きな衝撃が %s の体力を奪う!" EnemyErazeText = "%s を消し去った!" # # ドロップオフ機能の用語 # DropOff_S = "%s はアイテムを落しやすくなった!" DropNone_S = "%s はアイテムを持っていないかった。" # # 属性耐性変化の用語 # ElementDamage_S = "%s は属性耐性がダウン!" ElementNoDamage = "%s の属性耐性はもう下がらない!" # # スキルのHPダメージを常に10の倍数にする? # TenMultipleForcing = false end #============================================================================== # ダメージ設定 #============================================================================== module XRXSv7_SkillVX attr_accessor :guard_disable def make_obj_damage_value(user, obj) position = 0 position = user.class.position if user.is_a?(Game_Actor) obj = obj.dup if obj.note.include?("\\perm") obj.base_damage = self.maxhp * obj.base_damage / 100 elsif obj.note.include?("\\per") obj.base_damage = self.hp * obj.base_damage / 100 elsif obj.note.include?("\\hpd") obj.base_damage *= user.hp elsif obj.note.include?("\\mpd") obj.base_damage *= user.mp elsif obj.note.include?("\\sub") obj.base_damage += user.maxhp - user.hp elsif obj.note.include?("\\fullhp?") obj.base_damage /= 10 if user.maxhp > user.hp elsif obj.note.include?("\\hpshock") obj.base_damage = self.hp - (rand(9) + 1) end if obj.note.include?("\\long") and position == 0 obj.variance *= 2 elsif obj.note.include?("\\short") and position == 2 obj.variance *= 2 end if self.is_a?(Game_Enemy) and obj.base_damage >= 2 and obj.atk_f == 0 and obj.spi_f == 0 if self.enemy.note[/\\fixed\/([0-9]+?)/] obj.base_damage = [obj.base_damage / $1.to_i, 1].max end end self.guard_disable = (obj.note.include?("\\piercing")) super(user, obj) self.guard_disable = nil if XRXSV7::TenMultipleForcing and @hp_damage.abs >= 10 @hp_damage /= 10 @hp_damage *= 10 end end def apply_guard(damage) return damage if self.guard_disable return super end end module XRXSv7_SkillVX_Enemy def make_obj_damage_value(user, obj) if obj.note.include?("\\eraze") and rand(100) < state_probability(1) self.escape end if obj.note.include?("\\dropoff") self.drop_item1.denominator = [self.drop_item1.denominator - 1, 1].max end super end end class Game_Actor < Game_Battler include XRXSv7_SkillVX end class Game_Enemy < Game_Battler include XRXSv7_SkillVX include XRXSv7_SkillVX_Enemy end #============================================================================== # 可変エネミー情報 機能 #============================================================================== unless defined? XRXSV_EnemyDataEX module XRXSV_EnemyDataEX def data_enemy return $data_enemies[@enemy_id] end def enemy if @enemy == nil @enemy = data_enemy.dup @enemy.drop_item1 = @enemy.drop_item1.dup @enemy.drop_item2 = @enemy.drop_item2.dup @enemy.element_ranks = @enemy.element_ranks.dup @enemy.state_ranks = @enemy.state_ranks.dup @enemy.actions = @enemy.actions.dup end return @enemy end end end class Game_Enemy < Game_Battler include XRXSV_EnemyDataEX def enemy #* return super end alias xrxsv7_transform transform def transform(enemy_id) @enemy = nil xrxsv7_transform(enemy_id) end end #============================================================================== # バトル中の処理 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 戦闘行動の実行 #-------------------------------------------------------------------------- alias xrxsv7_execute_action execute_action def execute_action xrxsv7_execute_action if @active_action and @active_action.skill? @active_action.skill.note.gsub(/\\next\[([0-9]+?)(\,([0-9]+?))*?\]/) do if rand(100) < ($3 ? $3.to_i : 100) skill_id = $1.to_i new_action = Game_BattleAction.new(@active_battler) new_action.set_skill(skill_id) new_action.target_index = @active_action.target_index @active_actions.unshift(new_action) rescue nil break end end end end #-------------------------------------------------------------------------- # ● HPダメージの表示 #-------------------------------------------------------------------------- alias xrxsv7_display_hp_damage display_hp_damage def display_hp_damage(target, obj = nil) if obj and obj.note.include?("\\hpshock") @message_window.add_instant_text(sprintf(XRXSV7::HPShockText, target.name)) return end if obj and obj.note.include?("\\eraze") and not target.exist? @message_window.add_instant_text(sprintf(XRXSV7::EnemyErazeText, target.name)) return end xrxsv7_display_hp_damage(target, obj) return if target.missed or target.evaded if obj and target.is_a?(Game_Enemy) and @message_window.line_number <= 4 text = "" if obj.note.include?("\\dropoff") if target.drop_item1.kind == 0 text = sprintf(XRXSV7::DropNone_S, target.name) else text = sprintf(XRXSV7::DropOff_S, target.name) end elsif obj.note.include?("\\lmd") and obj.element_set.size >= 1 and not target.dead? result = false if obj.note.include?("\\lmd") and target.is_a?(Game_Enemy) enemy = target.enemy for elemnt_id in obj.element_set n = enemy.element_ranks[elemnt_id] - 1 if n <= 0 n = 1 else result = true text = sprintf(XRXSV7::ElementDamage_S, target.name) end enemy.element_ranks[elemnt_id] = n end end unless result text = sprintf(XRXSV7::ElementNoDamage, target.name) end end @message_window.add_instant_text(text) unless text.empty? end end end