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

Project1

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

[已经过期] 请教10号角色和20号角色同时在战斗队伍中时平分伤害的写法

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
跳转到指定楼层
1
发表于 2019-7-1 15:11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taeckle 于 2019-7-1 16:13 编辑

目前想到的是要考虑4种情况:
①10号角色或20号角色受到单体攻击伤害平分
②群体攻击技能造成的伤害平分
③10号角色或20号角色受到反弹来的伤害平分
④敌普通攻击造成的伤害平分

然后就不会写了。。。




Lv5.捕梦者

梦石
0
星屑
33469
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2019-7-2 00:40:29 | 只看该作者
瞎写的一段,未测试
  1. #==============================================================================
  2. class Game_Actor
  3.   #--------------------------------------------------------------------------
  4.   alias :xr_sd_set_hp :hp=
  5.   def hp=(hp)
  6.     hp = self.damage.is_a?(Numeric) && self.damage > 0 ? share_damage : hp
  7.     xr_sd_set_hp(hp)
  8.     @recipient = false
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   def share_damage
  12.     return @hp - self.damage if ![10, 20].include?(@actor_id)
  13.     actor = $game_party.actors.find{|a| a.id == (@actor_id == 10 ? 20 : 10) }
  14.     return @hp - self.damage if !actor || actor.is_recipient?
  15.     @recipient = true
  16.     self.damage = self.damage / 2
  17.     actor.damage = self.damage
  18.     actor.hp -= self.damage
  19.     return @hp - self.damage
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   def is_recipient?
  23.     return @recipient
  24.   end
  25. end
  26. #==============================================================================
  27. class Scene_Battle
  28.   #--------------------------------------------------------------------------
  29.   alias xr_sd_update_phase4_step5 update_phase4_step5
  30.   def update_phase4_step5
  31.     $game_party.actors.each{|a| a.damage_pop = !a.damage.nil?}
  32.     xr_sd_update_phase4_step5
  33.   end
  34. end
  35. #==============================================================================
复制代码

点评

多谢大神指点!请受小弟一拜!  发表于 2019-7-2 06:39

评分

参与人数 1+1 收起 理由
taeckle + 1 精品文章

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
3
 楼主| 发表于 2019-7-2 07:16:52 | 只看该作者
芯☆淡茹水 发表于 2019-7-2 00:40
瞎写的一段,未测试


刚测了一下,受到单体攻击时伤害的确平分了,但受到群体攻击时显示的伤害和真实扣除的HP值就不符了
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33469
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2019-7-2 08:23:00 | 只看该作者
本帖最后由 芯☆淡茹水 于 2019-7-2 08:31 编辑

上面的脚本没有考虑到 分摊伤害对象 死亡的情况。

  1. #==============================================================================
  2. class Game_Actor
  3.   #--------------------------------------------------------------------------
  4.   alias :xr_sd_set_hp :hp=
  5.   def hp=(hp)
  6.     hp = self.damage.is_a?(Numeric) && self.damage > 0 ? share_damage : hp
  7.     xr_sd_set_hp(hp)
  8.     @recipient = false
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   def share_damage
  12.     target_actor = share_object
  13.     result = !!target_actor && target_actor.can_take_damage?
  14.     if result
  15.       @recipient = true
  16.       self.damage = self.damage / 2
  17.       target_actor.damage = self.damage
  18.       target_actor.hp -= self.damage
  19.     end
  20.     return @hp - self.damage
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   def share_object
  24.     return nil if ![10, 20].include?(@actor_id)
  25.     return $game_party.actors.find{|a| a.id == (@actor_id == 10 ? 20 : 10) }
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   def can_take_damage?
  29.     return !@recipient && exist?
  30.   end
  31. end
  32. #==============================================================================
  33. class Scene_Battle
  34.   #--------------------------------------------------------------------------
  35.   alias xr_sd_update_phase4_step5 update_phase4_step5
  36.   def update_phase4_step5
  37.     $game_party.actors.each{|a| a.damage_pop = !a.damage.nil?}
  38.     xr_sd_update_phase4_step5
  39.   end
  40. end
  41. #==============================================================================
