| 赞 | 0  | 
 
| VIP | 0 | 
 
| 好人卡 | 0 | 
 
| 积分 | 1 | 
 
| 经验 | 1520 | 
 
| 最后登录 | 2017-6-25 | 
 
| 在线时间 | 27 小时 | 
 
 
 
 
 
Lv1.梦旅人 
	- 梦石
 - 0 
 
        - 星屑
 - 50 
 
        - 在线时间
 - 27 小时
 
        - 注册时间
 - 2016-8-3
 
        - 帖子
 - 15
 
 
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
是关于 <MP同時ダメ割合:100>的问题,下面是脚本中这个能力的说明及设定,这个能力在角色对敌人造成攻击的时候,将对敌人造成HP伤害的50%转化成MP伤害 
意思就是角色攻击造成敌人100点HP伤害,有这个能力后,就变成了攻击敌人同时造成HP伤害50点、MP伤害50点 
但是这个能力本身限定为只有技能中可用,无法添加到角色备注中,角色普通攻击无法触发,但是敌人却可以备注,普通攻击同时伤害角色HP和MP 
萌新看了脚本,想让角色和敌人一样,可以通过普通攻击造成双重伤害,却无从下手 
 
# ■ RGSS3 吸収通常攻撃特徴 Ver1.00 by 星潟 
#------------------------------------------------------------------------------ 
# ステート付加:通常攻撃の攻撃を行った際 
# 一定確率でダメージのうち一定割合分のHPを吸収するか 
# 自らのMPとして変換する特徴を作成できるようになります。 
# HP吸収の場合はHP吸収発動率とHP吸収割合の設定が必要となります。 
# 同様に、MP変換の場合はMP変換発動率とMP変換割合の設定が必要となります。 
# ※スキルのメモ欄でも可能にした。その際は割合のみ見てる。発動率は100%  
# ○(追加)MPも同時にダメージ。HPダメージのうち○%をMPダメージとする。 
# (その分HPダメージ減る)※スキルのみ 
# <MP同時ダメ割合:100> 
 
