| 
 
| 赞 | 9 |  
| VIP | 0 |  
| 好人卡 | 11 |  
| 积分 | 29 |  
| 经验 | 29235 |  
| 最后登录 | 2023-12-28 |  
| 在线时间 | 713 小时 |  
 Lv3.寻梦者 
	梦石0 星屑2920 在线时间713 小时注册时间2010-7-25帖子813 
 | 
| 复制代码#==============================================================================
# ■ RGSS3 一定割合ダメージ共有特徴 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# ダメージを受けた際、相手にもダメージを与える特徴を作成します。
# HP版とMP版をそれぞれ利用できます。
# なお、ダメージが負の値(回復)の際には効果を発揮しません。
#==============================================================================
# 特徴(アクター/エネミー/ステート/装備品)設定例
#==============================================================================
# <HPDB:50,25>
# 25%の確率で受けたHPダメージの50%分のHPダメージを相手に返す。
#------------------------------------------------------------------------------
# <MPDB:100,50>
# 50%の確率で受けたMPダメージの100%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <HPDBR:75,65>
# 65%の確率で受けたHPダメージの75%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <MPDBR:25,100>
# 100%の確率で受けたMPダメージの25%分のHPダメージを相手に返す。
#------------------------------------------------------------------------------
# <HPDB:a.atk,25>
# 25%の確率で受けたHPダメージの
# 攻撃を受けた側の攻撃力の値%分のHPダメージを相手に返す。
#------------------------------------------------------------------------------
# <MPDB:100,b.def>
# 攻撃した側の防御力%の確率で
# 受けたMPダメージの100%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <HPDBR:a.mat,100-b.mdf>
# 100から攻撃した側の魔法防御を引いた値%の確率で受けたHPダメージの
# 攻撃を受けた側の魔法力の値%分のMPダメージを相手に返す。
#------------------------------------------------------------------------------
# <ダメージ共有無効特徴:100>
# 100%の確率で、相手のダメージ共有効果を無効化します。
#------------------------------------------------------------------------------
# <ダメージ共有無効特徴:a.mat-b.mdf>
# 自分の魔法力から相手の魔法防御を引いた値%の確率で
# 相手のダメージ共有効果を無効化します。
#==============================================================================
# アイテム/スキル設定例
#==============================================================================
# <ダメージ共有無効特徴:50>
# 100%の確率で、相手のダメージ共有効果を無効化します。
#------------------------------------------------------------------------------
# <ダメージ共有無効特徴:a.mat-b.mdf>
# 自分の魔法力から相手の魔法防御を引いた値%の確率で
# 相手のダメージ共有効果を無効化します。
#==============================================================================
# ももまるLabs様のXPスタイルバトルを使用されている方は
# 他サイト対応素材ページから一定割合ダメージ共有特徴XPSも併せて使用してください。
#==============================================================================
# Ver1.01 処理を効率化しました。
#         ダメージ共有を一定確率で無効化する特徴と
#         ダメージ共有を一定確率で無効化するアイテム/スキルを
#         作成できるようにしました。
#         回復効果まで共有していた不具合を修正しました。
#         また、計算式を以て処理を行えるように変更しました。
#==============================================================================
module PAINBOND
  
  #HPダメージをHPダメージで返す場合のキーワードを設定します。
  
  WORD1 = "HPDB"
  
  #MPダメージをMPダメージで返す場合のキーワードを設定します。
  
  WORD2 = "MPDB"
  
  #HPダメージをMPダメージで返す場合のキーワードを設定します。
  
  WORD3 = "HPDBR"
  
  #MPダメージをHPダメージで返す場合のキーワードを設定します。
  
  WORD4 = "MPDBR"
  
  #共有無効スキル設定用のキーワードを設定します。
  
  WORD5 = "ダメージ共有無効"
  
  #共有無効特徴設定用のキーワードを設定します。
  
  WORD6 = "ダメージ共有無効特徴"
  
  #使用者と対象者が同じ場合に共有効果を有効にするかどうかを指定。
  #trueで有効、falseで無効。
  
  SELF_FLAG = false
  