复制代码


这是忙里偷闲瞎写的,其他的也不需要什么了!
至于全体攻击问题:
A 受到伤害分一半给 B , 同时 B 受到伤害分一半给 A
A 的伤害 = A 总伤害一半 + B 总伤害一半
B 的伤害与 A 相同。
但显示的伤害只有 A或B 其中一个的总伤害的一半,谁后计算伤害就是谁的一半。
这个问题自己解决。

点评

还是不太明白,大神可否有兴趣写两句这个脚本,咱可以自己花时间测试啦  发表于 2019-7-3 19:40
def skill_effect(user, skill)里面的@变量可以传到def hp=(hp)里..你可以利用这点判断是群体攻击就怎样减HP..  发表于 2019-7-3 12:36
搜def skill_effect(user, skill) 然后if skill.scope == 2 and user.is_a?(Game_Enemy)可以判断为使用技能方为敌人和使用的技能为全体攻击..之后你自己研究吧..  发表于 2019-7-3 12:13
大神请问下判定敌方所使用技能是否是群体攻击的表达式该怎么写啊?  发表于 2019-7-3 09:51
红包什么的就免了吧。最近也比较忙,简单的问题可以帮忙回答,比较费时间的就不行了。  发表于 2019-7-2 18:05

评分

参与人数 1+1 收起 理由
taeckle + 1 精品文章

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
5
 楼主| 发表于 2019-7-3 09:58:34 | 只看该作者
芯☆淡茹水 发表于 2019-7-2 08:23
上面的脚本没有考虑到 分摊伤害对象 死亡的情况。


大神我在想这个问题是不是要分四种情况来写:
①仅角色10受到伤害为true时
②仅角色20受到伤害为true时
③角色10和角色20同时受到的伤害为true时
④角色10和角色20都没受到伤害


大神可否以第3种情况为例随手写一下呐,咱也好自己研究研究啦


点评

我看到有的游戏里有这种设定,某些技能是单体技能,但能一定几率出群体攻击效果  发表于 2019-7-3 19:53
什么意思...不是默认的你自己研究..  发表于 2019-7-3 19:45
这是因为还有些攻击技能不是100%群攻,也不是100%单体。。。  发表于 2019-7-3 19:20
我觉得不可能是同时?  发表于 2019-7-3 12:16
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36437
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
6
发表于 2019-7-3 19:53:11 | 只看该作者
本帖最后由 soulsaga 于 2019-7-7 09:23 编辑

RUBY 代码复制
  1. class Game_Battler
  2.   alias aoe_skill_effect skill_effect
  3. def skill_effect(user, skill)
  4.    @敌群攻=false
  5.    @敌群攻=true if $game_variables[17] > 1 and user.is_a?(Game_Enemy)
  6.    aoe_skill_effect(user, skill)
  7. end
  8. end

点评

写漏了..更新一下..  发表于 2019-7-3 20:02
多谢大神!  发表于 2019-7-3 19:57

评分

参与人数 1+1 收起 理由
taeckle + 1 大神威武!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
7
 楼主| 发表于 2019-7-4 15:23:40 | 只看该作者
本帖最后由 taeckle 于 2019-7-4 15:39 编辑
soulsaga 发表于 2019-7-3 19:53
class Game_Battler
  alias aoe_skill_effect skill_effect
def skill_effect(user, skill)


大神这个脚本我还有个问题:

敌方攻击第10号角色时第20号角色受到的伤害值代入第100号公共变量里该怎么写呐?

这是我自己写的,貌似不对。。。

      if target.is_a?(Game_Actor) && target.id == 10
        if @active_battler.is_a?(Game_Actor)         
         for actor in $game_party.actors
          if actor.id == 20 && actor.hp > 0   
          $game_variables[100] = actor.damage ?????? #这里不会写...
          actor.damage_pop = true
          end
        end        
      end

点评

