设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2145|回复: 1
打印 上一主题 下一主题

[已经过期] 萌新请问角色备注问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
27 小时
注册时间
2016-8-3
帖子
15
跳转到指定楼层
1
发表于 2017-4-8 18:09:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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, 下载次数: 21)

1.png

2.png (101.29 KB, 下载次数: 25)

2.png

Lv2.观梦者

梦石
0
星屑
515
在线时间
282 小时
注册时间
2015-2-17
帖子
136
2
发表于 2017-4-10 17:47:09 | 只看该作者
论坛里有自行选定攻击技能的脚本

你可以设定比如转换率30%的技能,设定在技能上,再把技能设成普攻
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 06:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表