# ■ Game_Battler 
#------------------------------------------------------------------------------ 
#  スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス 
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。 
#============================================================================== 
class Game_Battler < Game_BattlerBase 
  #-------------------------------------------------------------------------- 
  # ● [エイリアス]:使用効果[ステート付加]:通常攻撃 
  # 併用化ベーススクリプトD で再定義されているので、入れるならその下 add zorome 
  #-------------------------------------------------------------------------- 
  alias :item_effect_add_state_attack_drain :item_effect_add_state_attack 
  def item_effect_add_state_attack(user, item, effect) 
    item_effect_add_state_attack_drain(user, item, effect) 
    return if user == nil or item == nil 
    temp_drain_flag = false # add zorome 
    if rand(100) < user.at_h_drain_execute_rate 
      temp_h_drain_rate = user.h_drain_rate 
      # @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome 
      if temp_h_drain_rate > 0 && @result.hp_damage > 0 
        # HP吸収時のメッセージ表示方法をデフォルトから変更するか? 
        if !DRAIN_ATTACK::M_C  
          # デフォルト 
          # @result.hp_drain = @result.hp_damage * user.h_drain_rate / 100 
          @result.hp_drain = @result.hp_damage * temp_h_drain_rate / 100 
          @result.hp_drain = [@result.hp_drain, @result.pre_hp].min 
          user.hp += @result.hp_drain if !user.dead? 
         
          temp_drain_flag = true # add zorome 
        else 
          # デフォルトから変更する 
          # @result.exhp_drain = @result.hp_damage * user.h_drain_rate / 100 
          @result.exhp_drain = @result.hp_damage * temp_h_drain_rate / 100 
          @result.exhp_drain = [@result.exhp_drain, @result.pre_hp].min 
          user.hp += @result.exhp_drain if !user.dead? 
           
          temp_drain_flag = true # add zorome 
        end 
      end 
    end 
    if rand(100) < user.at_m_drain_execute_rate 
      temp_m_drain_rate = user.m_drain_rate 
      # @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome 
      if temp_m_drain_rate > 0 && @result.hp_damage > 0 
        if !DRAIN_ATTACK::M_C 
          # デフォルト 
          # @result.mp_drain = @result.hp_damage * user.m_drain_rate / 100 
          @result.mp_drain = @result.hp_damage * temp_m_drain_rate / 100 
          @result.mp_drain = [@result.mp_drain, @result.pre_hp].min 
          user.mp += @result.mp_drain if !user.dead? 
         
          temp_drain_flag = true # add zorome 
        else 
          # デフォルトから変更する 
          # @result.exmp_drain = @result.hp_damage * user.m_drain_rate / 100 
          @result.exmp_drain = @result.hp_damage * temp_m_drain_rate / 100 
          @result.exmp_drain = [@result.exmp_drain, @result.pre_hp].min 
          user.mp += @result.exmp_drain if !user.dead? 
           
          temp_drain_flag = true # add zorome 
        end 
      end 
    end 
    if temp_drain_flag == true 
      DRAIN_ATTACK::DRAIN_SE.play # 吸収SE add zorome 
      # execute_damage(user) # add zorome 
      execute_damage_popup(user) # add zorome 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]: 
  #-------------------------------------------------------------------------- 
  def at_h_drain_execute_rate 
    rate = 0 
    feature_objects.each do |object| 
      data = object.note 
      data.each_line { |line| 
      memo = line.scan(/<#{DRAIN_ATTACK::HPD}[::](\S+)>/) 
      memo = memo.flatten 
      rate += memo[0].to_i if memo != nil && !memo.empty? 
      } 
    end 
    return rate 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]: 
  #-------------------------------------------------------------------------- 
  def at_m_drain_execute_rate 
    rate = 0 
    feature_objects.each do |object| 
      data = object.note 
      data.each_line { |line| 
      memo = line.scan(/<#{DRAIN_ATTACK::MPD}[::](\S+)>/) 
      memo = memo.flatten 
      rate += memo[0].to_i if memo != nil && !memo.empty? 
      } 
    end 
    return rate 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]: 
  #-------------------------------------------------------------------------- 
  def h_drain_rate 
    rate = 0 
    feature_objects.each do |object| 
      data = object.note 
      data.each_line { |line| 
      memo = line.scan(/<#{DRAIN_ATTACK::HPDR}[::](\S+)>/) 
      memo = memo.flatten 
      rate += memo[0].to_i if memo != nil && !memo.empty? 
      } 
    end 
    return rate 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]: 
  #-------------------------------------------------------------------------- 
  def m_drain_rate 
    rate = 0 
    feature_objects.each do |object| 
      data = object.note 
      data.each_line { |line| 
      memo = line.scan(/<#{DRAIN_ATTACK::MPDR}[::](\S+)>/) 
      memo = memo.flatten 
      rate += memo[0].to_i if memo != nil && !memo.empty? 
      } 
    end 
    return rate 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]:MP同時ダメージ add zorome 
  #-------------------------------------------------------------------------- 
#~   def m_double_rate 
#~     rate = 0 
#~     feature_objects.each do |object| 
#~       data = object.note 
#~       data.each_line { |line| 
#~       memo = line.scan(/<#{DRAIN_ATTACK::MPDDR}[::](\S+)>/) 
#~       memo = memo.flatten 
#~       rate += memo[0].to_i if memo != nil && !memo.empty? 
#~       } 
#~     end 
#~     return rate 
#~   end # def 
end # class 
 