end
module Vocab 
  
  #アクターがHPダメージを返された場合のメッセージを設定します。
  ActorHPB = "%s受到了%s的反弹伤害!"
  
  #エネミーがHPダメージを返された場合のメッセージを設定します。
  
  EnemyHPB = "%s受到了%s的反弹伤害!"
  
  #アクターがMPダメージを返された場合のメッセージを設定します。
  
  ActorMPB = "呪いにより%sの%sが %s 減った!"
  
  #エネミーがMPダメージを返された場合のメッセージを設定します。
  
  EnemyMPB = "呪いにより%s%sの%sが %s 減った!"
  
end
class Game_Temp
  attr_accessor :pbd_user
  attr_accessor :pbd_target
end
class Game_ActionResult
  attr_reader :hpb_star
  attr_reader :mpb_star
  #--------------------------------------------------------------------------
  # ダメージ値のクリア
  #--------------------------------------------------------------------------
  alias clear_damage_values_painbond clear_damage_values
  def clear_damage_values
    
    #本来の処理を実行。
    
    clear_damage_values_painbond
    
    #ダメージ共有用変数の初期化。
    
    @hpb_star = 0
    @mpb_star = 0
  end
  #--------------------------------------------------------------------------
  # ダメージの作成
  #--------------------------------------------------------------------------
  alias make_damage_painbond make_damage
  def make_damage(value, item)
    
    #本来の処理を実行。
    
    make_damage_painbond(value, item)
    
    #使用失敗時は処理を中断する。
    
    return if !@success
    
    #ダメージ共有の値を作成。
    
    make_pb_hpdamage(@hp_damage)
    make_pb_mpdamage(@mp_damage)
    
    #値を整数にする。
    
    @hpb_star = @hpb_star.to_i
    @mpb_star = @mpb_star.to_i
    
  end
  #--------------------------------------------------------------------------
  # HP ダメージ共有の計算
  #--------------------------------------------------------------------------
  def make_pb_hpdamage(damage)
    
    #ダメージ量が0以下の時は処理を行わない。
    
    return unless damage > 0
    
    #HPダメージからデータを作成する。
    
    @hpb_star += damage * @battler.hpb_star / 100
    @mpb_star += damage * @battler.hpbr_star / 100
  end
  #--------------------------------------------------------------------------
  # MP ダメージ共有の計算
  #--------------------------------------------------------------------------
  def make_pb_mpdamage(damage)
    
    #ダメージ量が0以下の時は処理を行わない。
    
    return unless damage > 0
    
    #MPダメージからデータを作成する。
    
    @mpb_star += damage * @battler.mpb_star / 100
    @hpb_star += damage * @battler.mpbr_star / 100
  end
  #--------------------------------------------------------------------------
  # HP ダメージ共有の文章を取得
  #--------------------------------------------------------------------------
  def hpb_text(damage)
    
    #フォーマットを取得し、文章を作成する。
    
    fmt = @battler.actor? ? Vocab::ActorHPB : Vocab::EnemyHPB
    sprintf(fmt, @battler.name, damage)
  end
  #--------------------------------------------------------------------------
  # MP ダメージ共有の文章を取得
  #--------------------------------------------------------------------------
  def mpb_text(damage)
    
    #フォーマットを取得し、文章を作成する。
    
    fmt = @battler.actor? ? Vocab::ActorMPB : Vocab::EnemyMPB
    sprintf(fmt, @battler.name, Vocab::mp, damage)
  end
