查看: 2079|回复: 3

[已经过期] 如何实现物理吸血\法术吸血?

[复制链接]
梦石
0
星屑
77
在线时间
692 小时
注册时间
2011-10-20
回帖
807
发表于 2015-11-1 14:31:00 | 显示全部楼层 |阅读模式

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

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

×

当技能属性为普通攻击时 造成伤害触发物理吸血 回血的数值为造成的伤害*(a.adr-1)
【.adr为我用其他脚本新定义的属性 类似于.atk 可以通过装备、状态等增加 考虑到每个角色初始的adr为1 所以减去1 下同】
当技能属性不为普通攻击和1号属性时 造成伤害触发法术吸血 回血的数值为造成的伤害*(a.apr-1)
虽然有类似的脚本 但没有物理/法术之分 想自己修改也无从入手 所以来求助了
梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2015-11-1 14:59:18 | 显示全部楼层
本帖最后由 jianyulei 于 2015-11-1 15:07 编辑

a.hp+=(a.atk*2-b.def)*b.element_rate(-1).to_i;a.atk*2-b.def
以普通攻击为例,技能公式这么写代表了攻击的同时吸收同等血量,但我不知道这么写对不对,特别是*b.element_rate(-1)这句,意思是乘以敌人的普通属性抗性,我觉得可能会出问题。
如果是固定属性的话这种写法应该没问题,普通属性就不知道敌人是如何判断的了。
还有就是,如果你想要的是加上了某状态后让人物的所有普通攻击属性的攻击都有比例吸血效果的话,正好 星泻 有个脚本能完全满足

如果你想要就是星泻那种状态附加后普通属性吸血的脚本,那么手动在里面加入物理判定 && item.physical? ,这样普通属性的物理攻击就可以吸血了。至于加到哪里我就不清楚了,反正是某个IF段的最后
回复

使用道具 举报

梦石
0
星屑
166
在线时间
454 小时
注册时间
2015-2-25
回帖
358
发表于 2015-11-9 11:34:47 | 显示全部楼层
[pre lang="ruby"]class Game_Battler
alias make_damage_value_09112015_drain make_damage_value
def make_damage_value(user, item)
    if item.damage.type == 1 && user.actor?
      case item.damage.element_id
      when -1, 1
        @result.drain = user.adr - 1
      else
        @result.drain = user.apr - 1
      end
    end      
    make_damage_value_09112015_drain(user, item)
  end  
end

class Game_ActionResult
  attr_accessor :drain  
  alias clear_hit_flags_09112015_drain clear_hit_flags
  def clear_hit_flags
    @drain = 0
    clear_hit_flags_09112015_drain
  end
  alias make_damage_09112015_drain make_damage
  def make_damage(value, item)
    make_damage_09112015_drain(value, item)
    @hp_drain = (@hp_damage * @drain).round
    @hp_drain = [@battler.hp, @hp_drain].min
  end
  def hp_damage_text
    if @hp_drain > 0 && @drain == 0
      fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
      sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
    elsif @hp_damage > 0
      fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
      fmt2 = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
      return sprintf(fmt, @battler.name, @hp_damage) if @drain == 0      
      sprintf(fmt, @battler.name, @hp_damage)+"\n"+ sprintf(fmt2, @battler.name, Vocab::hp, @hp_drain)
    elsif @hp_damage < 0
      fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
      sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
    else
      fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
      sprintf(fmt, @battler.name)
    end
  end
end[/pre]

只有傷害類型為hp傷害的技能會生效

点评

第4行的&& user.actor?可以去掉  发表于 2015-11-9 11:40

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 我很赞同

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
19 小时
注册时间
2015-7-28
回帖
22
发表于 2015-11-12 11:52:33 | 显示全部楼层
原来RMVA有体力值吸收的设定
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部