#============================================================================== 
# ■ Game_ActionResult 
#------------------------------------------------------------------------------ 
#  戦闘行動の結果を扱うクラスです。このクラスは Game_Battler クラスの内部で 
# 使用されます。 
#============================================================================== 
class Game_ActionResult 
  attr_accessor :exhp_drain 
  attr_accessor :exmp_drain 
  attr_accessor :pre_hp 
  #-------------------------------------------------------------------------- 
  # ● [エイリアス]:ダメージ値のクリア 
  #-------------------------------------------------------------------------- 
  alias :clear_damage_values_drain :clear_damage_values 
  def clear_damage_values 
    clear_damage_values_drain 
    @exhp_drain = 0 
    @exmp_drain = 0 
    @pre_hp = 0 
  end 
  #-------------------------------------------------------------------------- 
  # ● [エイリアス]:ダメージの作成 
  #-------------------------------------------------------------------------- 
  alias :make_damage_drain :make_damage 
  def make_damage(value, item) 
    @pre_hp = @battler.hp 
    make_damage_drain(value, item) 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]:HP 吸収の文章を取得 
  #-------------------------------------------------------------------------- 
  def hp_damage_exdrain_text 
    fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain 
    sprintf(fmt, @battler.name, Vocab::hp, @exhp_drain) 
  end 
  #-------------------------------------------------------------------------- 
  # ● [追加]:MP 吸収の文章を取得 
  #-------------------------------------------------------------------------- 
  def mp_damage_exdrain_text 
    fmt = @battler.actor? ? DRAIN_ATTACK::MESS1 : DRAIN_ATTACK::MESS2 
    if !DRAIN_ATTACK::M_C 
      mpd = @mp_drain 
    else 
      mpd = @exmp_drain 
    end 
    sprintf(fmt, Vocab::mp, mpd, "") 
  end 
end 
 
#============================================================================== 
# ■ Window_BattleLog 
#------------------------------------------------------------------------------ 
#  戦闘の進行を実況表示するウィンドウです。枠は表示しませんが、便宜上ウィンド 
# ウとして扱います。 
#============================================================================== 
 
class Window_BattleLog < Window_Selectable 
  #-------------------------------------------------------------------------- 
  # ● HP ダメージ表示 
  #-------------------------------------------------------------------------- 
  alias :display_hp_damage_drain :display_hp_damage 
  def display_hp_damage(target, item) 
    display_hp_damage_drain(target, item) 
    if target.result.exhp_drain > 0 && DRAIN_ATTACK::M_C 
      add_text(target.result.hp_damage_exdrain_text) 
      wait 
    end 
    if (target.result.mp_drain > 0 && !DRAIN_ATTACK::M_C) or 
      (target.result.exmp_drain > 0 && DRAIN_ATTACK::M_C) 
      add_text(target.result.mp_damage_exdrain_text) 
      wait 
    end 
  end 
end 
 
  # ● [追加]:MP同時ダメージ add zorome 
  #-------------------------------------------------------------------------- 
  def m_double_rate 