end
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ダメージ共有無効発動率を作成
  #--------------------------------------------------------------------------
  def painbond_break(item)
    
    #戦闘中でなければ0を返す。
    
    return 0 unless SceneManager.scene_is?(Scene_Battle)
    
    #使用者と対象をそれぞれ取得。
    
    a = self
    
    b = $game_temp.pbd_target
    
    #アイテム/スキルのダメージ共有無効発動率を取得。
    
    number = eval(item.i_painbond_break)
    
    #各特徴のダメージ共有無効率を加算する。
    
    feature_objects.each {|object| number += eval(object.f_painbond_break)}
    
    #ダメージ共有無効率を返す。
    
    number
  end
  #--------------------------------------------------------------------------
  # HPダメージをHPダメージで返す
  #--------------------------------------------------------------------------
  def hpb_star
    
    #戦闘中でなければ0を返す。
    
    return 0 unless SceneManager.scene_is?(Scene_Battle)
    
    #使用者と対象をそれぞれ取得。
    
    a = self
    
    b = $game_temp.pbd_user
    
    #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
    
    return 0 if a == b && !PAINBOND::SELF_FLAG
    
    #初期値を0とする。
    
    number = 0
    
    #特徴別にデータを取得し、ダメージ共有効果を判定する。
    
    feature_objects.each {|object|
    number += eval(object.hpb_star[0]) if eval(object.hpb_star[1]) > rand(100)}
    
    #値を返す。
    
    return number
  end
  #--------------------------------------------------------------------------
  # MPダメージをMPダメージで返す
  #--------------------------------------------------------------------------
  def mpb_star
    
    #戦闘中でなければ0を返す。
    
    return 0 unless SceneManager.scene_is?(Scene_Battle)
    
    #使用者と対象をそれぞれ取得。
    
    a = self
    
    b = $game_temp.pbd_user
    
    #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
    
    return 0 if a == b && !PAINBOND::SELF_FLAG
    
    #初期値を0とする。
    
    number = 0
    
    #特徴別にデータを取得し、ダメージ共有効果を判定する。
    
    feature_objects.each {|object|
    number += eval(object.mpb_star[0]) if eval(object.mpb_star[1]) > rand(100)}
    
    #値を返す。
    
    return number
  end
  #--------------------------------------------------------------------------
  # HPダメージをMPダメージで返す
  #--------------------------------------------------------------------------
  def hpbr_star
    
    #戦闘中でなければ0を返す。
    
    return 0 unless SceneManager.scene_is?(Scene_Battle)
    
    #使用者と対象をそれぞれ取得。
    
    a = self
    
    b = $game_temp.pbd_user
    
    #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
    
    return 0 if a == b && !PAINBOND::SELF_FLAG
    
    #初期値を0とする。
    
    number = 0
    
    #特徴別にデータを取得し、ダメージ共有効果を判定する。
    
    feature_objects.each {|object|
    number += eval(object.hpbr_star[0]) if eval(object.hpbr_star[1]) > rand(100)}
    
    #値を返す。
    
    return number
  end
  #--------------------------------------------------------------------------
  # MPダメージをHPダメージで返す
  #--------------------------------------------------------------------------
  def mpbr_star
    
    #戦闘中でなければ0を返す。
    
    return 0 unless SceneManager.scene_is?(Scene_Battle)
    
    #使用者と対象をそれぞれ取得。
    
    a = self
    
    b = $game_temp.pbd_user
    
    #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。
    
    return 0 if a == b && !PAINBOND::SELF_FLAG
    
    #初期値を0とする。
    
    number = 0
    
    #特徴別にデータを取得し、ダメージ共有効果を判定する。
    
    feature_objects.each {|object|
    number += eval(object.mpbr_star[0]) if eval(object.mpbr_star[1]) > rand(100)}
    
    #値を返す。
    
    return number
  end
end
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # スキル/アイテムの効果を適用
  #--------------------------------------------------------------------------
  alias apply_item_effects_painbond apply_item_effects
  def apply_item_effects(target, item)
    
    $game_temp.pbd_user = @subject
    
    $game_temp.pbd_target = target
    
    a = @subject
    
    b = target
    
    #本来の処理を実行。
    
    apply_item_effects_painbond(target, item)
    
    #リフレッシュする。
    
    refresh_status
    
    #行動主体が存在しないか
    #行動主体かアイテムのダメージ共有効果無効判定に成功した場合は飛ばす。
    
    if !@subject or @subject.painbond_break(item) > rand(100)
      
      $game_temp.pbd_user = nil
      $game_temp.pbd_target = nil
      return
      
    end
    
    #HPダメージ共有効果が有効かつ、HPが0より大きいなら実行する。
    
    if target.result.hpb_star > 0 && @subject.hp > 0
      @subject.hp -= target.result.hpb_star
      refresh_status
      @log_window.display_hpb(@subject, item, target.result.hpb_star)
      @log_window.display_added_states(@subject) if @subject.dead?
    end
    
    #MPダメージ共有効果が有効かつ、MPが0より大きいなら実行する。
    
    if target.result.mpb_star > 0 && @subject.mp > 0
      @subject.mp -= target.result.mpb_star
      refresh_status
      @log_window.display_mpb(@subject, item, target.result.mpb_star)
    end
    
    $game_temp.pbd_user = nil
    $game_temp.pbd_target = nil
    
  end
