Project1

标题: 求助,如何做到物理伤害反弹 [打印本页]

作者: tan12345    时间: 2013-8-30 11:14
标题: 求助,如何做到物理伤害反弹
本帖最后由 tan12345 于 2013-8-30 11:19 编辑

如题,就是当状态A存在时,被物理技能攻击,先是受到伤害,然后将受到的伤害的50%反弹给技能使用者,就是说,当状态A存在时,敌人用物理技能打我掉100伤害,我先掉100的血,然后敌人掉50的血。求大神救助。
作者: qqabcc    时间: 2013-8-30 11:43
设置你找下技能里有吗?
作者: tan12345    时间: 2013-8-30 12:32
qqabcc 发表于 2013-8-30 11:43
设置你找下技能里有吗?

技能里有,但是我是被攻击方,不是使用技能的那方;状态里只有物理反击,这个是指被敌人攻击时自己不受到伤害,然后进行一次普通攻击攻击敌人,达不到我的要求。
作者: 1715063941    时间: 2013-8-30 16:10
用公共事件=-=当主角状态A时被攻击,就反击=-=怎么做的,大雾=-=
作者: tan12345    时间: 2013-8-30 21:37
1715063941 发表于 2013-8-30 16:10
用公共事件=-=当主角状态A时被攻击,就反击=-=怎么做的,大雾=-=

还是不行,这个只是受到伤害后反击,反击的伤害是普通攻击,做不到被伤害的一半……
作者: moy    时间: 2013-9-9 21:07
tan12345 发表于 2013-8-30 21:37
还是不行,这个只是受到伤害后反击,反击的伤害是普通攻击,做不到被伤害的一半…… ...

数据库中技能的计算公式那里输入
  1. temp = (公式)/ 2 ; a.hp -= temp ; temp * 2
复制代码
其中公式是你自己定义的技能公式。 PS:以上未经测试,请自己实验
思想就是利用计算公式只返回最后一个结果当做伤害值。那么只要先算好二分之一的伤害就可以自由反伤给释放者。
作者: tan12345    时间: 2013-9-9 22:36
moy 发表于 2013-9-9 21:07
数据库中技能的计算公式那里输入其中公式是你自己定义的技能公式。 PS:以上未经测试,请自己实验
思想就 ...

那个帖子我看过,但是如果真的如你所说,那就是每个伤害技能都设置if b.stat(X) then a.hp -= temp;b.hp -= temp*2,是每个伤害技能都这样设定。
作者: tan12345    时间: 2013-9-9 22:48
moy 发表于 2013-9-9 21:07
数据库中技能的计算公式那里输入其中公式是你自己定义的技能公式。 PS:以上未经测试,请自己实验
思想就 ...

技能代码里自己改过了,不生效……如果你能让他生效,可以给我效仿下,谢谢了
作者: moy    时间: 2013-9-9 23:41
tan12345 发表于 2013-9-9 22:48
技能代码里自己改过了,不生效……如果你能让他生效,可以给我效仿下,谢谢了 ...

去试了试,发现没跳伤害,但是实际造成了伤害,同时敌人尸体也不会消失。如果要像正常攻击那样跳数字,要改好多关于显示的脚本……
姑且先将刚才试验的脚本贴上来,等有时间我再完善吧……我看了下,默认脚本要改不少display……因为他一开始根本没有考虑过这么多,只是单纯的“对目标的影响”的显示,而没有对自身的。
  1. class Game_Battler < Game_BattlerBase

  2.   attr_accessor :is_physical              # 是否是物理伤害 added
  3.   #--------------------------------------------------------------------------
  4.   # ● 计算伤害
  5.   #--------------------------------------------------------------------------
  6.   def make_damage_value(user, item)
  7.     @is_physical = false              #added
  8.     value = item.damage.eval(user, self, $game_variables)
  9.     value *= item_element_rate(user, item)
  10.     value *= pdr if item.physical?
  11.     @is_physical = item.physical?                   #added
  12.     value *= mdr if item.magical?
  13.     value *= rec if item.damage.recover?
  14.     value = apply_critical(value) if @result.critical
  15.     value = apply_variance(value, item.damage.variance)
  16.     value = apply_guard(value)
  17.     @result.make_damage(value.to_i, item)
  18.   end

  19.   #--------------------------------------------------------------------------
  20.   # ● 处理伤害
  21.   #    调用前需要设置好
  22.   #    @result.hp_damage   @result.mp_damage
  23.   #    @result.hp_drain    @result.mp_drain
  24.   #--------------------------------------------------------------------------
  25.   def execute_damage(user)
  26.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  27.     self.hp -= @result.hp_damage
  28.     self.mp -= @result.mp_damage
  29.     user.hp -= ( @result.hp_damage / 2 ).to_i if self.state?(5) && @is_physical   #added
  30.     user.hp += @result.hp_drain
  31.     user.mp += @result.mp_drain
  32.   end

  33. end
复制代码
标注#added的增加的东西,但我还是建议如果没有别的修改,还是暂时用外挂的方式使用。。。因为太粗暴……
作者: tan12345    时间: 2013-9-10 11:31
moy 发表于 2013-9-9 23:41
去试了试,发现没跳伤害,但是实际造成了伤害,同时敌人尸体也不会消失。如果要像正常攻击那样跳数字,要 ...

我之前也是这样改的,就是没跳伤害而且意识到后面的不好改才发的贴……不过还是谢谢了
作者: tan12345    时间: 2013-9-10 11:49
moy 发表于 2013-9-9 23:41
去试了试,发现没跳伤害,但是实际造成了伤害,同时敌人尸体也不会消失。如果要像正常攻击那样跳数字,要 ...

论坛如何搜索关键字?
作者: moy    时间: 2013-9-10 11:51
tan12345 发表于 2013-9-10 11:49
论坛如何搜索关键字?


就是这样。。。
作者: tan12345    时间: 2013-9-10 12:00
moy 发表于 2013-9-10 11:51
就是这样。。。

可能今天服务器坏了吧,搜出来的帖子,一条都看不了




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