找回密码
 点一下
查看: 946|回复: 10

用触发器控制伤害响应是否执行

[复制链接]
发表于 2020-9-18 21:49:46 | 显示全部楼层 |阅读模式
要求是只有在需要的时候才进行判定。不浪费过多资源。


尝试1
在要判定的伤害响应之前再加一个伤害响应。
这个伤害响应用来对被控制者生成一个空壳效果。
根据效果引发触发器。让触发器在伤害刚开始结算就被触发。
可以肯定的是触发器捕捉到伤害响应引起的效果事件一定是在单位受到伤害事件之前的。

此时判定的伤害响应应该还没执行。

当触发器判定成功时就。
给玩家应用一层判定成功行为。或者是修改单位的某个自定义值为1。
事先在要判定的伤害响应行为里加一个。行为验证器。或者是几率里写成0+单位某个自定义值累加器。

以此来控制我们要判定的伤害响应。


所以问题出在哪里。
发表于 2020-9-19 14:48:34 | 显示全部楼层
我复述一遍,
小狗对机枪兵使用撞击,小狗命中了,机枪兵受到伤害,失去10点体力,小狗因为特性,下次攻击命中率降低。
然后现在机枪兵损失体力,要判断是不是小狗使用了撞击吗?

这样的话,按你的说法,也没问题啊,
小狗发动攻击→获得行为A;机枪兵扣血事件→触发器判断攻击者带有行为A


回复

使用道具 举报

发表于 2020-9-20 19:52:14 | 显示全部楼层
触发器捕捉受伤害事件,一定是伤害实际发生以后。所以你无法通过触发器更改这个伤害。
以前做动态伤害很费劲,需要定义一大套系统性的东西。不过5.0以后应该好很多了,因为有累加器了。
回复

使用道具 举报

 楼主| 发表于 2020-9-21 13:02:42 | 显示全部楼层
本帖最后由 Nostalie 于 2020-9-21 13:34 编辑
yxxiaobin 发表于 2020-9-20 19:52
触发器捕捉受伤害事件,一定是伤害实际发生以后。所以你无法通过触发器更改这个伤害。
以前做动态伤害很费 ...

我捕捉的是伤害响应对控制者的效果。这个是在伤害造成损失之前。

比如我之前打算用触发器判定是不是在目标身后。在身后就一定暴击。反之一定不暴击。我就在攻击者的暴击伤害响应之前又加了个响应。这个响应由攻击者100%发生。这个响应对被控制者发出一个空壳效果由触发器捕捉进行判定是否在身后。在身后的话。就给单位添加一层。“可以暴击”行为。然后暴击响应的设置是概率100%但是有一个验证单位“可以暴击”行为计数大于0的验证器。伤害造成之后再移除掉。


但我发现好像无法通过触发器影响后面的伤害响应的验证器判别结果。可能所有伤害响应虽然有先后但还是同一帧完成。对控制者的效果可能要等到下一帧(游戏循环)但肯定在伤害造成损失之前。还是说触发器捕捉到效果是在效果的下一帧。所以用物编还是。还是说整个伤害效果到伤害造成损失到触发触发器运行动作都是一帧。只不过内部有固有顺序。先全部算完伤害响应的伤害修正。再算挨个产生效果。所以不存在先结算的伤害响应的效果可以影响后结算的伤害响应得结算。



5.0 确实让物编做伤害系统更方便。
一部分是累加器从功能上。
另外一部分是数据集合从效率上。

但我个人觉得还是有很多不完善的地方。
比如伤害响应的修改系数搞不了累加。
这让做动态的暴击倍数。和动态伤害细分类型抗性很麻烦。
要动态就只能用修改数据模板。然后就要给每个单位一个虽然有相同功能但是id不同行为。
为每个玩家的新的单位新注册一个行为。。。



为啥不用行为自带的增减伤系统而要用伤害响应。因为那个只对4种伤害类型区分。不能对具体。比如近战里还分 突刺、斩击、钝击。法术里还分火抗。雷抗。冰抗就做不到。
为啥不用伤害响应叠加。因为修改系数的叠加只会连乘。就是0.99的两个是0.99*0.99。减伤指数缩减相对应会导致增伤指数增长。星际本来就只支持50万以下。本来做开放数值就难。再搞指数衰减增长。一不小心就导致计算增减伤的时候爆了。

回复 1 0

使用道具 举报

发表于 2020-9-22 19:39:59 | 显示全部楼层
伤害响应和伤害发生在同一周期,捕捉它们是在下一周期,所以无法通过触发器来改变当前次的伤害。以前这个需要庞大的触发器系统,不过现在应该可以使用累加器完成了。
回复

使用道具 举报

发表于 2022-8-19 11:33:29 | 显示全部楼层
Nostalie 发表于 2020-9-21 13:02
我捕捉的是伤害响应对控制者的效果。这个是在伤害造成损失之前。

比如我之前打算用触发器判定是不是在 ...

不知道你解决这问题了没,我记得暴击伤害那里是能接受累加器的,这样只要做个暴击伤害加成属性,就能有动态的暴击倍数了,我还没开始做,只是看到了,不确定能不能行了。至于抗性也有解决方法,还是靠属性和累加器,现在我的地图里是做了抗性属性来记录抗性点数,然后在属性变化的时候动态设置另一个抗性buff的层数来实现,这个buff是伤害响应,修改伤害系数0.99,这样每点抗性就有1%的伤害减免,但是叠的层数太多,效率问题不知道有多大,所以我又想了个方法,就是单纯的靠累加器,写以个抗性公式,然后在属性伤害的伤害累加器里把对应的累加器放进去,总的来说就是有点麻烦,我前几天试着写了一下,用了10多个累加器,而且现在累加器不能直接复制,挺麻烦的
回复

使用道具 举报

 楼主| 发表于 2022-8-20 14:04:40 | 显示全部楼层
本帖最后由 Nostalie 于 2022-8-20 14:22 编辑
滚筒洗衣机 发表于 2022-8-19 11:33
不知道你解决这问题了没,我记得暴击伤害那里是能接受累加器的,这样只要做个暴击伤害加成属性,就能有动 ...

这是好久以前的问题了。现在看已经没什么价值了。与其触发器控制伤害响应。不如触发器直接做伤害修正。
我之后换了思路除了属性加成这种容易用累加器做的其他复杂伤害修正基本全部交给触发器做了

每个单位都有一层伤害修正系数0的行为。
负责阻止未经修正的伤害直接作用以及将其值通过伤害吸收事件传递给触发器。
触发器修正后再对单位造成修正后的伤害,真正作用于单位(之前的行为伤害响应不包括里填上真实伤害效果)。
修正过程由于触发器进行会比物编自由太多。在各种复杂伤害机制更多存在的情况下。之间的顺序条理也会比用物编伤害修正来的清晰。







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 10:50 , Processed in 0.093995 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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