Project1

标题: 如何实现物理吸血\法术吸血? [打印本页]

作者: 猪头三~    时间: 2015-11-1 14:31
标题: 如何实现物理吸血\法术吸血?

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

作者: jianyulei    时间: 2015-11-1 14:59
本帖最后由 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段的最后

作者: howhow1314    时间: 2015-11-9 11:34
RUBY 代码复制
  1. class Game_Battler
  2. alias make_damage_value_09112015_drain make_damage_value
  3. def make_damage_value(user, item)
  4.     if item.damage.type == 1 && user.actor?
  5.       case item.damage.element_id
  6.       when -1, 1
  7.         @result.drain = user.adr - 1
  8.       else
  9.         @result.drain = user.apr - 1
  10.       end
  11.     end      
  12.     make_damage_value_09112015_drain(user, item)
  13.   end  
  14. end
  15.  
  16. class Game_ActionResult
  17.   attr_accessor :drain  
  18.   alias clear_hit_flags_09112015_drain clear_hit_flags
  19.   def clear_hit_flags
  20.     @drain = 0
  21.     clear_hit_flags_09112015_drain
  22.   end
  23.   alias make_damage_09112015_drain make_damage
  24.   def make_damage(value, item)
  25.     make_damage_09112015_drain(value, item)
  26.     @hp_drain = (@hp_damage * @drain).round
  27.     @hp_drain = [@battler.hp, @hp_drain].min
  28.   end
  29.   def hp_damage_text
  30.     if @hp_drain > 0 && @drain == 0
  31.       fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  32.       sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
  33.     elsif @hp_damage > 0
  34.       fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
  35.       fmt2 = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  36.       return sprintf(fmt, @battler.name, @hp_damage) if @drain == 0      
  37.       sprintf(fmt, @battler.name, @hp_damage)+"\n"+ sprintf(fmt2, @battler.name, Vocab::hp, @hp_drain)
  38.     elsif @hp_damage < 0
  39.       fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  40.       sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
  41.     else
  42.       fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  43.       sprintf(fmt, @battler.name)
  44.     end
  45.   end
  46. end


只有傷害類型為hp傷害的技能會生效
作者: 斯坦·艾露隆    时间: 2015-11-12 11:52
原来RMVA有体力值吸收的设定




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1