#~     rate = 0 
     
    return 0 unless @note 
    @note.match(/<#{DRAIN_ATTACK::MPDDR}[::](\S+)>/) 
    return 0 unless $1 
    return $1.to_i 
     
  end # def 
  #-------------------------------------------------------------------------- 
  # ● [追加]:MP吸収ダメージ add zorome 
  #-------------------------------------------------------------------------- 
  def m_drain_rate 
#~     rate = 0 
     
    return 0 unless @note 
    @note.match(/<#{DRAIN_ATTACK::MPDR}[::](\S+)>/) 
    return 0 unless $1 
    return $1.to_i 
     
  end # def 
  #-------------------------------------------------------------------------- 
  # ● [追加]:HP吸収ダメージ add zorome 
  #-------------------------------------------------------------------------- 
  def h_drain_rate 
#~     rate = 0 
     
    return 0 unless @note 
    @note.match(/<#{DRAIN_ATTACK::HPDR}[::](\S+)>/) 
    return 0 unless $1 
    return $1.to_i 
     
  end # def 
 
    # MP同時ダメージ処理 add zorome 
    if item.is_a?(RPG::Skill) == true 
      # temp_md_rate = user.m_double_rate # 武器防具ならこっちだが、 
      temp_md_rate = item.m_double_rate # スキルなので 
      if temp_md_rate > 0 
        # p "Game_Battler make_damage_value item.id = #{item.id}" # add zorome 
        # p "  元 value = #{value}" 
        # p "  元 temp_md_rate = #{temp_md_rate}" 
        temp_md_damage = value * temp_md_rate / 100 
        # temp_md_damage = value * temp_md_rate * 0.01 # 少数は× 
        value -= temp_md_damage.round.to_i 
        value = 0 if value < 0 
        # p "  temp_md_damage = #{temp_md_damage}" 
        # p "  減 value = #{value}" 
      end 
    end 
 
    # そのままだと小数点以下は切り捨てるようなので四捨五入する 
    # ダメージを出す直前でやらないと踏み止まらない orz 
    value = apply_stand(value.round.to_i, item) # 踏みとどまり 
     
    # p "  元 value = #{value}" 
    # p "     value.to_i = #{value.to_i}" 
    # p "     value.round = #{value.round}" # 四捨五入するようだ add zorome 
    @result.make_damage(value.to_i, item) 
 
    # MP同時ダメージ処理 add zorome 
    if item.is_a?(RPG::Skill) == true 
      if temp_md_rate > 0 
        @result.mp_damage += temp_md_damage.to_i 
        @result.mp_damage = [self.mp, @result.mp_damage].min 
      end 
       
      # HP吸収ダメージ処理 add zorome 
       
      # HP吸収時のメッセージ表示方法をデフォルトから変更するか? 
      temp_h_drain_rate = item.h_drain_rate 
      # @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome 
      if temp_h_drain_rate > 0 && @result.hp_damage > 0 
        if !DRAIN_ATTACK::M_C  
          # デフォルト 
          # @result.hp_drain = @result.hp_damage * user.h_drain_rate / 100 
          @result.hp_drain = @result.hp_damage * temp_h_drain_rate / 100 
          @result.hp_drain = [@result.hp_drain, @result.pre_hp].min 
          # user.hp += @result.hp_drain if !user.dead? 
        else 
          # デフォルトから変更する 
          # @result.exhp_drain = @result.hp_damage * user.h_drain_rate / 100 
          @result.exhp_drain = @result.hp_damage * temp_h_drain_rate / 100 
          @result.exhp_drain = [@result.exhp_drain, @result.pre_hp].min 
          # execute_damage(user) で回復しないのでここで回復させる 
          user.hp += @result.exhp_drain if !user.dead? 
        end 
      end 
       
      # MP吸収ダメージ処理 add zorome 
      temp_m_drain_rate = item.m_drain_rate 
      # @result.hp_damage がマイナスだと逆にダメージ受けるのでチェック追加 add zorome 
      if temp_m_drain_rate > 0 && @result.hp_damage > 0 
        if !DRAIN_ATTACK::M_C 
          # デフォルト 
          # @result.mp_drain = @result.hp_damage * user.m_drain_rate / 100 
          @result.mp_drain = @result.hp_damage * temp_m_drain_rate / 100 
          @result.mp_drain = [@result.mp_drain, @result.pre_hp].min 
          # user.mp += @result.mp_drain if !user.dead? 
        else 
          # デフォルトから変更する 
          # @result.exmp_drain = @result.hp_damage * user.m_drain_rate / 100 
          @result.exmp_drain = @result.hp_damage * temp_m_drain_rate / 100 
          @result.exmp_drain = [@result.exmp_drain, @result.pre_hp].min 
          # execute_damage(user) で回復しないのでここで回復させる 
          # p "@result.hp_damage = #{@result.hp_damage}" 
          # p "@result.pre_hp = #{@result.pre_hp}" 
          # p "@result.exmp_drain = #{@result.exmp_drain}" 
          user.mp += @result.exmp_drain if !user.dead? 
        end 
      end 
    end |   
- 
1.png
(106.39 KB, 下载次数: 25)
 
 
 
 
- 
2.png
(101.29 KB, 下载次数: 31)
 
 
 
 
 
 
 
 
 |