#-------------------------------------------------------------------------- # ●ゾンビステートスクリプト #  +回復魔法、アイテムが効かなくなるステート # # ゾンビステートにかかったバトラーは、 # 回復効果によりダメージを受けるようになります。 # また、回復効果なしステートにかかると、 # 回復スキルやアイテムの効果が現れなくなります。 # # それぞれ、ステートIDを指定してtrueを返すことで効果が現れます。 # # 名前の衝突による競合を避けるために、新しく定義したメソッドには # 接頭語として er_ をつけています。 # # 再定義 item_test # # Ver1.01 # ゾンビ状態の味方に蘇生効果(ステート1を解除する)があるスキルorアイテムを # 使ったときに、即死する効果を付け加えました。 # メニュー画面でゾンビな仲間に回復アイテムを使っても何もおきない不具合を修正しました。 # #-------------------------------------------------------------------------- module RPG class State #ゾンビステート。ステートIDを指定して、trueを返してください。 def er_zombie_state? case @id when 0 return true end return false end #回復効果なしステート。ステートIDを指定して、trueを返してください。 def er_no_heal_state? case @id when 0 return true end return false end end end class Game_BattleAction #-------------------------------------------------------------------------- # ● スキルまたはアイテムのターゲット作成 # obj : スキルまたはアイテム #-------------------------------------------------------------------------- alias base_make_obj_targets make_obj_targets def make_obj_targets(obj) targets = base_make_obj_targets(obj) if obj.for_dead_friend? and obj.minus_state_set.include?(1) if obj.for_one? # 味方単体 (戦闘不能) target = friends_unit.smooth_target(@target_index) targets.push(target) if target.states.find{|a|a.er_zombie_state?} else # 味方全体 (戦闘不能) for member in friends_unit.existing_members next if not member.states.find{|a|a.er_zombie_state?} targets += [member] end end end return targets.compact end end class Game_Battler alias base_item_effective? item_effective? def item_effective?(user, item) if item.minus_state_set.include?(1) and self.states.find{|a|a.er_zombie_state?} return true end return base_item_effective?(user, item) end alias base_skill_effective? skill_effective? def skill_effective?(user,skill) if skill.minus_state_set.include?(1) and self.states.find{|a|a.er_zombie_state?} return true end return base_skill_effective?(user,skill) end alias base_make_obj_damage_value make_obj_damage_value def make_obj_damage_value(user, obj) base_make_obj_damage_value(user, obj) #スキルの基本ダメージ量が負の場合に、ゾンビダメージ判定 if obj.base_damage < 0 @hp_damage = @hp_damage.abs if self.states.find{|a|a.er_zombie_state?} != nil @hp_damage = 0 if self.states.find{|a|a.er_no_heal_state?} != nil end end alias base_apply_state_changes apply_state_changes def apply_state_changes(obj) base_apply_state_changes(obj) if obj.minus_state_set.include?(1) and self.states.find{|a|a.er_zombie_state?} != nil add_state(1) @added_states.push(1) end end #-------------------------------------------------------------------------- #再定義 def item_test(user, item) tester = self.clone tester.make_obj_damage_value(user, item) tester.apply_state_changes(item) if tester.hp_damage != 0 or tester.calc_hp_recovery(user, item) != 0 return true if tester.hp < tester.maxhp end if tester.mp_damage != 0 or tester.calc_mp_recovery(user, item) != 0 return true if tester.mp < tester.maxmp end return true unless tester.added_states.empty? return true unless tester.removed_states.empty? return true if item.parameter_type > 0 return false end #-------------------------------------------------------------------------- # ● アイテムによる HP 回復量計算 # ゾンビステートによる回復でのダメージ効果をスキルのみに限定したい場合、 # キリトリここから〜ここまでの間をコメントアウトするか、除去してください。 #-------------------キリトリ▼ここから------------------------------------- alias base_calc_hp_recovery calc_hp_recovery def calc_hp_recovery(user, item) result = base_calc_hp_recovery(user, item) result = - result.abs if self.states.find{|a|a.er_zombie_state?} != nil result = 0 if self.states.find{|a|a.er_no_heal_state?} != nil return result end #-------------------キリトリ▲ここまで------------------------------------- end