end
class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # HP ダメージ共有表示
  #--------------------------------------------------------------------------
  def display_hpb(target, item, hpb_star)
    
    #ダメージエフェクト実行。
    
    target.perform_damage_effect
    
    #メッセージの表示。
    
    add_text(target.result.hpb_text(hpb_star))
    
    #ウェイト
    
    wait
  end
  #--------------------------------------------------------------------------
  # MP ダメージ共有表示
  #--------------------------------------------------------------------------
  def display_mpb(target, item, mpb_star)
    
    #メッセージの表示。
    
    add_text(target.result.mpb_text(mpb_star))
    
    #ウェイト
    
    wait
  end
end
class RPG::BaseItem
  #--------------------------------------------------------------------------
  # HPダメージをHPダメージで返す
  #--------------------------------------------------------------------------
  def hpb_star
    
    #キャッシュが存在する場合はキャッシュを返す。
    
    return @hpb_star if @hpb_star != nil
    
    #メモ欄からデータを取得。
    
    memo = self.note.scan(/<#{PAINBOND::WORD1}[::](\S+),(\S+)>/).flatten
    @hpb_star = memo != nil && !memo.empty? ? memo : ["0","0"]
    
    #データを返す。
    
    @hpb_star
  end
  #--------------------------------------------------------------------------
  # MPダメージをMPダメージで返す
  #--------------------------------------------------------------------------
  def mpb_star
    
    #キャッシュが存在する場合はキャッシュを返す。
    
    return @mpb_star if @mpb_star != nil
    
    #メモ欄からデータを取得。
    
    memo = self.note.scan(/<#{PAINBOND::WORD2}[::](\S+),(\S+)>/).flatten
    @mpb_star = memo != nil && !memo.empty? ? memo : ["0","0"]
    
    #データを返す。
    
    @mpb_star
  end
  #--------------------------------------------------------------------------
  # HPダメージをMPダメージで返す
  #--------------------------------------------------------------------------
  def hpbr_star
    
    #キャッシュが存在する場合はキャッシュを返す。
    
    return @hpbr_star if @hpbr_star != nil
    
    #メモ欄からデータを取得。
    
    memo = self.note.scan(/<#{PAINBOND::WORD3}[::](\S+),(\S+)>/).flatten
    @hpbr_star = memo != nil && !memo.empty? ? memo : ["0","0"]
    
    #データを返す。
    
    @hpbr_star
  end
  #--------------------------------------------------------------------------
  # MPダメージをHPダメージで返す
  #--------------------------------------------------------------------------
  def mpbr_star
    
    #キャッシュが存在する場合はキャッシュを返す。
    
    return @mpbr_star if @mpbr_star != nil
    
    #メモ欄からデータを取得。
    
    memo = self.note.scan(/<#{PAINBOND::WORD4}[::](\S+),(\S+)>/).flatten
    @mpbr_star = memo != nil && !memo.empty? ? memo : ["0","0"]
    
    #データを返す。
    
    @mpbr_star
  end
  #--------------------------------------------------------------------------
  # 特徴のダメージ共有無効確率
  #--------------------------------------------------------------------------
  def f_painbond_break
    
    #キャッシュが存在する場合はキャッシュを返す。
    
    return @f_painbond_break if @f_painbond_break != nil
    
    #メモ欄からデータを取得。
    
    memo = self.note.scan(/<#{PAINBOND::WORD6}[::](\S+)>/).flatten
    @f_painbond_break = memo != nil && !memo.empty? ? memo[0] : "0"
    
    #データを返す。
    
    @f_painbond_break
  end
end
class RPG::UsableItem < RPG::BaseItem
  #--------------------------------------------------------------------------
  # アイテム/スキルのダメージ共有無効確率
  #--------------------------------------------------------------------------
  def i_painbond_break
    
    #キャッシュが存在する場合はキャッシュを返す。
    
    return @i_painbond_break if @i_painbond_break != nil
    
    #メモ欄からデータを取得。
    
    memo = self.note.scan(/<#{PAINBOND::WORD5}[::](\S+)>/).flatten
    @i_painbond_break = memo != nil && !memo.empty? ? memo[0] : "0"
    
    #データを返す。
    
    @i_painbond_break
  end
end
 | 
 |