在脚本一行写啊..你也太新手了吧..  发表于 2019-7-4 16:28
怎么用 p actor.damage啊?  发表于 2019-7-4 16:11
如果你想知道自己有没写错..用p actor.damage 你就知道了..  发表于 2019-7-4 16:07
其他角色被打完伤害是空的..你获取不到..要不就只能被打时记录..但是后面角色伤害你怎么都没戏  发表于 2019-7-4 15:57
不存在的..伤害是顺序执行..不会同时出现让你获取到..  发表于 2019-7-4 15:50
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36437
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
8
发表于 2019-7-4 16:59:10 | 只看该作者
话说群体攻击伤害怎么平分法?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36437
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
9
发表于 2019-7-4 19:03:13 | 只看该作者
本帖最后由 soulsaga 于 2019-7-4 22:52 编辑

搞错了............

点评

这就是完整脚本啊..你还想要什么..  发表于 2019-7-4 23:10
好像这个脚本当我方第3个角色在场时受到群体攻击不掉血了,,  发表于 2019-7-4 20:30
结合上面芯☆淡茹水大神的脚本  发表于 2019-7-4 20:16
大神可否重开一楼把这个平分伤害的脚本完整的写在下面呐。。  发表于 2019-7-4 20:15
改好了  发表于 2019-7-4 19:28
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36437
在线时间
10798 小时
注册时间
2009-3-15
帖子
4814
10
发表于 2019-7-4 23:09:31 | 只看该作者
本帖最后由 soulsaga 于 2019-7-5 09:58 编辑

RUBY 代码复制
  1. #==============================================================================
  2. class Game_Actor
  3.   #--------------------------------------------------------------------------
  4.   alias :xr_sd_set_hp :hp=
  5.   def hp=(hp)
  6.     hp = self.damage.is_a?(Numeric) && self.damage > 0 ? share_damage : hp
  7.     xr_sd_set_hp(hp)
  8.     @recipient = false
  9.   end
  10.   #--------------------------------------------------------------------------
  11. def share_damage
  12.     target_actor = share_object
  13.     result = !!target_actor && target_actor.can_take_damage?
  14.     if result
  15.       @recipient = true
  16.       self.damage = self.damage / 2
  17.       target_actor.damage = self.damage
  18.       @平分伤害=self.damage if @平分伤害.nil?
  19.       if self.index > target_actor.index and @敌群攻
  20.       target_actor.hp -= self.damage;target_actor.damage+=self.damage;self.damage+=@平分伤害;@敌群攻=false
  21.       end
  22.   end
  23.   return @hp - self.damage
  24.   end
  25. #--------------------------------------------------------------------------
  26.   def share_object
  27.     return nil if ![10, 20].include?(@actor_id)
  28.     return $game_party.actors.find{|a| a.id == (@actor_id == 10 ? 20 : 10) }
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   def can_take_damage?
  32.     return !@recipient && exist?
  33.   end
  34. end
  35. #==============================================================================
  36. class Scene_Battle
  37.   #--------------------------------------------------------------------------
  38.   alias xr_sd_update_phase4_step5 update_phase4_step5
  39.   def update_phase4_step5
  40.     $game_party.actors.each{|a| a.damage_pop = !a.damage.nil?}
  41.     xr_sd_update_phase4_step5
  42.   end
  43. end
  44. #=============================================================================


这次3人正常..

点评

10号角色和20号角色受到的伤害数字显示一样,但两个角色真实扣除的HP不一样  发表于 2019-7-8 22:24
是显示正确实际伤害不对还是2人承受伤害量不同?  发表于 2019-7-8 14:57
我新建一个工程测试的,伤害数字显示一样,但真实扣除的HP不一样。。  发表于 2019-7-8 07:48
不是一样?  发表于 2019-7-7 20:21
报告大神,目前不会跳出了,伤害显示也都正确,我方第3者也有伤害扣除,只是10号和20角色真实扣除的HP还不是统一的。。  发表于 2019-7-7 19:36
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 12:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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